Kamis, 11 September 2014

"Program BBM

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;

var bbm:larik_bbm;
            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