Помогите мне справить небольшой недочет в моей задачке, а именно в функции удаления: Короче вначале вводим например 3 записи Номер записи--------1 Фамилия -------------Иванов Номер группы-------26 Оценки----------------1 2 3 4 5 6 7
Номер записи--------2 Фамилия--------------Петров Номер группы-------34 Оценки----------------2 3 3 3 3 3 3
Номер группы-------3 Фамилия -------------Сидоров Номер группы-------51 Оценки----------------3 4 4 4 4 4 4
Потом вызываем функцию удаления и удаляем например запись 2 Потом читаем файл и получается: Номер записи--------1 Фамилия -------------Иванов Номер группы-------26 Оценки----------------1 2 3 4 5 6 7
Номер группы-------2 Фамилия -------------Сидоров Номер группы-------51 Оценки----------------3 4 4 4 4 4 4
Номер группы-------3 Фамилия -------------Сидоров Номер группы-------51 Оценки----------------3 4 4 4 4 4 4
Т.е. запись номер 3 должна была стать пустой, но этого не произошло, я даже условие специальное написал, чтобы оно обнулилось, но все никак if(i==p) { for(l=0;l<32;l++) { ff[l]=0; } }
| Код | #include "stdafx.h" #include <iostream.h> #include <fstream.h> #include "stdlib.h" #include <string.h> #include <conio.h> #include "stdio.h"
struct STUDENT { char familiya[20]; int nomer_gruppi; double sr_usp; };
STUDENT f[10];
void write(); void read(); void menu(); void udalenie(); //void voz_sr_ball();
int recsize = 20+4+8;
fstream fbin;
int main() { char filekatalog[81]; char filename[81]; printf("Vvedite katalog dla faila: "); cin.getline(filekatalog,80); printf("\nVvedite imya faila dla zapisi: "); cin.getline(filename,80); strcat(filekatalog,filename); fbin.open(filekatalog, ios::binary | ios::in | ios::out); if(!fbin) { cout << "\aFail " << filename << " ne bil uspershno otkrit"; return -1; } menu(); fbin.close(); return 0; }
void menu() { int choice = 0; system ("cls"); cout << "\n\n\t\t-----------------------------------"; cout << "\n\n\t\t|****************MENU**************|"; cout << "\n\n\t\t|Zapicati v fail ------ PRESS 1|"; cout << "\n\n\t\t|Prochitati zapici ------ PRESS 2|"; cout << "\n\n\t\t|Udalenie zapici ------ PRESS 3|"; cout << "\n\n\t\t|Vivod po > sr.balla ------ PRESS 4|"; cout << "\n\n\t\t|Vixod iz programmi ------ PRESS 5|"; cout << "\n\n\t\t-----------------------------------"; cout << "\n\n\n\t\t\t\tVash vibor \n\t\t\t\t"; cin >> choice; switch(choice) { case 1: write(); break; case 2: read(); break; case 3: udalenie(); break; // case 4: voz_sr_ball(); // break; case 5: break; default:cout << "Nepravilnij vibor"; menu(); break; } }
void write() { int i,n; double sum; int o[7]; char choice = 'y'; do { sum=0; cout << "\nVvedite nomer dla zapici "; cin >> n; n-=1; fbin.seekg(recsize * n); printf("\nvvedite familiyu i iniciali: "); gets(f[n].familiya); fbin.write(f[n].familiya,20); cout<<"\nVvedite nomer gruppi: "; cin>>f[n].nomer_gruppi; fbin.write(reinterpret_cast<char*>(&f[n].nomer_gruppi),4); cout<<"\nVvedite ocenki po 7 predmetam: "; i=0; while(i<7) {cin>>o[i]; i++;} for(i=0;i<7;i++) { sum+=o[i]; } f[n].sr_usp=sum/7; fbin.write(reinterpret_cast<char*>(&f[n].sr_usp),8); fbin.clear(); cout << "Prodoljiti? (y/n)"; cin >> choice; }while(choice != 'n'); menu(); }
void read() { char familiya[20]; int nomer_gruppi; double sr_usp; char choice = 'y'; int n; do { cout << "\nVvedite nomer otkuda budem 4itati dannnie: "; cin >> n; n-=1; fbin.seekg(n*recsize); fbin.read(familiya,20); fbin.read(reinterpret_cast<char*>(&nomer_gruppi),4); fbin.read(reinterpret_cast<char*>(&sr_usp),8); fbin.clear(); cout << "Familiya - " << familiya << endl; cout << "Nomer gruppi - " << nomer_gruppi << endl; cout << "Srednya uspevaemosti - " << sr_usp << endl; for(int i=0;i<20;i++) { familiya[i]=0; } nomer_gruppi=NULL; sr_usp=NULL; cout << "Prodoljim? (y/n)"; cin >> choice; }while(choice != 'n'); menu(); }
void udalenie() { int i,n,p=0,l; char choice = 'y'; char ff[32]; char output[20]; for(i=0;i<20;i++) { fbin.seekg(i*recsize); fbin.read(output,20); if(output[0]!=0)p++; for(l=0;l<20;l++) {output[l]=0;} fbin.clear(); } do { cout << "\nVvedite nomer zapici dla udaleniya "; cin >> n; for( i=n;i<=p;i++) { fbin.seekg(i*recsize); fbin.read(ff,32); fbin.seekg((i-1)*recsize); if(i==p) { for(l=0;l<32;l++) { ff[l]=0; } } fbin.write(ff,32); fbin.clear(); } cout << "Prodoljiti? (y/n)"; cin >> choice; }while(choice != 'n'); menu(); }
|
|