Program Operasi File C++ ( Write - Read - Search - Delete - Update )
Pada kesempatan kali ini, saya akan mencoba berbagi seputar operasi file, dan sedikit pengenalan mengenai class dan objek.
Beberapa minggu lalu, saya telah diajari oleh Bpk. Eding Muh. Saprudin S.T. yang membahas mengenai struct. Konsep class ini hampir sama dengan struct, hanya saja di dalam class informasi yang disimpan tidak hanya data saja, melainkan juga fungsi-fungsi yang berhubungan dengan data tersebut, disimpan menjadi satu kesatuan.
Berikut ini kami tunjukan potongan program sebagai perbandingan antara struct dan class:
class
class NilaiMahasiswa{
int nim;
char nama[50];
int uts;
int uas;
int tugas;
};
void inputNilai(){
public:
cout<< "NIM :"; cin >> nim;
cout<< "Nama :"; cin >> nama;//kalian bisa juga menggunakan gets
cout<< "TUGAS :"; cin >> tugas;
cout<< "UTS :"; cin >> uts;
cout<< "UAS :"; cin >> uas;
}
struct
struct NilaiMahasiswa{
int nim;
char nama[50];
int uts;
int uas;
int tugas;
};
void inputNilai(NilaiMahasiswa nilai){
cout<< "NIM :"; cin >> nilai.nim;
cout<< "Nama :"; cin >> nilai.nama;//kalian bisa juga menggunakan gets
cout<< "TUGAS :"; cin >> nilai.tugas;
cout<< "UTS :"; cin >> nilai.uts;
cout<< "UAS :"; cin >> nilai.uas;
}
Jadi begitulah perbedaan keduanya, namun pada pembahasan ini saya tidak akan mengulas terlalu dalam, karena yang ingin saya tekankan di sini adalah operasi file, yang pada prakteknya melibatkan class dan object.
Oya sebagai catatan juga bahwasannya Bpk. Eding Muh. Saprudin tidak menggunakan Borland sebagai compiler dan editor, melainkan beliau menggunakan g++ versi opensource dikarenakan beliau pengguna Linux, jadi jangan heran jika nanti kita temui sintaks-sintaks yang berbeda, sehingga perlu kita sesuaikan saja, OK!
Pada pelajaran-pelajaran sebelumnya, implementasi operasi file seperti menulis, membaca, mencari, menghapus maupun memodifikasi file, biasanya kita menggunakan array atau struct untuk olah data. Tapi dengan cara tersebut menjadikan data tidak persistens, artinya data itu akan hilang bilamana program dimatikan/close atau komputer mati. Oleh sebab itu, agar data menjadi persistent maka kita perlu menyimpannya kedalam bentuk file. Bicara mengenai persistensi data, sebenarnya ada cara lain lagi yang bisa kita terapkan, salah satunya adalah menggunakan database, namun saya tidak akan bahas di sini.
1. I/O ( Input-Output)
C++ I/O ( Input-Output) |
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
//using namespace std; //diborland tidak perlu ini
class NilaiMahasiswa12131294{
int nim12131294;
char nama12131294[50];
int uts12131294;
int uas12131294;
int tugas12131294;
public:
void inputNilai12131294(){
cout<< "NIM :"; cin>> nim12131294;
cout<< "Nama :"; cin>> nama12131294;//kalian bisa menggunakan gets
cout<< "TUGAS:"; cin>> tugas12131294;
cout<< "UTS :"; cin>> uts12131294;
cout<< "UAS :"; cin>> uas12131294;
}
void outputNilai12131294(){
cout<< "NIM :" << nim12131294;
cout<< "\nNama :" << nama12131294;
cout<< "\nTUGAS :" << tugas12131294;
cout<< "\nUTS :" << uts12131294;
cout<< "\nUAS :" << uas12131294;
cout<< "\nNilai Akhir :" << nilaiAkhir();
cout<< "\nNilai Huruf :" << nilaiHuruf() <<endl;
}
float nilaiAkhir(){
return(tugas12131294 + uts12131294 + uas12131294) / 3;
}
char nilaiHuruf(){
float nilai = nilaiAkhir();
if(nilai> 80) return 'A';
else if(nilai > 70) return 'B';
else if(nilai > 60) return 'C';
else if(nilai > 40) return 'D';
else return 'E';
}
int getNim(){
return nim12131294;
}
};
/*
char namaFile[30] = "nilai.dat";
//menulis objek ke dlm file
void simpanData() {
NilaiMahasiswa12131294 nilai;
nilai.inputNilai12131294();
//proses simpan objek ke file
ofstream f;
f.open(namaFile, ios::binary|ios::app);
f.write((char*) &nilai, sizeof(nilai));
f.close();
} */
void main(){
NilaiMahasiswa12131294 nilai;
nilai.inputNilai12131294();
getch();
nilai.outputNilai12131294();
}
2. Write - Read
C++ Write - Read |
/**
*aplikasi nilai mahasiswa dengan menggunakan operasi file
*(tulis,baca)
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
//using namespace std; //diborland tidak perlu ini
class NilaiMahasiswa12131294{
int nim12131294;
char nama12131294[50];
int uts12131294;
int uas12131294;
int tugas12131294;
public:
void inputNilai12131294(){
cout<< "NIM :"; cin>> nim12131294;
cout<< "Nama :"; cin>> nama12131294;//kalian bisa menggunakan gets
cout<< "TUGAS:"; cin>> tugas12131294;
cout<< "UTS :"; cin>> uts12131294;
cout<< "UAS :"; cin>> uas12131294;
}
void outputNilai12131294(){
cout<< "NIM :" << nim12131294;
cout<< "\nNama :" << nama12131294;
cout<< "\nTUGAS :" << tugas12131294;
cout<< "\nUTS :" << uts12131294;
cout<< "\nUAS :" << uas12131294;
cout<< "\nNilai Akhir :" << nilaiAkhir();
cout<< "\nNilai Huruf :" << nilaiHuruf() <<endl;
}
float nilaiAkhir(){
return(tugas12131294 + uts12131294 + uas12131294) / 3;
}
char nilaiHuruf(){
float nilai = nilaiAkhir();
if(nilai> 80) return 'A';
else if(nilai > 70) return 'B';
else if(nilai > 60) return 'C';
else if(nilai > 40) return 'D';
else return 'E';
}
int getNim(){
return nim12131294;
}
};
char namaFile[30] = "nilai.dat";
//menulis objek ke dlm file
void simpanData12131294() {
NilaiMahasiswa12131294 nilai;
nilai.inputNilai12131294();
//proses simpan objek ke file
ofstream f;
f.open(namaFile, ios::binary|ios::app);
f.write((char*) &nilai, sizeof(nilai));
f.close();
}
//membaca dari file
void bacaData12131294(){
NilaiMahasiswa12131294 nilai;
ifstream f;
f.open( namaFile, ios::binary );
while (f.read((char*)&nilai, sizeof(nilai))) {
nilai.outputNilai12131294();
}
f.close();
}
void main(){
cout <<"Menulis ke file \n";
simpanData12131294();
cout <<"\nMembaca dari file \n";
bacaData12131294();
getch();
}
3. Search
C++ Search (Cari) |
/**
*aplikasi nilai mahasiswa dengan menggunakan operasi file
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
//using namespace std; //diborland tidak perlu ini
class NilaiMahasiswa12131294{
int nim12131294;
char nama12131294[50];
int uts12131294;
int uas12131294;
int tugas12131294;
public:
void inputNilai12131294(){
cout<< "NIM :"; cin>> nim12131294;
cout<< "Nama :"; cin>> nama12131294;//kalian juga bisa menggunakan gets
cout<< "TUGAS:"; cin>> tugas12131294;
cout<< "UTS :"; cin>> uts12131294;
cout<< "UAS :"; cin>> uas12131294;
}
void outputNilai12131294(){
cout<< "NIM :" << nim12131294;
cout<< "\nNama :" << nama12131294;
cout<< "\nTUGAS :" << tugas12131294;
cout<< "\nUTS :" << uts12131294;
cout<< "\nUAS :" << uas12131294;
cout<< "\nNilai Akhir :" << nilaiAkhir();
cout<< "\nNilai Huruf :" << nilaiHuruf() <<endl;
}
float nilaiAkhir(){
return(tugas12131294 + uts12131294 + uas12131294) / 3;
}
char nilaiHuruf(){
float nilai = nilaiAkhir();
if(nilai> 80) return 'A';
else if(nilai > 70) return 'B';
else if(nilai > 60) return 'C';
else if(nilai > 40) return 'D';
else return 'E';
}
int getNim(){
return nim12131294;
}
};
char namaFile[30] = "nilai.dat";
//menulis objek ke dlm file
void simpanData12131294() {
NilaiMahasiswa12131294 nilai;
nilai.inputNilai12131294();
//proses simpan objek ke file
ofstream f;
f.open(namaFile, ios::binary|ios::app);
f.write((char*) &nilai, sizeof(nilai));
f.close();
}
//membaca dari file
void bacaData12131294(){
NilaiMahasiswa12131294 nilai;
ifstream f;
f.open( namaFile, ios::binary );
while (f.read((char*)&nilai, sizeof(nilai))) {
nilai.outputNilai12131294();
}
f.close();
}
void cariData12131294(int nimDicari12131294) {
NilaiMahasiswa12131294 nilai, nilaiKetemu;
int ketemu12131294 = 0; // penanda pencarian ditemukan
ifstream f;
f.open( namaFile, ios::binary );
while(f.read((char*)&nilai, sizeof(nilai))){
//jika nim yang dicari ditemukan
if (nilai.getNim() == nimDicari12131294){
nilaiKetemu = nilai;
ketemu12131294 = 1;
break; // hentikan perulangan
}
}
if (ketemu12131294 == 0) {
cout <<"\nNim " << nimDicari12131294 << " tidak ditemukan \n";
}
else{
cout<<endl<<"Nim yang dicari "<<nimDicari12131294<<" ditemukan !!\n\n";
nilaiKetemu.outputNilai12131294();
}
f.close();
}
void main(){
/* cout <<"Menulis ke file \n";
simpanData12131294();
cout <<"\n======================\n";
*/
int t;
cout <<"Masukan NIM : "; cin >> t;
cout <<"\nMembaca dari file \n";
bacaData12131294();
cout <<"\n======================\n";
cout <<"\nMencari data...\n";
cariData12131294(t);
getch();
}
4. Delete - Update
Sekarang kita berlanjut ke operasi hapus data. Pada operasi ini kita memerlukan dua buah file (Original dan Penampung), yang nantinya data original dibaca menggunakan buffer (file penampung).
Singkat cerita nim yang ingin dicari ditampung dulu di buffer, sementara itu buffer digunakan sebagai referensi untuk melakukan pencarian data, jika ditemukan, maka data original dihapus. Sementara itu data buffer bisa di overwrite untuk melakukan pencarian dan penghapusan berikutnya.
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
#include <stdio.h>
//using namespace std; //diborland tidak perlu ini
/*
Program ini tidak asing diantara kalian, apalagi kalo bukan aplikasi nilai Mahasiswa.
Langkah 1 - kita buat dulu class NilaiMahasiswa, kemudian kita definisikan seperti nim, nama, uts, uas dan tugas,
berikutnya operasi-operasi yang berhubungan dengan data tersebut.
*/
class NilaiMahasiswa12131294{
int nim12131294;
char nama12131294[50];
int uts12131294;
int uas12131294;
int tugas12131294;
public:
void inputNilai12131294(){
cout<< "NIM :"; cin>> nim12131294;
cout<< "Nama :"; cin>> nama12131294;//kalian bisa menggunakan gets
cout<< "TUGAS:"; cin>> tugas12131294;
cout<< "UTS :"; cin>> uts12131294;
cout<< "UAS :"; cin>> uas12131294;
}
void outputNilai12131294(){
cout<< "NIM :" << nim12131294;
cout<< "\nNama :" << nama12131294;
cout<< "\nTUGAS :" << tugas12131294;
cout<< "\nUTS :" << uts12131294;
cout<< "\nUAS :" << uas12131294;
cout<< "\nNilai Akhir :" << nilaiAkhir();
cout<< "\nNilai Huruf :" << nilaiHuruf() <<endl;
}
float nilaiAkhir(){
return(tugas12131294 + uts12131294 + uas12131294) / 3;
}
char nilaiHuruf(){
float nilai = nilaiAkhir();
if(nilai> 80) return 'A';
else if(nilai > 70) return 'B';
else if(nilai > 60) return 'C';
else if(nilai > 40) return 'D';
else return 'E';
}
int getNim(){
return nim12131294;
}
};
char namaFile[30] = "nilai.dat";
//menulis objek ke dlm file
void simpanData12131294() {
NilaiMahasiswa12131294 nilai;
nilai.inputNilai12131294();
//proses simpan objek ke file
ofstream f;
f.open(namaFile, ios::binary|ios::app);
f.write((char*) &nilai, sizeof(nilai));
f.close();
}
//membaca dari file
void bacaData12131294(){
NilaiMahasiswa12131294 nilai;
ifstream f;
f.open( namaFile, ios::binary );
while (f.read((char*)&nilai, sizeof(nilai))) {
nilai.outputNilai12131294();
}
f.close();
}
void cariData12131294(int nimDicari12131294) {
NilaiMahasiswa12131294 nilai, nilaiKetemu;
int ketemu12131294 = 0; // penanda pencarian ditemukan
ifstream f;
f.open( namaFile, ios::binary );
while(f.read((char*)&nilai, sizeof(nilai))){
//jika nim yang dicari ditemukan
if (nilai.getNim() == nimDicari12131294){
nilaiKetemu = nilai;
ketemu12131294 = 1;
break; // hentikan perulangan
}
}
if (ketemu12131294 == 0) {
cout <<"\nNim " << nimDicari12131294 << " tidak ditemukan \n";
}
else{
cout <<"Nim yang dicari "<<nimDicari12131294<<"ditemukan \n:";
nilaiKetemu.outputNilai12131294();
}
f.close();
}
//hapus data
void hapusData12131294(int nimDicari12131294){
NilaiMahasiswa12131294 nilai;
ifstream fi;
fi.open(namaFile, ios::binary);
ofstream fo;
fo.open("tmp.dat", ios::out|ios::binary);
int ketemu = 0;
while(fi.read((char*) &nilai, sizeof(nilai))){
if(nilai.getNim() != nimDicari12131294){
fo.write((char*)&nilai, sizeof(nilai));
}
else{
ketemu = 1;
}
}
fi.close();
fo.close();
remove(namaFile);
rename("tmp.dat", namaFile);
if (ketemu ==1) {
cout<<" mahasiswa dengan NIM" << nimDicari12131294 << "telah dihapus!\n";
}
else{
cout<<"mahasiswa dengan NIM" << nimDicari12131294 << "tidak ditemukan!\n";
}
}
//edit(modifikasi) data
void updateData12131294(int nimDicari12131294){
NilaiMahasiswa12131294 nilai;
fstream f; //fstream bisa digunakan untuk baca/tulis langsung
f.open( namaFile, ios::in|ios::out );
while(f.read((char*)&nilai, sizeof(nilai))){
if(nilai.getNim() == nimDicari12131294) {
//tampilkan detail nilai sebelum proses modifikasi
nilai.outputNilai12131294();
//input data baru
cout<<"Silakan masukan data baru" <<endl;
nilai.inputNilai12131294();
//hentikan perulangan
// break;
}
}
f.close();
}
/*
//edit(modifikasi) data
void updateData12131294(int nimDicari12131294){
NilaiMahasiswa12131294 nilai;
fstream f; //fstream bisa digunakan untuk baca/tulis langsung
f.open( namaFile, ios::in|ios::out );
while(f.read((char*)&nilai, sizeof(nilai))){
if(nilai.getNim() == nimDicari12131294) {
//tampilkan detail nilai sebelum proses modifikasi
nilai.outputNilai12131294();
//input data baru
cout<<"Silakan masukan data baru" <<endl;
nilai.inputNilai12131294();
int pos = - 1 * sizeof(nilai);
f.seekp(pos, ios::cur);
f.write((char*) &nilai, sizeof(nilai));
//hentikan perulangan
break;
}
}
f.close();
}
*/
void main(){
int pil;
int data;
cout<<"Pilihan"<<endl;
cout<<"1. Cari"<<endl;
cout<<"2. Update"<<endl;
cout<<"3. Delete"<<endl;
cin>>pil;
switch (pil){
case 1:
cout <<"\nMasukan data : ";cin>>data;
cariData12131294(data);
break;
case 2:
cout<<"\nMasukan data :" ;cin>>data;
updateData12131294(data);
break;
case 3:
cout<<"\nMasukan data :" ;cin>>data;
hapusData12131294(data);
break;
default:
cout<<"\nBaca Data\n";
bacaData12131294();
}
getch();
}
Source: www.gatewan.com
0 Response to "Program Operasi File C++ ( Write - Read - Search - Delete - Update )"
Posting Komentar