Podgląd pojedynczego posta
Stary 12.05.2007, 12:01   #7
Kasprzak
...niepoprawny marzyciel.
 
Avatar użytkownika Kasprzak
 
Data rejestracji: 25.06.2002
Lokalizacja: Poznań
Posty: 4,752
Kasprzak zaczyna zdobywać reputację <1 - 49 pkt>
odswiezam troche stary temat, ale poszukuje programu, oparty na obiektowym (klasy i dziedziczenie jakies itp.), ktore zawiera jakies dane (np. ksiazka telefoniczna - imie, nazwisko, telefon i takie tam). Ktore by przy otwarciu programu wczytywalo plik (na samym poczatku funkcja zapisu w mainie by byla wywolywana, a na koncu zapisywalo zmiany (funkcja na koncu by byla wywolywana)
Glownie chodzi o zrobienie takiej bazy na klasach zeby cos dziedziczylo itp. Niby proste, ale nie moge sobie z tym poradzic

ps. i nie wiem jak napisac modyfikacje wpisu (np. wyswietla sie:
Edytujesz:
id[3] Jan, Kowalski, 232424324, cos tam
wpisz nowe Imie,Nazwisko,Nr,Cos tam. np.


napisalem cos takiego i nie dziala (narazie funkcje wstawilem tak zeby sprawdzic czy dziala wywolanie - takze nie robia sie na wstpie i koncu programu ale to pozniej... i ogolnie tak: w DevC++ nie wywala bledu, ale zapisuje plik w takiej formie ze nie do odczytu, Borland Personal 6 wywala blad debuggera jakis z alokacja pamieci chyba. Co to moze byc. :
Kod:
#include <cstdlib>
#include <iostream>
#include <fstream>

#define MAX_WPISOW 100

using namespace std;

class TKsiazka {
      private:
              struct SWpis { // struktura wpisu kazdego jednego :)
                     int id; // tutaj id do kasowania/zerowania
                     string imie, nazwisko;
                     long int nrtel;
              } Wpis[MAX_WPISOW]; // maksymalnie 11 bo liczac od 0
      public:
             TKsiazka(); // konstruktor
             void dodaj(string imie, string nazwisko, long int nr);
             void zapiszDoPliku(char *sciezka);
             void zaladuj(char *sciezka);
             int wolny(void);
             string pokaimie(int id);
};

// wyzerowanie calej tsblicy wpisow, zawczasu :)
TKsiazka::TKsiazka() {
                 for (int i=0;i<MAX_WPISOW;i++)
                     Wpis[i].nrtel = 0;
}

string TKsiazka::pokaimie(int id) {
       return Wpis[id].imie+"\n";
}

void TKsiazka::zaladuj(char *sciezka) {
     FILE *fd;
     
     fd = fopen(sciezka, "r");
     
     if (!fd) {
              cout << "Nie moge otworzyc pliku." << endl;
              return;
     }
     
     //fseek(fd, 0, SEEK_SET);
     //while (!feof(fd))
           fread(&Wpis, sizeof(Wpis), 1, fd);
}

void TKsiazka::dodaj(string imie, string nazwisko, long int nr) {
     int i = wolny(); // zmienna i ma id pierwszego wolnego wpisu, ktory zostanie zapisany pod tym id.
     
     Wpis[i].id = i;
     Wpis[i].imie = imie;
     Wpis[i].nazwisko = nazwisko;
     Wpis[i].nrtel = nr;
}

int TKsiazka::wolny(void) {
    for (int i=0;i<MAX_WPISOW;i++)
        if (!Wpis[i].imie.length())
           return i;
}

void TKsiazka::zapiszDoPliku(char *sciezka) {
     FILE *fd;
     
     fd = fopen(sciezka, "w+");
     
     for (int i=0;Wpis[i].nrtel;i++)
         fwrite(&Wpis, sizeof(Wpis), 1, fd);
     
     /*ofstream fd;
    
     fd.open(sciezka);
     
     for (int i=0;Wpis[i].nrtel;i++) {
         fd << Wpis[i].id << endl;
         fd << Wpis[i].imie << endl;
         fd << Wpis[i].nazwisko << endl;
         fd << Wpis[i].nrtel << endl;
     }
     
     fd.close();
     */
}

// otwieranie analogicznie tyle ze zmienna juz bedzie ifstream

int main(int argc, char *argv[])
{
    TKsiazka ktel;
    string i, n;
    long int nr;
    
    cout << "Podaj imie potem nazwisko i numer" << endl;
    cin >> i >> n >> nr;
    
    ktel.dodaj(i, n, nr);
    ktel.zapiszDoPliku("dupka.txt");
    ktel.zaladuj("dupka.txt");
    
    cout << ktel.pokaimie(0);
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
__________________
Pozdrawiam!
Kasprzak jest offline   Odpowiedz cytując ten post