uses crt;
const max=100;
type antrian=record
nama:array [1..max] of string;
dpn,blkng:0..max;
end;
type loket=record
nama1:string;
pp:longint;
total:longint;
end;
larik=array[1..25] of loket;
var antri:antrian;
idantrian:larik;
p,q,r:longint;
pil: 0..7;
namabaru,namaambil:string;
function penuh(x:antrian):boolean;
begin
if x.blkng=max then penuh:=true else penuh:=false;
end;
function kosong(x:antrian):boolean;
begin
if x.blkng=0 then kosong:=true else kosong:=false;
end;
procedure pushq(var x:antrian; var nabar:string);
begin
inc(x.blkng);
x.nama[x.blkng]:=nabar;
writeln('saudara ',nabar,' anda mendapat antrian ke ',x.blkng);
end;
procedure popq(var x:antrian);
var jk:longint;
begin
namaambil:=x.nama[x.dpn];
writeln('melayani pembelian saudara : ',namaambil);
write('anda mau membeli berapa liter : ');readln(jk);
if (jk>=r) then
begin
inc(r);
idantrian[r].nama1:=namaambil;
idantrian[r].pp:=jk;
idantrian[r].total:=idantrian[r].pp*6000;
end;
for p:=1 to x.blkng-1 do
x.nama[p]:=x.nama[p+1];
dec(x.blkng);
end;
procedure cetak_antrian(var x:antrian);
begin
writeln(' DAFTAR WARGA-WARGA YANG MENGIKUTI ANTRIAN MINYAK TANAH MURAH ');
writeln('====================================================');
writeln('no urut nama pengantri');
for p:=1 to x.blkng do
writeln(' ',p:3,' ',x.nama[p]:25);
writeln('====================================================');
writeln;
writeln('pengantri saat ini ada ',x.blkng,' orang ');
end;
procedure cetak_pembayar(var y:larik);
var tot:longint;
begin
tot:=0;
writeln('cetak warga yang membeli ');
writeln('no nama pembeli jumlah pambelian ');
writeln('======================================================');
for p:=1 to r do
begin
writeln(p:3,' ',y[p].nama1:8,' ','Rp':18,y[p].total:4);
tot:=tot+y[p].total;
end;
writeln('======================================================');
writeln('total pendapatan hari ini adalah Rp ',tot);
writeln('======================================================');
end;
procedure pop_paksa(var x:antrian);
var nk:string;
pos:byte;
ketemu:boolean;
ya:char;
begin
writeln('keluar dari antrian');
writeln('berilut adlah daftar pengantri yang ada');
cetak_antrian(x);
writeln;ketemu:=false;
write('warga mana yang keluar ');readln(nk);
for p:=1 to x.blkng do
begin
if x.nama[p]=nk then
begin
ketemu:=true;pos:=p;
end;
end;
if ketemu then
begin
writeln('warga yang akan dikeluarkan ada pada posisi ke ',pos);
write('yakin nama warga ini akan keluar dari antrian <y/t> ');readln(ya);
if ya='y' then
begin
for q:=pos to x.blkng-1 do x.nama[p]:=x.nama[q+1];
dec(x.blkng);
writeln(nk,'telah dihapus dari antrian ');
end
else writeln('warga tersebut tidak jadi dihapus dari antrian');
end
else writeln('warga ',nk,' tidak ada dalam daftar');
end;
procedure cari_pembeli(var x:antrian);
var ketemu:boolean;
p,posisi:byte;
ulang:char;
cari:string;
begin
if kosong(x) then writeln('pembeli yang anda cari masi kosong') else
begin
ulang:='y';
while ulang='y' do
begin
ketemu:=false;
write('masukan nama yang anda cari ');readln(cari);
for p:=1 to r do
begin
if x.nama[p]=cari then
begin
ketemu:=true;posisi:=p;
end;
end;
if ketemu then writeln('nama ',cari,' ada di posisi ke',posisi)else
writeln;
writeln('maaf nama ',cari,' tidak ditemukan');
writeln;
write('mau cari nama lain <y/t> ');readln(ulang);
end;
end;
end;
{program utama}
begin
antri.dpn:=1;antri.blkng:=0;
repeat;
clrscr;
writeln(' PENGOLAAN DATA MINYAK TANAH MURAH ');
writeln('------------------------------------------------------------');
writeln(' (1). Tambah antrian ');
writeln(' (2). Layanan pembayaran ');
writeln(' (3). Cetak antrian');
writeln(' (4). Cetak pembelian');
writeln(' (5). Keluar antrian karna bosan');
writeln(' (6). Cari pembeli');
writeln(' (0). Selesai' );
writeln('-------------------------------------------------------------');
write('pil 0-6 : ');readln(pil);
case pil of
1: begin
writeln('menambah pengntri ');
write('masukan nama: ');readln(namabaru);
if penuh(antri) then writeln('antrian sedang penuh,next time please ')
else pushq(antri,namabaru);
end;
2: begin
if kosong(antri) then writeln('tidak ada yang akan dilayanai ')
else popq(antri);
end;
3: begin
if kosong(antri) then writeln('belum ada antrian ') else cetak_antrian(antri);
end;
4: cetak_pembayar(idantrian);
5: if kosong(antri) then writeln('antrian kosong ') else pop_paksa(antri);
6: cari_pembeli(antri);
0: writeln('Terimah Kasih Telah Mengantri');
end;
readln;
until(pil=0);
end.
0 komentar:
Posting Komentar