Apr 11, 2022 Object Oriented Programming (OOP)

C++ Operasi File CRUD

Dibawah ini code program untuk operasi file CRUD (Create, Read, Update, dan Delete) dan juga ada pencariannya.

#include <iostream> //simple input dan output
#include <fstream> //Membuat, menulis, dan membaca file
#include <iomanip>
#include <conio.h>

using namespace std;

class item{
    //Data members
private:
    int code;
    char name[15];
    int qty;
    //member function
public:
    void put_item(void);
    void get_item(void);
    int get_code (void){
        return code;
    };

    int update_qty(int num){
        qty = qty-num;
        return qty;
    }

    void inputCode(){
    while (!(cin >> code))
        {
            cout << "ERROR: a number must be entered: ";
            cin.clear();
            cin.ignore(132, '\n');
        }
}

};

//Member fungtion class item di luar class

void item::get_item(void){
        cout << "Masukkan Kode Item: ";
        inputCode();
        //fflush(stdin);
        cout << "Masukkan Nama Item: "; cin >> name;
        cout << "Masukkan Qty: "; cin >> qty;
    }

void item::put_item(void){
    cout<<setw(6)<<code<<setw(15)<<name<<setw(6)<<qty<<endl; //setup dengan lebar field membutuhkan library iomanip
}

//Fuction Prototype
void addRecord(void);
void showAll(void);
void showRecord(void);
void deleteRecord(void);
void modifRecord(void);

//Global Declaration
item it;        //membuat object item
fstream file;   //membuat object fstream

int main()
{
    int option;
    while(1){
        system("cls");
        cout<<"***MENU***"<<endl;
        cout<<"1. Tambah Record Baru"<<endl;
        cout<<"2. Tampil Semua Data"<<endl;
        cout<<"3. Cari Record Tertentu"<<endl;
        cout<<"4. Hapus Record"<<endl;
        cout<<"5. Ubah Record"<<endl;
        cout<<"6. Keluar"<<endl;
        cout<<"Masukkan nomor opsi: "; cin>>option;
        switch(option){
            case 1:{
                addRecord();
                cout<<"Tekan sembarang untuk kembali ke menu ...";
                getch(); //butuh library conio.h
                break;
            }
            case 2:{
                cout<<"-----------------------------------------\n";
                cout<<setw(6)<<"Kode"<<setw(15)<<"Nama"<<setw(6)<<"Qty"<<endl;
                cout<<"-----------------------------------------\n";
                showAll();
                cout<<"-----------------------------------------\n";
                cout<<"Tekan sembarang untuk kembali ke menu ...";
                getch();
                break;
            }
            case 3:{
                showRecord();
                cout<<"Tekan sembarang untuk kembali ke menu ...";
                getch();
                break;
            }
            case 4:{
                deleteRecord();
                cout<<"Tekan sembarang untuk kembali ke menu ...";
                getch();
                break;
            }
            case 5:{
                modifRecord();
                cout<<"Tekan sembarang untuk kembali ke menu ...";
                getch();
                break;
            }
            case 6:{
                exit(0);
            }
            default:{
                cout<<"Opsi pilihan tidak ada, Tekan sembarang untuk kembali ke menu ...";
                getch();
                break;
            }
        }
    }

    return 0;
}

void addRecord(){
    char ch = 'y';
    file.open("stock.dat",ios::app|ios::binary);
    while(ch=='y'||ch=='Y'){
        it.get_item();
        //write object into file
        file.write((char*)&it, sizeof(it));
        cout<<"Tambah Record lagi ... (y/n)?";
        cin>>ch;
    }
    file.close();
}

void showAll(){
    file.open("stock.dat", ios::in|ios::binary);
    if(!file)
    {
        cout <<"File not Found";
        exit(0);
    }else{
        file.read((char*)&it, sizeof(it));
        while (!file.eof()){
            it.put_item();
            file.read((char*)&it, sizeof(it));
        }
    }
    file.close();
}

void showRecord(void){
    int no, flag = 0;
    file.open("stock.dat", ios::in|ios::binary);
    if (!file){ //Jika file tidak bisa dibuka
        cout<<"file tidak ditemukan";
        exit(0);
    }else{
        cout<<"Masukkan code yang dicari: ";
        cin>>no;
        //Baca record dari file dan dimasukkan ke object
        while(!file.eof()){ //ketika akhir dari file
            if(no==it.get_code()){
                flag=1;
                cout<<"-----------------------------------------\n";
                cout<<setw(6)<<"Kode"<<setw(15)<<"Nama"<<setw(6)<<"Qty"<<endl;
                cout<<"-----------------------------------------\n";
                it.put_item();
                cout<<"-----------------------------------------\n";
                break;
            }
            file.read((char*)&it, sizeof(it));
        }
        if (flag==0){
            cout<<"Item tidak ditemukan ....\n";
        }
    }
    file.close();
}

void deleteRecord(void){
    int no;
    cout<<"Masukkan kode item untuk dihapus: "  ;
    cin>>no;
    ofstream file2;  //stream object
    //open new.dat file for write operation
    file2.open("new.dat",ios::binary);
    file.open("stock.dat", ios::in|ios::binary);
    if(!file)    //if open file fails
    {
        cout<<"file not found";
        exit(0);
    }else{
        //read record form stock.dat file into object
        file.read((char*)&it, sizeof(it));
        while(!file.eof()){
            if(no != it.get_code()){
                file2.write((char*)&it, sizeof(it));
            }
            file.read((char*)&it, sizeof(it));
        }
    }
    file2.close();
    file.close();
    remove("stock.dat");
    rename("new.dat","stock.dat");
}

void modifRecord(void){
    int no, num;
    cout<<"Masukkan kode item untuk dirubah: "; cin>>no;
    cout<<"Masukkan Jumlah item yang akan di keluarkan: "; cin>>num;
    file.open("stock.dat", ios::in|ios::out|ios::binary);
    if(!file){
        cout<<"File not found";
        exit(0);
    }
    while(file.read((char*)&it, sizeof(it))){
        if(it.get_code()==no){
            it.update_qty(num);
            int pos = sizeof(it);
            file.seekp(-pos, ios::cur);
            file.write((char*)&it, sizeof(it));
        }
    }
    file.close();
}

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *