Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  utransaksi
Language: PASCAL
Code:
unit utransaksi;
//terdiri dari payCreditCard, payMember, dan buySnack

interface
     type //tipe bentukan yang dibutuhkan dalam program
     datafilm=record  //untuk file eksternal ke-1
          judul,genre,rating,durasi,sinopsis:string;
          hargaweekdays,hargaweekend:longint;
     end;
     datatayang=record //untuk file eksternal ke-2
          nama,jam:string;
          tanggal,bulan,tahun,lama:integer;
     end;
     kapasitasbio=record //untuk file eksternal ke-3
          nama,jam:string;
          tanggal,bulan,tahun,sisa:integer;
     end;
     tiket=record //untuk file eksternal ke-4
          nomor,nama,jam,jenis:string;
          tanggal,bulan,tahun,bug:integer;
          total:longint;
     end;
          member=record //untuk file eksternal ke-5
          username,password:string;
          saldo:longint;
     end;
          hari=record //untuk file eksternal ke-6
          tanggal,bulan,tahun:integer;
          hari:string;
     end;

var
     cc,input : string;
     i,j : integer;
     adanomor,lseat : boolean;

function cekhari (d,m,y : integer) : string;
//fungsi mengecek hari sesuai tanggal inputan user, asumsikan inputan tanggal selalu benar dan tanggal tidak pernah sebelum 1 Januari 2016
//dan setelah 31 Desember 2016
procedure payCreditCard(nvalid1,nvalid2 : integer; seat : array of kapasitasbio; lunawal : array of tiket; var seatsisa : array of kapasitasbio; var lunakhir : array of tiket);
//Memproses pembayaran tiket via credit card, free satu seat untuk hari sabtu
//nvalid1 merupakan jumlah larik reservasi tiket, nvalid2 merupakan jumlah larik seat
procedure payMember(nvalid1, larmember : integer; login : boolean; username : string; lunawal : array of tiket; seat : array of kapasitasbio; wallet : array of member; var lunakhir : array of tiket; var seatsisa : array of kapasitasbio; var saldo : array of member);
//Memproses pembayaran tiket via member, dapat cashback 10%
//nvalid1 merupakan jumlah larik reservasi tiket, larmember merupakan urutan member pada larik dan bernilai 0 jika belum login, username adalah nama username yang sedang aktif
procedure buySnack(larmember : integer; login : boolean; username : string; wallet : array of member; var saldo : array of member);
//Memproses pembelian snack
//larmember merupakan urutan member pada larik, username adalah nama username yang sedang aktif

implementation

function cekhari (d,m,y : integer) : string;
const
     ddefault : integer = 1;
     mdefault : integer = 1;
     ydefault : integer = 2016;
     jan : integer = 31;
     feb : integer = 29;
//     febk : integer = 29;
     mar : integer = 31;
     apr : integer = 30;
     mei : integer = 31;
     jun : integer = 30;
     jul : integer = 31;
     agu : integer = 31;
     sep : integer = 30;
     okt : integer = 31;
     nov : integer = 30;
     //des : integer = 31;
var
     selisih, sisa : integer;
begin
     if (y = ydefault) then
     begin
          if (m = mdefault) then
               selisih := d - ddefault
          else //m > mdefault
          begin
               if (d = ddefault) then
               begin
                    case (m-mdefault) of
                         1 : selisih := jan;
                         2 : selisih := jan+feb;
                         3 : selisih := jan+feb+mar;
                         4 : selisih := jan+feb+mar+apr;
                         5 : selisih := jan+feb+mar+apr+mei;
                         6 : selisih := jan+feb+mar+apr+mei+jun;
                         7 : selisih := jan+feb+mar+apr+mei+jun+jul;
                         8 : selisih := jan+feb+mar+apr+mei+jun+jul+agu;
                         9 : selisih := jan+feb+mar+apr+mei+jun+jul+agu+sep;
                         10 : selisih := jan+feb+mar+apr+mei+jun+jul+agu+sep+okt;
                         11 : selisih := jan+feb+mar+apr+mei+jun+jul+agu+sep+okt+nov;
                         end;
               end
               else //d > ddefault
               begin
                    case (m-mdefault) of
                         1 : selisih := jan+d-ddefault;
                         2 : selisih := jan+feb+d-ddefault;
                         3 : selisih := jan+feb+mar+d-ddefault;
                         4 : selisih := jan+feb+mar+apr+d-ddefault;
                         5 : selisih := jan+feb+mar+apr+mei+d-ddefault;
                         6 : selisih := jan+feb+mar+apr+mei+jun+d-ddefault;
                         7 : selisih := jan+feb+mar+apr+mei+jun+jul+d-ddefault;
                         8 : selisih := jan+feb+mar+apr+mei+jun+jul+agu+d-ddefault;
                         9 : selisih := jan+feb+mar+apr+mei+jun+jul+agu+sep+d-ddefault;
                         10 : selisih := jan+feb+mar+apr+mei+jun+jul+agu+sep+okt+d-ddefault;
                         11 : selisih := jan+feb+mar+apr+mei+jun+jul+agu+sep+okt+nov+d-ddefault;
                         end;
               end;
          end;
     end;
{     else //y > ydefault
     begin
     end;}

     sisa := selisih mod 7;

     case sisa of
          0 : cekhari := 'Jumat';
          1 : cekhari := 'Sabtu';
          2 : cekhari := 'Minggu';
          3 : cekhari := 'Senin';
          4 : cekhari := 'Selasa';
          5 : cekhari := 'Rabu';
          6 : cekhari := 'Kamis';
          end;
end;

procedure payCreditCard(nvalid1,nvalid2 : integer; seat : array of kapasitasbio; lunawal : array of tiket; var seatsisa : array of kapasitasbio; var lunakhir : array of tiket);
begin
     write('> Nomor Pemesanan : ');
     readln(input);
     i := 1; //inisialisasi utk array nomor reservasi
     j := 1; //inisialisasi utk array kapasitas seat bioskop
     adanomor := False;
     lseat := False;

     while (i <= nvalid1) and (adanomor = False) do //cek keberadaan nomor reservasi
     begin
          if (input = lunawal[i].nomor) then
               adanomor := True
          else
               i := i + 1;
     end;

     if (adanomor) then
     begin
          while (j <= nvalid2) and (lseat = False) do //cek data seat film pada larik keberapa
          begin
               if (seat[j].nama = lunawal[i].nama) then
                    lseat := True
               else
                    j := j + 1;
          end;

          if (lunawal[i].jenis = 'Member') or (lunawal[i].jenis = 'Credit Card') then
          begin
               writeln('> Tiket sudah lunas');
               lunakhir[i].jenis := lunawal[i].jenis;
          end
          else //belum lunas
          begin
               writeln('> Harga yang harus dibayar: ' , lunawal[i].total);
               writeln('> Nomor kartu kredit: ');
               readln(cc); //diasumsikan smua input kartu kredit benar
               writeln('> Pembayaran sukses');
               lunakhir[i].jenis := 'Credit Card';
               if (cekHari(lunawal[i].tanggal,lunawal[i].bulan,lunawal[i].tahun) = 'Sabtu') and (seat[j].sisa > 0) then //free seat sabtu
                    seatsisa[j].sisa := seat[j].sisa - 1
               else //hari bukan sabtu atau seat sudah habis pada hari sabtu
                    seatsisa[j].sisa := seat[j].sisa;
               lunakhir[i].jenis := 'Credit Card';
          end;
     end
     else //nomor reservasi tidak tersedia
               writeln('> Nomor reservasi tidak ditemukan');
end;

procedure payMember(nvalid1,larmember : integer; login : boolean; username : string; lunawal : array of tiket; seat : array of kapasitasbio; wallet : array of member; var lunakhir : array of tiket; var seatsisa : array of kapasitasbio; var saldo : array of member);
var
     conf : char;
begin
     if (login) then //sudah terlogin
     begin
          write('> Nomor Pemesanan : ');
          readln(input);

          i := 1; //inisialisasi utk array nomor reservasi
          k := 1;//inisialisasi utk array member
          adanomor := False;
          lmember := False;

          while (i <= nvalid1) and (adanomor = False) do //cek keberadaan nomor reservasi
          begin
               if (input = lunawal[i].nomor) then
                    adanomor := True
               else
                    i := i + 1;
          end;

          if (adanomor) then
          begin
               if (lunawal[i].jenis = 'Member') or (lunawal[i].jenis = 'Credit Card') then //cek kelunasan tiket
               begin
                    writeln('> Tiket sudah lunas');
               end
               else //belum lunas
               begin
                    if (wallet[larmember].saldo < lunawal[i].total) then
                    begin
                         writeln('> Saldo member anda tidak mencukupi untuk melakukan transaksi ini.');
                    end
                    else //saldo cukup
                    begin
                         writeln('> Harga yang harus dibayar: ' ,lunawal[i].total);
                         repeat
                              write('> Saldo anda mencukupi. Apakah ingin mengkonfirmasi transkasi ini? (y/n)');
                              readln(conf);
                              if not((conf='y')or(conf='Y')or(conf='n')or(conf='N')) then
                                   writeln('> Input belum tepat');
                         until (conf='y')or(conf='Y')or(conf='n')or(conf='N');
                         if (conf='y')or(conf='Y') then
                         begin
                              writeln('> Pembayaran sukses');
                              saldo[larmember].saldo := wallet[larmember].saldo - ((lunawal[i].total * 9) div 10);
                              lunakhir[i].jenis := 'Member';
                         end
                         else if (conf='n')or(conf='N') then
                         begin
                              writeln('> Transaksi dibatalkan');
                         end;
                    end;
               end;
          end
          else //nomor reservasi tidak ada
          begin
               writeln('> Nomor reservasi tidak ditemukan');
          end;
     end
     else //belum terlogin
          writeln('> Anda belum melakukan login, silahkan login terlebih dahulu.');
     writeln;
end;

procedure buySnack(larmember : integer; login : boolean; username : string; wallet : array of member; var saldo : array of member);
var
     price,temp : longint;
     select,size,met,conf,cc : char;
     sum : integer;
     xmain,x1,x2 : boolean;
begin
     price := 0;
     xmain := False;
     x2 := False;
     repeat
          x1 := False;
          writeln('> Pilih jenis snack yang ingin dibeli :');
          writeln('> 1. Popcorn');
          writeln('> 2. Soda');
          writeln('> 3. Nachos');
          writeln('> 4. Selesai');
          write('> ');
          readln(select);
          if (select = '1') then
          begin
               repeat
                    writeln('> Pilih size :');
                    writeln('> 1. Small   @ Rp15.000');
                    writeln('> 2. Medium  @ Rp30.000');
                    writeln('> 3. Large   @ Rp45.000');
                    writeln('> 4. Batal');
                    write('> ');
                    readln(size);
                    if (size = '1') then
                    begin
                         temp := 15000;
                         x1 := True;
                    end
                    else if (size = '2') then
                    begin
                         temp := 30000;
                         x1 := True;
                    end
                    else if (size = '3') then
                    begin
                         temp := 45000;
                         x1 := True;
                    end
                    else if (size = '4') then
                    begin
                         x1 := True;
                         temp := 0;
                    end
                    else
                         writeln('> Input belum benar');
               until (x1);
               if (size = '1') or (size = '2') or (size = '3') then
               begin
                    writeln('> Masukkan Jumlah (input 0 jika ingin membatalkan)');
                    write('> Jumlah : ');
                    readln(sum);
                    price := price + (temp*sum);
               end;
          end
          else if (select = '2') then
          begin
               repeat
                    writeln('> Pilih size :');
                    writeln('> 1. Small   @ Rp10.000');
                    writeln('> 2. Medium  @ Rp15.000');
                    writeln('> 3. Large   @ Rp20.000');
                    writeln('> 4. Batal');
                    write('> ');
                    readln(size);
                    if (size = '1') then
                    begin
                         temp := 10000;
                         x1 := True;
                    end
                    else if (size = '2') then
                    begin
                         temp := 15000;
                         x1 := True;
                    end
                    else if (size = '3') then
                    begin
                         temp := 20000;
                         x1 := True;
                    end
                    else if (size = '4') then
                    begin
                         x1 := True;
                         temp := 0;
                    end
                    else
                         writeln('> Input belum benar');
               until (x1);
               if (size = '1') or (size = '2') or (size = '3') then
               begin
                    writeln('> Masukkan Jumlah (input 0 jika ingin membatalkan)');
                    write('> Jumlah : ');
                    readln(sum);
                    price := price + (temp*sum);
               end;
          end
          else if (select = '3') then
          begin
               repeat
                    writeln('> Pilih size :');
                    writeln('> 1. Small   @ Rp20.000');
                    writeln('> 2. Medium  @ Rp25.000');
                    writeln('> 3. Large   @ Rp30.000');
                    writeln('> 4. Batal');
                    write('> ');
                    readln(size);
                    if (size = '1') then
                    begin
                         temp := 20000;
                         x1 := True;
                    end
                    else if (size = '2') then
                    begin
                         temp := 25000;
                         x1 := True;
                    end
                    else if (size = '3') then
                    begin
                         temp := 30000;
                         x1 := True;
                    end
                    else if (size = '4') then
                    begin
                         x1 := True;
                         temp := 0;
                    end
                    else
                         writeln('> Input belum benar');
               until (x1);
               if (size = '1') or (size = '2') or (size = '3') then
               begin
                    writeln('> Masukkan Jumlah (input 0 jika ingin membatalkan)');
                    write('> Jumlah : ');
                    readln(sum);
                    price := price + (temp*sum);
               end;
          end
          else if (select = '4') then
               xmain := True
          else
               writeln('> Input belum benar');
          writeln;
     until (xmain);
     if (price = 0) then
          writeln('> Transaksi dibatalkan')
     else //price > 0
     begin
          writeln('> Total Transaksi : Rp', price div 1000, '.000');
          writeln;
          repeat
               writeln('> Input metode pembayaran');
               writeln('> 1. Credit Card');
               writeln('> 2. Saldo Member');
               writeln('> 3. Batal');
               write('> ');
               readln(met);
               if (met = '1') then //cc
               begin
                    write('> Nomor kartu kredit : ');
                    readln(cc);
                    conf := ' ';
                    repeat
                         write('> Apakah anda yakin dengan transaksi ini? (y/n)');
                         readln(conf);
                         if (conf = 'y') or (conf = 'Y') then
                         begin
                              writeln('> Pembayaran sukses');
                              x2 := True;
                         end
                         else if (conf = 'n') or (conf = 'N') then
                         begin
                              writeln('> Transaksi dibatalkan');
                              x2 := True;
                         end
                         else
                              writeln('> Input belum benar');
                         until (conf = 'y') or (conf = 'Y') or (conf = 'n') or (conf = 'N');
               end
               else if (met = '2') then //member
               begin
                    if (login) then
                    begin
                         if (wallet[larmember].saldo >= price) then
                         begin
                              repeat
                                   writeln('> Saldo anda mencukupi. Apakah anda yakin dengan transaksi ini? (y/n)');
                                   readln(conf);
                                   if (conf = 'y') or (conf = 'Y') then
                                   begin
                                        writeln('> Transaksi berhasil');
                                        saldo[larmember].saldo := wallet[larmember].saldo - price;
                                   end
                                   else if (conf = 'n') or (conf = 'N') then
                                   begin
                                        writeln('> Transaksi dibatalkan');
                                        x2 := True;
                                   end
                                   else
                                        writeln('> Input belum benar');
                              until (conf = 'y') or (conf = 'Y') or (conf = 'n') or (conf = 'N');
                         end
                         else //saldo tidak cukup
                              writeln('> Saldo membership tidak mencukupi');
                    end
                    else //belum login
                         writeln('> Silahkan login terlebih dahulu');
               end
               else if (met = '3') then //cancel
               begin
                    writeln('> Transaksi dibatalkan');
                    x2 := True;
               end
               else
                    write('> Input belum benar');
          until (x2);
     end;
end;
end.
     
Comments: