CONTH PROGRAM ATM DI PASCAL
Program ABDIMAULANA_141510123;
Const max = 20;
Type antrian = Record
nama: string;
uang: real;
depan,belakang: 0..max;
End;
Type pointer = ^recpoint;
recpoint = Record
nama: string;
uang: real;
berikutnya: pointer;
End;
Var stack,awal,akhir: pointer;
q: antrian;
namain: string;
uangin: real;
saldo,tambahsaldo,pengambilan: real;
i,cacah,pelanggan: byte;
lagi: boolean;
pw,pw1,hapusmana: string;
carihapus: string;
pilih: 1..8;
Function habis(q:antrian): boolean;
Begin
If saldo<50000 Then habis := true
Else habis := false;
End;
Function kosong(q:antrian): boolean;
Begin
If q.belakang=0 Then kosong := true
Else kosong := false;
End;
Function penuh(q:antrian): boolean;
Begin
If q.belakang=max Then penuh := true
Else penuh := false;
End;
Procedure tambah(Var q:antrian; n:String);
Begin
pw1 := 'sleman';
If pw<>pw1 Then
writeln('Maaf password yang Anda masukkan salah ....')
Else
Begin
write('nominal penambahan saldo ATM = ');
readln(tambahsaldo);
saldo := saldo+tambahsaldo;
End;
End;
Procedure push_antri(Var s:pointer; r:String);
Var baru: pointer;
Begin
If penuh(q) Then writeln('antrian sudah penuh')
Else
If habis(q) Then writeln('uang di ATM habis')
Else
Begin
inc(q.belakang);
New(Baru);
Baru^.nama := r;
Baru^.Berikutnya := Nil;
If s = Nil Then
Begin
s := Baru ;
akhir := baru;
inc(cacah);
End
Else
Begin
akhir^.berikutnya := baru;
akhir := baru;
akhir^.berikutnya := Nil;
inc(cacah);
End;
End;
End;{end procedure push}
Procedure pop_hitung(Var s:pointer; x:real);
Var hapus: pointer;
Begin
If kosong(q) Then writeln('Tak ada yang mengantri')
Else If uangin > saldo Then write('saldo tidak cukup')
Else
If s=Nil Then writeln('Daftar antrian kosong...')
Else
Begin
hapus := s;
s := hapus^.berikutnya;
hapus^.uang := uangin;
{mencatat pengantri yang dilayani}
writeln('Yang dilayani adalah ',hapus^.nama,
' dengan jumlah pengambilan uang Rp ',hapus^.uang:8:2);
saldo := saldo-hapus^.uang;
pengambilan := pengambilan+hapus^.uang;
inc(pelanggan);
dispose(hapus);
End;
End;
Procedure hapus_atas(Var s:pointer);
Var bantu: pointer;
Begin
bantu := s;
If s=Nil Then writeln('Daftar antrian kosong...')
Else
Begin
bantu := s;
s := bantu^.berikutnya;
dispose(bantu);
End;
End;
Procedure hapus_tengah(Var s:pointer; X:String);
Var bantu,hapus: pointer;
Begin
bantu := s;
If s=Nil Then writeln('List kosonvg...')
Else
Begin
bantu := s;
new(hapus);
While bantu^.berikutnya <> Nil Do
Begin
If bantu^.berikutnya^.nama=X Then
Begin
hapus := bantu^.berikutnya;
bantu^.berikutnya := hapus^.berikutnya;
dispose(hapus);
End
Else
bantu := bantu^.berikutnya;
End;
End;
End;
Procedure hapus_bawah(Var s:pointer);
Var baru,bantu: pointer;
Begin
bantu := s;
If bantu=Nil Then writeln('Daftar antrian kosong...')
Else
Begin
While bantu^.berikutnya^.berikutnya <> Nil Do
bantu := bantu^.berikutnya;
new(baru);
baru := bantu^.berikutnya;
bantu^.berikutnya := Nil;
dispose(baru);
End;
End;
Procedure cetak_antri(Var s:pointer);
Var i: byte;
bantu: pointer;
Begin
bantu := s;
If bantu=Nil Then writeln('Tidak ada yang mengantri')
Else
Begin
i := 0;
writeln('----- DAFTAR ANTRIAN DI ATM BRI GEJAYAN ---- ');
writeln('===========================================');
writeln('| No | Nama |');
writeln('---------------------------------');
While bantu<>Nil Do
Begin
inc(i);
writeln('posisi',i:3,' | ',bantu^.nama:20,'| ');
bantu := bantu^.berikutnya;
End;
writeln('---------------------------------');
End; {end if}
End;
Procedure cari(Var s:pointer);
Var cari: string;
ketemu: boolean;
i,cacahcari: byte;
ulang: char;
bantu: pointer;
Begin
new(bantu);
ulang := 'y';
While ulang='y' Do
Begin
ketemu := false;
cacahcari := 0;
write('Nama yang dicari? ');
readln(cari);
bantu := s;
While bantu <> Nil Do
Begin
If bantu^.nama=cari Then
Begin
ketemu := true;
inc(cacahcari);
End;
bantu := bantu^.berikutnya;
End;
If ketemu Then writeln('Nama ',cari,' ada ',cacahcari:4,' ')
Else
writeln('Nama ',cari,' tidak ada dalam antrian');
writeln;
write('mau cari nama lain <y/t>? ');
readln(ulang);
End;
End;{end procedure}
Procedure urut(Var s:pointer);
Var dpn,blkg,awal: pointer;
bantu1: real;
bantu2: string;
Begin
dpn := awal;
While Not (dpn=Nil) Do
Begin
blkg := dpn^.berikutnya;
While Not (blkg=Nil) Do
Begin
If blkg^.uang > dpn^.uang Then
Begin
bantu1 := blkg^.uang;
bantu2 := blkg^.nama;
blkg^.uang := dpn^.uang;
blkg^.nama := dpn^.nama;
dpn^.uang := bantu1;
dpn^.nama := bantu2;
End;
blkg := blkg^.berikutnya;
End;
dpn := dpn^.berikutnya;
End;
writeln('Pengambilan uang terbanyak : ',awal^.uang:0:0,' dengan nama : ',awal^.nama);
writeln('Pengambilan uang terendah : ',s^.uang:0:0,' dengan nama : ',s^.nama);
writeln;
End;
{menu utama}
Begin
saldo := 10000000;
lagi := true;
q.depan := 1;
q.belakang := 0;
While lagi Do
Begin
writeln('========== ATM BRI GEJAYAN =========');
writeln;
writeln('1.tambah antrian');
writeln('2.layani pengantri');
writeln('3.cetak antrian');
writeln;
writeln('--------- DAFTAR PELANGGAN --------');
writeln('4.hapus nama dalam daftar antrian');
writeln('5.cari berdasarkan nama');
writeln('6.urut berdasarkan jml pengambilan uang ');
writeln;
writeln('----------------------------------');
writeln('7.tambah uang dalam ATM');
writeln('8.selesai, cetak total pengambilan uang dan saldo di ATM');
writeln;
write('pilih 1..8 = ');
readln(pilih);
writeln;
Case pilih Of
1:
Begin
write('nama = ');
read(namain);
push_antri(stack,namain);
readln;
End;
2:
Begin
write('uang yang akan diambil = ');
read(uangin);
pop_hitung(stack,uangin);
readln;
End;
3: cetak_antri(stack);
4:
Begin
write('mau menghapus dari mana ? (atas/tengah/bawah) = ');
read(hapusmana);
If hapusmana='atas' Then hapus_atas(stack)
Else If hapusmana='tengah' Then
Begin
writeln('Pengantri yang akan dihapus dari daftar = ');
read(carihapus);
hapus_tengah(stack,carihapus);
End
Else If hapusmana='bawah' Then
hapus_bawah(stack);
readln;
End;
5: cari(stack);
6: urut(stack);
7:
Begin
write('Masukkan password = ');
read(pw);
tambah(q,pw);
readln;
End;
8:
Begin
writeln('pelanggan hari ini sebanyak ',pelanggan:4,' orang');
writeln('total pengambilan uang = ',pengambilan:10:2);
writeln('sisa saldo di ATM = ',saldo:10:2);
writeln('terima kasih...');
lagi := false;
End;
End;
readln;
End;
End.
Comments
Post a Comment