Anda di halaman 1dari 7

LATIHAN UAS STRUKTUR DATA

Suatu perusahaan akan mengelola asuransi pegawainya dengan menggunakan array dinamis. Adapun
atribut yang akan disimpan adalah: NIK (string), status (Nama(string), String, “menikah”, “tidak
menikah”), golongan (int, 1,2,3) dan asuransi (float nilai awal=0) dan pointer penyambung next.
1. Buatlah deklarasi struct type pointer dengan nama MyNode dengan atribut di atas, dengan pointer
penyambung next bertipe MyNode dengan nama linked list ListPegawai. Buat juga deklarasi
variabelnya yaitu front dan rear dengan tipe ListPegawai.

2. Buatlah function void untuk menambahkan node baru ke dalam linked list secara tambah akhir,
dengan inputan yaitu atribut: NIK, Nama, Status dan golongan, sedangkan asuransi tidak
diinputkan. Beri nilai nol dan next diberi nilai NULL. Function anda dipanggil dengan syntax
Add_Pegawai (front, rear)

3. Buatlah function void untuk mencetak linked list dengan semua atribut dicetak. Function dipanggil
dengan syntax Print_Pegawai (front, rear)

4. Buatlah function untuk menghitung asuransi seorang pegawai dengan menginputkan NIK. Beri
pesan jika NIK tidak ditemukan. Jika ditemukan, hitung asuransi pegawai tsb dengan rumus:
Golongan 1=1000000, Golongan 2=2000000 golongan 3=2500000. Jika pegawai menikah, maka
kalikan golongannya dengan 125%.
Simpan perhitungan asuransi di atribut asuransi. Tampilkan asuransi yang diperoleh. Function
dipanggil dengan syntax Count_Asuransi (front, rear)

5. Buat function untuk mengecek/mencari data pegawai beserta dengan jumlah asuransi yang
diperoleh dengan kunci NIK. Beri pesan jika NIK tidak ditemukan, jika ditemukan tampilkan data
pegawai dan jumlah asuransi yang diperoleh. Function anda dipanggil dengan syntax
Cek_Asuransi (front, rear);

6. Buat function untuk memproses resign data pegawai dengan kunci NIK. Jika NIK ditemukan
lakukan penghapusan node. Function dipanggil dengan syntax Resign_Pegawai (front, rear);
#include<iostream>
#include<conio.h>
#include<iomanip>
using namespace std;

typedef struct MyNode{


string NIK, nama,status;
int gol;
float asuransi=0;
MyNode *next;
}ListPegawai;

ListPegawai *front;ListPegawai *rear;


int i;

void Add_Pegawai(ListPegawai *&F, ListPegawai *&R){


ListPegawai *baru;
baru=new ListPegawai;
string nik_baru;
cout<<"Mengisi data Pegawai baru Akprind Enterprise \n";
ulang:
cout<<"Masukkan NIK Pegawai : ";cin>>nik_baru;
//cek keunikan nik
ListPegawai *dummy;
dummy=new ListPegawai;
dummy=F;
while (dummy!=NULL){
if (dummy->NIK==nik_baru){
cout<<"NIK sudah digunakan, ulangi ";goto ulang;
}
dummy=dummy->next;
}
//sudah valid
baru->NIK=nik_baru;
cout<<"Nama : ";cin>>baru->nama;
int stat=0;
cout<<"Pilih Status 1. Menikah 0. Tidak Menikah : ";cin>>stat;
if(stat==1) baru->status="Menikah";else baru->status="Tidak Menikah";
int golo;
cout<<"Pilih Golongan 1,2,3 : ";cin>>golo;
if((golo>3) || (golo<1)) golo=1;
baru->gol=golo;
baru->asuransi=0.0;
baru->next=NULL;
if (F==NULL){
F=baru;
R=baru;}
else{
R->next=baru;
R=baru;
}
cout<<"Node sudah berhasil ditambahkan\n";
}

void Print_Pegawai(ListPegawai *F, ListPegawai *R){


ListPegawai *dummy;
dummy= new ListPegawai;
dummy=F;
i=0;
cout<<"Daftar Pegawai Akprind Enterprise \n";
cout<<"------------------------------------------------\n";
cout<<"No NIK Nama Status Golongan Asuransi\n";
cout<<"------------------------------------------------\n";
while (dummy!=0){
i++;
cout<<fixed;
cout<<setw(3)<<i<<setw(6)<<dummy->NIK<<setw(7)<<dummy-
>nama<<setw(15)<<dummy->status<<setw(4)<<
dummy->gol<<" "<<setprecision(2)<<dummy->asuransi<<endl;
dummy=dummy->next;
}
cout<<"------------------------------------------------\n";
cout<<"Saat ini jumlah pegawai = "<<i<<" orang\n";
}

void Count_Asuransi(ListPegawai *&F, ListPegawai *&R){


cout<<"Menghitung Asuransi dari Pegawai Akprind Enterprise :";
Print_Pegawai(F,R);
string nik_hitung;
cout<<"Masukkan NIK Pegawai yang akan dihitung : ";cin>>nik_hitung;
//cek di list pegawai
ListPegawai *dummy;
dummy= new ListPegawai;
dummy=F;
bool ada=false;
while (dummy!=NULL){
if (dummy->NIK==nik_hitung){
ada=true;
cout<<"Menghitung Asuransi Pegawai dengan identitas sebagai berikut :
\n";
cout<<"NIK : "<<dummy->NIK<<endl;
cout<<"Nama : "<<dummy->nama<<endl;
cout<<"Golongan : "<<dummy->gol<<endl;
cout<<"Status : "<<dummy->status<<endl;
if((dummy->status=="Menikah") and (dummy->gol==1)) dummy-
>asuransi=1.25*1000000;
else if ((dummy->status=="Menikah") and (dummy->gol==2)) dummy-
>asuransi=1.25*2000000;
else if ((dummy->status=="Menikah") and (dummy->gol==3)) dummy-
>asuransi=1.25*2000000;
else if ((dummy->status=="Tidak Menikah") and (dummy->gol==1)) dummy-
>asuransi=1000000;
else if ((dummy->status=="Tidak Menikah") and (dummy->gol==2)) dummy-
>asuransi=1.25*2000000;
else if ((dummy->status=="Tidak Menikah") and (dummy->gol==3)) dummy-
>asuransi=3000000;
else dummy->asuransi=0;
cout<<fixed;
cout<<"Asuransi adalah sebesar Rp : "<<setprecision(2)<<dummy-
>asuransi<<endl;
}
dummy=dummy->next;
}//while
if (not ada) cout<<"NIK "<<nik_hitung<<" tidak ditemukan\n";
}

void Cek_Asuransi(ListPegawai *F,ListPegawai *R){


cout<<"Mengecek Asuransi Pegawai Akprind Enterprise\n";
string nik_cari;
cout<<"Masukkan NIK Pegawai yang akan dihitung : ";cin>>nik_cari;
//cek di list pegawai
ListPegawai *dummy;
dummy= new ListPegawai;
dummy=F;
bool ada=false;
while (dummy!=NULL){
if (dummy->NIK==nik_cari){
ada=true;
cout<<"Mencetak Asuransi Pegawai dengan identitas sebagai berikut :
\n";
cout<<"NIK : "<<dummy->NIK<<endl;
cout<<"Nama : "<<dummy->nama<<endl;
cout<<"Golongan : "<<dummy->gol<<endl;
cout<<"Status : "<<dummy->status<<endl;
cout<<fixed;
cout<<"Asuransi adalah sebesar Rp : "<<setprecision(2)<<dummy-
>asuransi<<endl;
}
dummy=dummy->next;
}//while
if (not ada) cout<<"NIK "<<nik_cari<<" tidak ditemukan\n";
}

void Resign_Pegawai(ListPegawai *&F, ListPegawai *&R){


ListPegawai *remove, *dummy;
remove = new ListPegawai;
dummy = new ListPegawai;
bool ada=false;
string ambil;
Print_Pegawai(F,R);
//inputkan nama yang akan dihapus
cout<<"Masukkan NIK pegawai yang akan resign : ";cin>>ambil;
//cek posisi
if(F->NIK==ambil){//ada di posisi first
ada=true;
remove=F;
//tayangkan
cout<<"anda akan menghapus pegawai berikut:\n";
cout<<"NIK : "<<remove->NIK<<endl;
cout<<"Nama : "<<remove->nama<<endl;
cout<<"Status : "<<remove->status<<endl;
cout<<"Golongan : "<<remove->gol<<endl;
char ya;//validasi sebelum menghapus
cout<<"Yakin akan dihapus<y/t> ?";cin>>ya;
if ((ya=='Y') || (ya=='y')) {
cout<<"Pegawai dengan NIK : "<<ambil<<" sudah dihapus\n";
F=F->next;
delete remove;
} else cout<<"tidak jadi resign\n";
}//first
else if (R->NIK==ambil){//ada di posisi last
ada=true;
dummy=F;
while((dummy->next)->next!=NULL) dummy=dummy->next;
//dummy sudah berada di posisi sebelum rear
remove=R;
//tayangkan
cout<<"anda akan menghapus pegawai berikut:\n";
cout<<"NIK : "<<remove->NIK<<endl;
cout<<"Nama : "<<remove->nama<<endl;
cout<<"Status : "<<remove->status<<endl;
cout<<"Golongan : "<<remove->gol<<endl;
char ya;//validasi sebelum menghapus
cout<<"Yakin akan dihapus<y/t> ?";cin>>ya;
if ((ya=='Y') || (ya=='y')) {
cout<<"Pegawai dengan NIK : "<<ambil<<" sudah dihapus\n";
R=dummy;
R->next=NULL;
delete remove;
} else cout<<"tidak jadi resign\n";
}//last
else {
dummy=F;
while (dummy->next!=NULL){
if ((dummy->next)->NIK==ambil){
ada=true;
remove=dummy->next;
//tayangkan
cout<<"anda akan menghapus pegawai berikut:\n";
cout<<"NIK : "<<remove->NIK<<endl;
cout<<"Nama : "<<remove->nama<<endl;
cout<<"Status : "<<remove->status<<endl;
cout<<"Golongan : "<<remove->gol<<endl;
char ya;//validasi sebelum menghapus
cout<<"Yakin akan dihapus<y/t> ?";cin>>ya;
if ((ya=='Y') || (ya=='y')) {
cout<<"Pegawai dengan NIK "<<ambil<<" sudah dihapus\n";
dummy->next=remove->next;
delete remove;
} else cout<<"Tidak jadi Resign\n";
}
dummy=dummy->next;
}
}
if (not ada) cout<<"Pegawai dengan NIK "<<ambil<<" tidak ditemukan\n";
}

int main(){
front=NULL;rear=NULL; //inisialisasi linked list wajib dilakukan
int pilih=0;
do{
system("cls");
cout<<"Menu Pengelolaan Asuransi Pegawai Akprind Ltd\n";
cout<<"1. Tambah Pegawai \n";
cout<<"2. Cetak Pegawai\n";
cout<<"3. Hitung Asuransi Pegawai\n";
cout<<"4. Cek Asuransi Pegawai\n";
cout<<"5. Resign Pegawai\n";
cout<<"0. Selesai\n";
cout<<"Pilih menu : ";cin>>pilih;
switch(pilih){
case 1: Add_Pegawai(front,rear);break;
case 2: Print_Pegawai(front,rear);break;
case 3: if (front==NULL) cout<<"data kosong \n";else
Count_Asuransi(front,rear);break;
case 4: if (front==NULL) cout<<"data kosong \n";else
Cek_Asuransi(front,rear);break;
case 5: if (front==NULL) cout<<"data kosong \n";else
Resign_Pegawai(front,rear);break;
case 0: cout<<"Terimakasih\n";break;
default : cout<<"salah pilih menu\n";break;
}//switch
system("pause");
}//while
while (pilih!=0);
delete front; delete rear;
}

Anda mungkin juga menyukai