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

Aktualizowanie danych w pliku [C++]

Object Storage Arubacloud
0 głosów
139 wizyt
pytanie zadane 14 marca 2019 w C i C++ przez Michal440 Nowicjusz (140 p.)
edycja 14 marca 2019 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 2019 przez Szfierzak Gaduła (3,750 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 2019 przez Michal440 Nowicjusz (140 p.)
Mógłbyś napisać to w kodzie jakby miało to mniej więcej wyglądać?
komentarz 17 marca 2019 przez Szfierzak Gaduła (3,750 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ź 100 wizyt
pytanie zadane 14 czerwca 2019 w PHP przez mknnn221 Początkujący (460 p.)
0 głosów
2 odpowiedzi 377 wizyt
+1 głos
2 odpowiedzi 658 wizyt
pytanie zadane 30 czerwca 2017 w SQL, bazy danych przez BeFree Początkujący (380 p.)

92,554 zapytań

141,399 odpowiedzi

319,535 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...