Advertisement
agusbd

working wt file

Apr 19th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.02 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <iomanip>
  5. #include <string.h>
  6. #include <cstdlib>
  7. #include <ctime>
  8. #include <stdio.h>
  9.  
  10. using namespace std;
  11.  
  12. //objek pelanggan
  13. struct pelanggan{
  14.     string nama;
  15.     int saldo,
  16.         no;
  17.     time_t waktu;
  18.     //constructor pelanggan
  19.     pelanggan(){
  20.       }
  21.     pelanggan(int x,int y){
  22.     no = x;
  23.     saldo =y;
  24.     }
  25.  
  26.     //operator overloading
  27.     bool operator> (pelanggan x){
  28.         return (x.saldo > saldo?true : false);
  29.     }
  30.     bool operator== (int x){
  31.         return (saldo==x ? true : false);
  32.     }
  33. };
  34.  
  35. //vector customer untuk menyiman data utama
  36. //vecto customer_tmp untuk menyimpan data sementara
  37. vector <pelanggan> customer;
  38. vector <pelanggan> customer_tmp;
  39.  
  40. //PROSEDUR DAN FUNGSI
  41. void menu();
  42. void baca_txt_file();
  43. void tulis_txt_file();
  44. void input_member();
  45. void tampil_member(vector <pelanggan>);
  46. void searching();
  47. void cetak_waktu(time_t *x);
  48. int binarySearch(int);
  49. int seqSearch_urut_nonsentinel(int);
  50. int seqSearch_belum_urut_nonsentinel(int);
  51. int seqSearch_urut_sentinel(int);
  52. int seqSearch_belum_urut_sentinel(int);
  53. vector <pelanggan> cari_nama(vector <pelanggan>,string);
  54. vector <pelanggan> pembayaran_terbaru(vector <pelanggan> data );
  55. vector <pelanggan> bubble_sort(vector <pelanggan>);
  56. vector <pelanggan> selection_sort(vector <pelanggan>);
  57.  
  58. int main(){
  59.     baca_txt_file();
  60.     menu();
  61.     tulis_txt_file();
  62.     return 0;
  63. }
  64.  
  65. void menu(){
  66.     char yn = 'y';
  67.     system("cls");
  68.     do{
  69.     cout<<"Selamat Datang"<<endl;
  70.     int pilih;
  71.     char yn;
  72.     cout<<"1. Tampil Semua Pembayaran "<<endl;
  73.     cout<<"2. Input pembayaran"<<endl;
  74.     cout<<"3. Cari Data"<<endl;
  75.     cout<<"4. Urutkan Data"<<endl;
  76.     cout<<"5. keluar"<<endl;
  77.     cout<<"masukan pilihan : ";
  78.     cin>>pilih;
  79.     switch(pilih){
  80.     case 1:
  81.         system("cls");
  82.         tampil_member(customer);
  83.         cout<<"kembali ? <y/n>";cin>>yn;
  84.         if(yn == 'y')
  85.             menu();
  86.         break;
  87.     case 2:
  88.         system("cls");
  89.         input_member();
  90.         cout<<"kembali ? <y/n>";cin>>yn;
  91.         if(yn == 'y')
  92.             menu();
  93.         break;
  94.     case 3:
  95.         system("cls");
  96.         searching();
  97.         cout<<"kembali ? <y/n>";cin>>yn;
  98.         if(yn == 'y')
  99.             menu();
  100.         break;
  101.     case 4:
  102.         system("cls");
  103.         cout<<"1. Urutkan jumlah pembayaran terbanyak (bubble sort)"<<endl;
  104.         cout<<"2. Urutkan jumlah pembayaran (Selection sort )"<<endl;
  105.         cout<<"3. Urutkan waktu pembayaran "<<endl;
  106.         cout<<"pilih";cin>>pilih;
  107.         pilih == 1 ? tampil_member(bubble_sort(customer)) : pilih == 2 ? tampil_member(selection_sort(customer)) : pilih == 3 ? tampil_member(pembayaran_terbaru(customer)) : menu();
  108.         cout<<"kembali ? <y/n>";cin>>yn;
  109.         if(yn == 'y')
  110.             menu();
  111.         break;
  112.     case 5 :
  113.         cout<<"keluar <y/n> ";cin>>yn;
  114.  
  115.         break;
  116.       }
  117.     }
  118.  
  119.     while(yn == 'n');
  120. }
  121. //prosedur untuk input member
  122. void input_member(){
  123.     char yn='y';
  124.     while(yn=='y'){
  125.         pelanggan tmp;
  126.         cout<<"nama pelanggan : ";
  127.         cin>>tmp.nama;
  128.         cout<<"Biaya : ";
  129.         cin>>tmp.saldo;
  130.         time(&tmp.waktu);
  131.         tmp.no = customer.size()+1;
  132.         customer.push_back(tmp);
  133.         cout<<"masukan member lagi ? <y/n>";
  134.         cin>>yn;
  135.         if(yn=='n'){
  136.             break;
  137.         }
  138.     }
  139. }
  140. //prosedur untuk output member
  141. //parameter vector x
  142. void tampil_member(vector <pelanggan> x){
  143.      time_t tmp;
  144.     cout<<"----------------------------------------------------------------------"<<endl;
  145.     cout<<"| NO  |      NAMA       |    biaya   |               WAKTU BAYAR      |"<<endl;
  146.     cout<<"----------------------------------------------------------------------"<<endl;
  147.     for(int i =0; i<x.size(); i++){
  148.            tmp = x[i].waktu;
  149.         cout<<setw(3)<<i+1<<setw(8)<<" ";
  150.         cout<<x[i].nama<<setw(22-x[i].nama.length())<<x[i].saldo<<setw(10)<<" ";
  151.         cetak_waktu(&tmp);
  152.     }
  153.     cout<<"----------------------------------------------------------------------"<<endl;
  154. }
  155.  
  156. void searching(){
  157. int pilih,target;
  158. string nama;
  159. cout<<"Pencarian "<<endl;
  160. cout<<"1. Cari berdasarkan nomor"<<endl;
  161. cout<<"2. Cari berdasarkan nama"<<endl;
  162. cout<<"3. Cari berdasarkan biaya"<<endl;
  163. cout<<"masukan pilihan : ";cin>>pilih;
  164. switch(pilih){
  165. case 1 :
  166.     system("cls");
  167.     cout<<"Pencarian berdasarkan nomor"<<endl;
  168.     cout<<"1. Binary search "<<endl;
  169.     cout<<"2. Sequential terurut non sentinel"<<endl;
  170.     cout<<"3. Sequential terurut sentinel"<<endl;
  171.     cout<<"masukan pilihan ";cin>>pilih;
  172.     cout<<"masukan nomor yang dicari : ";cin>>target;
  173.     switch(pilih){
  174.     case 1 :
  175.         if(binarySearch(target)!=-1){
  176.         customer_tmp.push_back(customer[binarySearch(target)]);
  177.         tampil_member(customer_tmp);
  178.         customer_tmp.erase(customer_tmp.begin());
  179.         }
  180.         else{
  181.             cout<<"data not found";
  182.         }
  183.         break;
  184.     case 2:
  185.         if(seqSearch_urut_nonsentinel(target)!=-1){
  186.         customer_tmp.push_back(customer[seqSearch_urut_nonsentinel(target)]);
  187.         tampil_member(customer_tmp);
  188.         customer_tmp.erase(customer_tmp.begin());
  189.         }
  190.         else{
  191.             cout<<"data not found";
  192.         }
  193.         break;
  194.     case 3 :
  195.         if(seqSearch_urut_sentinel(target)!=-1){
  196.         customer_tmp.push_back(customer[seqSearch_urut_sentinel(target)]);
  197.         tampil_member(customer_tmp);
  198.         customer_tmp.erase(customer_tmp.begin());
  199.         }
  200.         else{
  201.             cout<<"data not found";
  202.         }
  203.         break;
  204.     }
  205.     break;
  206. case 2 :
  207.     system("cls");
  208.     cout<<"Cari berdasarkan nama"<<endl;
  209.     cout<<"masukan nama : ";cin>>nama;
  210.     if (cari_nama(customer_tmp,nama).size() > 0)
  211.     tampil_member(cari_nama(customer_tmp,nama));
  212.     else
  213.     cout<<"not found"<<endl;
  214.     customer_tmp.erase(customer_tmp.begin(),customer_tmp.end());
  215.     break;
  216. case 3:
  217.     system("cls");
  218.     cout<<"Pencarian berdasarkan biaya"<<endl;
  219.     cout<<"1. Sequential tak terurut non sentinel"<<endl;
  220.     cout<<"2. Sequential tak terurut sentinel"<<endl;
  221.     cout<<"masukan pilihan : ";cin>>pilih;
  222.     cout<<"masukan jumlah transaksi yang dicari : ";cin>>target;
  223.     switch(pilih){
  224.  
  225.         case 1 :
  226.         if(seqSearch_belum_urut_nonsentinel(target)!=-1){
  227.         customer_tmp.push_back(customer[seqSearch_belum_urut_nonsentinel(target)]);
  228.         tampil_member(customer_tmp);
  229.         customer_tmp.erase(customer_tmp.begin());
  230.         }
  231.         else{
  232.             cout<<"data not found";
  233.         }
  234.         break;
  235.         case 2 :
  236.  
  237.         if(seqSearch_belum_urut_sentinel(target)!=-1){
  238.         customer_tmp.push_back(customer[seqSearch_belum_urut_sentinel(target)]);
  239.         tampil_member(customer_tmp);
  240.         customer_tmp.erase(customer_tmp.begin());
  241.         }
  242.         else{
  243.             cout<<"data not found";
  244.         }
  245.         break;
  246.     }
  247.     break;
  248.  }
  249. }
  250.  
  251. //fungsi binary search
  252. //return posisi data ditemukan
  253. //return -1 jika data tidak ada
  254. int binarySearch(int target){
  255.     int i=0,awal=0, akhir= customer.size(), tengah;
  256.     bool ketemu;
  257.  
  258.     while(!ketemu & i<=customer.size()){
  259.         tengah = (awal+akhir)/2;
  260.         if(customer[tengah].no == target)
  261.         ketemu = true;
  262.         else
  263.             if(customer[tengah].no>target)
  264.                 akhir = tengah -1;
  265.             else
  266.                 awal = tengah + 1;
  267.     }
  268.     return ( ketemu ? tengah : -1);
  269. };
  270.  
  271.  
  272. int seqSearch_belum_urut_nonsentinel(int target){
  273.     bool ketemu;
  274.     int i;
  275.     for (i =0; i<customer.size();i++){
  276.  
  277.         if(customer[i] == target){
  278.             ketemu = true;
  279.             break;
  280.         }
  281.     }
  282.     return  ( ketemu ? i : -1);
  283.  
  284. }
  285.  
  286. //fungsi sequential search  belum urut sentinel
  287. //return posisi data ditemukan
  288. //return -1 jika data tidak ada
  289. int seqSearch_urut_nonsentinel(int target){
  290.     bool ketemu;
  291.     int i;
  292.     for (i =0; i<customer.size();i++){
  293.         if(customer[i].no == target){
  294.             ketemu = true;
  295.             break;
  296.         }
  297.         if(target<customer[i].no)
  298.             break;
  299.     }
  300.     return  ( ketemu ? i : -1);
  301. }
  302.  
  303. //fungsi urut non sentinel
  304. //return posisi data ditemukan
  305. //return -1 jika data tidak ada
  306. int seqSearch_urut_sentinel(int target){
  307.     pelanggan batas(customer.size()+1,0);
  308.     customer.push_back(batas);
  309.     int i=0;
  310.     for(int i =0;i<customer.size()-1;i++){
  311.         if(customer_tmp[i].no==target)
  312.             break;
  313.         if(customer_tmp[i].no>target)
  314.             break;
  315.     }
  316.     customer.erase(customer.end()-1,customer.end());
  317.     return (i>customer.size() ? -1 : i);
  318. }
  319.  
  320. //fungsi sequential urut sentinel
  321. //return posisi data ditemukan
  322. //return -1 jika data tidak ada
  323.  
  324. int seqSearch_belum_urut_sentinel(int target){
  325.     pelanggan batas(customer.size()+1,0);
  326.     customer_tmp.swap(customer);
  327.     customer_tmp.push_back(batas);
  328.     int i=0;
  329.     for(int i =0;i<customer_tmp.size();i++){
  330.         if(customer_tmp[i].saldo==target)
  331.             break;
  332.     }
  333.     customer_tmp.erase(customer_tmp.begin(),customer_tmp.end());
  334.     return (i<customer_tmp.size()-1 ? i : -1);
  335. }
  336.  
  337. //fungsi sorting sengan bubble sort
  338. //parameter fungsi vector data
  339. //return vector dengan tipe pelanggan terurut ascending
  340. vector <pelanggan> bubble_sort(vector <pelanggan> data ){
  341.     pelanggan x;
  342.     for(int i =0;i < data.size();i++){
  343.         for(int j =0; j < data.size() -1 -i;j++){
  344.         if (data[j]>data[j+1] ){
  345.                 swap(data[j],data[j+1]);
  346.         }
  347.       }
  348.     }
  349.     return data;
  350. }
  351.  
  352. //fungsi sorting sengan selection sort
  353. //parameter fungsi
  354. //return vector dengan tipe pelanggan terurut descending
  355. vector <pelanggan> selection_sort( vector <pelanggan>  data){
  356.     int posisi,i;
  357.     pelanggan tmp;
  358.         for(posisi = 0 ; posisi<data.size();posisi++){
  359.             for( i = posisi + 1; i<data.size(); i++){
  360.                 if(data[posisi]>data[i]){
  361.                     swap(data[posisi],data[posisi+1]);
  362.                 }
  363.             }
  364.         }
  365.             return data;
  366. }
  367.  
  368. //fungsi sorting sengan bubble sort
  369. //parameter fungsi vector data
  370. //return vector dengan tipe pelanggan terurut ascending
  371. vector <pelanggan> cari_nama(vector <pelanggan> data, string nama){
  372.     for(int i =0;i<customer.size();i++){
  373.         if(nama==customer[i].nama){
  374.             data.push_back(customer[i]);
  375.         }
  376.     }
  377.     return data;
  378. };
  379.  
  380. //prosedur untuk membaca data dari txt file
  381. // data disiman ke vector customer
  382. void baca_txt_file(){
  383.     pelanggan tmp;
  384.     ifstream fileku_input;
  385.     fileku_input.open("test.txt");
  386.     if(fileku_input.is_open()&&fileku_input.peek()!=fileku_input.eof()){
  387.         while(!fileku_input.eof()){
  388.             fileku_input>>tmp.no>>tmp.nama>>tmp.saldo>>tmp.waktu;
  389.             customer.push_back(tmp);
  390.         }
  391.         if(customer.size()>0)
  392.             customer.erase(customer.end());
  393.     }
  394.     else{
  395.         cout<<"file tidak dibuka"<<endl;
  396.     }
  397. }
  398.  
  399. //prosedur untuk menulis data ke txt file
  400. // data disiman ke test.txt
  401. void tulis_txt_file(){
  402.     ofstream fileku;
  403.     fileku.open("test.txt");
  404.     if(fileku.is_open()){
  405.         for(int i =0; i<customer.size(); i++){
  406.             fileku<<customer[i].no<<" "<<customer[i].nama<<" "<<customer[i].saldo<<" "<<customer[i].waktu<<endl;
  407.         }
  408.     }
  409.     else{
  410.         cout<<"file tidak dibuka"<<endl;
  411.     }
  412.     fileku.close();
  413. }
  414.  
  415. void cetak_waktu(time_t *x){
  416.  char hasil[70] ;
  417.  struct tm *kuy;
  418.  kuy = localtime(x);
  419.  
  420.  const char hari [][8] = {"Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"};
  421.  printf("%s, %.2d/%.2d/%.2d %.2d:%.2d:%.2d \n", hari[kuy->tm_wday], kuy->tm_mday,
  422.          kuy->tm_mon+1, kuy->tm_year+1900,kuy->tm_hour, kuy->tm_min,kuy->tm_sec);
  423.  
  424. }
  425.  
  426. vector <pelanggan> pembayaran_terbaru(vector <pelanggan> data ){
  427.     pelanggan x;
  428.     for(int i =0;i < data.size();i++){
  429.         for(int j =0; j < data.size() -1 -i;j++){
  430.         if (data[j].waktu<data[j+1].waktu ){
  431.                 swap(data[j],data[j+1]);
  432.         }
  433.       }
  434.     }
  435.     return data;
  436. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement