program antriann;
uses crt;
type antrian=^node;
node=record
isi:string[10];
next:antrian;
end;
var depan,belakang:antrian;
pointer:string;
x:string;
cr:string;
pil:char;
procedure baru(x:string; var tunjuk:antrian);
begin
new(tunjuk);
tunjuk^.isi:=x;
tunjuk^.next:=nil;
end;
function isempty(depan, belakang:antrian):boolean;
begin
isempty:=(depan=nil) and(belakang=nil)=true
end;
procedure tambahantri(var belakang:antrian);
var x:string;
tunjuk:antrian;
begin
write('Masakuna nama orang yang mau masuk antrian');
readln(x);
baru(x,tunjuk);
belakang^.next:=tunjuk;
belakang:=tunjuk;
end;
procedure hapusdepan(var depan, belakang:antrian);
var bantu:antrian;
begin
if isempty(depan, belakang) then
writeln('Antrian kosong')
else if depan=belakang then
begin
depan:=nil; belakang:=nil
end
else
begin
bantu:=depan^.next;
depan:=bantu;
end;
end;
procedure selesaiantri(var depan, belakang:antrian; var x:string);
begin
if depan= nil then
x:='antrian kosong'
else
begin
x:=depan ^.isi;
hapusdepan(depan,belakang);
end;
end;
procedure buatantrian(var depan,belakang:antrian);
var c:char; tunjuk:antrian; i:integer;
begin
i:=0;
depan:=nil; belakang:=nil;
repeat
i:=i+1;
write('masukan nama ke ',i,'='); readln(x);
baru(x,tunjuk);
if isempty(depan,belakang) then
begin
depan:=tunjuk;
belakang:=tunjuk;
end
else
begin
belakang^.next:=tunjuk;
belakang:=tunjuk;
end;
repeat
write('Tambah data yang antri [Y/T]= ');
readln(c);
until c in['T','t','y','Y'];
until c in['T','t'];
end;
procedure cetak(depan:antrian;var output:string);
var bantu:antrian; y:string;
begin
bantu:=depan;
output:='Loket Pendaftaran';
if isempty(depan,belakang) then output:='Antrian Kosong'
else
begin
while bantu<>nil do
begin
y:=bantu^.isi;
output:=y+'->>'+output;
bantu:=bantu^.next;
end;
output:='pintu masuk antrian->>'+output;
end;
end;
begin
clrscr;
buatantrian(depan,belakang);
repeat
repeat
writeln;
writeln('-----------------------');
writeln('[1] Buat Antrian Baru ');
writeln('[2] Tambah Antrian Pendaftar ');
writeln('[3] Ambil orang yang selesai daftar');
writeln('[4] Loket pendaftaran Ditutup');
writeln('--------------------------------------');
write('Pilihan anda : '); pil:=readkey;writeln(pil);
writeln;
until (pil>='1') and (pil<='4');
case pil of
'1' :begin
buatantrian(depan,belakang);
writeln;
writeln;
writeln;
end;
'2' :begin
tambahantri(belakang);
writeln;
writeln('setelah ditambah antrian menjadi : ');
cetak(depan,pointer);
writeln(pointer);
writeln;
writeln;
writeln;
end;
'3' : begin
selesaiantri(depan,belakang,x);
writeln(' ',x,' Telah selesai mendaftar, maka ia keluar dari antrian');
writeln;
writeln('Antrian menjadi :');
cetak(depan,pointer);
writeln(pointer);
writeln;
writeln;
writeln;
end;
'4' : begin
writeln('Loket telah ditutup ');
writeln('Antrian dilanjutkan hari berikutnya');
exit;
end;
end;
until (pil='8');
end.
end.