• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Aktualizowanie danych w pliku [C++]

0 głosów
79 wizyt
pytanie zadane 14 marca w C i C++ przez Michal440 Nowicjusz (140 p.)
edycja 14 marca przez Michal440

Witam, nie mogę sobie poradzić z aktualizowaniem danych w pliku w C++. Dane w pliku wyglądają następująco (imię, nazwisko, klasa oraz wiek):
Jan Kowalski 1TS 17 
Karolina Nowak 4TI 20 

I powiedzmy, że chciałbym zmienić wiek Jana Kowalskiego z 17 na 18 - jak musiałbym to zrobić?

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

using namespace std;

int main()
{

    int uczniowie=25;
    fstream p1;
    ifstream p2;
    struct baza
    {
        string imie;
        string nazw;
        string klasa;
        string wiek;
    }u;



    string sz;
    int x;

    do
    {
        cout<<"MENU GLOWNE"<<endl;
        cout<<"----------------------------"<<endl;
        cout<<"1. Dopisz dane"<<endl;
        cout<<"2. Wyszukiwanie danych"<<endl;
        cout<<"3. Popraw dane"<<endl;
        cout<<"4. Usun rekord"<<endl;
        cout<<"5. Wyswietl wszystkie dane"<<endl;
        cout<<"6. KONIEC"<<endl;
        cout<<"----------------------------"<<endl;
        cout<<"Wybierz opcje: "; cin>>x;
        cout<<""<<endl;

        switch(x)           
            case 3:
                system("cls");
                p2.open("dane.txt", ios::in, ios::out);
                if(p1.good())
                {
                    cout<<"Wybrales opcje poprawiania danych:"<<endl<<endl;



                }else cout<<"Blad otwarcia pliku!";
                p1.close();
                cout<<""<<endl;
                cout<<"Wcisnij klawisz ENTER by powrocic do MENU"<<endl;
                system("pause");
                system("cls");

            break;
            default: cout<<"BLAD!"<<endl<<endl;
        }


    }while(x!=6);


    return 0;
}

Na razie to mam, ale tu nic wielkiego nie ma, nie wiem jak mam się za to zabrać. Bardzo bym prosił o pomoc.

1 odpowiedź

0 głosów
odpowiedź 15 marca przez Szfierzak Bywalec (2,460 p.)
Najprościej będzie jeżeli wczytasz dane z pliku do jakiejś struktury(listy, vektora), i wtedy możesz w dowolny sposób zmieniać dane w rekordach. Na koniec działania programu zapisz całą listę do pliku. Zastanów się też, czy nie potrzebujesz jakiegoś unikatowego identyfikatora dla osób - id, pesel, cokolwiek, ponieważ może zdarzyć się, że jest więcej osób o tym samym imieniu i nazwisku.
komentarz 16 marca przez Michal440 Nowicjusz (140 p.)
Mógłbyś napisać to w kodzie jakby miało to mniej więcej wyglądać?
komentarz 17 marca przez Szfierzak Bywalec (2,460 p.)

Zakładając istnienie struktury:

struct Base{
    int Id;
    string Name;
    string Surname;
    string Group;
    int Age;
};

można napisać funkcje do wczytywania/zapisu/edycji danych mniej więcej takie:

void readFile( string fileName, vector<Base*> *data )
{
    int id, age;
    string name, surname, group;
    Base *record;
    ifstream file(fileName.c_str());

    if( file.is_open() )
    {
        while( file >> id >> name >> surname >> group >> age )
        {
            record = new struct Base;
            record->Id = id;
            record->Name = name;
            record->Surname = surname;
            record->Group = group;
            record->Age = age;
            data->push_back(record);
        }
        file.close();
    }
    else
    {
        cout << "Unable to open file: " << fileName <<endl;
    }
}

void writeFile( string fileName, vector<Base*> *data )
{
    ofstream file(fileName.c_str());
    if( file.is_open() )
    {
        for(int i=0; i<data->size(); i++)
        {
            file << data->at(i)->Id << "    " << data->at(i)->Name << "     " << data->at(i)->Surname << "      " << data->at(i)->Group << "    " << data->at(i)->Age << endl;
        }
        file.close();
    }
    else
    {
        cout << "Unable to open file: " << fileName << endl;
    }
}

void showData( vector<Base*> *data )
{
    for(int i=0; i<data->size(); i++)
    {
        cout << data->at(i)->Id << "    " << data->at(i)->Name << "     " << data->at(i)->Surname << "      " << data->at(i)->Group << "    " << data->at(i)->Age << endl;
    }
}

void editData( vector<Base*> *data )
{
    int id, age;
    string name, surname, group;
    cout << "Select id for edit: ";
    cin >> id;
    for(int i=0; i<data->size(); i++)
    {
        if( data->at(i)->Id == id)
        {
            cout << "Edit data: ";
            cout << data->at(i)->Id << "    " << data->at(i)->Name << "     " << data->at(i)->Surname << "      " << data->at(i)->Group << "    " << data->at(i)->Age << endl << endl;
            cout << "Write new name: ";
            cin >> name;
            cout << "Write new surname: ";
            cin >> surname;
            cout << "Write new group: ";
            cin >> group;
            cout << "Write new age: ";
            cin >> age;
            data->at(i)->Name = name;
            data->at(i)->Surname = surname;
            data->at(i)->Group = group;
            data->at(i)->Age = age;
            cout << "Data updated!!" << endl;
            break;
        }
    }
}

Musisz jednak pamiętać, że trzeba odpowiednio zaalokować pamięć dla wektora, a później ją zwolnić.

Podobne pytania

0 głosów
2 odpowiedzi 155 wizyt
+1 głos
2 odpowiedzi 165 wizyt
pytanie zadane 30 czerwca 2017 w SQL, bazy danych przez BeFree Początkujący (380 p.)
0 głosów
2 odpowiedzi 169 wizyt
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

62,306 zapytań

108,432 odpowiedzi

226,358 komentarzy

35,031 pasjonatów

Przeglądających: 152
Pasjonatów: 1 Gości: 151

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...