Contoh Program Managemen TXT File Dengan Borland C++ 5.02

Yaph inilah tugas terkahir buat mata kuliah praktikumku Algoritma Pemrograman dengan Bahasa Pemrograman C++ menggunakan IDE Borland 5.02 yang menyebalkan. Program ini bisa Read, Edit, Delete, Add Data di File TXT. Oke langsung saja yah …

#include <iostream>
#include <fstream>
#include <string>
#include <stdio>
#include <windows>
#include <vector>

using namespace std;

void menuAwal();

int inpmenu;
char tanya;
string baris;
string bacaFile;
string inputBaru;

vector <string> explode(const char& chSparate, const string& strText){
    string next = "";
    vector <string> result;
    for(string::const_iterator it = strText.begin(); it != strText.end(); it++){
        if(*it == chSparate){
            if(next.length() > 0){
                result.push_back(next);
                next = "";
            }
        }else{
            next += *it;
        }
    }
    return result;
}

string& str_replace(const string &search, const string &replace, string &subject){
    string buffer;

    int sealeng = search.length();
    int strleng = subject.length();

    if (sealeng==0)
        return subject;

    for(int i=0, j=0; i<strleng; j=0 ){
        while (i+j<strleng && j<sealeng && subject[i+j]==search[j])
            j++;
        if (j==sealeng){
            buffer.append(replace);
            i+=sealeng;
        }else{
            buffer.append( &subject[i++], 1);
        }
    }
    subject = buffer;
    return subject;
}

void cariBuku(string cariKodeBuku){
    string tampungHasilExplodes;
	vector <string> detailDataBarang;
	vector <string> detailKodeBarang;
	bacaFile = "";
	system("cls");

	cariKodeBuku = "["+cariKodeBuku+"]";

	ifstream db;
    db.open("dataBarang.txt");
	while(!db.eof()){
    	getline(db,baris,'\n');
		bacaFile += baris+"\n";
    }
	db.close();

    detailDataBarang = explode('\n',bacaFile);

	for(size_t i = 0; i < detailDataBarang.size(); i++){
	    if(detailDataBarang[i].find(cariKodeBuku)!=string::npos){
			tampungHasilExplodes += detailDataBarang[i]+"\n ";
		}
	}

    tampungHasilExplodes = str_replace("|","\t",tampungHasilExplodes);
    tampungHasilExplodes = str_replace("=","\t",tampungHasilExplodes);

    cout << "\n -------------------------------------------------" <<endl;
    cout << " "  << tampungHasilExplodes;
    cout << "-------------------------------------------------" <<endl;

    fflush(stdin);
    cout << " Kembali ke Menu Awal ? [y/t] : ";
    cin  >> tanya;
    if(tanya=='y') menuAwal();
    else exit(0);
}

void editBuku(string cariKodeBuku){
    int penanda;
    string tampungExp, tampungBaru, tambahanKarakter;
    string namaBukuBaru, stokBukuBaru, hargaBukuBaru;
	vector <string> detailDataBarang;

	ifstream db;
    db.open("dataBarang.txt");
	while(!db.eof()){
		getline(db,baris,'\n');
		bacaFile += baris+"\n";
    }
	db.close();

    cariKodeBuku = "["+cariKodeBuku+"]";

    if(bacaFile.find(cariKodeBuku)==string::npos){
        cout << "Maaf, buku dengan kode tersebut tidak ada";
        Sleep(1000);
        menuAwal();
    }

    detailDataBarang = explode('\n',bacaFile);

	for(size_t i = 0; i < detailDataBarang.size(); i++){
	    if(detailDataBarang[i].find(cariKodeBuku)!=string::npos){
		    tampungExp += detailDataBarang[i]+"\n";
			penanda = i;
		}
	}

	if(penanda==0 || penanda==detailDataBarang.size()){
        tambahanKarakter = "\n";
    }

    cout << "Nama Buku yang baru : ";
    cin  >> namaBukuBaru;

    cout << "Stok barang yang baru : ";
    cin  >> stokBukuBaru;

    cout << "Harga barang yang baru : Rp ";
    cin  >> hargaBukuBaru;

    tampungBaru = cariKodeBuku+"="+namaBukuBaru+"|"+stokBukuBaru+"|"+
    					hargaBukuBaru+"|"+tambahanKarakter;

    tampungExp = "";
    for(size_t i = 0; i < detailDataBarang.size(); i++){
	    if(penanda==i){
		    tampungExp += tampungBaru;
			continue;
		}else{
			tampungExp += detailDataBarang[i]+"\n";
		}
	}
    tampungExp = tampungExp.substr(0,(tampungExp.length() - 2));

	ofstream fl;
    fl.open("dataBarang.txt",ios::trunc);
	fl << tampungExp;
	fl.close();

    cout << "Buku berhasil dirubah. Terima Kasih";
    Sleep(1000);
    menuAwal();
}

void inputDataBarang(){
	system("cls");
    string kodeBarang, namaBarang, stokBarang, hargaBarang;
    cout << "Masukkan Kode Barang : ";
    cin  >> kodeBarang;
    bacaFile = "";
    ifstream db;
    db.open("dataBarang.txt");
    while(!db.eof()){
    	 getline(db,baris,'\n');
       bacaFile += baris+"\n";
    }
    db.close();

    if(bacaFile.find(kodeBarang)!=string::npos){
        cout << "Maaf, barang dengan kode tersebut sudah ada sebelumnya";
        Sleep(1000);
        menuAwal();
    }

    cout << "\nMasukkan Nama Barang : ";
    cin  >> namaBarang;
    cout << "Masukkan Jumlah Stok Barang : ";
    cin  >> stokBarang;
    cout << "Masukkan Harga Barang : ";
    cin  >> hargaBarang;
    inputBaru = "["+kodeBarang+"]="+namaBarang+"|"+stokBarang+"|"+hargaBarang+"|";

    ofstream fl;
    fl.open("dataBarang.txt");
    fl << bacaFile;
    fl << inputBaru;
    fl.close();
    cout << "Barang baru berhasil ditambahkan." << endl;
    Sleep(1000);
    menuAwal();
}

void hapusDataBarang(string cariKodeBuku){
    string tampungExp;
    vector <string> detailDataBarang;

    bacaFile = "";
    system("cls");
    ifstream db;
    db.open("dataBarang.txt");
    while(!db.eof()){
    	getline(db,baris,'\n');
		bacaFile += baris+"\n";
    }
    db.close();

    detailDataBarang = explode('\n',bacaFile);
    cariKodeBuku = "["+cariKodeBuku+"]";

    for(size_t i = 0; i < detailDataBarang.size(); i++) {
        if(detailDataBarang[i].substr(0,4)!=cariKodeBuku){
            tampungExp += detailDataBarang[i]+"\n";
        }
    }
    tampungExp = tampungExp.substr(0,(tampungExp.length() - 2));

    ofstream fl;
    fl.open("dataBarang.txt",ios::trunc);
    fl << tampungExp;
    fl.close();
    cout << "Barang telah berhasil dihapus." << endl;
    Sleep(1000);
    menuAwal();
}

void laporan(){
    bacaFile = "";
    system("cls");
    ifstream db;
    db.open("dataBarang.txt");
    while(!db.eof()){
    	getline(db,baris,'\n');
		bacaFile += baris+"\n";
	}
    db.close();
    cout << "Kode\tNama Barang\tStok\tHarga Barang" <<endl;
    cout << "--------------------------------------------" <<endl;
    bacaFile = str_replace("|","\t",bacaFile);
    bacaFile = str_replace("=","\t",bacaFile);
    cout << bacaFile;
    cout << "--------------------------------------------\n" <<endl;
    fflush(stdin);
    cout << "Kembali ke Menu Awal ? [y/t] : ";
    cin  >> tanya;
    if(tanya=='y') menuAwal();
    else system("exit");
    system("pause");
}

void menuAwal(){
    system("cls");
    cout << "+-----------------------------------+"<< endl;
    cout << "| Silakan Pilih Menu                |"<< endl;
    cout << "+-----------------------------------+"<< endl;
    cout << "| 1. Lihat Data Barang              |"<< endl;
    cout << "| 2. Cari Data Barang               |"<< endl;
    cout << "| 3. Input Data Barang              |"<< endl;
    cout << "| 4. Edit Data Barang               |"<< endl;
    cout << "| 5. Hapus Data Barang              |"<< endl;
    cout << "+-----------------------------------+"<< endl;
    cout << "\nPilihan Anda : ";
    fflush(stdin);
    cin >> inpmenu;
    cout << endl;

    if(inpmenu==1){
        laporan();
	}else if(inpmenu==2){
        string cariKodeBarang;
        cout << "Masukkan kode barang : ";
        cin  >> cariKodeBarang;
        cariBuku(cariKodeBarang);
	}else if(inpmenu==3){
        inputDataBarang();
    }else if(inpmenu==4){
		string cariKodeBarang;
        cout << "Masukkan kode barang : ";
        cin  >> cariKodeBarang;
        editBuku(cariKodeBarang);
    }else if(inpmenu==5){
        string cariKodeBarang;
        cout << "Masukkan kode barang : ";
        cin  >> cariKodeBarang;
        hapusDataBarang(cariKodeBarang);
    }else{
        cout << "Terima Kasih";
        Sleep(1000);
        system("exit");
    }
    system("cls");
}

int main(){
    menuAwal();
    return EXIT_SUCCESS;
}

Untuk contoh isi file dataBarang.txt, silahkan lihat dibawah ini :

[01]=Keyboard|100|5000|
[02]=Sikat Gigi|100|5000|
[03]=Sabun Mandi|100|15000|
[04]=Obat Nyamuk|100|25000|
[05]=Minyal Goreng|100|35000|
[06]=Gula Pasir|100|45000|
[07]=Garam Dapur|100|55000|
[08]=Susu Kental|100|65000|
[09]=Kopi Bubuk|100|75000|
[10]=Teh Celup|100|85000|