Witam mam bardzo pilny problem, otóż mam do dokończenia projekt bazy danych w C++. Jednak zaciąłem się w pewnym miejscu i brakuje mi pomysłów.
Jeśli ktoś byłby w stanie mi pomóc, będę bardzo wdzięczny. Program ma czytać dane i zapisywać do pliku, ma być możliwa edycja, usuwanie, sortowanie, przeglądanie, nadpisywanie i inne rzeczy które są w kodzie. Postanowiłem zrobić to za pomocą vektorów, jednak jest jakiś problem. Wklejam swój kod:
#include <iostream>
#include <string>
#include <cstdio>
#include <fstream>
#include <windows.h>
#include <sstream>
#include <vector>
#include <cstdio>
#include <conio.h>
using namespace std;
class zawodnik
{
public:
string imie;
string nazwisko;
int wiek;
int zawwaga;
int wzrost;
string klub;
string getimie();
string getnazwisko();
int getwiek();
int getzawwaga();
int getwzrost();
string getklub();
};
class bazazawodnicy:public zawodnik
{
public:
int ilosc;
int ilosc_szuk; //zmienna tymczasowa - uzywana do przechowywania informacji o ilosci znalezionych zawodnikow
vector<zawodnik> zawodnicy;
vector<zawodnik> zawodnicy_szuk; // zmienna tymczasowa - uzywana do przechowywania posortowanych/wyszukanych zawodnikow
int getilosc();
int getilosc_szuk();
void usunelement(int nr);
void wyszukajwiek(int liczba);
void wyszukajnazw(string nazwisko);
void usunelementy(int nrstart, int nrkoniec);
void dodajelement(string aimie, string anazwisko, int awiek, int azawwaga, int awzrost, string aklub);
void zapisz_zawodnicy(string nazwabazy);
void getinfo(int index);
void drukujwszystko();
void sortujnazw();
void sortujwiek();
void wyczyscwszystko();
void otworz_plik_zawodnicy(string nazwabazy);
};
string int_na_string(int wartosc) //funkcja string zamieniajaca int na string(potrzebne przy wpisywaniu wartosci int do tablicy stringow zeby uniknac dziwnych znaczkow
{
ostringstream ss;
ss << wartosc;
string str = ss.str();
return str;
}
void bazazawodnicy::zapisz_zawodnicy(string nazwabazy)
{
string sciezka = nazwabazy + ".txt";
ofstream zapis(sciezka.c_str());
for(int i=0; i<ilosc; i++)
{
zapis<<zawodnicy[i].getimie();
zapis<<"#";
zapis<<zawodnicy[i].getnazwisko();
zapis<<"#";
zapis<<zawodnicy[i].getwiek();
zapis<<"#";
zapis<<zawodnicy[i].getzawwaga();
zapis<<"#";
zapis<<zawodnicy[i].getwzrost();
zapis<<"#";
zapis<<zawodnicy[i].getklub();
zapis<<endl;
}
zapis.close();
}
string zawodnik::getimie()
{
return imie;
}
string zawodnik::getnazwisko()
{
return nazwisko;
}
int zawodnik::getwiek()
{
return wiek;
}
int zawodnik::getzawwaga()
{
return zawwaga;
}
int zawodnik::getwzrost()
{
return wzrost;
}
string zawodnik::getklub()
{
return klub;
}
/*
vector<zawodnik> bazazawodnicy::getinfo(int index)
{
return zawodnicy[index];
}
*/
void bazazawodnicy::drukujwszystko()
{
for(int i=0; i<=ilosc; i++)
{
cout<<"Zawodnik nr."<<i<<endl;
cout<<"Imie: "<<zawodnicy[i].getimie()<<endl;
cout<<"Nazwisko: "<<zawodnicy[i].getnazwisko()<<endl;
cout<<"Wiek: "<<zawodnicy[i].getwiek()<<endl;
cout<<"Waga: "<<zawodnicy[i].getzawwaga()<<endl;
cout<<"Wzrost: "<<zawodnicy[i].getwzrost()<<endl;
cout<<"Klub: "<<zawodnicy[i].getklub()<<endl<<endl;
}
}
void bazazawodnicy::sortujnazw()
{
zawodnicy_szuk = zawodnicy;
//sort(zawodnicy_szuk.begin(), zawodnicy_szuk.end(), [](const zawodnik& lhs, const zawodnik& rhs){ return lhs.nazwisko < rhs.nazwisko; });
}
void bazazawodnicy::sortujwiek()
{
zawodnicy_szuk = zawodnicy;
//zawodnicy_szuk.sort(objs.begin(), objs.end(), [](const zawodnik& lhs, const zawodnik& rhs){ return lhs.wiek < rhs.wiek; });
}
int bazazawodnicy::getilosc()
{
return ilosc;
}
int bazazawodnicy::getilosc_szuk()
{
return ilosc_szuk;
}
void bazazawodnicy::wyczyscwszystko()
{
zawodnicy.clear();
ilosc = 0;
}
void bazazawodnicy::wyszukajwiek(int liczba)
{
for(int i=0; i<=ilosc; i++)
{
if(zawodnicy[i].wiek == liczba)
{
zawodnicy_szuk[ilosc_szuk] = zawodnicy[i];
ilosc_szuk++;
}
}
}
void bazazawodnicy::usunelement(int nr)
{
zawodnicy.erase(zawodnicy.begin() + nr);
}
void bazazawodnicy::usunelementy(int nrstart, int nrkoniec)
{
zawodnicy.erase(zawodnicy.begin() + nrstart, zawodnicy.begin() + nrkoniec);
}
void bazazawodnicy::dodajelement(string aimie, string anazwisko, int awiek, int azawwaga, int awzrost, string aklub)
{
zawodnik zaw;
zaw.imie = aimie;
zaw.nazwisko = anazwisko;
zaw.wiek = awiek;
zaw.zawwaga = azawwaga;
zaw.wzrost = awzrost;
zaw.klub = aklub;
zawodnicy[ilosc] = zaw;
ilosc++;
}
void bazazawodnicy::otworz_plik_zawodnicy(string nazwabazy)
{
int il=-1, nazw=0; //il - ilosc elementow / nazw - index aktualnie przyjmowanej danej(np. [0] - nazwa_)
ifstream plik;
string sciezka = nazwabazy + ".txt";
plik.open(sciezka.c_str()); //otwieranie pliku z baza
string linia = ""; //zmienna do ktorej zapisywane beda kolejne linie dokumentu pliku
do
{
il++;
nazw=0;
getline(plik,linia);
istringstream ilinia(linia);
string dana; //zmienna do ktorej zapisywane beda kolejne dane z linii(elementu) oddzielone znakiem #
getline(ilinia, dana, '#');
zawodnicy[ilosc].imie = dana;
getline(ilinia, dana, '#');
zawodnicy[ilosc].nazwisko = dana;
getline(ilinia, dana, '#');
zawodnicy[ilosc].wiek = atoi(dana.c_str());
getline(ilinia, dana, '#');
zawodnicy[ilosc].zawwaga = atoi(dana.c_str());
getline(ilinia, dana, '#');
zawodnicy[ilosc].wzrost = atoi(dana.c_str());
getline(ilinia, dana, '#');
zawodnicy[ilosc].klub = dana;
}while(!plik.eof());
ilosc=il;
}
void wyswietl()
{
int nr=0;
}
int main()
{
bazazawodnicy baza;
int menu;
string nazwa;
string imie;
string nazwisko;
int wiek;
int zawwaga;
int wzrost;
string klub;
string imietrenera;
int ilosc=0;
int nr=0;
do{
system("cls");
cout << "1 - Wprowadz dane" << endl;
cout << "2 - Wyswietl/Edytuj dane" << endl;
cout << "3 - Zapisz aktualny stan bazy" << endl;
cout << "4 - Nadpisz stara baze" << endl;
cout << "5 - Wyszukaj..." << endl;
cout << "6 - Wyjdz" << endl;
cout<<endl<<"Wybierz opcje: ";
cin>>menu;
if (menu == 6)
{
break;
}
switch(menu)
{
case 1:
cout<<"Imie: "; // uzytkownik podaje IMIE
cin>>imie;
cout<<"Nazwisko: "; // uzytkownik podaje Nazwisko
cin>>nazwisko;
cout<<"Wiek: ";
cin >> wiek;
while(std::cin.fail()) { //jezeli dana nie jest liczba
cout <<"Wprowadz LICZBE: ";
cin.clear();
cin.ignore(256,'\n');
cin >> wiek;
}
cout<<"Waga(kg): "; // uzytkownik podaje wage
cin >> zawwaga;
while(std::cin.fail()) {
cout <<"Wprowadz LICZBE: ";
cin.clear();
cin.ignore(256,'\n');
cin >> zawwaga;
}
cout<<"Wzrost(cm): ";
cin >> wzrost;
while(std::cin.fail()) {
cout <<"Wprowadz LICZBE: ";
cin.clear();
cin.ignore(256,'\n');
cin >> wzrost;
}
cout<<"Nazwa klubu: "; // uzytkownik podaje IMIE
cin>>klub;
cout<<"Imie Trenera: "; // uzytkownik podaje Nazwisko
cin>>imietrenera;
//wpisywanie otrzymanych danych do tablicy
baza.dodajelement(imie,nazwisko,wiek,zawwaga,wzrost,klub);
ilosc++; //powiekszanie o 1 zmiennej okreslajacej aktualna ilosc elementow
cout<<"Nowy zawodnik zostal dodany do bazy!";
system("pause");
break;
case 2:
int menuu;
do
{
system("cls");
cout<<"Element nr."<<nr+1<<":"<<endl;
/*
cout<<"Imie: "<<zawodnicy[nr][0]<<endl;
cout<<"Nazwisko: "<<zawodnicy[nr][1]<<endl;
cout<<"Wiek: "<<zawodnicy[nr][2]<<endl;
cout<<"Waga: "<<zawodnicy[nr][3]<<endl;
cout<<"Wzrost: "<<zawodnicy[nr][4]<<endl;
cout<<"Nazwa klubu: "<<zawodnicy[nr][5]<<endl;
cout<<endl<<"1 - Nastepny"<<endl;
cout<<"2 - Poprzedni"<<endl;
cout<<"3 - Usun"<<endl;
cout<<"4 - Powrot"<<endl;
*/
baza.drukujwszystko();
cout<<"Wybierz opcje: ";
cin>>menuu;
switch(menuu)
{
case 1:
if(nr<ilosc)nr++; //jezeli nr jest mniejszy od ilosc elementow wyswietl nastepny element(nr++)
break;
case 2:
if(nr>0) nr--; //jezeli nr jest wiekszy od 0 wyswietl poprzedni element(nr--)
break;
case 3:
baza.usunelement(nr);
break;
case 4:
baza.usunelement(nr);
}
}while(menuu!=4);
break;
case 3:
baza.zapisz_zawodnicy(nazwa);
break;
case 4:
baza.wyczyscwszystko();
baza.dodajelement(imie,nazwisko,wiek,zawwaga,wzrost,klub);
break;
case 5:
//wyszukaj();
break;
// case 6:
// break;
}
}while(menu!=6);
return 0;
}