program antrian_pos;
uses crt;
const max=10;
type antrian=record
no_kartu:array[1..max] of byte;
depan,belakang:0..max;
end;
type pos=record
no:longint;
nama,alamat:string;
end;
larik_pos=array[1..max] of pos;
var antri,dummy:antrian;
bayar:larik_pos;
pil,pilih,i,a,n,kilo:byte;
harga:longint;
bayarp,kilob,kembali:longint;
function habis(x:antrian):boolean;
begin if a=100+max then habis:=true else habis:=false; end;
function kosong(x:antrian):boolean;
begin if x.belakang=0 then kosong:=true else kosong:=false; end;
procedure masuk_antrian(var x:antrian);
begin
writeln('selamat dtang di kantor pos mailik kami bertiga');
inc(x.belakang); inc(a);
x.no_kartu[x.belakang]:=a;
writeln('Anda mendapat kartu antrian nomor ',a,' posisi antrian ke ',x.belakang);
writeln('silahkan sabar menunggu');
end;
procedure cetak_antrian(var x:antrian);
begin
writeln('Kondisi antrian saaat ini');
writeln('----------------------------------');
writeln(' posisi nomor kartu');
writeln('----------------------------------');
for i:=x.depan to x.belakang do writeln(i:4,' ',x.no_kartu[i]:15);
writeln('----------------------------------');
writeln('saat ini ada ',x.belakang,' pengantree');
end;
procedure cetak_pembayaran(var x:larik_pos);
begin
writeln('DAFTAR YANG SUDAH MENGIRIM BARANG');
writeln('---------------------------------------');
writeln('no nama no hp alamat');
writeln('---------------------------------------');
for i:=1 to n do writeln(i,' ',x[i].nama:5,' ',x[i].no:8,' ',x[i].alamat);
writeln('---------------------------------------');
writeln('saat ini ada ',n,' orang yang sudah mengirim sesuatu');
end;
procedure layanan_pos(var x:antrian;var y:larik_pos);
label ulang;
begin
clrscr;
writeln('Selamat datang di layanan pengiriman barang');
writeln('Anda memiliki nomor kartu dengan no kartu antrian ',x.no_kartu[x.depan],' silahkan masuk konter');
for i:=x.depan to x.belakang-1 do x.no_kartu[i]:=x.no_kartu[i+1];
dec(x.belakang);
inc(n);
writeln('Masukan data diri anda');
write('Nama : ');readln(y[n].nama);
write('No HP : ');readln(y[n].no);
write('Masukan alamat : ');readln(y[n].alamat);
writeln('selamat datang di menu layanan pos milik kami bertiga');
writeln('1. Paket');
writeln('2. Surat');
writeln('3. Kilat Khusus');
writeln('4. Wassel');
writeln('Masukan pilihan anda');readln(pilih);
case pilih of
1:begin
clrscr;
writeln('Anda berada dalam menu paket, isi prosedur dibawah ini');
writeln('Berikut adalah daftar harga paket : ');
writeln('1. 1 kg = Rp. 2000,00');
writeln('2. 2 kg = Rp. 4000,00');
writeln('3. 3 kg = Rp. 6000,00');
writeln('4. 4 kg = Rp. 10000,00');
writeln('5. 5 kg = Rp. 20000,00');
ulang:
write('Berapa kilo paket yang akan anda kirim ? ');readln(kilo);
if (kilo<1) or (kilo>5) then begin writeln('maaf kami tidak bisa melayaninya karena minimal pengiriman 1 kilo dan maksimal 5 kilo');goto ulang;end;
if (kilo=1) then harga:=2000;
if (kilo=2) then harga:=4000;
if (kilo=3) then harga:=6000;
if (kilo=4) then harga:=10000;
if (kilo=5) then harga:=20000;
kilob:=kilo*harga;
writeln('anda harus membayar ',kilob,' rupiah');
write('Masukkan pembayarannya : ');readln(bayarp);
kembali:=bayarp-kilob;
writeln('anda membayar sebesar ',bayarp,' kembali sebesar ',kembali,' rupiah');
end;
end;
end;
procedure keluar_antrian(var x:antrian);
var keluar,pos,j:byte;ada:boolean;
ya:char;
begin
ada:=false;
writeln('Keluiar antrian');
cetak_antrian(x);
write('masukan nomer yang kan keluar');readln(keluar);
for i:=x.depan to x.belakang do
begin if x.no_kartu[i]=keluar then begin ada:=true; pos:=i;end;end;
if not ada then writeln('nomor tidak ditemukan')
else
begin
write('yakin mau keluar ? ');readln(ya);
if(ya='y') or (ya='Y') then
begin
for j:=pos to x.belakang-1 do x.no_kartu[j]:=x.no_kartu[j+1];
dec(x.belakang);
writeln('nomor kartu ',keluar,' sudah meninggalkan antrian');
end
else
writeln('nomor kartu ',keluar,' tidak jadi keluar');
end;
end;
procedure sisip_antrian(var x:antrian);
var pos:byte;
label ulang;
begin
writeln('Menyisipkan seseorang ke antrian');
inc(a);writeln('selamat datang di layannan pengiriman barang');
writeln('anda mendapat nomer antrian ',a);
cetak_antrian(x);
write('sehubungan anda mendapakan layanan khusus, anda boleh menentukan menentukan nomer antrian');
ulang:
write('masukan nomer antrian yang nada inginkan ');readln(pos);
if (pos<x.depan) or (pos>x.belakang+1) then
begin writeln('posisi tidak diijinkan, ulangi isi posisi antara ',x.depan,' sampai ',x.belakang+1,' : ');goto ulang;
end;
if pos=(x.belakang+1) then
begin inc(x.belakang);x.no_kartu[x.belakang]:=a;end
else
begin
for i:=pos to x.belakang do
begin inc(dummy.belakang); dummy.no_kartu[dummy.belakang]:=x.no_kartu[i];dec(x.belakang);end;
inc(x.belakang);x.no_kartu[x.belakang]:=a;
for i:=dummy.depan to dummy.belakang do
begin
inc(x.belakang);
x.no_kartu[x.belakang]:=dummy.no_kartu[i];
dec(dummy.belakang);
end;
writeln('nomor antrian ',a,' telah disisipkan');
end;
end;
begin
antri.depan:=1;antri.belakang:=0;a:=100;n:=0;
repeat
clrscr;
writeln('Pengelolaan antian untuk mengirim barang');
writeln('1. Masuk antrian');
writeln('2. Layanan pembayaran');
writeln('3. Cetak antrian');
writeln('4. Cetak daftar pengirim barang');
writeln('5. Menyisipkan antrian');
writeln('6. Keluar dari antrian');
writeln('0. Selesai');
write('pilih menu');readln(pil);
case pil of
1:if habis(antri) then writeln('maaf hanya melayani 10 mahasiswa')else masuk_antrian(antri);
2:if kosong(antri) then writeln('tidak ada mahasiswa dalam antrian')else layanan_pos(antri,bayar);
3:if kosong(antri) then writeln('tidak ada pengantri saat ini')else cetak_antrian(antri);
4:cetak_pembayaran(bayar);
5:if habis(antri) then writeln('maaf nomer antrian sudah habis') else sisip_antrian(antri);
6:if kosong(antri) then writeln('Antrisn sudah kosong') else keluar_antrian(antri);
0:writeln('terimakasih') else writeln('anda slah memilih menu');
end;
readln;
until pil=0
end.
uses crt;
const max=10;
type antrian=record
no_kartu:array[1..max] of byte;
depan,belakang:0..max;
end;
type pos=record
no:longint;
nama,alamat:string;
end;
larik_pos=array[1..max] of pos;
var antri,dummy:antrian;
bayar:larik_pos;
pil,pilih,i,a,n,kilo:byte;
harga:longint;
bayarp,kilob,kembali:longint;
function habis(x:antrian):boolean;
begin if a=100+max then habis:=true else habis:=false; end;
function kosong(x:antrian):boolean;
begin if x.belakang=0 then kosong:=true else kosong:=false; end;
procedure masuk_antrian(var x:antrian);
begin
writeln('selamat dtang di kantor pos mailik kami bertiga');
inc(x.belakang); inc(a);
x.no_kartu[x.belakang]:=a;
writeln('Anda mendapat kartu antrian nomor ',a,' posisi antrian ke ',x.belakang);
writeln('silahkan sabar menunggu');
end;
procedure cetak_antrian(var x:antrian);
begin
writeln('Kondisi antrian saaat ini');
writeln('----------------------------------');
writeln(' posisi nomor kartu');
writeln('----------------------------------');
for i:=x.depan to x.belakang do writeln(i:4,' ',x.no_kartu[i]:15);
writeln('----------------------------------');
writeln('saat ini ada ',x.belakang,' pengantree');
end;
procedure cetak_pembayaran(var x:larik_pos);
begin
writeln('DAFTAR YANG SUDAH MENGIRIM BARANG');
writeln('---------------------------------------');
writeln('no nama no hp alamat');
writeln('---------------------------------------');
for i:=1 to n do writeln(i,' ',x[i].nama:5,' ',x[i].no:8,' ',x[i].alamat);
writeln('---------------------------------------');
writeln('saat ini ada ',n,' orang yang sudah mengirim sesuatu');
end;
procedure layanan_pos(var x:antrian;var y:larik_pos);
label ulang;
begin
clrscr;
writeln('Selamat datang di layanan pengiriman barang');
writeln('Anda memiliki nomor kartu dengan no kartu antrian ',x.no_kartu[x.depan],' silahkan masuk konter');
for i:=x.depan to x.belakang-1 do x.no_kartu[i]:=x.no_kartu[i+1];
dec(x.belakang);
inc(n);
writeln('Masukan data diri anda');
write('Nama : ');readln(y[n].nama);
write('No HP : ');readln(y[n].no);
write('Masukan alamat : ');readln(y[n].alamat);
writeln('selamat datang di menu layanan pos milik kami bertiga');
writeln('1. Paket');
writeln('2. Surat');
writeln('3. Kilat Khusus');
writeln('4. Wassel');
writeln('Masukan pilihan anda');readln(pilih);
case pilih of
1:begin
clrscr;
writeln('Anda berada dalam menu paket, isi prosedur dibawah ini');
writeln('Berikut adalah daftar harga paket : ');
writeln('1. 1 kg = Rp. 2000,00');
writeln('2. 2 kg = Rp. 4000,00');
writeln('3. 3 kg = Rp. 6000,00');
writeln('4. 4 kg = Rp. 10000,00');
writeln('5. 5 kg = Rp. 20000,00');
ulang:
write('Berapa kilo paket yang akan anda kirim ? ');readln(kilo);
if (kilo<1) or (kilo>5) then begin writeln('maaf kami tidak bisa melayaninya karena minimal pengiriman 1 kilo dan maksimal 5 kilo');goto ulang;end;
if (kilo=1) then harga:=2000;
if (kilo=2) then harga:=4000;
if (kilo=3) then harga:=6000;
if (kilo=4) then harga:=10000;
if (kilo=5) then harga:=20000;
kilob:=kilo*harga;
writeln('anda harus membayar ',kilob,' rupiah');
write('Masukkan pembayarannya : ');readln(bayarp);
kembali:=bayarp-kilob;
writeln('anda membayar sebesar ',bayarp,' kembali sebesar ',kembali,' rupiah');
end;
end;
end;
procedure keluar_antrian(var x:antrian);
var keluar,pos,j:byte;ada:boolean;
ya:char;
begin
ada:=false;
writeln('Keluiar antrian');
cetak_antrian(x);
write('masukan nomer yang kan keluar');readln(keluar);
for i:=x.depan to x.belakang do
begin if x.no_kartu[i]=keluar then begin ada:=true; pos:=i;end;end;
if not ada then writeln('nomor tidak ditemukan')
else
begin
write('yakin mau keluar ? ');readln(ya);
if(ya='y') or (ya='Y') then
begin
for j:=pos to x.belakang-1 do x.no_kartu[j]:=x.no_kartu[j+1];
dec(x.belakang);
writeln('nomor kartu ',keluar,' sudah meninggalkan antrian');
end
else
writeln('nomor kartu ',keluar,' tidak jadi keluar');
end;
end;
procedure sisip_antrian(var x:antrian);
var pos:byte;
label ulang;
begin
writeln('Menyisipkan seseorang ke antrian');
inc(a);writeln('selamat datang di layannan pengiriman barang');
writeln('anda mendapat nomer antrian ',a);
cetak_antrian(x);
write('sehubungan anda mendapakan layanan khusus, anda boleh menentukan menentukan nomer antrian');
ulang:
write('masukan nomer antrian yang nada inginkan ');readln(pos);
if (pos<x.depan) or (pos>x.belakang+1) then
begin writeln('posisi tidak diijinkan, ulangi isi posisi antara ',x.depan,' sampai ',x.belakang+1,' : ');goto ulang;
end;
if pos=(x.belakang+1) then
begin inc(x.belakang);x.no_kartu[x.belakang]:=a;end
else
begin
for i:=pos to x.belakang do
begin inc(dummy.belakang); dummy.no_kartu[dummy.belakang]:=x.no_kartu[i];dec(x.belakang);end;
inc(x.belakang);x.no_kartu[x.belakang]:=a;
for i:=dummy.depan to dummy.belakang do
begin
inc(x.belakang);
x.no_kartu[x.belakang]:=dummy.no_kartu[i];
dec(dummy.belakang);
end;
writeln('nomor antrian ',a,' telah disisipkan');
end;
end;
begin
antri.depan:=1;antri.belakang:=0;a:=100;n:=0;
repeat
clrscr;
writeln('Pengelolaan antian untuk mengirim barang');
writeln('1. Masuk antrian');
writeln('2. Layanan pembayaran');
writeln('3. Cetak antrian');
writeln('4. Cetak daftar pengirim barang');
writeln('5. Menyisipkan antrian');
writeln('6. Keluar dari antrian');
writeln('0. Selesai');
write('pilih menu');readln(pil);
case pil of
1:if habis(antri) then writeln('maaf hanya melayani 10 mahasiswa')else masuk_antrian(antri);
2:if kosong(antri) then writeln('tidak ada mahasiswa dalam antrian')else layanan_pos(antri,bayar);
3:if kosong(antri) then writeln('tidak ada pengantri saat ini')else cetak_antrian(antri);
4:cetak_pembayaran(bayar);
5:if habis(antri) then writeln('maaf nomer antrian sudah habis') else sisip_antrian(antri);
6:if kosong(antri) then writeln('Antrisn sudah kosong') else keluar_antrian(antri);
0:writeln('terimakasih') else writeln('anda slah memilih menu');
end;
readln;
until pil=0
end.