Home » Tugas UTS UAS DLL » program pascal queue Konten Lain di Sini
program pascal queue
program antrian_bioskop;
uses wincrt;
const max=10;
type queue=record
nama,judul:array[1..max] of string;
depan,belakang:0..max;
end;
type jual=record
nama,judulj:string;
jt:1..8;
total:real;
end;
larik_jual=array[1..20] of jual;
label ulang;
var bioskop,qp:queue;
jual1:larik_jual;
nb,na,jf,keluar:string;
pil:1..6;
ct:longint; i,j,n:byte;
tot:real;
ketemu:boolean;
function full(q:queue):boolean;
begin
if (q.belakang=max) then full:=true else full:=false;
end;
function empty(q:queue):boolean;
begin
if (q.belakang=0) then empty:=true else empty:=false;
end;
procedure pushq(var q:queue;x:string);
begin
if full(q) then writeln ('antrian sedang penuh')
else
begin
inc(q.belakang);
q.nama[q.belakang]:=x;
end;
end;
procedure popq(var q:queue);
begin
if empty(q) then writeln('antrian sudah kosong')
else
begin
na:=q.nama[q.depan];
jf:=q.judul[q.depan];
{digeser}
for i:=1 to (q.belakang-1) do
q.nama[i]:=q.nama[i+1];
dec(q.belakang);
end;
end;
procedure cetak_antrian(var q:queue);
begin
writeln('ANTRIAN YANG ADA SAAT INI');
writeln('------------------------------------');
writeln('antrianno nama');
writeln('------------------------------------');
for i:=1 to q.belakang do writeln(i:3,' ',q.nama[i]:15);
writeln('------------------------------------');
end;
procedure cetak_pem(var x:larik_jual);
var tot:real;
begin
writeln('Pembelian Tiket Hari Ini');
writeln('---------------------------------------------------------------------');
writeln('| No | Nama | Judul | Jumlah | Total |');
writeln('---------------------------------------------------------------------');
for i:=1 to n do
begin
writeln(i:3,' ',x[i].nama:11,' ',x[i].judulj:8,' ',x[i].jt:10,' Tiket Rp. ',x[i].total:11:2);
tot:=tot+x[i].total;
end;
writeln('---------------------------------------------------------------------');
writeln('-------------------------------------------------Total--Rp ',tot:11:2);
end;
procedure bosan(var q:queue);
var posisi:byte;
begin
ketemu:=false;
write('Masukkan Nama yang ingin keluar ==> ');readln(keluar);
for i:=q.belakang downto 1 do
begin
if (q.nama[i]=keluar) then
begin
ketemu:=true;
posisi:=i;
end;
end;
if ketemu then
begin
for j:=q.belakang downto posisi+1 do
begin
inc(qp.belakang);
qp.nama[qp.belakang]:=q.nama[j];
end;
q.belakang:=posisi;
na:=q.nama[q.belakang];
dec(q.belakang);
for j:=q.belakang downto 1 do
begin
inc(q.belakang);
q.nama[q.belakang]:=qp.nama[j];
end;
end
else
writeln('Nama Tidak ada Dalam Antrian');
end;
begin{utama}
bioskop.depan:=1;
repeat
begin
clrscr;
writeln(' PELAYANAN ANTRIAN BIOSKOP XXI');
writeln('1. Masuk antrian');
writeln('2. Layanan pembelian tiket');
writeln('3. Keluar antrian,bosan');
writeln('4. Cetak antrian');
writeln('5. Cetak pembelian tiket');
writeln('6. Selesai');
write('Pilih 1-6 --> ');readln(pil);
case pil of
1:
begin
write('masukan nama baru yang akan diantri ');readln(nb);
pushq(bioskop,nb);
end;
2:
begin
if not empty(bioskop) then
begin
popq(bioskop);
ulang:write('saudara ',na,' akan membeli beberapa tiket ? ');readln(ct);
write('Masukkan Judul Film !');readln(jf);
if ct>4 then {Jika jumlah tiket>4, ulangi pemasukan}
begin writeln('Maks pembelian 4 tiket, ulang ');goto ulang;end
else
begin
tot:=25000*ct; {max ct 4}
writeln('Anda harus membayar Rp ',tot:8:2);
inc(n);
jual1[n].nama:=na;
jual1[n].judulj:=jf;
jual1[n].jt:=ct;
jual1[n].total:=tot;
end;
end
else writeln('antrian sudah habis');
end;
3: begin
if not empty(bioskop) then bosan(bioskop) else
writeln('Antrian Sudah Kosong');
if ketemu and not empty(bioskop) then
begin
writeln('Orang yang Keluar adalah ',na);
end;
end;
4: if not empty(bioskop) then cetak_antrian(bioskop) else
writeln('antrian sudah kosong');
5: begin
cetak_pem(jual1);
end;
6: writeln('TERIMAKASIH');
end;
readln;
end
until (pil=6);
end.
0 comments
Tambahkan Komentar Anda
semua berawal dari diri kita