C++ wyszukiwanie usunięcie edycja

Odpowiedz Nowy wątek
2012-06-12 16:20
0

Witam!
Nie wiem od czego zacząć, muszę przerobić program tak aby dało się z pliku wyszukiwać dane usunąć lub edytować jakąś cześć
Plik c++ wygląda tak:

 #include <iostream>
#include <string>
#include <fstream>
using namespace std;

struct Samochod
{
    int numer;       //kolejny
    string marka;
    string model;
    int rok;                 
    double cena;
}; 

const int n=200;
Samochod tab [n];

int rozmiar()
{
    string model , marka;
    int rok , numer;
    double cena;

    ifstream plik;
    plik.open("baza.txt");
    int rozm = 0;

    while(!plik.eof())
    {
        plik>>numer;
        plik>>marka;
        plik>>model;
        plik>>rok;
        plik>>cena;

        rozm += 1;
    }

    plik.close();
    return rozm-1;
}

void zpliku(int n)
{
    ifstream plik;
    plik.open("baza.txt");

    for(int i=0;i<n;i++)
    {
        plik>>tab[i].numer;
        plik>>tab[i].marka;
        plik>>tab[i].model;
        plik>>tab[i].rok;
        plik>>tab[i].cena;
    //  cout<<tab[i].model;
    }
    plik.close();
}

void dopliku(int n)
{
        ofstream plik;
        plik.open("baza.txt");
        for (int i=0;i<n;i++)
        {
        plik<<tab[i].numer<<endl;
        plik<<tab[i].marka<<endl;
        plik<<tab[i].model<<endl;
        plik<<tab[i].rok<<endl;
        plik<<tab[i].cena<<endl;
        plik<<endl;
    }
        plik.close(); 
 }

int main()
{   
    int i=0;
    int znak;

    int ile=rozmiar();
   // cout<<ile;
    zpliku(ile);

    do
    {

    cout<<"     Dopisanie nowego somochodu/smochodow        wcisnij - 1\n";
    cout<<"  Wypisanie wszystkich samochodow            wcisnij - 2\n"; 
    cout<<"Edycja                                      wcisnij - 3\n";
    cout<<"     Wyszukiwanie                                wcisnij - 4\n";
    cout<<"     Usuniecie                                   wcisnij - 5\n";
    cout<<"     Wyjscie z programu                          wcisnij - 0\n"; 
    cout<<"Co chcesz robic ??\n";   
    cin>>znak;  

    switch(znak)
    {
        case 1:
        {
        ile=ile+1;
        i=ile-1;
       // cout<<"ile z dodaj"<<ile;
        tab[i].numer = ile;
        cout<<"Podaj marke :\n";
        cin>>tab[i].marka;
        cout<<"Podaj model:\n";
        cin>>tab[i].model;
        cout<<"Podaj rok produkcji :\n";
        cin>>tab[i].rok;
        cout<<"Podaj cene samochodu :\n";
        cin>>tab[i].cena;

        break;
        }
        case 2:
        {
           for (int i=0;i<ile;i++)
           {
            cout<<tab[i].numer<<endl;
            cout<<tab[i].marka<<endl;
            cout<<tab[i].model<<endl;
            cout<<tab[i].rok<<endl;
            cout<<tab[i].cena<<endl;
            cout<<endl;
    }
             break;
         }

         case 3:
              {

}             

        case 0:
        {
            dopliku(ile);
            cout<<"Dziekuje! Dowidzenia ;p ;)\n";

            //break;
        }
    }
    }while(znak != 0);

    return 0;
}

a plik tekstowy wyglada tak:

1
seat
toledo
1994
4300

2
fiat
uno
1999
2300

3
seat
leon
1994
3434

4
opel
zafira
1998
7800

Mógłby mi ktoś pomóc?
Bo nie mam pojecia naprawdę jak zrobić te kilka poleceń.
Próbowałem wyszukiwać pętlą if lecz coś mi nie wychodziło
Czekam na jakieś podpowiedzi :)

edytowany 1x, ostatnio: xmadyx, 2012-06-12 16:21
Okropne formatowanie kodu... poczytaj o Indent http://www.gnu.org/software/indent/ - mrfustrr 2012-06-12 16:33
Tablica wielkości 200?! Użyj zmiennej rozm do ustawienia wielkości tablicy. - pret0rian 2012-06-12 17:03

Pozostało 580 znaków

2012-06-12 16:44
0

Podaj co Ci konkretnie nie wychodzi, w pliku masz puste entery - nie wczytujesz ich...


"Jeśli udoskonalasz coś dostatecznie długo – na pewno to zepsujesz."

Pozostało 580 znaków

2012-06-12 17:05
0

nie mam pojęcia jak wyczytać z tego pliku np. Wpisuje się model. i wyskakuje marka rok cena
usunięcie, to też usunięcie danego modelu
Edycja, czyli zmiana elementów

Pozostało 580 znaków

2012-06-12 17:14
0
xmadyx napisał(a):

Próbowałem wyszukiwać pętlą if lecz coś mi nie wychodziło
Dopóki będziesz próbować z pętlą if na 100% nic nie wyjdzie.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2012-06-12 17:22
0

Robiłem podobny program na studiach. Polecam zapisać sobie dane w innym formacie, np. takim:

1|seat|toledo|1994|4300
2|fiat|uno|1999|2300
3|seat|leon|1994|3434
4|opel|zafira|1998|7800

Wtedy wczytujesz sobie po linijce i piszesz funkcję Split rozdzielającą dane po znaku |.

tzw. "separator" - pret0rian 2012-06-12 17:34
Albo robisz split albo wczytujesz napisy: getline(plik,marka,'|'); po wczytaniu liczby oprócz ostatniej dajesz plik.ignore(INT_MAX,'|'); - _13th_Dragon 2012-06-12 18:44

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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