Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <iomanip>
- #include <string.h>
- #include <cstdlib>
- using namespace std;
- //objek pelanggan
- struct pelanggan{
- string nama;
- int saldo,
- no;
- //constructor pelanggan
- pelanggan(){
- }
- pelanggan(int x,int y){
- no = x;
- saldo =y;
- }
- //operator overloading
- bool operator> (pelanggan x){
- return (x.saldo > saldo?true : false);
- }
- bool operator== (int x){
- return (saldo==x ? true : false);
- }
- };
- //vector customer untuk menyiman data utama
- //vecto customer_tmp untuk menyimpan data sementara
- vector <pelanggan> customer;
- vector <pelanggan> customer_tmp;
- //PROSEDUR DAN FUNGSI
- void menu();
- void baca_txt_file();
- void tulis_txt_file();
- void input_member();
- void tampil_member(vector <pelanggan>);
- void searching();
- int binarySearch(int);
- int seqSearch_urut_nonsentinel(int);
- int seqSearch_belum_urut_nonsentinel(int);
- int seqSearch_urut_sentinel(int);
- int seqSearch_belum_urut_sentinel(int);
- vector <pelanggan> cari_nama(vector <pelanggan>,string);
- vector <pelanggan> bubble_sort(vector <pelanggan>);
- vector <pelanggan> selection_sort(vector <pelanggan>);
- int main(){
- baca_txt_file();
- menu();
- tulis_txt_file();
- return 0;
- }
- void menu(){
- char yn = 'y';
- system("cls");
- do{
- cout<<"Selamat Datang"<<endl;
- int pilih;
- char yn;
- cout<<"1. Tampil member "<<endl;
- cout<<"2. Tambah member "<<endl;
- cout<<"3. Cari member "<<endl;
- cout<<"4. Urutkan Data"<<endl;
- cout<<"5. keluar"<<endl;
- cout<<"masukan pilihan : ";
- cin>>pilih;
- switch(pilih){
- case 1:
- system("cls");
- tampil_member(customer);
- cout<<"kembali ? <y/n>";cin>>yn;
- if(yn == 'y')
- menu();
- break;
- case 2:
- system("cls");
- input_member();
- cout<<"kembali ? <y/n>";cin>>yn;
- if(yn == 'y')
- menu();
- break;
- case 3:
- system("cls");
- searching();
- cout<<"kembali ? <y/n>";cin>>yn;
- if(yn == 'y')
- menu();
- break;
- case 4:
- system("cls");
- cout<<"Urutkan Jumlah Pembayaran terbanyak "<<endl;
- cout<<"1. Urutkan dengan metode Bubble sort "<<endl;
- cout<<"2. Urutkan dengan metode Selection short "<<endl;
- cout<<"pilih";cin>>pilih;
- pilih == 1 ? tampil_member(bubble_sort(customer)) : tampil_member(selection_sort(customer));
- cout<<"kembali ? <y/n>";cin>>yn;
- if(yn == 'y')
- menu();
- break;
- case 5 :
- cout<<"keluar <y/n> ";cin>>yn;
- break;
- }
- }
- while(yn == 'n');
- }
- //prosedur untuk input member
- void input_member(){
- char yn='y';
- while(yn=='y'){
- pelanggan tmp;
- cout<<"nama : ";
- cin>>tmp.nama;
- cout<<"saldo : ";
- cin>>tmp.saldo;
- tmp.no = customer.size()+1;
- customer.push_back(tmp);
- cout<<"masukan member lagi ? <y/n>";
- cin>>yn;
- if(yn=='n'){
- break;
- }
- }
- }
- //prosedur untuk output member
- //parameter vector x
- void tampil_member(vector <pelanggan> x){
- cout<<"--------------------------------------"<<endl;
- cout<<"| NO | NAMA | SALDO |"<<endl;
- cout<<"--------------------------------------"<<endl;
- for(int i =0; i<x.size(); i++){
- cout<<setw(3)<<x[i].no<<setw(18-x[i].nama.length());
- cout<<x[i].nama<<setw(17)<<x[i].saldo<<endl;
- }
- cout<<"--------------------------------------"<<endl;
- }
- void searching(){
- int pilih,target;
- string nama;
- cout<<"Pencarian "<<endl;
- cout<<"1. Cari berdasarkan nomor"<<endl;
- cout<<"2. Cari berdasarkan nama"<<endl;
- cout<<"3. Cari berdasarkan saldo"<<endl;
- cout<<"masukan pilihan : ";cin>>pilih;
- switch(pilih){
- case 1 :
- system("cls");
- cout<<"Pencarian berdasarkan nomor"<<endl;
- cout<<"1. Binary search "<<endl;
- cout<<"2. Sequential terurut non sentinel"<<endl;
- cout<<"3. Sequential terurut sentinel"<<endl;
- cout<<"masukan pilihan ";cin>>pilih;
- cout<<"masukan nomor yang dicari : ";cin>>target;
- switch(pilih){
- case 1 :
- if(binarySearch(target)!=-1){
- customer_tmp.push_back(customer[binarySearch(target)]);
- tampil_member(customer_tmp);
- customer_tmp.erase(customer_tmp.begin());
- }
- else{
- cout<<"data not found";
- }
- break;
- case 2:
- if(seqSearch_urut_nonsentinel(target)!=-1){
- customer_tmp.push_back(customer[seqSearch_urut_nonsentinel(target)]);
- tampil_member(customer_tmp);
- customer_tmp.erase(customer_tmp.begin());
- }
- else{
- cout<<"data not found";
- }
- break;
- case 3 :
- if(seqSearch_urut_sentinel(target)!=-1){
- customer_tmp.push_back(customer[seqSearch_urut_sentinel(target)]);
- tampil_member(customer_tmp);
- customer_tmp.erase(customer_tmp.begin());
- }
- else{
- cout<<"data not found";
- }
- break;
- }
- break;
- case 2 :
- system("cls");
- cout<<"Cari berdasarkan nama"<<endl;
- cout<<"masukan nama : ";cin>>nama;
- if (cari_nama(customer_tmp,nama).size() > 0)
- tampil_member(cari_nama(customer_tmp,nama));
- else
- cout<<"not found"<<endl;
- customer_tmp.erase(customer_tmp.begin(),customer_tmp.end());
- break;
- case 3:
- system("cls");
- cout<<"Pencarian berdasarkan saldo"<<endl;
- cout<<"1. Sequential tak terurut non sentinel"<<endl;
- cout<<"2. Sequential tak terurut sentinel"<<endl;
- cout<<"masukan pilihan : ";cin>>pilih;
- cout<<"masukan jumlah transaksi yang dicari : ";cin>>target;
- switch(pilih){
- case 1 :
- if(seqSearch_belum_urut_nonsentinel(target)!=-1){
- customer_tmp.push_back(customer[seqSearch_belum_urut_nonsentinel(target)]);
- tampil_member(customer_tmp);
- customer_tmp.erase(customer_tmp.begin());
- }
- else{
- cout<<"data not found";
- }
- break;
- case 2 :
- if(seqSearch_belum_urut_sentinel(target)!=-1){
- customer_tmp.push_back(customer[seqSearch_belum_urut_sentinel(target)]);
- tampil_member(customer_tmp);
- customer_tmp.erase(customer_tmp.begin());
- }
- else{
- cout<<"data not found";
- }
- break;
- }
- break;
- }
- }
- //fungsi binary search
- //return posisi data ditemukan
- //return -1 jika data tidak ada
- int binarySearch(int target){
- int i=0,awal=0, akhir= customer.size(), tengah;
- bool ketemu;
- while(!ketemu & i<=customer.size()){
- tengah = (awal+akhir)/2;
- if(customer[tengah].no == target)
- ketemu = true;
- else
- if(customer[tengah].no>target)
- akhir = tengah -1;
- else
- awal = tengah + 1;
- }
- return ( ketemu ? tengah : -1);
- };
- int seqSearch_belum_urut_nonsentinel(int target){
- bool ketemu;
- int i;
- for (i =0; i<customer.size();i++){
- if(customer[i] == target){
- ketemu = true;
- break;
- }
- }
- return ( ketemu ? i : -1);
- }
- //fungsi sequential search belum urut sentinel
- //return posisi data ditemukan
- //return -1 jika data tidak ada
- int seqSearch_urut_nonsentinel(int target){
- bool ketemu;
- int i;
- for (i =0; i<customer.size();i++){
- if(customer[i].no == target){
- ketemu = true;
- break;
- }
- if(target<customer[i].no)
- break;
- }
- return ( ketemu ? i : -1);
- }
- //fungsi urut non sentinel
- //return posisi data ditemukan
- //return -1 jika data tidak ada
- int seqSearch_urut_sentinel(int target){
- pelanggan batas(customer.size()+1,0);
- customer.push_back(batas);
- int i=0;
- for(int i =0;i<customer.size()-1;i++){
- if(customer_tmp[i].no==target)
- break;
- if(customer_tmp[i].no>target)
- break;
- }
- customer.erase(customer.end()-1,customer.end());
- return (i>customer.size() ? -1 : i);
- }
- //fungsi sequential urut sentinel
- //return posisi data ditemukan
- //return -1 jika data tidak ada
- int seqSearch_belum_urut_sentinel(int target){
- pelanggan batas(customer.size()+1,0);
- customer_tmp.swap(customer);
- customer_tmp.push_back(batas);
- int i=0;
- for(int i =0;i<customer_tmp.size();i++){
- if(customer_tmp[i].saldo==target)
- break;
- }
- customer_tmp.erase(customer_tmp.begin(),customer_tmp.end());
- return (i<customer_tmp.size()-1 ? i : -1);
- }
- //fungsi sorting sengan bubble sort
- //parameter fungsi vector data
- //return vector dengan tipe pelanggan terurut ascending
- vector <pelanggan> bubble_sort(vector <pelanggan> data ){
- pelanggan x;
- for(int i =0;i < data.size();i++){
- for(int j =0; j < data.size() -1 -i;j++){
- if (data[j]>data[j+1] ){
- swap(data[j],data[j+1]);
- }
- }
- }
- return data;
- }
- //fungsi sorting sengan selection sort
- //parameter fungsi
- //return vector dengan tipe pelanggan terurut ascending
- vector <pelanggan> selection_sort( vector <pelanggan> data){
- int posisi,i;
- pelanggan tmp;
- for(posisi = 0 ; posisi<data.size();posisi++){
- for( i = posisi + 1; i<data.size(); i++){
- if(data[posisi].saldo> data[posisi+1].saldo){
- swap(data[posisi],data[posisi+1]);
- }
- }
- }
- return data;
- }
- //fungsi sorting sengan bubble sort
- //parameter fungsi vector data
- //return vector dengan tipe pelanggan terurut ascending
- vector <pelanggan> cari_nama(vector <pelanggan> data, string nama){
- for(int i =0;i<customer.size();i++){
- if(nama==customer[i].nama){
- data.push_back(customer[i]);
- }
- }
- return data;
- };
- //prosedur untuk membaca data dari txt file
- // data disiman ke vector customer
- void baca_txt_file(){
- pelanggan tmp;
- ifstream fileku_input;
- fileku_input.open("test.txt");
- if(fileku_input.is_open()&&fileku_input.peek()!=fileku_input.eof()){
- while(!fileku_input.eof()){
- fileku_input>>tmp.no>>tmp.nama>>tmp.saldo;
- customer.push_back(tmp);
- }
- if(customer.size()>0)
- customer.erase(customer.end());
- }
- else{
- cout<<"file tidak dibuka"<<endl;
- }
- }
- //prosedur untuk menulis data ke txt file
- // data disiman ke test.txt
- void tulis_txt_file(){
- ofstream fileku;
- fileku.open("test.txt");
- if(fileku.is_open()){
- for(int i =0; i<customer.size(); i++){
- fileku<<customer[i].no<<" "<<customer[i].nama<<" "<<customer[i].saldo<<endl;
- }
- }
- else{
- cout<<"file tidak dibuka"<<endl;
- }
- fileku.close();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement