Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- struct data{
- int nim,
- nilai;
- string nama;
- //remidi nilai 60 kebawah
- bool remidi(){
- return nilai>60;
- }
- };
- vector <data> mahasiswa;
- vector <data> mahasiswa_tmp;
- void menu();
- void input_data();
- void pencarian_data();
- int cari_nama_lengkap(string, vector<data>);
- void tampil(vector <data>);
- vector <data> sorting_nama_ascending(vector <data>);
- vector <data> descending_nilai(vector <data> mydata);
- vector <data> cari_nama_keyword(string);
- vector <data> data_tidak_remidi(vector <data> mydata);
- vector <data> data_remidi(vector <data> mydata);
- int main(){
- menu();
- return 0;
- }
- void input_data(){
- int jumlah,i;
- cout<<"masukan jumlah : ";cin>>jumlah;
- i = jumlah;
- data mhs;
- while(jumlah--){
- cin.ignore();
- cout<<"ke "<< i -jumlah <<endl;
- cout<<"nama : ";getline(cin,mhs.nama);
- cout<<"NIM : ";cin>>mhs.nim;
- cout<<"nilai : ";cin>>mhs.nilai;
- mahasiswa.push_back(mhs);
- }
- }
- void menu(){
- char yn='n';
- int pilih;
- do{
- cout<<"1. Input data "<<endl;
- cout<<"2. pencarian data"<<endl;
- cout<<"3. keluar "<<endl;
- cout<<"masukan pilihan : ";cin>>pilih;
- switch(pilih){
- case 1 :
- input_data();
- cout<<"kembali ? <y/n> ";cin>>yn;
- break;
- case 2 :
- pencarian_data();
- cout<<"kembali ? <y/n> ";cin>>yn;
- break;
- case 3 :
- yn = 'n';
- }
- }
- while ( yn == 'y');
- }
- void pencarian_data(){
- char yn = 'n';
- string target;
- int pilih,posisi;
- do{
- cout<<"1. Nama lengkap"<<endl;
- cout<<"2. Nama dengan kata kiunci"<<endl;
- cout<<"3. Nama yang remidi"<<endl;
- cout<<"4. Nama tidak Remidi " <<endl;
- cout<<"5. Kembali " <<endl;
- cout<<"masukan pilihan : ";cin>>pilih;
- switch(pilih){
- case 1 :
- //sorting dahulu sebelum binary search
- cout<<"masukan nama yang akan dicari ? : ";
- cin.ignore();
- getline(cin,target);
- posisi = cari_nama_lengkap(target,sorting_nama_ascending(mahasiswa));
- if(posisi != -1){
- mahasiswa_tmp.push_back(mahasiswa[posisi]);
- tampil(mahasiswa_tmp);
- mahasiswa_tmp.clear();
- }
- else{
- cout<<"data tidak ditemukan "<<endl;
- }
- cout<<"kembali ? <y/n> ";cin>>yn;
- break;
- case 2 :
- cout<<"masukan nama yang akan dicari ? : ";
- cin.ignore();
- getline(cin,target);
- mahasiswa_tmp = cari_nama_keyword(target);
- tampil(mahasiswa_tmp);
- mahasiswa_tmp.clear();
- cout<<"kembali ? <y/n> ";cin>>yn;
- break;
- case 3 :
- mahasiswa_tmp = data_remidi(mahasiswa);
- tampil(descending_nilai(mahasiswa_tmp));
- mahasiswa_tmp.clear();
- cout<<"kembali ? <y/n> ";cin>>yn;
- break;
- case 4 :
- mahasiswa_tmp = data_tidak_remidi(mahasiswa);
- tampil(descending_nilai(mahasiswa_tmp));
- mahasiswa_tmp.clear();
- cout<<"kembali ? <y/n> ";cin>>yn;
- break;
- case 5 :
- yn = 'n';
- }
- }
- while(yn=='y');
- }
- void tampil(vector <data> mydata){
- for(int i = 0 ; i < mydata.size(); i++){
- cout<<mydata[i].nama<< " " <<mydata[i].nim << " "<<mydata[i].nilai<<endl;
- }
- };
- //sorting bubble sort
- vector <data> sorting_nama_ascending(vector <data> mydata){
- for(int i =0;i < mydata.size()-1;i++){
- for(int j =0;j<mydata.size()-1-i;j++){
- if(mydata[j].nama>mydata[j+1].nama)
- swap(mydata[j],mydata[j+1]);
- }
- }
- return mydata;
- };
- int cari_nama_lengkap(string target, vector<data>mydata){
- int awal=0,tengah,akhir=mydata.size();
- bool found;
- while(!found && awal<mydata.size()){
- tengah = (awal+akhir)/2;
- if(target == mydata[tengah].nama)
- found = true;
- else
- if(target < mydata[tengah].nama)
- akhir = tengah - 1;
- else
- awal = tengah + 1;
- }
- return (found ? tengah : -1 );
- }
- vector <data> cari_nama_keyword(string target){
- for (int i =0;i< mahasiswa.size();i++){
- if ( mahasiswa[i].nama.find(target) != -1)
- mahasiswa_tmp.push_back(mahasiswa[i]);
- }
- return mahasiswa_tmp;
- }
- vector <data> descending_nilai(vector <data> mydata){
- for(int i =0;i < mydata.size()-1;i++){
- for(int j =0;j<mydata.size()-1-i;j++){
- if(mydata[j].nilai<mydata[j+1].nilai)
- swap(mydata[j],mydata[j+1]);
- }
- }
- return mydata;
- }
- vector <data> data_tidak_remidi(vector <data> mydata){
- for(int i =0 ; i <mydata.size();i++){
- if(mydata[i].remidi())
- mahasiswa_tmp.push_back(mydata[i]);
- }
- return mahasiswa_tmp;
- }
- vector <data> data_remidi(vector <data> mydata){
- for(int i =0 ; i <mydata.size();i++){
- if(!mydata[i].remidi())
- mahasiswa_tmp.push_back(mydata[i]);
- }
- return mahasiswa_tmp;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement