Advertisement
tegusta

elimina record in un file (binari)

May 13th, 2012
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.72 KB | None | 0 0
  1. /*
  2. Studente : Scia Massimiliano
  3. Classe : 3IC
  4. Data : 13/05/12 15:49
  5. Nome del file : elimina file
  6. */
  7.  
  8. #include <iostream>
  9. #include <cmath>
  10. #include <ctime>
  11. #include <cstdlib>
  12. #include <cctype>
  13. #include <windows.h>
  14. #include <fstream>
  15. #include <time.h>
  16. #include <stdio.h>
  17. #define N 20
  18.  
  19. using namespace std;
  20.  
  21. struct mannaggia{
  22. char davide[N];
  23. char pappa[N];
  24. };//mannaggia
  25.  
  26. bool scrivi(char* nomefile){
  27. int n;
  28. cout<<"\nQuanti nomi vuoi inserire?\n- ";
  29. cin>>n;
  30. FILE* f;
  31. mannaggia a_te;
  32. f=fopen(nomefile,"ab+");
  33. if(f==NULL)
  34. return 0;
  35. for(int i=0;i<n;i++){
  36. cout<<"\nInserisci il nome: ";
  37. fflush(stdin);
  38. cin.get(a_te.davide,N,'\n');
  39. fflush(stdin);
  40. cout<<"\nInserisci il cognome: ";
  41. cin.get(a_te.pappa,N,'\n');
  42. fflush(stdin);
  43. fwrite(&a_te,sizeof(mannaggia),1,f);
  44. }//for
  45. fclose(f);
  46. return 1;
  47. }//scrivi
  48.  
  49. bool elimina(char* nomefile){
  50. FILE* f;
  51. FILE* f1;
  52. mannaggia m;
  53. f=fopen(nomefile,"rb");
  54. f1=fopen("temp.txt","wb");
  55. if(f==NULL || f1==NULL)
  56. return 0;
  57. cout<<"\nn = nome, c = cognome, p = posizione\n- ";
  58. char c;
  59. do{
  60. cin>>c;
  61. if(c!='n' && c!='p' && c!='c')
  62. cout<<"\nErrore.\n- ";
  63. }//do
  64. while(c!='n' && c!='p' && c!='c');
  65. if(c=='n'){
  66. char nome[N];
  67. cout<<"\nInserisci il nome da cercare: ";
  68. fflush(stdin);
  69. cin.get(nome,N,'\n');
  70. fflush(stdin);
  71. fread(&m,sizeof(mannaggia),1,f);
  72. while(!feof(f)){
  73. if(strcmp(nome,m.davide)!=0)
  74. fwrite(&m,sizeof(mannaggia),1,f1);
  75. fread(&m,sizeof(mannaggia),1,f);
  76. }//while
  77. }//if
  78. else if(c=='c'){
  79. char cognome[N];
  80. cout<<"\nInserisci il cognome da cercare: ";
  81. fflush(stdin);
  82. cin.get(cognome,N,'\n');
  83. fflush(stdin);
  84. fread(&m,sizeof(mannaggia),1,f);
  85. while(!feof(f)){
  86. if(strcmp(cognome,m.pappa)!=0)
  87. fwrite(&m,sizeof(mannaggia),1,f1);
  88. fread(&m,sizeof(mannaggia),1,f);
  89. }//while
  90. }//else-if
  91. else{
  92. int i=0,maxrec,pos;
  93. fseek(f,0,SEEK_END);
  94. maxrec=ftell(f)/sizeof(mannaggia);
  95. do{
  96. cin>>pos;
  97. pos--;
  98. if(pos>maxrec)
  99. cout<<"\nErrore.\n- ";
  100. }//do
  101. while(pos>maxrec);
  102. fseek(f,0,SEEK_SET);
  103. while(i<maxrec){
  104. fread(&m,sizeof(mannaggia),1,f);
  105. if(i!=pos)
  106. fwrite(&m,sizeof(mannaggia),1,f1);
  107. i++;
  108. }//while
  109. }//else
  110. fclose(f);
  111. fclose(f1);
  112. remove(nomefile);
  113. rename("temp.txt",nomefile);
  114. return 1;
  115. }//elimina
  116.  
  117. bool visualizza(char* nomefile){
  118. FILE* f;
  119. f=fopen(nomefile,"rb+");
  120. if(f==NULL)
  121. return 0;
  122. mannaggia a_me;
  123. while(fread(&a_me,sizeof(a_me),1,f) && !feof(f))
  124. cout<<"\n\nNome: "<<a_me.davide<<" Cognome: "<<a_me.pappa;
  125. fclose(f);
  126. return 1;
  127. }//visualizza
  128.  
  129.  
  130. void end(void){
  131. fflush(stdin);
  132. cout<<"\n\nPremere Invio per continuare.";
  133. getchar();
  134. }//end
  135.  
  136. int main(){
  137. char nomefile[N];
  138. char c;
  139. bool s,m,v;
  140. cout<<"\nIl nome del file su cui scrivere e`: ";
  141. fflush(stdin);
  142. cin.get(nomefile,N,'\n');
  143. fflush(stdin);
  144. cout<<"\n\n";
  145. v=visualizza(nomefile);
  146. s=scrivi(nomefile);
  147. v=visualizza(nomefile);
  148. cout<<"\nVuoi eliminare? s=si n=no\n- ";
  149. cin>>c;
  150. if(c=='s'){
  151. m=elimina(nomefile);
  152. v=visualizza(nomefile);
  153. }//if
  154. else
  155. v=visualizza(nomefile);
  156. end();
  157. return 0;
  158. }//main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement