program contoh_stack_kue;
uses wincrt;
const maxstack=10;
type stack=record
rasa:array[1..maxstack] of string;
harga:array[1..maxstack] of word;
atas:0..maxstack; { top of stack }
end;
type jual=record
rasa_j:string;
harga_j:word;
jum:byte;
end;
array_jual=array[1..5] of jual;
var kue,sb:stack;
jual_kue:array_jual;
bawah:byte; { empty of stack}
pil:1..7;
rasabaru,rasaambil:string;
hargabaru,hargaambil:word;
pendapatan,cacah:real;
i,k:byte;
ketemu:boolean;
procedure isi_array_jual(var x:array_jual);
begin
x[1].rasa_j:='kacang';x[1].harga_j:=21500;
x[2].rasa_j:='keju';x[2].harga_j:=25600;
x[3].rasa_j:='moka';x[3].harga_j:=23000;
x[4].rasa_j:='coklat';x[4].harga_j:=24500;
x[5].rasa_j:='stroberi';x[5].harga_j:=24000;
end;
function full(s:stack):boolean;
begin
if s.atas=maxstack then full:=true else full:=false;
end;
function empty(s:stack):boolean;
begin
if s.atas=0 then empty:=true else empty:=false;
end;
procedure push_kue(var s:stack; rb:string; hb:word);
begin
if full(s) then writeln('stack sudah penuh, tidak bisa ditambah lagi')
else
begin
inc(s.atas);
s.rasa[s.atas]:=rb;
s.harga[s.atas]:=hb;
end;
end;
procedure pop_kue(var s:stack);
begin
if empty(s) then writeln('kue sudah habis')
else
begin
rasaambil:=s.rasa[s.atas];
hargaambil:=s.harga[s.atas];
dec(s.atas);
end;
end;
procedure cetak_kue(var s:stack);
var i:byte;
begin
if not empty(s) then
begin
writeln('Kue yang ada saat ini adalah');
writeln('-----------------------------------');
writeln('posisi rasa harga ');
writeln('-----------------------------------');
for i:=s.atas downto 1 do
writeln(i:3,' ',s.rasa[i]:15,' ','Rp ',s.harga[i]:8);
writeln('-----------------------------------');
end
else writeln('Maaf tidak ada yang bisa dicetak (stock kosong)');
end;
procedure cetak_penjualan(var x:array_jual);
var total:real;
begin
writeln('Kue yang sudah terjual hingga saat ini');
writeln('-----------------------------------------------');
writeln('no rasa harga jumlah total');
for i:=1 to 5 do
begin
writeln(i:2,' ',x[i].rasa_j:8,' ','Rp',x[i].harga_j:8,' ',x[i].jum:8,' ','Rp',(x[i].harga_j*x[i].jum):12);
total:=total+(x[i].harga_j*x[i].jum) ;
end;
writeln('-----------------------------------------------');
writeln('Total------------------------------->','Rp',total:10:2);
end;
procedure cari_pop(var s:stack);
var posisi:byte;
cari:string;
begin
sb.atas:=0;ketemu:=false;
write('masukkan rasa yang akan dibeli : ');readln(cari);
{ mencari rasa tsb di stack }
for i:=s.atas downto 1 do
begin
ketemu:=true;posisi:=i;
end;
{ jika ketemu keluarkan kue di atas posisi kue yang dicari }
if ketemu then
begin
for k:=s.atas downto (posisi+1) do
begin
inc(sb.atas); { push n pop }
sb.rasa[sb.atas]:=s.rasa[k];
sb.harga[sb.atas]:=s.harga[k];
end;
s.atas:=posisi;
rasaambil:=s.rasa[s.atas]; { pop }
hargaambil:=s.harga[s.atas];
dec(s.atas);
{ kembalikan sb ke stack asal }
for k:=(sb.atas) downto 1 do
begin
inc(s.atas);
s.rasa[s.atas]:=sb.rasa[k];
s.harga[s.atas]:=sb.harga[k];
end;
end
else
writeln('kue sudah habis');
end;
{ program utama }
begin
bawah:=1;
isi_array_jual(jual_kue);
repeat
begin
writeln(' Mengelola tumpukan kue bronis');
writeln('--------------------------------------->>>>');
writeln('1. Tambah kue ke tumpukan');
writeln('2. Mengambil kue dari atas');
writeln('3. Mengambil kue pilihan');
writeln('4. Mencetak ke dalam tumpukan');
writeln('5. Cetak hasil penjualan kue');
writeln('6. Cetak rekap');
writeln('7. Selesai');
write('your choice (1-7) --> ');readln(pil);
case pil of
1:
begin
writeln('- kacang - keju - moka - coklat - stroberi -');
write('masukkan rasa kue yang baru :');readln(rasabaru);
{ mengantisipasi rasa }
if ((rasabaru<>'kacang') and (rasabaru<>'keju') and (rasabaru<>'moka') and (rasabaru<>'coklat') and
(rasabaru<>'stroberi')) then writeln('rasa itu tidak tersedia')
else
begin
if rasabaru='kacang' then hargabaru:=21500 else
if rasabaru='keju' then hargabaru:=25600 else
if rasabaru='moka' then hargabaru:=23000 else
if rasabaru='coklat' then hargabaru:=24500 else hargabaru:=24000;
push_kue(kue,rasabaru,hargabaru);
end;
end;
2:
begin
pop_kue(kue);
if not empty(kue) then
begin
writeln('kue yang diambil dari ujung stack adalah rasa ',rasaambil);
writeln('dengan harga Rp ',hargaambil);
pendapatan:=pendapatan+hargaambil;
{ mengisi array penjualan }
for i:=1 to 5 do
if (jual_kue[i].rasa_j=rasaambil) then inc (jual_kue[i].jum);
end;
end;
3:
begin
cari_pop(kue);
if (not empty(kue)) and (ketemu) then
begin
writeln('kue rasa ',rasaambil,' tersedia dan dibeli');
writeln('dengan harga Rp ',hargaambil);
pendapatan:=pendapatan+hargaambil;
{ mengisi array penjualan }
for i:=1 to 5 do
if (jual_kue[i].rasa_j=rasaambil) then inc(jual_kue[i].jum);
end;
end;
4:cetak_kue(kue);
5:cetak_penjualan(jual_kue);
6:
begin
writeln('kue yang telah terjual sebanyak ',cacah,' buah');
writeln('pendapatan sebanyak Rp ',pendapatan:8:2);
end;
7:writeln('thank you');
end;
readln;
end
until (pil=7);
end.
Jumat, 12 September 2014
Langganan:
Posting Komentar (Atom)






0 komentar:
Posting Komentar