Advertisement
agusbd

work in codeblocks

Apr 17th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.86 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. struct data{
  6.     int nim,
  7.         nilai;
  8.     string nama;
  9.  
  10.     //remidi nilai 60 kebawah
  11.     bool remidi(){
  12.         return nilai>60;
  13.     }
  14. };
  15.  
  16. vector <data> mahasiswa;
  17. vector <data> mahasiswa_tmp;
  18.  
  19.  
  20. void menu();
  21. void input_data();
  22. void pencarian_data();
  23. int cari_nama_lengkap(string, vector<data>);
  24. void tampil(vector <data>);
  25. vector <data> sorting_nama_ascending(vector <data>);
  26. vector <data> descending_nilai(vector <data> mydata);
  27. vector <data> cari_nama_keyword(string);
  28. vector <data> data_tidak_remidi(vector <data> mydata);
  29. vector <data> data_remidi(vector <data> mydata);
  30.  
  31. int main(){
  32.  
  33. menu();
  34.  
  35. return 0;
  36.  
  37. }
  38.  
  39.  
  40. void input_data(){
  41. int jumlah,i;
  42. cout<<"masukan jumlah : ";cin>>jumlah;
  43. i = jumlah;
  44. data mhs;
  45. while(jumlah--){
  46.     cin.ignore();
  47.     cout<<"ke "<< i -jumlah <<endl;
  48.     cout<<"nama  : ";getline(cin,mhs.nama);
  49.     cout<<"NIM   : ";cin>>mhs.nim;
  50.     cout<<"nilai : ";cin>>mhs.nilai;
  51.     mahasiswa.push_back(mhs);
  52.  }
  53. }
  54.  
  55. void menu(){
  56. char yn='n';
  57. int pilih;
  58. do{
  59. cout<<"1. Input data "<<endl;
  60. cout<<"2. pencarian data"<<endl;
  61. cout<<"3. keluar "<<endl;
  62. cout<<"masukan pilihan : ";cin>>pilih;
  63. switch(pilih){
  64.     case 1 :
  65.         input_data();
  66.         cout<<"kembali ? <y/n> ";cin>>yn;
  67.         break;
  68.     case 2 :
  69.         pencarian_data();
  70.         cout<<"kembali ? <y/n> ";cin>>yn;
  71.         break;
  72.     case 3 :
  73.         yn = 'n';
  74.  }
  75. }
  76.  
  77. while ( yn == 'y');
  78.  
  79. }
  80.  
  81. void pencarian_data(){
  82.     char yn = 'n';
  83.     string target;
  84.     int pilih,posisi;
  85.     do{
  86.     cout<<"1. Nama lengkap"<<endl;
  87.     cout<<"2. Nama dengan kata kiunci"<<endl;
  88.     cout<<"3. Nama yang remidi"<<endl;
  89.     cout<<"4. Nama tidak Remidi " <<endl;
  90.     cout<<"5. Kembali " <<endl;
  91.     cout<<"masukan pilihan : ";cin>>pilih;
  92.     switch(pilih){
  93.     case 1 :
  94.     //sorting dahulu sebelum binary search
  95.     cout<<"masukan nama yang akan dicari ? : ";
  96.     cin.ignore();
  97.     getline(cin,target);
  98.     posisi = cari_nama_lengkap(target,sorting_nama_ascending(mahasiswa));
  99.     if(posisi != -1){
  100.     mahasiswa_tmp.push_back(mahasiswa[posisi]);
  101.     tampil(mahasiswa_tmp);
  102.     mahasiswa_tmp.clear();
  103.     }
  104.     else{
  105.         cout<<"data tidak ditemukan "<<endl;
  106.     }
  107.     cout<<"kembali ? <y/n> ";cin>>yn;
  108.     break;
  109.      case 2 :
  110.     cout<<"masukan nama yang akan dicari ? : ";
  111.     cin.ignore();
  112.     getline(cin,target);
  113.     mahasiswa_tmp = cari_nama_keyword(target);
  114.     tampil(mahasiswa_tmp);
  115.     mahasiswa_tmp.clear();
  116.     cout<<"kembali ? <y/n> ";cin>>yn;
  117.     break;
  118.     case 3 :
  119.         mahasiswa_tmp = data_remidi(mahasiswa);
  120.         tampil(descending_nilai(mahasiswa_tmp));
  121.         mahasiswa_tmp.clear();
  122.         cout<<"kembali ? <y/n> ";cin>>yn;
  123.         break;
  124.     case 4 :
  125.         mahasiswa_tmp = data_tidak_remidi(mahasiswa);
  126.         tampil(descending_nilai(mahasiswa_tmp));
  127.         mahasiswa_tmp.clear();
  128.         cout<<"kembali ? <y/n> ";cin>>yn;
  129.         break;
  130.     case 5 :
  131.         yn = 'n';
  132.     }
  133.     }
  134.     while(yn=='y');
  135. }
  136.  
  137. void tampil(vector <data> mydata){
  138.     for(int i = 0 ; i  < mydata.size(); i++){
  139.         cout<<mydata[i].nama<< " " <<mydata[i].nim << " "<<mydata[i].nilai<<endl;
  140.     }
  141. };
  142.  
  143. //sorting bubble sort
  144. vector <data> sorting_nama_ascending(vector <data> mydata){
  145.     for(int i =0;i < mydata.size()-1;i++){
  146.         for(int j =0;j<mydata.size()-1-i;j++){
  147.             if(mydata[j].nama>mydata[j+1].nama)
  148.                 swap(mydata[j],mydata[j+1]);
  149.         }
  150.     }
  151.     return mydata;
  152. };
  153.  
  154. int cari_nama_lengkap(string target, vector<data>mydata){
  155.     int awal=0,tengah,akhir=mydata.size();
  156.     bool found;
  157.     while(!found && awal<mydata.size()){
  158.         tengah = (awal+akhir)/2;
  159.         if(target == mydata[tengah].nama)
  160.             found = true;
  161.         else
  162.             if(target < mydata[tengah].nama)
  163.             akhir = tengah - 1;
  164.         else
  165.             awal = tengah + 1;
  166.     }
  167.     return (found ? tengah : -1 );
  168. }
  169.  
  170. vector <data> cari_nama_keyword(string target){
  171.     for (int i =0;i< mahasiswa.size();i++){
  172.         if ( mahasiswa[i].nama.find(target) != -1)
  173.             mahasiswa_tmp.push_back(mahasiswa[i]);
  174.     }
  175.     return mahasiswa_tmp;
  176. }
  177.  
  178. vector <data> descending_nilai(vector <data> mydata){
  179.     for(int i =0;i < mydata.size()-1;i++){
  180.         for(int j =0;j<mydata.size()-1-i;j++){
  181.             if(mydata[j].nilai<mydata[j+1].nilai)
  182.                 swap(mydata[j],mydata[j+1]);
  183.         }
  184.     }
  185.     return mydata;
  186. }
  187.  
  188. vector <data> data_tidak_remidi(vector <data> mydata){
  189.    for(int i =0 ; i <mydata.size();i++){
  190.     if(mydata[i].remidi())
  191.         mahasiswa_tmp.push_back(mydata[i]);
  192.    }
  193.    return mahasiswa_tmp;
  194. }
  195.  
  196. vector <data> data_remidi(vector <data> mydata){
  197.    for(int i =0 ; i <mydata.size();i++){
  198.     if(!mydata[i].remidi())
  199.         mahasiswa_tmp.push_back(mydata[i]);
  200.    }
  201.    return mahasiswa_tmp;
  202. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement