CONTH PROGRAM ATM DI PASCAL


Program ABDIMAULANA_141510123;

Const max = 20;

Type antrian = Record
  nama: string;
  uang: real;
  depan,belakang: 0..max;
End;

Type pointer = ^recpoint;
  recpoint = Record
    nama: string;
    uang: real;
    berikutnya: pointer;
  End;

Var stack,awal,akhir: pointer;
  q: antrian;
  namain: string;
  uangin: real;
  saldo,tambahsaldo,pengambilan: real;
  i,cacah,pelanggan: byte;
  lagi: boolean;
  pw,pw1,hapusmana: string;
  carihapus: string;
  pilih: 1..8;

Function habis(q:antrian): boolean;
Begin
  If saldo<50000 Then habis := true
  Else habis := false;
End;

Function kosong(q:antrian): boolean;
Begin
  If q.belakang=0 Then kosong := true
  Else kosong := false;
End;

Function penuh(q:antrian): boolean;
Begin
  If q.belakang=max Then penuh := true
  Else penuh := false;
End;

Procedure tambah(Var q:antrian; n:String);
Begin
  pw1 := 'sleman';
  If pw<>pw1 Then
    writeln('Maaf password yang Anda masukkan salah ....')
  Else
    Begin
      write('nominal penambahan saldo ATM = ');
      readln(tambahsaldo);
      saldo := saldo+tambahsaldo;
    End;
End;

Procedure push_antri(Var s:pointer; r:String);

Var baru: pointer;

Begin
  If penuh(q) Then writeln('antrian sudah penuh')
  Else
    If habis(q) Then writeln('uang di ATM habis')
  Else
    Begin
      inc(q.belakang);
      New(Baru);
      Baru^.nama := r;
      Baru^.Berikutnya := Nil;
      If s = Nil Then
        Begin
          s := Baru ;
          akhir := baru;
          inc(cacah);
        End
      Else
        Begin
          akhir^.berikutnya := baru;
          akhir := baru;
          akhir^.berikutnya := Nil;
          inc(cacah);
        End;
    End;
End;{end procedure push}

Procedure pop_hitung(Var s:pointer; x:real);

Var hapus: pointer;
Begin
  If kosong(q) Then writeln('Tak ada yang mengantri')
  Else If uangin > saldo Then write('saldo tidak cukup')
  Else
    If s=Nil Then writeln('Daftar antrian kosong...')
  Else
    Begin
      hapus := s;
      s := hapus^.berikutnya;
      hapus^.uang := uangin;
    {mencatat pengantri yang dilayani}
      writeln('Yang dilayani adalah ',hapus^.nama,
              ' dengan jumlah pengambilan uang Rp ',hapus^.uang:8:2);

      saldo := saldo-hapus^.uang;
      pengambilan := pengambilan+hapus^.uang;
      inc(pelanggan);
      dispose(hapus);

    End;
End;

Procedure hapus_atas(Var s:pointer);

Var bantu: pointer;
Begin
  bantu := s;
  If s=Nil Then writeln('Daftar antrian kosong...')
  Else
    Begin
      bantu := s;
      s := bantu^.berikutnya;
      dispose(bantu);
    End;
End;

Procedure hapus_tengah(Var s:pointer; X:String);

Var bantu,hapus: pointer;
Begin
  bantu := s;
  If s=Nil Then writeln('List kosonvg...')
  Else
    Begin
      bantu := s;
      new(hapus);
      While bantu^.berikutnya <> Nil Do
        Begin
          If bantu^.berikutnya^.nama=X Then
            Begin
              hapus := bantu^.berikutnya;
              bantu^.berikutnya := hapus^.berikutnya;
              dispose(hapus);
            End
          Else
            bantu := bantu^.berikutnya;
        End;
    End;
End;

Procedure hapus_bawah(Var s:pointer);

Var baru,bantu: pointer;
Begin
  bantu := s;
  If bantu=Nil Then writeln('Daftar antrian kosong...')
  Else
    Begin
      While bantu^.berikutnya^.berikutnya <> Nil Do
        bantu := bantu^.berikutnya;
      new(baru);
      baru := bantu^.berikutnya;
      bantu^.berikutnya := Nil;
      dispose(baru);
    End;
End;

Procedure cetak_antri(Var s:pointer);

Var i: byte;
  bantu: pointer;

Begin
  bantu := s;
  If bantu=Nil Then writeln('Tidak ada yang mengantri')
  Else
    Begin
      i := 0;
      writeln('----- DAFTAR ANTRIAN DI ATM BRI GEJAYAN ---- ');
      writeln('===========================================');
      writeln('|  No     |     Nama            |');
      writeln('---------------------------------');
      While bantu<>Nil Do
        Begin
          inc(i);
          writeln('posisi',i:3,' | ',bantu^.nama:20,'| ');
          bantu := bantu^.berikutnya;
        End;
      writeln('---------------------------------');
    End;         {end if}
End;

Procedure cari(Var s:pointer);

Var cari: string;
  ketemu: boolean;
  i,cacahcari: byte;
  ulang: char;
  bantu: pointer;

Begin
  new(bantu);
  ulang := 'y';
  While ulang='y' Do
    Begin
      ketemu := false;
      cacahcari := 0;
      write('Nama yang dicari? ');
      readln(cari);
      bantu := s;
      While bantu <> Nil Do
        Begin
          If bantu^.nama=cari Then
            Begin
              ketemu := true;
              inc(cacahcari);
            End;
          bantu := bantu^.berikutnya;
        End;
      If ketemu Then writeln('Nama ',cari,' ada ',cacahcari:4,' ')
      Else
        writeln('Nama ',cari,' tidak ada dalam antrian');
      writeln;
      write('mau cari nama lain <y/t>? ');
      readln(ulang);
    End;
End;{end procedure}

Procedure urut(Var s:pointer);

Var dpn,blkg,awal: pointer;
  bantu1: real;
  bantu2: string;
Begin
  dpn := awal;
  While Not (dpn=Nil) Do
    Begin
      blkg := dpn^.berikutnya;
      While Not (blkg=Nil) Do
        Begin
          If blkg^.uang > dpn^.uang Then
            Begin
              bantu1 := blkg^.uang;
              bantu2 := blkg^.nama;
              blkg^.uang := dpn^.uang;
              blkg^.nama := dpn^.nama;
              dpn^.uang := bantu1;
              dpn^.nama := bantu2;
            End;
          blkg := blkg^.berikutnya;
        End;
      dpn := dpn^.berikutnya;
    End;
  writeln('Pengambilan uang terbanyak : ',awal^.uang:0:0,' dengan nama : ',awal^.nama);
  writeln('Pengambilan uang terendah : ',s^.uang:0:0,' dengan nama : ',s^.nama);
  writeln;
End;


{menu utama}
Begin
  saldo := 10000000;
  lagi := true;
  q.depan := 1;
  q.belakang := 0;
  While lagi Do
    Begin

      writeln('========== ATM BRI GEJAYAN =========');
      writeln;
      writeln('1.tambah antrian');
      writeln('2.layani pengantri');
      writeln('3.cetak antrian');
      writeln;
      writeln('--------- DAFTAR PELANGGAN --------');
      writeln('4.hapus nama dalam daftar antrian');
      writeln('5.cari berdasarkan nama');
      writeln('6.urut berdasarkan jml pengambilan uang ');
      writeln;
      writeln('----------------------------------');
      writeln('7.tambah uang dalam ATM');
      writeln('8.selesai, cetak total pengambilan uang dan saldo di ATM');
      writeln;
      write('pilih 1..8 = ');
      readln(pilih);
      writeln;
      Case pilih Of
        1:
           Begin
             write('nama = ');
             read(namain);
             push_antri(stack,namain);
             readln;
           End;
        2:
           Begin
             write('uang yang akan diambil = ');
             read(uangin);
             pop_hitung(stack,uangin);
             readln;
           End;
        3: cetak_antri(stack);
        4:
           Begin
             write('mau menghapus dari mana ? (atas/tengah/bawah) = ');
             read(hapusmana);
             If hapusmana='atas' Then hapus_atas(stack)
             Else If hapusmana='tengah' Then
                    Begin
                      writeln('Pengantri yang akan dihapus dari daftar = ');
                      read(carihapus);
                      hapus_tengah(stack,carihapus);
                    End
             Else If hapusmana='bawah' Then
                    hapus_bawah(stack);
             readln;
           End;
        5: cari(stack);
        6: urut(stack);
        7:
           Begin
             write('Masukkan password = ');
             read(pw);
             tambah(q,pw);
             readln;
           End;

        8:
           Begin
             writeln('pelanggan hari ini sebanyak ',pelanggan:4,' orang');
             writeln('total pengambilan uang = ',pengambilan:10:2);
             writeln('sisa saldo di ATM = ',saldo:10:2);
             writeln('terima kasih...');
             lagi := false;
           End;
      End;
      readln;
    End;
End.

Comments

Popular posts from this blog

QUESTION OF LIFE

TUGAS MANDIRI IMPLEMENTASI PANCASILA DI ERA SETELAH REFORMASI MATA KULIAH : PANCASILA

Program Perhitungan Gaji Karyawan