Jumat, 12 September 2014

"Program Toko Kue

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.


             


0 komentar:

Posting Komentar