Advertisement
restu_reese

penyewaan.cpp

Jan 24th, 2017
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 37.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cstdlib>
  4. #include <math.h>
  5. #include <windows.h>
  6.  
  7. #define DRIVER 8
  8. #define MAX 14
  9.  
  10. using namespace std;
  11.  
  12. typedef string infotype;
  13. //Data Mobil
  14. typedef struct tNode *address;
  15. typedef bool status;
  16. typedef struct tNode{
  17.     infotype NoTNKB;
  18.     infotype Merk;
  19.     infotype Warna;
  20.     infotype Tahun;
  21.     int biayaSewa;
  22.     status sewa;
  23.     address Next;
  24. }Mobil;
  25. typedef Mobil *List;
  26.  
  27. //Data Driver
  28. typedef int pos;
  29. typedef struct{
  30.     pos Head;
  31.     pos Tail;
  32.     infotype noKTP[DRIVER];
  33.     infotype Nama[DRIVER];
  34.     infotype Alamat[DRIVER];
  35.     infotype Usia[DRIVER];
  36.     status service[DRIVER];
  37. }driver;
  38.  
  39. //Data Konsumen
  40. typedef struct{
  41.     pos Head;
  42.     pos Tail;
  43.     infotype noKTP[MAX];
  44.     infotype Nama[MAX];
  45.     infotype Alamat[MAX];
  46. }Konsumen;
  47.  
  48. //Tanggal
  49. typedef struct{
  50.     int Tanggal;
  51.     int Bulan;
  52.     int Tahun;
  53. }Date;
  54.  
  55. //Data Transaksi
  56. typedef struct TNode *ID_Transaksi;
  57. typedef struct TNode{
  58.     infotype Nama_Konsumen;
  59.     infotype Alamat;
  60.     infotype NoTNKB;
  61.     infotype Nama_Driver;
  62.     Date Sewa;
  63.     Date Kembali;
  64.     ID_Transaksi Next;
  65. }transaksi;
  66. typedef transaksi *Transaksi;
  67.  
  68. //Data Pembayaran
  69. typedef struct TBayar *ID_Pembayaran;
  70. typedef struct TBayar{
  71.     infotype Nama_Konsumen;
  72.     infotype Alamat;
  73.     infotype NoTNKB;
  74.     infotype Nama_Driver;
  75.     Date Sewa;
  76.     Date Kembali;  
  77.     Date Bayar;
  78.     int Denda;
  79.     int totBiaya;
  80.     ID_Pembayaran Next;
  81. }Pembayaran;
  82. typedef Pembayaran *pembayaran;
  83.  
  84. //ADT Mobil
  85. typedef Mobil *List;
  86. void CreateEmpty(List &L);
  87. bool IsEmpty(List L);
  88. bool IsOneElement(List L);
  89. bool isRent(List L);
  90. void RentPertama(List &L,infotype *tnkb,int *biayasewa);
  91. void Rent(List &L,infotype &tnkb,int &biayasewa,pos pilih,int no);
  92. void insertFirst(List &L,address P);
  93. void insertAfter(List &L,address Prec,address P);
  94. address alokasi(infotype tnkb,infotype merk,infotype warna,infotype tahun,int biaya);
  95. void addMobil(List &L,address P);
  96. void delFirst(List &L);
  97. void delMobil(List &L,int select,int no);
  98. void updateTarif(List &L,int biaya,int select,int no);
  99. void printMobil(List L,int no);
  100. void availableMobil(List L,int no);
  101. void inisialisasiMobil(List &L,infotype tnkb);
  102.  
  103. //ADT Driver
  104. void CreateEmpty(driver *D);
  105. bool isEmpty(driver D);
  106. bool isFull(driver D);
  107. bool isTask(driver D);
  108. bool isOneElement(driver D);
  109. void addDriver(driver *D,infotype ktp,infotype nama,infotype alamat,infotype usia);
  110. void Task(driver *D,infotype *nama);
  111. void updateDriver(driver *D,infotype update,pos select);
  112. void delDriver(driver *D,pos select);
  113. void printDriver(driver D);
  114. void inisialisasiDriver(driver *D,infotype nama);
  115.  
  116. //ADT Konsumen
  117. void CreateEmpty(Konsumen *K);
  118. bool isEmpty(Konsumen K);
  119. bool isFull(Konsumen K);
  120. bool isOneElement(Konsumen K);
  121. void addKonsumen(Konsumen *K,infotype ktp,infotype nama,infotype alamat);
  122. void printKonsumen(Konsumen K);
  123. void delKonsumen(Konsumen *K,pos select);
  124. void delKonsumen(Konsumen *K,infotype *nama,infotype *alamat);
  125.  
  126. //ADT Transaksi
  127. void CreateEmpty(Transaksi &T);
  128. bool IsEmpty(Transaksi T);
  129. bool IsOneElement(Transaksi T);
  130. void insertFirst(Transaksi &T,ID_Transaksi P);
  131. void insertAfter(Transaksi &T,ID_Transaksi sblm,ID_Transaksi P);
  132. void delPenyewaan(Transaksi &L);
  133. void addPenyewaan(Transaksi &T,ID_Transaksi P);
  134. ID_Transaksi Alokasi(infotype nama_Konsumen,infotype alamat,infotype tnkb,
  135.     infotype nama_Driver,Date sewa,Date kembali);
  136. infotype getNama(Konsumen K);
  137. void printPenyewaan(Transaksi T,int no);
  138. void delTransaksi(Transaksi &T,infotype *nama_konsumen,infotype *alamat,infotype *tnkb,
  139.     Date *sewa,Date *kembali,infotype *nama_driver,pos select,int no);
  140.  
  141. //Data Pembayaran
  142. void CreateEmpty(pembayaran &B);
  143. bool IsEmpty(pembayaran T);
  144. bool IsOneElement(pembayaran T);
  145. ID_Pembayaran Alokasi(infotype nama,infotype alamat,
  146.     infotype tnkb,infotype nama_driver,Date sewa,Date bayar,int denda,int totbiaya);
  147. int getBiaya(List &L,infotype tnkb);
  148. int hitungBayar(int denda,int sewa,int biaya);
  149. void insertFirst(pembayaran &B,ID_Pembayaran P);
  150. void insertAfter(pembayaran &B,ID_Pembayaran Prec,ID_Pembayaran P);
  151. void addPembayaran(pembayaran &B,ID_Pembayaran P);
  152. void bayarSewa(infotype Nama_Driver,Date kembali,Date Bayar,Date Sewa,int biayaSewa,int &totdenda,int &totbayar);
  153. void printPembayaran(pembayaran T,int no);
  154.  
  155.  
  156. int main(){
  157.  
  158.     //mode fullscreen
  159.     system("mode 650");
  160.  
  161.     driver Driver;
  162.     Konsumen konsumen;
  163.     List mobil;
  164.     Transaksi Penyewaan;
  165.     pembayaran Bayar_sewa;
  166.  
  167.     address data;
  168.     ID_Transaksi Data_Pinjam;
  169.     ID_Pembayaran Data_Pembayaran;
  170.  
  171.  
  172.     infotype tnkb,merk,warna,tahun;
  173.     int biayasewa = 0;
  174.     int denda = 0;
  175.     int totbiaya = 0;
  176.     infotype nama,ktp,alamat,umur,nama_driver;
  177.     int no=0;
  178.     int pilih;
  179.     int select;
  180.     char opsi;
  181.     string begin;
  182.     Date sewa;
  183.     Date kembali;
  184.     Date bayar;
  185.  
  186.     CreateEmpty(&Driver);
  187.     CreateEmpty(&konsumen);
  188.     CreateEmpty(mobil);
  189.     CreateEmpty(Penyewaan);
  190.     CreateEmpty(Bayar_sewa);
  191.     //Mobil
  192.     data = alokasi("AB 1111 Z","INNOVA","Hitam","2008",250000);
  193.     addMobil(mobil,data);
  194.     data = alokasi("AB 4444 L","YARIS","Silver","2008",500000);
  195.     addMobil(mobil,data);
  196.     //Driver
  197.     addDriver(&Driver,"5130422156","whoami","root","24");
  198.     addDriver(&Driver,"5130422152","localhost","127.0.0.1","30");  
  199.     addDriver(&Driver,"5130422153","sudonym","terminal","36");
  200.     addDriver(&Driver,"5130422157","reese","direktori","47");
  201.    
  202.     do{
  203.         cout<<"---------------------------------------------------------------------"<<endl;
  204.         cout<<"\t\t\t\"SIMPLY RENT A CAR\""<<endl;
  205.         cout<<"---------------------------------------------------------------------"<<endl;
  206.         cout<<" 1. Data Mobil"<<endl;
  207.         cout<<" 2. Data Driver"<<endl;
  208.         cout<<" 3. Data Konsumen"<<endl;
  209.         cout<<" 4. Transaksi Peminjaman"<<endl;
  210.         cout<<" 5. Transaksi Pembayaran"<<endl;
  211.         cout<<" 0. Keluar"<<endl;
  212.         cout<<"---------------------------------------------------------------------"<<endl;
  213.         cout<<"Pilih Menu : ";
  214.         cin>>pilih;
  215.         if(cin.fail()){
  216.             cout<<"menu yang anda masukkan salah"<<endl;
  217.             cout<<"Ulang pilih menu [y/N] : ";
  218.             cin.clear();
  219.             cin.ignore();
  220.             cin>>begin;
  221.             if(begin=="y" || begin == "Y"){
  222.                 system("cls");
  223.                 pilih = 9;
  224.             }else{
  225.                 pilih = 0;
  226.             }
  227.            
  228.         }
  229.         system("cls");
  230.         switch(pilih){
  231.             case 1:
  232.                 do{
  233.                     cout<<"-----------------------------------------"<<endl;
  234.                     cout<<"\t\t\"DATA MOBIL\""<<endl;
  235.                     cout<<"-----------------------------------------"<<endl;
  236.                     cout<<" 1. Tampilkan Data Mobil"<<endl;
  237.                     cout<<" 2. Tambah Data Mobil"<<endl;
  238.                     cout<<" 3. Update Tarif Sewa"<<endl;
  239.                     cout<<" 4. Hapus Data Mobil"<<endl;
  240.                     cout<<" 9. Kembali"<<endl;
  241.                     cout<<"-----------------------------------------"<<endl;
  242.                     cout<<"Pilih Menu : ";
  243.                     cin.clear();
  244.                     cin>>pilih;
  245.                     if(cin.fail()){
  246.                         cout<<"menu yang anda masukkan salah"<<endl;
  247.                         cout<<"Ulang pilih menu [y/N] : ";
  248.                         cin.clear();
  249.                         cin.ignore();
  250.                         cin>>begin;
  251.                         if(begin=="y" || begin == "Y"){
  252.                             system("cls");
  253.                             pilih = 0;
  254.                         }else{
  255.                             pilih = 9;
  256.                         }
  257.                                                    
  258.                        
  259.                     }
  260.                     system("cls");
  261.                     switch(pilih){
  262.                         case 1:
  263.                             cout<<"0. Kembali"<<endl;
  264.                             cout<<"-----------------------------------------------------------------------------------------"<<endl;
  265.                             cout<<"| No |"<<"   No TNKB  |"<<"       MERK      |"<<"    WARNA   |"<<"  TAHUN  |"
  266.                             <<"   BIAYA   |"<<"     STATUS     |"<<endl;
  267.                             cout<<"-----------------------------------------------------------------------------------------"<<endl;
  268.                             printMobil(mobil,no);
  269.                             cout<<"-----------------------------------------------------------------------------------------"<<endl;
  270.                             cin>>pilih;
  271.                             system("cls");
  272.  
  273.                             break;
  274.                         case 2:
  275.                             cout<<"Masukkan No TNKB\t: ";
  276.                             cin.ignore();
  277.                             getline(cin,tnkb);
  278.                             cout<<"Masukkan Merk Mobil\t: ";
  279.                             getline(cin,merk);
  280.                             cout<<"Masukkan Warna Mobil\t: ";
  281.                             getline(cin,warna);
  282.                             cout<<"Masukkan Tahun\t\t: ";
  283.                             cin>>tahun;
  284.                             cout<<"Masukkan Biaya Sewa\t: ";
  285.                             cin>>biayasewa;
  286.  
  287.                             data = alokasi(tnkb,merk,warna,tahun,biayasewa);
  288.                             addMobil(mobil,data);
  289.                             system("cls");
  290.  
  291.                             break;
  292.                         case 3:
  293.                             cout<<"0. Kembali"<<endl;
  294.                             cout<<"-----------------------------------------------------------------------------------------"<<endl;
  295.                             cout<<"| No |"<<"   No TNKB  |"<<"       MERK      |"<<"    WARNA   |"<<"  TAHUN  |"
  296.                             <<"   BIAYA   |"<<"     STATUS     |"<<endl;
  297.                             cout<<"-----------------------------------------------------------------------------------------"<<endl;
  298.                             printMobil(mobil,no);
  299.                             cout<<"-----------------------------------------------------------------------------------------"<<endl;
  300.                             cout<<"Pilih Mobil : ";
  301.                             cin>>select;
  302.                             cout<<"Masukkan tarif sewa baru : ";
  303.                             cin>>biayasewa;
  304.  
  305.                             updateTarif(mobil,biayasewa,select,no);
  306.                             system("cls");
  307.                             break;
  308.                         case 4:
  309.                             cout<<"0. Kembali"<<endl;
  310.                             cout<<"-----------------------------------------------------------------------------------------"<<endl;
  311.                             cout<<"| No |"<<"   No TNKB  |"<<"       MERK      |"<<"    WARNA   |"<<"  TAHUN  |"
  312.                             <<"   BIAYA   |"<<"     STATUS     |"<<endl;
  313.                             cout<<"-----------------------------------------------------------------------------------------"<<endl;
  314.                             printMobil(mobil,no);
  315.                             cout<<"-----------------------------------------------------------------------------------------"<<endl;
  316.                             cout<<"Pilih Mobil : ";
  317.                             cin>>select;
  318.  
  319.                             delMobil(mobil,select,no);
  320.                             system("cls");
  321.                             break;
  322.                         case 9:
  323.                             system("cls");
  324.                             break;
  325.                         case 0:
  326.                             //jika inputan salah
  327.                             system("cls");
  328.                             break;
  329.                         default:
  330.                             cout<<"Menu yang anda pilih tidak tersedia"<<endl;
  331.                     }
  332.                 }while(pilih!=9);
  333.                
  334.                 break;
  335.             case 2:
  336.                 do{
  337.                     cout<<"-----------------------------------------"<<endl;
  338.                     cout<<"\t\t\"DATA DRIVER\"\t\t"<<endl;
  339.                     cout<<"-----------------------------------------"<<endl;
  340.                     cout<<" 1. Tampilkan Data Driver"<<endl;
  341.                     cout<<" 2. Tambah Data Driver"<<endl;
  342.                     cout<<" 3. Update Umur Driver"<<endl;
  343.                     cout<<" 4. Hapus Data Driver"<<endl;
  344.                     cout<<" 9. Kembali"<<endl;
  345.                     cout<<"-----------------------------------------"<<endl;
  346.                     cout<<"Pilih Menu : ";
  347.                     cin.clear();
  348.                     cin>>pilih;
  349.                     if(cin.fail()){
  350.                         cout<<"menu yang anda masukkan salah"<<endl;
  351.                         cout<<"Ulang pilih menu [y/N] : ";
  352.                         cin.clear();
  353.                         cin.ignore();
  354.                         cin>>begin;
  355.                         if(begin=="y" || begin == "Y"){
  356.                             system("cls");
  357.                             pilih = 0;
  358.                         }else{
  359.                             pilih = 9;
  360.                         }
  361.                        
  362.                     }
  363.                     system("cls");
  364.                     switch(pilih){
  365.                         case 1:
  366.                             cout<<"0. Kembali"<<endl;
  367.  
  368.                             printDriver(Driver);
  369.                             cin>>pilih;
  370.                             system("cls");
  371.  
  372.                             break;
  373.                         case 2:
  374.                             cout<<"0. Kembali"<<endl;
  375.                             cout<<"Masukkan Nama\t\t: ";
  376.                             cin.ignore();
  377.                             getline(cin,nama);
  378.                             cout<<"Masukkan No KTP\t\t: ";
  379.                             getline(cin,ktp);
  380.                             cout<<"Masukkan Alamat\t\t: ";
  381.                             getline(cin,alamat);
  382.                             cout<<"Masukkan Umur\t\t: ";
  383.                             cin>>umur;
  384.  
  385.                             addDriver(&Driver,ktp,nama,alamat,umur);
  386.                             system("cls");
  387.  
  388.                             break;
  389.                         case 3:
  390.                             cout<<"0. Kembali"<<endl;
  391.  
  392.                             printDriver(Driver);
  393.                             cout<<"Pilih driver : ";
  394.                             cin>>select;
  395.  
  396.                             cout<<"Masukkan Umur Driver : ";
  397.                             cin>>umur;
  398.  
  399.                             updateDriver(&Driver,umur,select);
  400.                             system("cls");
  401.  
  402.                             break;
  403.                         case 4:
  404.                             cout<<"0. Kembali"<<endl;
  405.  
  406.                             printDriver(Driver);
  407.                             cout<<"Pilih driver : ";
  408.                             cin>>select;
  409.                             delDriver(&Driver,select);
  410.                             system("cls");
  411.  
  412.                             break;
  413.                         case 9:
  414.                             system("cls");
  415.                             break;
  416.                         case 0:
  417.                             //jika inputan salah
  418.                             system("cls");
  419.                             break;
  420.                         default:
  421.                             cout<<"Menu yang anda pilih tidak tersedia"<<endl;
  422.                     }
  423.                 }while(pilih!=9);
  424.                
  425.                 break;
  426.             case 3:
  427.                 do{
  428.                     cout<<"-----------------------------------------"<<endl;
  429.                     cout<<"\t\t\"DATA KONSUMEN\""<<endl;
  430.                     cout<<"-----------------------------------------"<<endl;
  431.                     cout<<" 1. Tampilkan Data Konsumen"<<endl;
  432.                     cout<<" 2. Tambah Data Konsumen"<<endl;
  433.                     cout<<" 3. Hapus Data Konsumen"<<endl;
  434.                     cout<<" 9. Kembali"<<endl;
  435.                     cout<<"-----------------------------------------"<<endl;
  436.                     cout<<"Pilih Menu : ";
  437.                     cin.clear();
  438.                     cin>>pilih;
  439.                     if(cin.fail()){
  440.                         cout<<"menu yang anda masukkan salah"<<endl;
  441.                         cout<<"Ulang pilih menu [y/N] : ";
  442.                         cin.clear();
  443.                         cin.ignore();
  444.                         cin>>begin;
  445.                         if(begin=="y" || begin == "Y"){
  446.                             system("cls");
  447.                             pilih = 0;
  448.                         }else{
  449.                             pilih = 9;
  450.                         }
  451.                        
  452.                     }
  453.                     system("cls");
  454.                     switch(pilih){
  455.                         case 1:
  456.                             cout<<"0. Kembali"<<endl;
  457.                             printKonsumen(konsumen);
  458.                             cin>>pilih;
  459.                             system("cls");
  460.  
  461.                             break;
  462.                         case 2:
  463.                             cout<<"Masukkan Nama \t\t: ";
  464.                             cin.ignore();
  465.                             getline(cin,nama);
  466.                             cout<<"Masukkan No KTP \t: ";
  467.                             getline(cin,ktp);
  468.                             cout<<"Masukkan Alamat \t: ";
  469.                             getline(cin,alamat);
  470.  
  471.                             addKonsumen(&konsumen,ktp,nama,alamat);
  472.                            
  473.                             system("cls");
  474.  
  475.                             break;
  476.                         case 3:
  477.                             printKonsumen(konsumen);
  478.                             cin>>select;
  479.                             delKonsumen(&konsumen,select);
  480.                             system("cls");
  481.                             break;
  482.                         case 9:
  483.                             system("cls");
  484.                             break;
  485.                         case 0:
  486.                             //jika inputan salah
  487.                             system("cls");
  488.                             break;
  489.                         default:
  490.                             cout<<"Menu yang anda pilih tidak tersedia"<<endl;
  491.                     }
  492.                 }while(pilih!=9);
  493.                
  494.                 break;
  495.             case 4:
  496.                 do{
  497.                     cout<<"------------------------------------------------------"<<endl;
  498.                     cout<<"\t\t\"TRANSAKSI  PENYEWAAN\""<<endl;
  499.                     cout<<"------------------------------------------------------"<<endl;
  500.                     cout<<" 1. Tampilkan Data Transaksi"<<endl;
  501.                     cout<<" 2. Input Transaksi"<<endl;
  502.                     cout<<" 9. Kembali"<<endl;
  503.                     cout<<"------------------------------------------------------"<<endl;
  504.                     cout<<"Pilih Menu : ";
  505.                     cin>>pilih;
  506.                     if(cin.fail()){
  507.                         cout<<"menu yang anda masukkan salah"<<endl;
  508.                         cout<<"Ulang pilih menu [y/N] : ";
  509.                         cin.clear();
  510.                         cin.ignore();
  511.                         cin>>begin;
  512.                         if(begin=="y" || begin == "Y"){
  513.                             system("cls");
  514.                             pilih = 0;
  515.                         }else{
  516.                             pilih = 9;
  517.                         }
  518.                        
  519.                     }
  520.                     system("cls");
  521.                     switch(pilih){
  522.                         case 1:
  523.                             cout<<"0. Kembali"<<endl;
  524.                             cout<<"---------------------------------------------------------------------------------------------------------------"<<endl;
  525.                             cout<<"|"<<" No "<<"|"<<"   No TNKB   "<<"|"<<"   Nama Konsumen   "<<"|"
  526.                             <<"       Alamat       "<<"|"<<"    Nama Driver    "<<"|"<<"  Mulai Sewa  "<<"|"<<" Pengembalian "<<"|"<<endl;
  527.                             cout<<"---------------------------------------------------------------------------------------------------------------"<<endl;
  528.                            
  529.                             printPenyewaan(Penyewaan,no);
  530.                             cout<<"---------------------------------------------------------------------------------------------------------------"<<endl;
  531.                             cin>>pilih;
  532.                             system("cls");
  533.  
  534.                             break;
  535.                         case 2:
  536.                             if(!isEmpty(konsumen)){
  537.                                 do{
  538.                                     string ulang;
  539.                                     ulang:
  540.                                     nama = getNama(konsumen);
  541.                                     cout<<"Silahkan Saudara "<<nama<<" memilih mobil yang akan disewa"<<endl;
  542.                                     cout<<"------------------------------------------------------------------------"<<endl;
  543.                                     cout<<"| No |"<<"   No TNKB  |"<<"       MERK      |"<<"    WARNA   |"<<"  TAHUN  |"
  544.                                     <<"   BIAYA   |"<<endl;
  545.                                     cout<<"------------------------------------------------------------------------"<<endl;
  546.                                     availableMobil(mobil,no);
  547.                                     cout<<"------------------------------------------------------------------------"<<endl;
  548.                                    
  549.                                     cout<<"Pilih mobil : ";
  550.                                     cin>>select;
  551.  
  552.                                     cout<<"Dengan Driver [y/N] : ";
  553.                                     cin>>opsi;
  554.                                    
  555.                                     cout<<"Tanggal Sewa [dd-mm-yyyy]\t: ";
  556.                                     cin>>sewa.Tanggal>>sewa.Bulan>>sewa.Tahun;
  557.                                     sewa.Tanggal = abs(sewa.Tanggal);
  558.                                     sewa.Bulan = abs(sewa.Bulan);
  559.                                     sewa.Tahun = abs(sewa.Tahun);
  560.  
  561.                                     cout<<"Tanggal Kembali [dd-mm-yyyy]\t: ";
  562.                                     cin>>kembali.Tanggal>>kembali.Bulan>>kembali.Tahun;
  563.                                     //getRealNumber
  564.                                     kembali.Tanggal = abs(kembali.Tanggal);
  565.                                     kembali.Bulan = abs(kembali.Bulan);
  566.                                     kembali.Tahun = abs(kembali.Tahun);
  567.  
  568.                                     if(kembali.Tanggal - sewa.Tanggal >=1 && kembali.Bulan - sewa.Bulan >=0
  569.                                         && kembali.Tahun - sewa.Tahun >=0){
  570.                                         if(opsi == 'Y' || opsi == 'y')
  571.                                             Task(&Driver,&nama_driver);
  572.                                         else
  573.                                             nama_driver = "";
  574.  
  575.  
  576.                                         Rent(mobil,tnkb,biayasewa,select,no);//Update status mobil
  577.                                         delKonsumen(&konsumen,&nama,&alamat);//getData Konsumen
  578.  
  579.                                         Data_Pinjam = Alokasi(nama,alamat,tnkb,nama_driver,sewa,kembali);
  580.                                         addPenyewaan(Penyewaan,Data_Pinjam);
  581.  
  582.                                     }else{
  583.                                         cout<<"Sewa minimal 1 hari"<<endl;                                     
  584.                                     }
  585.                                     cout<<"ulangi transaksi [y/N]: ";
  586.                                     cin>>opsi;
  587.                                     if(opsi == 'Y' || opsi == 'y'){
  588.                                         system("cls");
  589.                                         goto ulang;
  590.                                        
  591.                                     }else
  592.                                         system("cls");
  593.                                         break;
  594.  
  595.                                 }while(opsi != 'N' || opsi == 'n');
  596.  
  597.                             }else{
  598.                                 cout<<"Belum ada data konsumen yang tersimpan"<<endl;
  599.                             }
  600.  
  601.                             break;
  602.                         case 9:
  603.                             break;
  604.                         case 0:
  605.                             break;
  606.                         default:
  607.                             cout<<"Menu yang anda pilih tidak tersedia"<<endl;
  608.                     }
  609.                 }while(pilih!=9);
  610.  
  611.                 break;
  612.             case 5:
  613.                 do{
  614.                     cout<<"------------------------------------------------------"<<endl;
  615.                     cout<<"\t\t\"TRANSAKSI  PEMBAYARAN\""<<endl;
  616.                     cout<<"------------------------------------------------------"<<endl;
  617.                     cout<<" 1. Tampilkan Data Pembayaran"<<endl;
  618.                     cout<<" 2. Transaksi Pembayaran"<<endl;
  619.                     cout<<" 9. Kembali"<<endl;
  620.                     cout<<"------------------------------------------------------"<<endl;
  621.                     cout<<"Pilih Menu : ";
  622.                     cin.clear();
  623.                     cin>>pilih;
  624.                     if(cin.fail()){
  625.                         cout<<"menu yang anda masukkan salah"<<endl;
  626.                         cout<<"Ulang pilih menu [y/N] : ";
  627.                         cin.clear();
  628.                         cin.ignore();
  629.                         cin>>begin;
  630.                         if(begin=="y" || begin == "Y"){
  631.                             system("cls");
  632.                             pilih = 0;
  633.                         }else{
  634.                             pilih = 9;
  635.                         }
  636.                        
  637.                     }
  638.                     system("cls");
  639.                     switch(pilih){
  640.                         case 1:
  641.                             cout<<"0. Kembali"<<endl;
  642.                             cout<<"-----------------------------------------------------------------------------------------------------------------------------------------"<<endl;
  643.                             cout<<"|"<<" No "<<"|"<<"   No TNKB   "<<"|"<<"   Nama Konsumen   "<<"|"
  644.                             <<"       Alamat       "<<"|"<<"    Nama Driver    "<<"|"<<"  Mulai Sewa  "
  645.                             <<"|"<<"  Pembayaran  "<<"|"<<"   Denda   "<<"|"<<" Total Bayar "<<"|"<<endl;
  646.                             cout<<"-----------------------------------------------------------------------------------------------------------------------------------------"<<endl;
  647.                            
  648.                             printPembayaran(Bayar_sewa,no);
  649.                             cout<<"-----------------------------------------------------------------------------------------------------------------------------------------"<<endl;
  650.                             cin>>pilih;
  651.                             system("cls");
  652.  
  653.                             break;
  654.                         case 2:
  655.                             cout<<"---------------------------------------------------------------------------------------------------------------"<<endl;
  656.                             cout<<"|"<<" No "<<"|"<<"   No TNKB   "<<"|"<<"   Nama Konsumen   "<<"|"
  657.                             <<"       Alamat       "<<"|"<<"    Nama Driver    "<<"|"<<"  Mulai Sewa  "<<"|"<<" Pengembalian "<<"|"<<endl;
  658.                             cout<<"---------------------------------------------------------------------------------------------------------------"<<endl;
  659.                            
  660.                             printPenyewaan(Penyewaan,no);
  661.                             cout<<"---------------------------------------------------------------------------------------------------------------"<<endl;
  662.                             cout<<"Pilih Transaksi : ";
  663.                             cin>>select;
  664.                             cout<<"Masukkan Tanggal [dd-mm-yyyy] : ";
  665.                             cin>>bayar.Tanggal>>bayar.Bulan>>bayar.Tahun;
  666.                             delTransaksi(Penyewaan,&nama,&alamat,&tnkb,&sewa,&kembali,&nama_driver,select,no);
  667.                            
  668.                             //change to available
  669.                             inisialisasiMobil(mobil,tnkb);
  670.                             inisialisasiDriver(&Driver,nama_driver);
  671.  
  672.                             //getRealNumber
  673.                             bayar.Tanggal = abs(bayar.Tanggal);
  674.                             bayar.Bulan = abs(bayar.Bulan);
  675.                             bayar.Tahun = abs(bayar.Tahun);
  676.                            
  677.                             biayasewa = getBiaya(mobil,tnkb);
  678.                             bayarSewa(nama_driver,kembali,bayar,sewa,biayasewa,denda,totbiaya);
  679.                             Data_Pembayaran = Alokasi(nama,alamat,tnkb,nama_driver,sewa,bayar,denda,totbiaya);
  680.  
  681.                             addPembayaran(Bayar_sewa,Data_Pembayaran);
  682.                             system("cls");
  683.  
  684.                             break;
  685.                         case 9:
  686.                             break;
  687.                         case 0:
  688.                             break;
  689.                         default:
  690.                             cout<<"Menu yang anda pilih tidak tersedia"<<endl;
  691.                     }
  692.                 }while(pilih!=9);
  693.  
  694.                 break;
  695.             case 9:
  696.                 //jika inputan salah
  697.                 break;
  698.             case 0:
  699.                 cout<<"Back with darkness"<<endl;
  700.                 break;
  701.             default:
  702.                 cout<<"Menu yang anda pilih tidak tersedia"<<endl;
  703.         }
  704.     }while(pilih != 0);
  705.    
  706.     return 0;
  707. }
  708.  
  709. void CreateEmpty(List &L){
  710.     L = NULL;  
  711. }
  712.  
  713. bool IsEmpty(List L){
  714.     return (L == NULL);
  715. }
  716.  
  717. bool IsOneElement(List L){
  718.     return (IsEmpty(L->Next));
  719. }
  720.  
  721. bool isRent(List L){
  722.     return (L->sewa == 1);
  723. }
  724.  
  725. void insertFirst(List &L,address P){
  726.     P->Next = L;
  727.     L = P;
  728. }
  729.  
  730. void insertAfter(List &L,address Prec,address P){
  731.     P->Next = Prec->Next;
  732.     Prec->Next = P;
  733. }
  734.  
  735. address alokasi(infotype tnkb,infotype merk,infotype warna,infotype tahun,int biaya){
  736.     address P = new(Mobil);
  737.  
  738.     if(P == NULL)
  739.         return NULL;
  740.     else{
  741.         P->NoTNKB = tnkb;
  742.         P->Merk = merk;
  743.         P->Warna = warna;
  744.         P->Tahun = tahun;
  745.         P->biayaSewa = biaya;
  746.         P->sewa = 0;
  747.         P->Next = NULL;
  748.         return P;
  749.     }
  750. }
  751.  
  752. void addMobil(List &L,address P){
  753.     if(IsEmpty(L)){
  754.         insertFirst(L,P);
  755.     }else if(IsOneElement(L)){
  756.         insertAfter(L,L,P);
  757.     }else{
  758.         addMobil(L->Next,P);
  759.     }  
  760. }
  761.  
  762. void delFirst(List &L){
  763.     address P;
  764.     P = L;
  765.     L = L->Next;
  766.     delete(P);
  767. }
  768.  
  769. void delMobil(List &L,int select,int no){
  770.     if(!IsEmpty(L)){
  771.         no++;
  772.         if(no == select)
  773.             delFirst(L);
  774.         else
  775.             delMobil(L->Next,select,no);
  776.     }else{}
  777. }
  778.  
  779. void updateTarif(List &L,int biaya,int select,int no){
  780.     if(!IsEmpty(L)){
  781.         no++;
  782.         if(no == select)
  783.             L->biayaSewa = biaya;
  784.         else
  785.             updateTarif(L->Next,biaya,select,no);
  786.     }else{}
  787. }
  788.  
  789. void Rent(List &L,infotype &tnkb,int &biayasewa,pos pilih,int no){
  790.     if(!IsEmpty(L)){
  791.         no++;
  792.         if(no==pilih){
  793.             L->sewa = 1;
  794.             tnkb = L->NoTNKB;
  795.             biayasewa = L->biayaSewa;
  796.         }else
  797.             Rent(L->Next,tnkb,biayasewa,pilih,no);
  798.     }
  799. }
  800.  
  801. void printMobil(List L,int no){
  802.     if(IsEmpty(L)){
  803.         // cout<<"-----------------------------------------------------------------------------------------"<<endl;
  804.     }else{
  805.         no++;
  806.         cout<<"|"<<setw(4)<<no<<"|"<<setw(12)<<L->NoTNKB<<"|"<<setw(17)<<L->Merk<<"|"<<setw(12)<<L->Warna<<"|"
  807.         <<setw(9)<<L->Tahun<<"|"<<setw(11)<<L->biayaSewa<<"|";
  808.         if(L->sewa==0)
  809.             cout<<setw(17)<<"TERSEDIA|"<<endl;
  810.         else
  811.             cout<<setw(17)<<"DISEWAKAN|"<<endl;
  812.         printMobil(L->Next,no);
  813.     }
  814. }
  815.  
  816. void availableMobil(List L,int no){
  817.     if(IsEmpty(L)){
  818.         // cout<<"-----------------------------------------------------------------------------------------"<<endl;
  819.     }else{
  820.         if(L->sewa == 0){
  821.             no++;
  822.             cout<<"|"<<setw(4)<<no<<"|"<<setw(12)<<L->NoTNKB<<"|"<<setw(17)<<L->Merk<<"|"<<setw(12)<<L->Warna<<"|"
  823.             <<setw(9)<<L->Tahun<<"|"<<setw(11)<<L->biayaSewa<<"|"<<endl;       
  824.         }else{}
  825.  
  826.         availableMobil(L->Next,no);
  827.     }
  828. }
  829.  
  830. void inisialisasiMobil(List &L,infotype tnkb){
  831.     if(IsEmpty(L)){
  832.  
  833.     }else{
  834.         if(L->NoTNKB == tnkb)
  835.             L->sewa = 0;
  836.         inisialisasiMobil(L->Next,tnkb);
  837.     }
  838. }
  839.  
  840.  
  841. //Driver
  842. void CreateEmpty(driver *D){
  843.     (*D).Head = (*D).Tail = -1;
  844. }
  845.  
  846. bool isEmpty(driver D){
  847.     return (D.Head == -1 && D.Tail == -1);
  848. }
  849.  
  850. bool isFull(driver D){
  851.     return (D.Head < D.Tail && D.Tail - D.Head == DRIVER-1||
  852.         D.Head > D.Tail && D.Head - D.Tail == 1);
  853. }
  854.  
  855. bool isOneElement(driver D){
  856.     return (D.Head == D.Tail && D.Head != -1);
  857. }
  858.  
  859. bool isTask(driver D){
  860.     return (D.service[D.Head] == 1);
  861. }
  862.  
  863. void addDriver(driver *D,infotype ktp,infotype nama,infotype alamat,infotype usia){
  864.     if(!isFull(*D)){
  865.         if(isEmpty(*D)){ //jika masih kosong
  866.             (*D).Head = (*D).Tail = 0;
  867.             (*D).noKTP[(*D).Head] = ktp;
  868.             (*D).Nama[(*D).Head] = nama;
  869.             (*D).Alamat[(*D).Head] = alamat;
  870.             (*D).Usia[(*D).Head] = usia;
  871.             (*D).service[(*D).Head] = 0;
  872.         }else{
  873.             if((*D).Tail == DRIVER-1){ //jika sirkuler
  874.                 (*D).Tail = 0;
  875.             }else{
  876.                 (*D).Tail++;
  877.             }
  878.             //pengisian
  879.             (*D).noKTP[(*D).Tail] = ktp;
  880.             (*D).Nama[(*D).Tail] = nama;
  881.             (*D).Alamat[(*D).Tail] = alamat;
  882.             (*D).Usia[(*D).Tail] = usia;
  883.             (*D).service[(*D).Tail] = 0;
  884.         }
  885.     }
  886. }
  887.  
  888. void updateDriver(driver *D,infotype update,pos select){
  889.     int element = 0;
  890.     if((*D).Head <= (*D).Tail)
  891.         (*D).Usia[(*D).Head + select - 1] = update;
  892.     else{ //sirkuler
  893.         //count element head to MAX element
  894.         for(pos i = (*D).Head; i <= DRIVER-1;i++)
  895.             element++;
  896.  
  897.         if(select<=element)
  898.             (*D).Usia[(*D).Head + select - 1] = update;
  899.         else
  900.             (*D).Usia[element - select - 1] = update;
  901.     }
  902. }
  903.  
  904. void delDriver(driver *D,pos select){
  905.     int element = 0;
  906.  
  907.     if(select>=1 && select<=DRIVER){
  908.         if((*D).Head <= (*D).Tail){
  909.             for(pos i = (*D).Head+select-1; i < (*D).Tail;i++){
  910.                 (*D).Nama[i] = (*D).Nama[i+1];
  911.                 (*D).noKTP[i] = (*D).noKTP[i+1];
  912.                 (*D).Alamat[i] = (*D).Alamat[i+1];
  913.                 (*D).Usia[i] = (*D).Usia[i+1];
  914.                 (*D).service[i] = (*D).service[i+1];
  915.             }
  916.             (*D).Tail--;
  917.  
  918.         }else{
  919.  
  920.             for(pos i = (*D).Head; i <= DRIVER-1;i++)
  921.                 element++;
  922.  
  923.             if(select<=element){ //jika masih normal
  924.                 for(pos i = (*D).Head; i < DRIVER-1;i++){
  925.                     (*D).Nama[i] = (*D).Nama[i+1];
  926.                     (*D).noKTP[i] = (*D).noKTP[i+1];
  927.                     (*D).Alamat[i] = (*D).Alamat[i+1];
  928.                     (*D).Usia[i] = (*D).Usia[i+1];
  929.                     (*D).service[i] = (*D).service[i+1];
  930.                 }
  931.  
  932.                 for(pos i = 0; i < (*D).Tail;i++){
  933.                     (*D).Nama[i] = (*D).Nama[i+1];
  934.                     (*D).noKTP[i] = (*D).noKTP[i+1];
  935.                     (*D).Alamat[i] = (*D).Alamat[i+1];
  936.                     (*D).Usia[i] = (*D).Usia[i+1];
  937.                     (*D).service[i] = (*D).service[i+1];
  938.                 }
  939.                 (*D).Tail--;
  940.  
  941.             }else{//sirkuler
  942.  
  943.                 if((*D).Tail == 0)
  944.                     (*D).Tail = DRIVER-1;
  945.  
  946.                 else{
  947.                     for(pos i = element - select-1; i < (*D).Tail;i++){
  948.                         (*D).Nama[i] = (*D).Nama[i+1];
  949.                         (*D).noKTP[i] = (*D).noKTP[i+1];
  950.                         (*D).Alamat[i] = (*D).Alamat[i+1];
  951.                         (*D).Usia[i] = (*D).Usia[i+1];
  952.                         (*D).service[i] = (*D).service[i+1];
  953.                     }
  954.                     (*D).Tail--;
  955.                 }
  956.             }
  957.         }
  958.     }else{
  959.         cout<<"Pilihan yang anda masukkan tidak tersedia"<<endl;
  960.     }
  961. }
  962.  
  963. void Task(driver *D,infotype *nama){
  964.     driver temp;
  965.     if(!isEmpty(*D)){
  966.         *nama = (*D).Nama[(*D).Head];
  967.         (*D).service[(*D).Head] = 1;
  968.         temp = *D;
  969.  
  970.         (*D).Head++;
  971.         if(++(*D).Tail == MAX)
  972.             (*D).Tail = 0;
  973.         else
  974.             (*D).Tail;
  975.  
  976.         (*D).noKTP[(*D).Tail] = temp.noKTP[temp.Head];
  977.         (*D).Nama[(*D).Tail] = temp.Nama[temp.Head];
  978.         (*D).Alamat[(*D).Tail] = temp.Alamat[temp.Head];
  979.         (*D).Usia[(*D).Tail] = temp.Usia[temp.Head];
  980.         (*D).service[(*D).Tail] = temp.service[temp.Head];
  981.  
  982.     }else{
  983.         cout<<"Belum ada data yang tersimpan"<<endl;
  984.     }
  985. }
  986.  
  987. void printDriver(driver D){
  988.     pos no = 0;
  989.     if(isEmpty(D)){
  990.         cout<<"Belum ada data driver yang tersimpan"<<endl;
  991.     }else{
  992.         cout<<"-----------------------------------------------------------------------------------------------------------------"<<endl;
  993.         cout<<"|No |"<<"\t No KTP \t|"<<"\tNama Driver\t|"<<"\t\tAlamat\t\t|"<<"\tUsia\t|"<<"\tStatus\t|"<<endl;
  994.         cout<<"-----------------------------------------------------------------------------------------------------------------"<<endl;
  995.         if(D.Head <= D.Tail){
  996.             for(pos i = D.Head; i <= D.Tail;i++){
  997.                 no++;
  998.                 cout<<"|"<<setw(3)<<no<<"|"<<setw(19)<<D.noKTP[i]<<"|"<<setw(23)<<D.Nama[i]<<"|"
  999.                 <<setw(31)<<D.Alamat[i]<<"|"<<setw(9)<<D.Usia[i]<<" Tahun|";
  1000.                 if(D.service[i]==0)
  1001.                     cout<<setw(16)<<"Tersedia |"<<endl;
  1002.                 else
  1003.                     cout<<setw(16)<<"Bertugas |"<<endl;
  1004.             }
  1005.         }else{ //sirkuler
  1006.             for(pos i = D.Head; i <= DRIVER-1;i++){
  1007.                 no++;
  1008.                 cout<<"|"<<setw(3)<<no<<"|"<<setw(19)<<D.noKTP[i]<<"|"<<setw(23)<<D.Nama[i]<<"|"
  1009.                 <<setw(31)<<D.Alamat[i]<<"|"<<setw(9)<<D.Usia[i]<<" Tahun|";
  1010.                 if(D.service[i]==0)
  1011.                     cout<<setw(16)<<"Tersedia |"<<endl;
  1012.                 else
  1013.                     cout<<setw(16)<<"Bertugas |"<<endl;
  1014.             }
  1015.  
  1016.             for(pos i = 0; i <= D.Tail;i++){
  1017.                 no++;
  1018.                 cout<<"|"<<setw(3)<<no<<"|"<<setw(19)<<D.noKTP[i]<<"|"<<setw(23)<<D.Nama[i]<<"|"
  1019.                 <<setw(31)<<D.Alamat[i]<<"|"<<setw(9)<<D.Usia[i]<<" Tahun|";
  1020.                 if(D.service[i]==0)
  1021.                     cout<<setw(17)<<"Tersedia |"<<endl;
  1022.                 else
  1023.                     cout<<setw(17)<<"Bertugas |"<<endl;
  1024.             }
  1025.         }
  1026.         cout<<"-----------------------------------------------------------------------------------------------------------------"<<endl;
  1027.     }
  1028. }
  1029.  
  1030. void inisialisasiDriver(driver *D,infotype nama){
  1031.     if(isEmpty(*D)){
  1032.  
  1033.     }else{
  1034.         if((*D).Head <= (*D).Tail){
  1035.             for(pos i = (*D).Head; i <= (*D).Tail;i++){
  1036.                 if((*D).Nama[i] == nama){
  1037.                     (*D).service[i] = 0;
  1038.                     break;
  1039.                 }
  1040.             }
  1041.         }else{
  1042.             for(pos i = (*D).Head; i <= DRIVER-1;i++){
  1043.                 if((*D).Nama[i] == nama){
  1044.                     (*D).service[i] = 0;
  1045.                     break;
  1046.                 }
  1047.             }
  1048.  
  1049.             for(pos i = 0; i <= (*D).Tail;i++){
  1050.                 if((*D).Nama[i] == nama){
  1051.                     (*D).service[i] = 0;
  1052.                     break;
  1053.                 }
  1054.             }
  1055.         }
  1056.     }
  1057. }
  1058.  
  1059.  
  1060. //Konsumen
  1061. void CreateEmpty(Konsumen *K){
  1062.     (*K).Head = (*K). Tail = -1;
  1063. }
  1064.  
  1065. bool isEmpty(Konsumen K){
  1066.     return (K.Head == -1 && K.Tail == -1);
  1067. }
  1068.  
  1069. bool isFull(Konsumen K){
  1070.     return (K.Head < K.Tail && K.Tail - K.Head == MAX-1 ||
  1071.         K.Head > K.Tail && K.Head - K.Tail ==1);
  1072. }
  1073.  
  1074. bool isOneElement(Konsumen K){
  1075.     return (K.Head == K.Tail && K.Head != -1);
  1076. }
  1077.  
  1078. void addKonsumen(Konsumen *K,infotype ktp,infotype nama,infotype alamat){
  1079.     if(!isFull(*K)){
  1080.         if(isEmpty(*K)){ //jika masih kosong
  1081.             (*K).Head = (*K).Tail = 0;
  1082.             (*K).noKTP[(*K).Head] = ktp;
  1083.             (*K).Nama[(*K).Head] = nama;
  1084.             (*K).Alamat[(*K).Head] = alamat;
  1085.         }else{
  1086.             if((*K).Tail == MAX-1){ //jika sirkuler
  1087.                 (*K).Tail = 0;
  1088.             }else{
  1089.                 (*K).Tail++;
  1090.             }
  1091.             //pengisian
  1092.             (*K).noKTP[(*K).Tail] = ktp;
  1093.             (*K).Nama[(*K).Tail] = nama;
  1094.             (*K).Alamat[(*K).Tail] = alamat;
  1095.         }
  1096.     }else
  1097.         cout<<"Data Konsumen Yang Akan Menyewa Penuh"<<endl;   
  1098. }
  1099.  
  1100. void printKonsumen(Konsumen K){
  1101.     pos no = 0;
  1102.     if(isEmpty(K)){
  1103.         cout<<"Belum ada data konsumen yang tersimpan"<<endl;
  1104.     }else{
  1105.         cout<<"---------------------------------------------------------------------------------"<<endl;
  1106.         cout<<"|"<<" No |"<<"\t  No KTP  \t|"<<"\tNama Konsumen\t|"<<"\t\tAlamat\t\t|"<<endl;
  1107.         cout<<"---------------------------------------------------------------------------------"<<endl;
  1108.        
  1109.         if(K.Head <= K.Tail){
  1110.             for(pos i = K.Head; i <= K.Tail;i++){
  1111.                 no++;
  1112.                 cout<<"|"<<setw(4)<<no<<"|"<<setw(18)<<K.noKTP[i]<<"|"<<setw(23)<<K.Nama[i]
  1113.                 <<"|"<<setw(31)<<K.Alamat[i]<<"|"<<endl;
  1114.             }
  1115.         }else{ //sirkuler
  1116.             for(pos i = K.Head; i <= MAX-1;i++){
  1117.                 no++;
  1118.                 cout<<"|"<<setw(4)<<no<<"|"<<setw(18)<<K.noKTP[i]<<"|"<<setw(23)<<K.Nama[i]
  1119.                 <<"|"<<setw(31)<<K.Alamat[i]<<"|"<<endl;
  1120.             }
  1121.  
  1122.             for(pos i = 0; i <= K.Tail;i++){
  1123.                 no++;
  1124.                 cout<<"|"<<setw(4)<<no<<"|"<<setw(18)<<K.noKTP[i]<<"|"<<setw(23)<<K.Nama[i]
  1125.                 <<"|"<<setw(31)<<K.Alamat[i]<<"|"<<endl;
  1126.             }
  1127.         }
  1128.         cout<<"---------------------------------------------------------------------------------"<<endl;
  1129.        
  1130.     }  
  1131. }
  1132.  
  1133. void delKonsumen(Konsumen *K,pos select){
  1134.     int element = 0;
  1135.  
  1136.     if(select>=1 && select<=MAX){
  1137.         if((*K).Head <= (*K).Tail){
  1138.             for(pos i = (*K).Head+select-1; i < (*K).Tail;i++){
  1139.                 (*K).Nama[i] = (*K).Nama[i+1];
  1140.                 (*K).noKTP[i] = (*K).noKTP[i+1];
  1141.                 (*K).Alamat[i] = (*K).Alamat[i+1];
  1142.  
  1143.             }
  1144.             (*K).Tail--;
  1145.  
  1146.         }else{
  1147.  
  1148.             for(pos i = (*K).Head; i <= MAX-1;i++)
  1149.                 element++;
  1150.  
  1151.             if(select<=element){ //jika masih normal
  1152.                 for(pos i = (*K).Head; i < MAX-1;i++){
  1153.                     (*K).Nama[i] = (*K).Nama[i+1];
  1154.                     (*K).noKTP[i] = (*K).noKTP[i+1];
  1155.                     (*K).Alamat[i] = (*K).Alamat[i+1];
  1156.                 }
  1157.  
  1158.                 for(pos i = 0; i < (*K).Tail;i++){
  1159.                     (*K).Nama[i] = (*K).Nama[i+1];
  1160.                     (*K).noKTP[i] = (*K).noKTP[i+1];
  1161.                     (*K).Alamat[i] = (*K).Alamat[i+1];
  1162.                 }
  1163.                 (*K).Tail--;
  1164.  
  1165.             }else{//sirkuler
  1166.  
  1167.                 if((*K).Tail == 0)
  1168.                     (*K).Tail = DRIVER-1;
  1169.  
  1170.                 else{
  1171.                     for(pos i = element - select-1; i < (*K).Tail;i++){
  1172.                         (*K).Nama[i] = (*K).Nama[i+1];
  1173.                         (*K).noKTP[i] = (*K).noKTP[i+1];
  1174.                         (*K).Alamat[i] = (*K).Alamat[i+1];
  1175.                     }
  1176.                     (*K).Tail--;
  1177.                 }
  1178.             }
  1179.         }
  1180.     }else{
  1181.         cout<<"Pilihan yang anda masukkan tidak tersedia"<<endl;
  1182.     }
  1183. }
  1184.  
  1185. void delKonsumen(Konsumen *K,infotype *nama,infotype *alamat){
  1186.     if(isEmpty(*K))
  1187.         cout<<"Belum ada data konsumen yang tersimpan"<<endl;
  1188.     else{
  1189.         *nama = (*K).Nama[(*K).Head];
  1190.         *alamat = (*K).Alamat[(*K).Head];
  1191.         if(isOneElement(*K))
  1192.             CreateEmpty(&(*K));
  1193.         else{
  1194.             if((*K).Head == MAX-1)
  1195.                 (*K).Head = 0;
  1196.             else
  1197.                 (*K).Head++;
  1198.         }
  1199.            
  1200.     }
  1201. }
  1202.  
  1203.  
  1204. //transaksi
  1205. void CreateEmpty(Transaksi &T){
  1206.     T = NULL;
  1207. }
  1208.  
  1209. bool IsEmpty(Transaksi T){
  1210.     return (T==NULL);
  1211. }
  1212.  
  1213. bool IsOneElement(Transaksi T){
  1214.     return(IsEmpty(T->Next));
  1215. }
  1216.  
  1217. void insertFirst(Transaksi &T,ID_Transaksi P){
  1218.     P->Next = T;
  1219.     T = P;
  1220. }
  1221.  
  1222. void insertAfter(Transaksi &T,ID_Transaksi sblm,ID_Transaksi P){
  1223.     P->Next = sblm->Next;
  1224.     sblm->Next = P;
  1225. }
  1226.  
  1227. infotype getNama(Konsumen K){
  1228.     return(K.Nama[K.Head]);
  1229. }
  1230.  
  1231. ID_Transaksi Alokasi(infotype nama_Konsumen,infotype alamat,infotype tnkb,infotype nama_Driver,Date sewa,Date kembali){
  1232.     ID_Transaksi P = new(transaksi);
  1233.  
  1234.     if(P == NULL)
  1235.         return NULL;
  1236.     else{
  1237.         P->Nama_Konsumen = nama_Konsumen;
  1238.         P->Alamat  = alamat;
  1239.         P->NoTNKB = tnkb;
  1240.         P->Nama_Driver = nama_Driver;
  1241.         P->Sewa.Tanggal = sewa.Tanggal;
  1242.         P->Sewa.Bulan = sewa.Bulan;
  1243.         P->Sewa.Tahun = sewa.Tahun;
  1244.         P->Kembali.Tanggal = kembali.Tanggal;
  1245.         P->Kembali.Bulan = kembali.Bulan;
  1246.         P->Kembali.Tahun = kembali.Tahun;
  1247.         P->Next = NULL;
  1248.     }
  1249.     return P;
  1250. }
  1251.  
  1252. void addPenyewaan(Transaksi &T,ID_Transaksi P){
  1253.     ID_Transaksi temp = T;
  1254.     if(IsEmpty(T))
  1255.         insertFirst(T,P);
  1256.     else if(IsOneElement(T))
  1257.         insertAfter(T,T,P);
  1258.     else
  1259.         addPenyewaan(T->Next,P);
  1260. }
  1261.  
  1262. void printPenyewaan(Transaksi T,int no){
  1263.     if(IsEmpty(T)){
  1264.  
  1265.     }else{
  1266.         no++;
  1267.         cout<<"|"<<setw(4)<<no<<"|"<<setw(13)<<T->NoTNKB<<"|"<<setw(19)<<T->Nama_Konsumen<<"|"<<setw(20)
  1268.         <<T->Alamat<<"|"<<setw(19)<<T->Nama_Driver<<"|"<<setw(6)<<T->Sewa.Tanggal<<"-"<<T->Sewa.Bulan
  1269.         <<"-"<<T->Sewa.Tahun<<"|"<<setw(6)<<T->Kembali.Tanggal<<"-"<<T->Kembali.Bulan
  1270.         <<"-"<<T->Kembali.Tahun<<"|"<<endl;
  1271.  
  1272.         printPenyewaan(T->Next,no);
  1273.     }
  1274. }
  1275.  
  1276.  
  1277. //pembayaran
  1278. void CreateEmpty(pembayaran &B){
  1279.     B = NULL;
  1280. }
  1281.  
  1282. bool IsEmpty(pembayaran T){
  1283.     return (T == NULL);
  1284. }
  1285.  
  1286. bool IsOneElement(pembayaran T){
  1287.     return (IsEmpty(T->Next));
  1288. }
  1289.  
  1290. int getBiaya(List &L,infotype tnkb){
  1291.     int biaya = 0;
  1292.     if(L->NoTNKB==tnkb)
  1293.         biaya = L->biayaSewa;
  1294.     else
  1295.         getBiaya(L->Next,tnkb);
  1296.  
  1297.     return biaya;
  1298. }
  1299.  
  1300. int hitungBayar(int denda,int sewa,int biaya){
  1301.     int totbayar = 0;
  1302.     totbayar = (biaya * sewa) + denda;
  1303.     return totbayar;
  1304. }
  1305.  
  1306. ID_Pembayaran Alokasi(infotype nama,infotype alamat,
  1307.     infotype tnkb,infotype nama_driver,Date sewa,Date bayar,int denda,int totbiaya){
  1308.    
  1309.     ID_Pembayaran P = new (Pembayaran);
  1310.  
  1311.     if(P == NULL)
  1312.         return NULL;
  1313.     else{
  1314.         P->Nama_Konsumen = nama;
  1315.         P->Alamat = alamat;
  1316.         P->NoTNKB = tnkb;
  1317.         P->Nama_Driver = nama_driver;
  1318.         P->Sewa = sewa;
  1319.         P->Bayar = bayar;
  1320.         P->Denda = denda;
  1321.         P->totBiaya = totbiaya;
  1322.         P->Next = NULL;
  1323.     }
  1324.     return P;  
  1325. }
  1326.  
  1327. void insertFirst(pembayaran &B,ID_Pembayaran P){
  1328.     P->Next = B;
  1329.     B = P;
  1330. }
  1331.  
  1332. void insertAfter(pembayaran &B,ID_Pembayaran Prec,ID_Pembayaran P){
  1333.     P->Next = Prec->Next;
  1334.     Prec->Next = P;
  1335. }
  1336.  
  1337. void addPembayaran(pembayaran &B,ID_Pembayaran P){
  1338.     if(IsEmpty(B))
  1339.         insertFirst(B,P);
  1340.     else if(IsOneElement(B))
  1341.         insertAfter(B,B,P);
  1342.     else
  1343.         addPembayaran(B->Next,P);
  1344. }
  1345.  
  1346.  
  1347. void printPembayaran(pembayaran T,int no){
  1348.     if(IsEmpty(T)){
  1349.  
  1350.     }else{ 
  1351.             no++;
  1352.             cout<<"|"<<setw(4)<<no<<"|"<<setw(13)<<T->NoTNKB<<"|"<<setw(19)<<T->Nama_Konsumen<<"|"<<setw(20)
  1353.             <<T->Alamat<<"|"<<setw(19)<<T->Nama_Driver<<"|"<<setw(6)<<T->Sewa.Tanggal<<"-"<<T->Sewa.Bulan
  1354.             <<"-"<<T->Sewa.Tahun<<"|"<<setw(6)<<T->Bayar.Tanggal<<"-"<<T->Bayar.Bulan<<"-"
  1355.             <<T->Bayar.Tahun<<"|"<<setw(11)<<T->Denda<<"|"<<setw(13)<<T->totBiaya<<"|"<<endl;
  1356.        
  1357.         printPembayaran(T->Next,no);
  1358.     }
  1359. }
  1360.  
  1361. void delPenyewaan(Transaksi &L){
  1362.     ID_Transaksi P;
  1363.     P = L;
  1364.     L = L->Next;
  1365.     delete(P);
  1366. }
  1367.  
  1368. void delTransaksi(Transaksi &T,infotype *nama_konsumen,infotype *alamat,infotype *tnkb,
  1369.     Date *sewa,Date *kembali,infotype *nama_driver,pos select,int no){
  1370.     if(!IsEmpty(T)){
  1371.         no++;
  1372.         if(no==select){
  1373.             *nama_konsumen = T->Nama_Konsumen;
  1374.             *alamat = T->Alamat;
  1375.             *tnkb = T->NoTNKB;
  1376.             *sewa = T->Sewa;
  1377.             *kembali = T->Kembali;
  1378.             *nama_driver = T->Nama_Driver;
  1379.             delPenyewaan(T);
  1380.         }
  1381.         else
  1382.             delTransaksi(T->Next,nama_konsumen,alamat,tnkb,sewa,kembali,nama_driver,select,no);
  1383.     }
  1384. }
  1385.  
  1386. void bayarSewa(infotype Nama_Driver,Date kembali,Date Bayar,Date Sewa,int biayaSewa,int &totdenda,int &totbayar){
  1387.     int hari = 0;
  1388.     int driver = 200000;
  1389.     int denda = 100000;
  1390.  
  1391.     if(Bayar.Tanggal - kembali.Tanggal >=1)
  1392.         hari = Bayar.Tanggal - kembali.Tanggal;
  1393.     else
  1394.         hari = 0;
  1395.  
  1396.     totdenda = hari * denda;
  1397.    
  1398.     if(Nama_Driver == "")
  1399.         totbayar = hitungBayar(totdenda,kembali.Tanggal - Sewa.Tanggal,biayaSewa);
  1400.     else
  1401.         totbayar = hitungBayar(totdenda,kembali.Tanggal - Sewa.Tanggal,biayaSewa) + driver;
  1402. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement