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;
}