Uses crt;
Type rec_bbm=record
jenis:string;
harga,income:real;
stok,terjual:integer;
end;
larik_bbm=array
[1..3] of rec_bbm;
type pointer1=^antrian;
antrian=record
noplat:string;
next1:pointer1;
end;
type pointer2=^transaksi;
transaksi=record
noplat1,jenis1:string;
jum_liter:byte;
jum_bayar:real;
next2:pointer2;
end;
awal1,akhir1:pointer1;
awal2,akhir2:pointer2;
plat_baru:string;
pil,i,n,m:byte;
procedure isi_rec_bbm(var x:larik_bbm);
begin
x[1].jenis:='premium ';x[1].harga:=6500;
x[2].jenis:='solar
';x[2].harga:=5500;
x[3].jenis:='Pertamax';x[3].harga:=10600;
end;
procedure isi_stok(var x:larik_bbm);
var tambah:integer;
begin
writeln('mengisi stok BBM di pertamini');
for i:=1 to 3 do
begin
write('isi
tambahan stok untuk BBM jenis ',x[i].jenis,' : ');
readln(tambah);
x[i].stok:=x[i].stok+tambah;
end;
end;
procedure cetak_stok(var x:larik_bbm);
begin
writeln('Berikut adalah stok bbm di pertamini');
writeln('--------------------------------------');
writeln('no
jenis BBM Hargastok');
writeln('--------------------------------------');
for i:=1 to 3 do
writeln(i:2,' ',x[i].jenis:10,' ',x[i].harga:10:2,' ',x[i].stok:7);
writeln('--------------------------------------');
end;
procedure masuk_antrian(var l:pointer1;var
a:string);
var baru:pointer1;
begin
new(baru);
baru^.noplat:=a;
baru^.next1:=nil;
if awal1=nil then
begin
awal1:=baru;
akhir1:=baru;
end
else
begin
l^.next1:=baru;
l:=baru;
end;
writeln('nomor plat ',a,' berhasil di tambahkankeantrian');
end;
procedure cetak_antrian(var l:pointer1);
var baru:pointer1;
begin
new(baru);
baru:=l;
n:=0;
writeln('daftar
pengantri pertamini sebagai berikut : ');
writeln('_______________________________________________');
writeln('no
antrian nomor plat');
writeln('_______________________________________________');
while
baru<>nil do
begin
inc(n);
writeln(n:3,' ',baru^.noplat:8);
baru:=baru^.next1;
end;
writeln('_______________________________________________');
writeln('jumlah
pengantri saat ini ',n,' orang');
end;
procedure cetak_transaksi(var l:pointer2);
var bantu:pointer2;
begin
new(bantu);
bantu:=l;
m:=0;
writeln('
daftar transaksi pembelian BBM di POM pertamini saat ini sebagai berikut : ');
writeln('_______________________________________________________________');
writeln('no nomor plat jenis BBM jumlah beli bayar');
writeln('_______________________________________________________________');
while
bantu<>nil do
begin
inc(m);
writeln(m:2,' ',bantu^.noplat1:8,' ',bantu^.jenis1:13,' ',bantu^.jum_liter:13,'
',bantu^.jum_bayar:10:2);
bantu:=bantu^.next2;
end;
writeln('------------------------------------------------------------------');
writeln('jumlah transaksi saat ini ',m);
writeln('------------------------------------------------------------------');
end;
procedure cetak_pendapatan(var x:larik_bbm);
var tot,total:real;
begin
tot:=0;
total:=0;
writeln('
BERIKUT ADALAH PENDATAN BBM PERTAMINI ');
writeln;
writeln('______________________________________________________');
writeln('no
jenis BBM hargaterjau total');
writeln('______________________________________________________');
for i:=1 to 3 do
begin
total:=x[i].harga*x[i].terjual;tot:=tot+total;
writeln(i:1,'
',x[i].jenis:10,'
','Rp',x[i].harga:10:2,' ',x[i].terjual:10,' ','Rp',total:10:2);
end;
writeln('_____________________________________________________');
writeln('total pendapatan adalah : Rp ',tot:10:2);
writeln('_____________________________________________________');
end;
procedure layanan_beli_BBM(var x:pointer1; var
y:pointer2);
var keluar:pointer1;
pilih:1..3;
baru:pointer2;
liter:byte;
begin
new(keluar);
writeln('melayani
pembelian BBM di pertamini');
keluar:=x;
x:=x^.next1;
writeln('selamat
datang pemilik nomor plat : ',keluar^.noplat);
writeln('jenis
BBM yang tersedia');
writeln('1.
premium');
writeln('2.
solar');
writeln('3.
pertamax');
write('masukan
pilihan anda 1-3 : ');readln(pilih);
{masukan
data orang yang akanmembelike linked list transaksi}
new(baru);
baru^.noplat1:=keluar^.noplat;
case pilih of
1:begin
writeln('anda
akan membeli premium');
write('berapa
liter akan di beli : ');readln(liter);
{cekstok
BBM}
If
bbm[1].stok>=liter then
begin
baru^.jenis1:='
premium ';
baru^.jum_liter:=liter;
baru^.jum_bayar:=liter*6500;
baru^.next2:=nil;
bbm[1].stok:=bbm[1].stok-liter;
bbm[1].terjual:=bbm[1].terjual+liter;
end
else
writeln('stok premium tidak mencukupi');
end;
2:begin
writeln('anda
membeli solar');
write('berapa
liter yang akan di beli : ');readln(liter);
if
bbm[2].stok>=liter then
begin
baru^.jenis1:='
solar ';
baru^.jum_liter:=liter;
baru^.jum_bayar:=liter*5500;
baru^.next2:=nil;
bbm[2].stok:=bbm[2].stok-liter;
bbm[2].terjual:=bbm[2].terjual+liter;
end
else
writeln('stok solar tidak mencukupi');
end;
3:begin
writeln('anda
membeli pertamax');
write('berapa
liter yang akan dibeli : ');readln(liter);
if
bbm[3].stok>=liter then
begin
baru^.jenis1:='
pertamax ';
baru^.jum_liter:=liter;
baru^.jum_bayar:=liter*10600;
baru^.next2:=nil;
bbm[3].stok:=bbm[3].stok-liter;
bbm[3].terjual:=bbm[3].terjual+liter;
end
else
writeln('stok pertamax tidak memcukupi');
end;
end;
if
awal2=nil then
begin
awal2:=baru;
y:=baru;
end
else
begin
y^.next2:=baru;
y:=baru;
end;
writeln('transaksi baru berhasil di tambahkan');
dispose(keluar);
end;
procedure keluar_antrian(var l:pointer1);
var bosen:string;
ada:boolean;
hapus,bantu:pointer1;
begin
ada:=false;
writeln('Kendaraan
keluar dari antrian tanpa menunggu layanan');
write('Masukkan
nomor plat kendaraan yang akan keluar : ');readln(bosen);
new(bantu);bantu:=l;
if
l^.noplat=bosen then
begin
new(hapus);
hapus:=l;
l:=l^.next1;
ada:=true;
end
else
begin
while
bantu^.next1<>nil do
begin
if
(bantu^.next1)^.noplat=bosen then
begin
new(hapus);
hapus:=bantu^.next1;
bantu^.next1:=hapus^.next1;
ada:=true;
end;
bantu:=bantu^.next1;
end;
end;
if
ada then
begin
writeln('Nomor
Plat ',bosen,' sudah keluar dari antrian');
dispose(hapus)
end
else
writeln('Nomor
Plat ',bosen,' tidak ditemukan');
end;
begin
new(awal1);new(akhir1);
new(awal2);new(akhir2);
awal1:=nil;akhir1:=nil;
awal2:=nil;akhir2:=nil;
isi_rec_bbm(bbm);
repeat;
begin
clrscr;
writeln('Pengolahan
Pom Bensin Petamini');
writeln('1.
Cetak stok bbm');
writeln('2.
Tambah stok bbm');
writeln('3.
Masuk antrian pom Pertamina');
writeln('4,
layanan pembelian BBM');
writeln('5.
Keluar antrian tidak jadi membeli antrian');
writeln('6.
Cetak antrian');
writeln('7.
Cetak transaksi');
writeln('8.
Cetak pendapatan');
writeln('0.
Tutup Pom');
write('masukan
pilihan anda 0-8 : ');readln(pil);
case
pil of
1:
cetak_stok(bbm);
2:
isi_stok(bbm);
3:
begin
writeln('masuk
keantrian BBM Pom pertamini');
write('masuk
no plat kendaraan : ');readln(plat_baru);
masuk_antrian(akhir1,plat_baru);
end;
4:
if awal1=nil then writeln('tidak ada yang perlu di layani')
else
layanan_beli_BBM(awal1,akhir2);
5:
if awal1=nil then writeln('tidak ada yang perlu dilayani') else
keluar_antrian(awal1);
6:
if awal1=nil then writeln('antrian masih kosong') else
cetak_antrian(awal1);
7:
if awal2=nil then writeln('belum ada transaksi') else
cetak_transaksi(awal2);
8: cetak_pendapatan(bbm);
0: writeln('terimakasih');
end;
readln;
end
until (pil=0);
end.






0 komentar:
Posting Komentar