Witam! Na wstępie chciałbym wszystkim życzyć Wesołych świąt!
Wracając do tematu. W znalezionym w internecie programie (baza danych w c++) natknąłem się na funkcję:
int rozmiar(char *in)
{
string model , marka;
int rok , numer;
double cena;
ifstream plik;
plik.open(in);
int rozm = 0;
while(!plik.eof())
{
plik>>numer;
plik>>marka;
plik>>model;
plik>>rok;
plik>>cena;
rozm += 1;
}
plik.close();
return rozm;
}
O ile dobrze widzę ma ona za zadanie obliczyć ilość struktur w bazie?
Jej zastosowanie:
case 2:
{
int ile;
cout<<"Ile samochodow chcesz dopisac do bazy ?\n";
cin>>ile;
int roz = rozmiar(argv[1])+ile-1;
int rozm = rozmiar(argv[1])-1;
Samochod *s = new Samochod [roz];
zpliku(argv[1],s,rozm);
for(int i=rozm;i<roz;++i)
{
s[i].numer = i+1;
cout<<"Podaj marke :\n";
cin>>s[i].marka;
cout<<"Podaj model :\n";
cin>>s[i].model;
cout<<"Podaj rok produkcji :\n";
cin>>s[i].rok;
cout<<"Podaj cene :\n";
cin>>s[i].cena;
}
ofstream plik;
plik.open(argv[1]);
for(int i=0;i<roz;++i)
{
plik<<s[i].numer<<endl;
plik<<s[i].marka<<endl;
plik<<s[i].model<<endl;
plik<<s[i].rok<<endl;
plik<<s[i].cena<<endl;
plik<<"\n\n";
}
plik.close();
delete [] s;
break;
}
Czy można pozbyć się tej funkcji i jakoś inaczej rozwiązać ten problem? Jak widać w case baza jest ponownie odczytywana, chce się tego pozbyć w celu optymalizacji programu. Jakieś pomysły? Jeśli nie istnieje taka możliwość to proszę o wytłumaczenie dlaczego w funkcji ponownie zdefiniowano poszczegolne typy i jak to działa.