• 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
84 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 Gaduła (3,200 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 Gaduła (3,200 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
1 odpowiedź 57 wizyt
pytanie zadane 14 czerwca w PHP, Symfony, Zend przez mknnn221 Początkujący (350 p.)
0 głosów
2 odpowiedzi 162 wizyt
+1 głos
2 odpowiedzi 232 wizyt
pytanie zadane 30 czerwca 2017 w SQL, bazy danych przez BeFree Początkujący (380 p.)
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

65,788 zapytań

112,438 odpowiedzi

237,542 komentarzy

46,728 pasjonatów

Przeglądających: 221
Pasjonatów: 7 Gości: 214

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.

...