Usuwanie danych z pliku tekstowego

0

Witam
Mam program w którym dopisuję sobie dane osób(numer albumu,imię,nazwisko i średnią ocen).Dane te są kolejnymi składnikami struktury.Obiektem struktury jest tablica jednowymiarowa.
Chciałbym dołączyć do tego programu funkcję która kasowałaby wszystkie dane osoby ,przez podanie jej numeru albumu.Nie wiem czy jest to możliwe z tym co na razie mam ale może...
Pomoże ktoś coś?
Byłbym wdzięczny za wskazówki!

Treść kodu:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

class persons
{
public:
    int numer;
    string imie,nazwisko;
    float srednia;
};

persons person[100];

void add(fstream &plik)
{
    short liczba,i;
    cout<<"Podaj ile osob chcesz wpisac do listy: ";cin>>liczba;
    for(i=0;i<liczba;i++)
    {
       
        cout<<"Podaj numer albumu: ";cin>>person[i].numer;plik<<person[i].numer<<endl;
        cout<<"Podaj imie: ";cin>>person[i].imie;plik<<person[i].imie<<endl;
        cout<<"Podaj nazwisko: ";cin>>person[i].nazwisko;plik<<person[i].nazwisko<<endl;
        cout<<"Podaj srednia ocen: ";cin>>person[i].srednia;plik<<person[i].srednia<<endl;
       
    }

}

void usun(fstream &plik)
{
    short nr;
    cout<<"Podaj nr albumu osoby ktorej dane chcesz usunac: ";cin>>nr;
   
    //?????

}

int _tmain(int argc, _TCHAR* argv[])
{
    fstream plik("C:\\Users\\Jose\\Desktop\\file1.txt", ios::in | ios::out | ios::app);
    char znak;
    if(!plik)
    cout<<"Nie udalo sie otworzyc pliku!"<<endl;
    else
    {
    cout<<"Wybierz jedna z opcji:"<<endl;
    cout<<"MENU"<<endl;
    cout<<"1-Dopisz do listy"<<endl;
    cout<<"2-Usun z listy"<<endl;
    cin>>znak;
    switch(znak)
    {
    case '1':
        {
           
            add(plik);


        }break;
        
    case '2':
        {
            
            usun(plik);

        }break;

    default :
        cout<<"Podano nieprawidlowy numer!"<<endl;break;
    }
    }
    plik.close();
    system("pause");
	return 0;
}
 
0

Tablica jest kiepska do tego celu, bo wyszukiwanie jest wolne (trzeba lecieć po całej tablicy), a i usuwanie jest wolne (trzeba przesunąć wszystkie następne elementy o jedno pole). Do takich operacji dobre są mapy, np. std::unordered_map, gdzie nr albumu jest kluczem.

Swoją drogą, class Person, bo jeden obiekt klasy to jedna osoba.

0

Może tak: mając tablicę person każdy jej element oznacza jedną osobę(wszystkie jej dane) wiec mógłbym teoretycznie przesunąć wszystkie osoby o jedno w lewo i dane tamtej osoby zostałyby skasowane.Jednakże nie zmienia to faktu, że w pliku tekstowym nic by nie uległo zmianie.
Ma ktoś jeszcze jakiś pomysł? ☺

1 użytkowników online, w tym zalogowanych: 0, gości: 1