#include #include #include "user.h" #include "zlecenie.h" #include "ticket.h" #include "animals.h" #include //#include "ui.h" using std::cout; using std::cin; using std::string; using std::endl; using std::vector; void AddUser(std::vector& users_list, string login,string password, string name, string surname, int access_level){ users_list.push_back(User(login,password,name,surname,access_level)); } // void AddZlecenie(std::vector& zlecenia,int id,string nazwa, string opis, string przypisany, int access_level){ // zlecenia.push_back(Zlecenie(id,nazwa,opis,przypisany)); // } void Clear() { #if defined _WIN32 system("cls"); #elif defined (__LINUX__) || defined(__gnu_linux__) || defined(__linux__) system("clear"); #elif defined (__APPLE__) system("clear"); #endif } void Pause(){ cin.ignore(); do { cout << '\n' << "Zrobione, Nacisnij klawisz aby kontynuowac"; } while (cin.get() != '\n'); Clear(); } void welcome(User* user){ cout<<"Zalogowano jako: "<GetName()<<" "<GetSurname()<<"\n"; } void newticket(){ int typ = 0; cout<<"----------------- Kupno Biletu -------------------------\n"; cout<<"\nwybierz jaki bilet chcesz kupic"; cout<<"\n1. Zwykly"; cout<<"\n2. Ulgowy\n"; cout<<": "; cin>>typ; cout<<"\n------ Oto dane twojego biletu, zapamietaj je -----------\n\n"; Ticket bilet(typ); bilet.ticketInfo(); cout<<"\n---------------------------------------------------------\n"; } void checkticket(string id){ Ticket bilet(id); bilet.ticketValidityCheck(); } void ticketchcecked(){ string id; cout<<"Podaj id biletu: "; cin>>id; cout<<"\n"; Ticket bilet(id); bilet.ticketUse(); } User* authenticate(vector & user_list,const string& login, const string& password){ for(auto& user : user_list){ if(user.authenticate(login,password)){ return &user;} } return nullptr; } void CreateUserForm(int powerlevel,std::vector& lista){ //Funkcja dodaje formularz do tworzenia użytkowników if(powerlevel<2){cout<<"Nie masz wystarczających uprawnień do tej operacji !\n";} else { string login,password,name,surname; int newpowerlevel; cout<<"Podaj imie nowego użytwkownika: "; cin>>name; cout<<"Podaj nazwisko nowego użytwkownika: "; cin>>surname; bool exist = true; do{ cout<<"Podaj login nowego użytwkownika: "; cin>>login; for(auto& user : lista){ exist = user.checkifloginexist(login); if(exist) break; //jesli uzytkownik istnieje to przerywa szukanie go w pliku } if(exist) cout<<"użytkowni o podanej nazwie istnieje, musisz podać inną nazwę"; }while(exist); cout<<"Podaj haslo nowego użytwkownika: "; //do dopisania - sprawdzenie poprawnosci hasla, gwiazdki zamiast znaczkow cin>>password; if(powerlevel==2){newpowerlevel=2;} //jeśli użytkownika tworzy ;,,gość - użytkownik służacy do tworzenia użytkownikow else{ cout<<"\nWybierz poziom uprawnien nowego użytwkownika: "; cin>>newpowerlevel; while(newpowerlevel>powerlevel or newpowerlevel<1){ //sprawdzenie czy użytkownik bedący moderatorem nei chce stworzyć użytkownika administatora cout<<"\nTo nie jest poprawny poziom uprawnień, możesz jedynie wybrać zakres od 1 do "<< powerlevel <<"\nPodaj ponownie: "; cin>>newpowerlevel; } } AddUser(lista,login,password,name,surname,newpowerlevel); cout<<"dodano użytkownika\n"; } } /*ten fragment moglby byc napisany z uzyciem wskaznikow i nawet byloby to zalecane ale nnie znalazlem jesszcze sposobu aby to zdzialalo z auto*/ string listusers(const vector& user_list){ cout<<"\n----------------\n"; int i=0; for(auto user:user_list){ cout<>numer; for(auto user:user_list){ if(i==numer) return user.GetLogin(); i++; } return "nic"; } void saveZlecenia(const vector& zlecenie_list,const string& filename){ std::ofstream outfile(filename); if(outfile.is_open()){ for (auto zlecenie : zlecenie_list){ //dla kazdego uzytkownika w liscie zlecenie.saveToFile(outfile); } outfile.close(); cout << "Zlecenia zapisane do pliku!" << endl; } else { cout << "Błąd podczas otwierania pliku do zapisu!" << endl; } } void NewZlecenie(const vector& user_list,User* user,vectorzlecenie_list,int id){ if(user->GetAccessLevel()<3) { cout<<"Nie masz wystarczajacych uprawnien"; //prawdopodobnie sie nigdy nie wykona return; } string nazwa,opis,przypisany; cout<<"Wpisz nazwe nowego zlecenia: "; cin.ignore(); std::getline(cin,nazwa); cout<<"Podaj opis nowego zlecenia: "; std::getline(cin,opis); cout<<"Wybierz kogo chcesz przypisac do zlecenia: "; przypisany = listusers(user_list); zlecenie_list.push_back(Zlecenie(id,nazwa,opis,przypisany)); saveZlecenia(zlecenie_list,"zlecenia.txt"); } void saveUsers(const vector & user_list,const string& filename){ std::ofstream outfile(filename); if(outfile.is_open()){ for (auto user : user_list){ //dla kazdego uzytkownika w liscie user.saveToFile(outfile); } outfile.close(); cout << "Użytkownicy zapisani do pliku!" << endl; } else { cout << "Błąd podczas otwierania pliku do zapisu!" << endl; } } bool loadUsers(std::vector& user_list, const std::string& filename) { std::ifstream inFile(filename); if (inFile.is_open()) { try { while (true) { user_list.push_back(User::loadFromFile(inFile)); } } catch (const std::runtime_error& e) { // Wyświetl informację o błędzie, jeśli odczyt się nie powiedzie if (!inFile.eof()) { std::cerr << "Błąd odczytu użytkownika: " << e.what() << std::endl; } } inFile.close(); return true; } else { std::cout << "Błąd odczytu, plik nie istnieje itp." << std::endl; return false; } } bool loadZlecenia(std::vector& zlecenie_list, const std::string& filename) { //skopiowane z users std::ifstream inFile(filename); if (inFile.is_open()) { try { while (true) { zlecenie_list.push_back(Zlecenie::loadFromFile(inFile)); } } catch (const std::runtime_error& e) { // Wyświetl informację o błędzie, jeśli odczyt się nie powiedzie if (!inFile.eof()) { std::cerr << "Błąd odczytu użytkownika: " << e.what() << std::endl; } } inFile.close(); return true; } else { std::cout << "Błąd odczytu, plik nie istnieje itp." << std::endl; return false; } } void animals_sound(vector& animals){ for (const auto& animal : animals) { animal->voice(); // Wywołanie polimorficzne } } void ShowZleceniafromuser(vector& zlecenie_list, User* user){ zlecenie_list.clear(); if(loadZlecenia(zlecenie_list, "zlecenia.txt")){ cout<<"";} int input=-2; while(input!=-1){ cout<<"\n-----Twoje zlecenia------\n"; int i=0; cout << std::left << std::setw(5) << "Nr" << " | " << std::setw(20) << "Nazwa" << " | " << "ID" << endl; cout << string(40, '-') << endl; for(auto zlecenie: zlecenie_list){ if(zlecenie.GetPrzypisany()== user->GetLogin()){ cout << std::left << std::setw(5) << i++ << " | " << std::setw(20) << zlecenie.GetNazwa() << " | " << zlecenie.GetId() << endl; } } cout<<"\n-------------------------"; cout<<"\nWpisz numer zlecenia aby zobaczyc zawartosc lub -1 aby wyjsc"; cin>>input; i=0; for(auto zlecenie: zlecenie_list){ if(zlecenie.GetPrzypisany()== user->GetLogin()){if(input==i){ Clear(); cout << std::left << std::setw(5) << i++ << " | " << std::setw(20) << zlecenie.GetNazwa() << " | " << zlecenie.GetId() << endl; cout<<"----------------------\n"; cout<& zlecenie_list){ zlecenie_list.clear(); if(loadZlecenia(zlecenie_list, "zlecenia.txt")){ cout<<"";} int input=-2; while(input!=-1){ cout<<"\n-----Wszystkie zlecenia------\n"; int i=0; cout << std::left << std::setw(5) << "Nr" << " | " << std::setw(25) << "Nazwa" << " | " << "ID" <<" | " << "Przypisany Uzytkownik" << endl; cout << string(40, '-') << endl; for(auto zlecenie: zlecenie_list){ cout << std::left << std::setw(5) << i++ << " | " << std::setw(25) << zlecenie.GetNazwa() << " | " << zlecenie.GetId()<<" | " << zlecenie.GetPrzypisany() << endl; } cout<<"\n-------------------------"; cout<<"\nWpisz numer zlecenia aby zobaczyc zawartosc lub -1 aby wyjsc"; cin>>input; i=0; for(auto zlecenie: zlecenie_list){ if(input==i){ Clear(); cout << std::left << std::setw(5) << "Nr" << " | " << std::setw(25) << "Nazwa" << " | " << "ID" <<" | " << "Przypisany Uzytkownik" << endl; cout << std::left << std::setw(5) << i++ << " | " << std::setw(25) << zlecenie.GetNazwa() << " | " << zlecenie.GetId()<< zlecenie.GetId()<<" | " << zlecenie.GetPrzypisany() << endl; cout<<"----------------------\n"; cout<& animals) { std::cout << "Stan zdrowia wszystkich zwierzat:\n"; for (const auto& animal : animals) { std::cout << "Zwoerze:: " << animal->getName() << "\n"; animal->healthStatus.printHealthStatus(); std::cout << "-----------------------\n"; } } /* access_level jest tym co określa uprawnienia do funkcji progtramu danego użytkownika * 0 - nic, nie uzywa sie * 1 - auto konto goscia * 2 - użytkownik z zewnatrz, , posiadajacy swoje konto * 3 - pracownik, może on rowniez kupic bilet, a także wyświetlić zlecenia które zostały mu przypisane * 4 zarządca - może dodawać zlecenia i tworzyć nowych użytkowników(maksynalnie zarządców) * 5. Administrator - może wszystko, jego konto jest tworzone przy pierwszym uruchomieniu programu */ int main(){ string login; string password; vector user_list; vector zlecenie_list; vector animals; animals.push_back(new Lion("Leo", 5)); animals.push_back(new Snake("Kaa", 3)); animals.push_back(new Lion("Simba", 2)); animals.push_back(new Snake("Nagini", 7)); //Animal zwierze; int wybor = -1; if(!loadUsers(user_list,"users.txt")){ //odpala tworzenie nowego użytkownika jeśli ten nie istnieje cout<<"Witaj, ten formularz pozwoli ci dodać administratora systemu i przygotować go do pracy"; CreateUserForm(5,user_list); saveUsers(user_list, "users.txt"); } int id = 0; if(loadZlecenia(zlecenie_list, "zlecenia.txt")){ cout<<""; id=zlecenie_list.back().GetId();} do{ User* loggeduser = nullptr; AddUser(user_list,"gosc","ewtweugwehh","Gosc"," ",1); do { cout<<"System zarzadzania Zoo v1.0, Jesli jestes gosciem naszego zoo wpisz zoo " << endl <<"login: "; cin >> login; if(login=="gosc"){ loggeduser = authenticate(user_list,"gosc","ewtweugwehh"); }else{ cout<<"podaj hasło: "; cin >> password; loggeduser = authenticate(user_list,login,password);} //po sprawdzeniu poprawnosci danych przypisuje uzytkownika do wskaznika if(!loggeduser) cout<<"Bledne dane, sprobuj jeszcze raz"; }while(!loggeduser); Clear(); do{ welcome(loggeduser); //clear screen if(loggeduser->GetAccessLevel()>=1){ cout<<"\n---- Wybierz funkcje programu: -----\n"; cout<<"2. Kup bilet\n"; cout<<"3. Dla dzieci : Sprawdz jakie dzwieki wydaje jakie zwierze !\n";} if(loggeduser->GetAccessLevel()>3) { cout<<"4. Wyswietl swoje zlecenia:\n"; cout<<"5. Dodaj zlecenie\n"; cout<<"6. Dodaj uzytkownika\n"; cout<<"7. Skasuj bilet(kasa)\n"; cout<<"8. Sprawdz stan zwierzat\n"; } if(loggeduser->GetAccessLevel()>4){ cout<<"9. Wyswietl wszystkie zlecenia\n\n"; } cout<<"\n----------- System ----------- : \n"; cout<<"1.Zmien użytkownika\n"; cout<<"0. Wyjdz z programu\n"; cout<<"Podaj numer: \n"; cin>>wybor; Clear(); switch(wybor){ case 2:{ newticket(); break;} case 3:{ animals_sound(animals); break;} } if(loggeduser->GetAccessLevel()>3){ switch(wybor){ case 4:{ ShowZleceniafromuser(zlecenie_list,loggeduser); break;} case 5:{ id++; NewZlecenie(user_list,loggeduser,zlecenie_list,id); break;} case 6:{ CreateUserForm(loggeduser->GetAccessLevel(),user_list); saveUsers(user_list, "users.txt"); break;} case 7:{ ticketchcecked();; break;} case 8:{ displayHealthStatus(animals); break;} default: break; } } if(loggeduser->GetAccessLevel()>4){ switch(wybor){ case 9:{ ShowZleceniaall(zlecenie_list); break;} default: break; } Pause(); cout<<"\n\n"; } //kup bilet }while(wybor!=0 && wybor!=1); }while(wybor!=0); for (auto& animal : animals) { delete animal; } animals.clear(); return 0; }