Program C : Delete Data PerBaris di Database Sederhana (.txt)

Untuk menghapus data pada database(.txt), dapat dilakukan perintah "w" atau write pada saat kita menentukan pointer file(.txt ). Namun data yang dihapus tidak bisa ditentukan oleh user. Agar penghapusan tidak dilakukan untuk "semua" data, kita harus menggabungkan algoritma searching dan deleting untuk dapat menghapus data sesuai dengan keinginan user.


Berikut adalah source code untuk menghapus data sesuai keinginan user :


Source Code
#include <stdio.h>
#include <stdlib.h>

int main(){
FILE *f,*f2;
char c,baris[100],search1[30],search[30],baris2[100],yakin;
int status=0,status2=0;
int i,j,k,n;


//dibawah merupakan algoritma searching utk mencari data mana yg akan dihapus user
for (n=0;n<=30;n++){
search1[n]='`';
}
printf("Masukan nama data pd baris yg akan dihapus : ");
gets(search1);


for (n=0;n<=30;n++){
if(status2==0&&search1[n]=='`'){
search1[n-1]='`';
status2=1;
}
}
n=0;
while(search1[n]!='`'){
search[n]=search1[n];
n++;
}

f=fopen("Text.txt","r"); //INGAT NAMA FILE "Text.txt" DIGANTI DENGAN FILE DATABASE YANG INGIN ANDA HAPUS
i=0;j=1;k=1;
c=getc(f);
while(c!=EOF){
if(c=='\n') j++;
if(c==search[i]){
i<=n-1;
status++;
i++;
}
else{
i=0;
status=0;
}
if(status==n){
baris[k]=j;
k++;
}
c=getc(f);
}
fclose(f);

i=1;n=1;
while (i<=k-1){
if(baris[i]!=baris[i+1]) {baris2[n]=baris[i];n++;}
i++;
}

j=1;n=1;status=0;
f=fopen("Text.txt","r"); //INGAT NAMA FILE "Text.txt" DIGANTI DENGAN FILE DATABASE YANG INGIN ANDA HAPUS
c=getc(f);
while(c!=EOF){
if (baris2[n]==j) printf("%c",c);
if (baris2[n]==j&&c=='\n') n++;
if (c=='\n') j++;
c=getc(f);
}
fclose(f);

printf("\n\nYakin hapus? ketik huruf 'y' untuk menghapus data diatas : ");
scanf("%c",&yakin);
if(yakin!='y' ) {
printf("Data tidak dihapus");
exit(0);
}

//dibawah merupakan algoritma untuk menghapus data yang dipilih tadi
j=1;n=1;status=0;
f=fopen("Text.txt","r"); //INGAT NAMA FILE "Text.txt" DIGANTI DENGAN FILE DATABASE YANG INGIN ANDA HAPUS
f2=fopen("Temp.txt","w"); //FILE CADANGAN, TDK WAJIB DIGANTI
c=getc(f);
while(c!=EOF){
if (baris2[n]!=j) fprintf(f2,"%c",c);
if (baris2[n]==j&&c=='\n') n++;
if (c=='\n') j++;
c=getc(f);
}
fclose(f2);
fclose(f);

f2=fopen("Temp.txt","r"); //FILE CADANGAN, TDK WAJIB DIGANTI
f=fopen("Text.txt","w"); //INGAT NAMA FILE "Text.txt" DIGANTI DENGAN FILE DATABASE YANG INGIN ANDA HAPUS
c=getc(f2);
while(c!=EOF){
fprintf(f,"%c",c);
c=getc(f2);
}
fclose(f);
fclose(f2);
printf("\n\nData berhasil dihapus");

}
*karena panjang jadi dihidden :v

Pada program ini, di deklarasikan 2 pointer file yaitu file yang akan dihapus datanya dan file untuk menyimpan sementara(cadangan/temporary). Berbeda dengan penghapusan "semua" data yang tidak memerlukan file cadangan temp karena data tidak perlu disimpan sementara.

Bagian atas merupakan algoritma searching yang telah saya share di postingan sebelumnya(untuk penjelasan bisa cek postingan sebelumnya :v). Setelah user mencari data yang ingin dihapus, maka akan muncul peringatan "apakah user yakin ingin menghapus data tersebut?". jika iya, maka program akan lanjut ke algoritma bagian bawah yaitu penghapusan data. Algoritma tersebut menghapus "baris" yang berisi data yg sebelumnya telah diinput/search oleh user.

Hasil :


Sekian postingan kali ini, semoga bermanfaat.

6 komentar:

Copyright © 2013 Yanamon