442 lines
16 KiB
C++
442 lines
16 KiB
C++
#include <iostream>
|
|
#include <vector>
|
|
#include "user.h"
|
|
#include "zlecenie.h"
|
|
#include "ticket.h"
|
|
#include "animals.h"
|
|
#include <iomanip>
|
|
//#include "ui.h"
|
|
using std::cout;
|
|
using std::cin;
|
|
using std::string;
|
|
using std::endl;
|
|
using std::vector;
|
|
|
|
void AddUser(std::vector<User>& 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<Zlecenie>& 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: "<<user->GetName()<<" "<<user->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>& 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<User>& 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>& user_list){
|
|
cout<<"\n----------------\n";
|
|
int i=0;
|
|
for(auto user:user_list){
|
|
cout<<i++<<". "<<user.GetName()<<" "<<user.GetSurname()<<endl;
|
|
}
|
|
cout<<"\n----------------\n";
|
|
cout<<"podaj numer użytkownika:";
|
|
i=0;
|
|
int numer;
|
|
cin>>numer;
|
|
for(auto user:user_list){
|
|
if(i==numer) return user.GetLogin();
|
|
i++;
|
|
}
|
|
|
|
return "nic";
|
|
}
|
|
void saveZlecenia(const vector<Zlecenie>& 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>& user_list,User* user,vector<Zlecenie>zlecenie_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>& 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>& 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>& 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<Animal*>& animals){
|
|
for (const auto& animal : animals) {
|
|
animal->voice(); // Wywołanie polimorficzne
|
|
}
|
|
}
|
|
|
|
void ShowZleceniafromuser(vector<Zlecenie>& 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.GetOpis();
|
|
cout<<"\n----------------------\n";
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
Pause();
|
|
}
|
|
|
|
}
|
|
void ShowZleceniaall(vector<Zlecenie>& 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<<zlecenie.GetOpis();
|
|
cout<<"\n----------------------\n";
|
|
}
|
|
i++;
|
|
}
|
|
Pause();
|
|
}
|
|
|
|
}
|
|
void displayHealthStatus(const std::vector<Animal*>& 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> user_list;
|
|
vector<Zlecenie> zlecenie_list;
|
|
vector<Animal*> 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;
|
|
}
|
|
|