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
clrscr;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:=5000000;
lagi:=true; q.depan:=1; q.belakang:=0;
while lagi do
begin
clrscr;
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.
{ Nama Anggota Kelompok =
- Dewi Fajar Nugraheni
- Nur Arifah Juliyanti
- Anggreawan
}
//fuiqur
Casino Near You - Mapyro
ReplyDeleteFind 나주 출장안마 the BEST Casino Near You in Robinsonville, MS 경주 출장샵 with Mapyro. Find out when and when to stay 통영 출장마사지 close 순천 출장안마 to the Casino near you. 군포 출장샵