diff --git a/animals.cpp b/animals.cpp new file mode 100644 index 0000000..774c3c8 --- /dev/null +++ b/animals.cpp @@ -0,0 +1,39 @@ +#include "animals.h" + +Animal::Animal(std::string name_input, int age_input, bool isHealthy_input, bool isFed_input, int size_input) +: name(name_input), age(age_input), size(size_input), healthStatus(isHealthy_input, isFed_input) {} + + +Animal::HealthStatus::HealthStatus(bool healthy, bool fed) : isHealthy(healthy), isFed(fed) {} + + +void Animal::HealthStatus::printHealthStatus() const { + std::cout << "Zdrowy: " << (isHealthy ? "Zdrowy" : "Chory") + << "\nNajedzony?: " << (isFed ? "Tak" : "Nie") << "\n"; +} + +std::string Animal::getName() const { return name; } +int Animal::getAge() const { return age; } +bool Animal::getHealthState() const { return healthStatus.isHealthy; } +bool Animal::getIsFed() const { return healthStatus.isFed; } + +//szczegoly zwierzakow +void Animal::print() const { + std::cout << "Imie: " << name << "\nWiek: " << age + << "\nRozmiar: " << size << " cm\n"; + healthStatus.printHealthStatus(); +} + +Lion::Lion(std::string name_input, int age_input, bool isHealthy_input, bool isFed_input, int size_input) +: Animal(name_input, age_input, isHealthy_input, isFed_input, size_input) {} + +void Lion::voice() { + std::cout << name << " Raaaaaarrr!\n"; +} + +Snake::Snake(std::string name_input, int age_input, bool isHealthy_input, bool isFed_input, int size_input) +: Animal(name_input, age_input, isHealthy_input, isFed_input, size_input) {} + +void Snake::voice() { + std::cout << name << " Sssssssss!\n"; +} diff --git a/animals.h b/animals.h new file mode 100644 index 0000000..df175c6 --- /dev/null +++ b/animals.h @@ -0,0 +1,68 @@ +#pragma once + +#include +#include + +#pragma once + +#include +#include + +class Animal { +protected: + std::string name; + int age; + int size; + +public: + // Nested class to represent health-related attributes + class HealthStatus { + public: + bool isHealthy; + bool isFed; + + // Constructor to initialize health status + HealthStatus(bool healthy = true, bool fed = true); + + // Method to print health status + void printHealthStatus() const; + }; + + // Instance of HealthStatus to track an animal's health + HealthStatus healthStatus; + + // Constructor for Animal class + Animal(std::string name_input, int age_input, bool isHealthy_input, bool isFed_input, int size_input); + + virtual ~Animal() = default; + + // Getter methods + std::string getName() const; + int getAge() const; + bool getHealthState() const; + bool getIsFed() const; + + // Method to print the animal's details + void print() const; + + // Pure virtual method for voice, to be implemented by derived classes + virtual void voice() = 0; +}; + +class Lion : public Animal { +public: + Lion(std::string name_input, int age_input, bool isHealthy_input = true, bool isFed_input = true, int size_input = 100); + + void voice() override; + ~Lion() override = default; +}; + + +class Snake : public Animal { +public: + Snake(std::string name_input, int age_input, bool isHealthy_input = true, bool isFed_input = true, int size_input = 50); + + void voice() override; + ~Snake() override = default; +}; + diff --git a/compile.sh b/compile.sh new file mode 100755 index 0000000..8ea6e44 --- /dev/null +++ b/compile.sh @@ -0,0 +1 @@ +g++ main.cpp user.cpp zlecenie.cpp ticket.cpp animals.cpp diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..9ae1830 --- /dev/null +++ b/main.cpp @@ -0,0 +1,441 @@ +#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; +} + diff --git a/ticket.cpp b/ticket.cpp new file mode 100644 index 0000000..0a0e55e --- /dev/null +++ b/ticket.cpp @@ -0,0 +1,153 @@ +#include +#include +#include +#include +#include "ticket.h" +#include +#include +#include + + +//Funkcja generująca losowe id dla biletu +std::string generateRandomString(unsigned int length) { + const std::string characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + std::string randomString; + + // Inicjalizacja generatora liczb losowych z wykorzystaniem czasu + std::mt19937 generator(static_cast(std::time(0))); + std::uniform_int_distribution distribution(0, characters.size() - 1); + + for (size_t i = 0; i < length; i++) { + randomString += characters[distribution(generator)]; + } + return randomString; +} + + +Ticket::Ticket(int ticket_type){ + this -> id = generateRandomString(10); + this-> ticket_type = ticket_type; + this -> is_valid = true; + this -> buy_date = static_cast(time(nullptr)); + this -> expire_date = static_cast(time(nullptr)) + 2678400; + this -> use_date = -1; + ticketDatabaseAdd(); + +}; +Ticket::Ticket(std::string id_input){ + std::string line; + std::fstream file("tickets.txt"); + while(std::getline(file,line)){ + std::istringstream iss(line); + std::string id; + if (iss >> id){ + if (id == id_input){ + int ticket_type; + bool is_valid; + time_t expire_date,buy_date,use_date; + if(iss >> ticket_type >> is_valid >> buy_date >> expire_date >> use_date) + { + this -> id = id; + this-> ticket_type = ticket_type; + this -> is_valid = is_valid; + this -> buy_date = buy_date; + this -> expire_date = expire_date; + this -> use_date = use_date; + } + break; + } + } + this->line_in_file ++; + } +} + +void Ticket::ticketDatabaseAdd() { + std::fstream file("tickets.txt", std::ios::app); + if (file.tellg() !=0) { + file<<"\n"; + } + file <> id){ + if (id == id_input){ + break; + } + } + this->line_in_file ++; + } +} +void Ticket::ticketDatabaseUpdate() { + int counter = 0; + std::string line; + std::fstream file("tickets.txt"); + std::fstream temp_file("tickets_temp.txt", std::ios::out |std::ios::app); + while (std::getline(file,line)) { + if (temp_file.tellg() !=0) { + temp_file<<"\n"; + } + if (counter == line_in_file) { + temp_file < ticket_type == 0){ + ticket_type_name = "normalny"; + } + if(this-> ticket_type == 1){ + ticket_type_name = "ulgowy"; + } + std::cout << "Id biletu: "<id <<"\n"; + std::cout << "Typ biletu: "<ticket_type << ")"<<"\n"; + std::cout << "Ważny: "<is_valid <<"\n"; + std::cout << "Data_zakupu: "< buy_date), "%Y-%m-%d %H:%M:%S")<<"\n"; + std::cout << "Data_wygaśnięcia: "< expire_date), "%Y-%m-%d %H:%M:%S") <<"\n"; + if (this->use_date != -1) { + std::cout << "Data_wykorzystania: "< use_date), "%Y-%m-%d %H:%M:%S") <<"\n"; + } + +} + +//Sprawdzenie ważności biletu +bool Ticket::ticketValidityCheck(){ + if (!is_valid or expire_date < static_cast(time(nullptr))) { + is_valid = false; + ticketDatabaseUpdate(); + return false; + } + return true; +} + + + +//Metoda służąca do "kasowania biletu" i aktualizacji danych w pliku z biletami +void Ticket::ticketUse() { + if (ticketValidityCheck()) { + is_valid = false; + use_date = static_cast(time(nullptr)); + ticketDatabaseUpdate(); + std::cout <<"Bilet został wykorzystany pomyślnie."< +#include +#include + +class Ticket { +private: + std::string id; + int ticket_type; + int line_in_file = 0; + time_t buy_date; + time_t expire_date; + time_t use_date; + bool is_valid; + void ticketDatabaseAdd(); + void lineChecker(std::string id_input); + void ticketDatabaseUpdate(); + + +public: + explicit Ticket(int ticket_type); + explicit Ticket(std::string id_input); + void ticketInfo(); + bool ticketValidityCheck(); + void ticketUse(); + +}; diff --git a/tickets.txt b/tickets.txt new file mode 100644 index 0000000..ce73f1e --- /dev/null +++ b/tickets.txt @@ -0,0 +1,15 @@ +ppMTe0YN7C 1 1 1739446162 1736767762 +Qf66HgDoeU 1 1 1740146060 1737467660 +fCyXBHc7lF 1 1 1740146118 1737467718 +cIhaRjY74O 1 1 1740146147 1737467747 +xhNctA3Q6n 1 1 1740146186 1737467786 +WsXtqlRMJA 1 1 1740146213 1737467813 +qNXuxTtez5 1 1 1740146258 1737467858 +xpcHJCmpFv 1 1 1740146696 1737468296 +MBx1PGkxCo 1 1 1740146734 1737468334 +GkGBuNEryP 1 0 1737469516 1740147916 1737469531 +pZ7eULyaA4 1 1 1737471510 1740149910 -1 +a5OqnGseOt 3 1 1737471593 1740149993 -1 +XDNVDmYxQa 2 1 1737474922 1740153322 -1 +iEdW7ANbgI 1 1 1737475040 1740153440 -1 +JtqiJ1Gpj9 2 1 1737478277 1740156677 -1 \ No newline at end of file diff --git a/ui.cpp b/ui.cpp new file mode 100644 index 0000000..fc32cee --- /dev/null +++ b/ui.cpp @@ -0,0 +1,67 @@ +// SPDX-FileCopyrightText: 2025 Krzysztof +// SPDX-License-Identifier: Apache-2.0 + +#include "ui.h" +#include +#include +#include +Ui::Ui() { + initscr(); + noecho(); + cbreak(); + curs_set(1); // Pokaż kursor +} + +// Destruktor: zakończenie pracy z ncurses +Ui::~Ui() { + endwin(); +} + +// Rysowanie interfejsu logowania +void Ui::draw_ui(WINDOW *win, int width) const { + box(win, 0, 0); + mvwprintw(win, 2, (width - std::strlen("Login:")) / 2, "Login:"); + mvwprintw(win, 4, (width - std::strlen("Password:")) / 2, "Password:"); + mvwprintw(win, 7, (width - std::strlen("[Press ENTER to submit]")) / 2, "[Press ENTER to submit]"); + wrefresh(win); +} + +// Obsługa wprowadzania danych +void Ui::handle_input() const { + int height, width; + getmaxyx(stdscr, height, width); + + int win_width = 40; + int win_height = 10; + int start_y = (height - win_height) / 2; + int start_x = (width - win_width) / 2; + + // Tworzenie okna + WINDOW *win = newwin(win_height, win_width, start_y, start_x); + keypad(win, TRUE); + + // Rysowanie interfejsu + draw_ui(win, win_width); + + // Pola do przechowywania wprowadzonych danych + char login[30] = {0}; + char password[30] = {0}; + + // Obsługa wprowadzania danych + mvwgetnstr(win, 3, (win_width - 30) / 2, login, sizeof(login) - 1); // Wprowadzenie loginu + mvwgetnstr(win, 5, (win_width - 30) / 2, password, sizeof(password) - 1); // Wprowadzenie hasła + + // Czyszczenie ekranu i wyświetlenie wyników + clear(); + mvprintw(height / 2 - 1, (width - std::strlen("Submitted Data")) / 2, "Submitted Data"); + mvprintw(height / 2, (width - std::strlen("Login: ")) / 2, "Login: %s", login); + mvprintw(height / 2 + 1, (width - std::strlen("Password: ")) / 2, "Password: %s", password); + mvprintw(height / 2 + 3, (width - std::strlen("[Press any key to exit]")) / 2, "[Press any key to exit]"); + refresh(); + + // Oczekiwanie na klawisz + getch(); + + // Sprzątanie + delwin(win); +} diff --git a/user.cpp b/user.cpp new file mode 100644 index 0000000..838f5dc --- /dev/null +++ b/user.cpp @@ -0,0 +1,72 @@ +// SPDX-FileCopyrightText: 2024 Krzysztof +// SPDX-License-Identifier: Apache-2.0 + +#include "user.h" +User::User(std::string login, std::string password, std::string name, std::string surname, int access_level) + : login(login), password(password), name(name), surname(surname), access_level(access_level) {} + + /* --- To samo co w jednej linii tylko bardziej czytelnie --- + { + this->login = login; + this->name = name; + this ->surname = surname; + this ->access_level = access_level; + this ->password = password; + } + + */ +void User::wyswietl() const { + std::cout << "login : " << login << ", Imie: " << name << ", Nazwisko: " << surname << std::endl; +} + +std::string User::GetLogin() { + return login; +} + +std::string User::GetName() { + return name; +} + +std::string User::GetSurname() { + return surname; +} + +int User::GetAccessLevel() { + return access_level; +} +void User::saveToFile(std::ofstream& outFile) { + outFile << login << '\n'; + outFile << password << '\n'; + outFile << name << '\n'; + outFile << surname << '\n'; + outFile << access_level << '\n'; +} +User User::loadFromFile(std::ifstream& sourcefile) { + std::string login, password, name, surname; + int access_level; + + // Sprawdz odczyt linii, aby upewnic sie, ze nie docieramy do konca pliku + if (!std::getline(sourcefile, login)) { + throw std::runtime_error("Nieudany odczyt loginu"); + } + if (!std::getline(sourcefile, password)) { + throw std::runtime_error("Nieudany odczyt hasla"); + } + if (!std::getline(sourcefile, name)) { + throw std::runtime_error("Nieudany odczyt imienia"); + } + if (!std::getline(sourcefile, surname)) { + throw std::runtime_error("Nieudany odczyt nazwiska"); + } + if (!(sourcefile >> access_level)) { + throw std::runtime_error("Nieudany odczyt poziomu dostepu"); + } + sourcefile.ignore(); // Pomija znak nowej linii po odczycie liczby + + return User(login, password, name, surname, access_level); +} +bool User::authenticate(const std::string& login, const std::string& password)const{ +return this->login == login && this->password == password; + + +} diff --git a/user.h b/user.h new file mode 100644 index 0000000..ea4823d --- /dev/null +++ b/user.h @@ -0,0 +1,42 @@ +// SPDX-FileCopyrightText: 2024 Krzysztof +// SPDX-License-Identifier: Apache-2.0 + +#ifndef USER_H +#define USER_H +#include +#include +#include +/** + * @todo write docs + */ +class User +{ + private: //wlasciwosci uzytkownikow + std::string login; + std::string password; + std::string name; + std::string surname; + int access_level; + +public: + User(std::string login, std::string password, std::string name, std::string surname, int access_level); + + void wyswietl() const; + + // Getters + std::string GetLogin(); + std::string GetName(); + std::string GetSurname(); + int GetAccessLevel(); + //ustawienia zapisywania do pliku + void saveToFile(std::ofstream& outFile); + static User loadFromFile(std::ifstream& sourcefile); + bool authenticate(const std::string& login, const std::string& password) const; //funkcja do logowania + inline bool checkifloginexist(const std::string& login){ + return this->login == login; + } + + +}; + +#endif // USER_H diff --git a/users.txt b/users.txt new file mode 100644 index 0000000..6731a3b --- /dev/null +++ b/users.txt @@ -0,0 +1,45 @@ +jan +1234 +Jan +Kowalski +5 +tom +1234 +tomasz +inne +4 +sebix +1234 +sebA +inny +2 +gosc +ewtweugwehh +Gosc + +2 +janek +1234 +Jan +Kowalski +1 +gosc +ewtweugwehh +Gosc + +1 +adr +1234 +Adrian +Milowski +2 +gosc +ewtweugwehh +Gosc + +1 +mama +1234 +jan +jan +5 diff --git a/zlecenia.txt b/zlecenia.txt new file mode 100644 index 0000000..ff7af46 --- /dev/null +++ b/zlecenia.txt @@ -0,0 +1,60 @@ +1 +test asda fasf +test asf af asf asfu hauisfuasyuifas sh foasuh oasuo hu +jan +2 +inne +etwijgwe +jan +3 +inne +etwijgwe +jan +4 +inne +etwijgwe +jan +5 +inne +etwijgwe +jan +6 +inne +etwijgwe +jan +7 +etst +tesg +nic +8 +tewht we ttw etw + opweutw gw eew bhweo we owe +nic +9 +Nowe zlecenie +Trzeba wyczyścić klatke słonia +jan +10 +Inne zlecenie +Jeszcze inne zlecenie +nic +11 +Kolejne przykladowe zlecenie +test +tom +12 +Czyszczenie malp +zlecenie polega na czyszczeniu malp +janek +13 +mycie lwow +umyc wszystkie lwy w klatce +jan +14 +mycie nietoperzy +inne +jan +15 +mycie rzufi +nogi tez +jan diff --git a/zlecenie.cpp b/zlecenie.cpp new file mode 100644 index 0000000..27f0022 --- /dev/null +++ b/zlecenie.cpp @@ -0,0 +1,46 @@ +#include "zlecenie.h" + +Zlecenie::Zlecenie(int id, std::string nazwa, std::string opis, std::string przypisany) +: id(id), nazwa(nazwa), opis(opis), przypisany(przypisany) {} + +int Zlecenie::GetId() const { + return id; +} + +std::string Zlecenie::GetNazwa() const { + return nazwa; +} + +std::string Zlecenie::GetOpis() const { + return opis; +} + +std::string Zlecenie::GetPrzypisany() const { + return przypisany; +} + +void Zlecenie::saveToFile(std::ofstream& outFile) const { + outFile << id << '\n'; + outFile << nazwa << '\n'; + outFile << opis << '\n'; + outFile << przypisany << '\n'; +} + +Zlecenie Zlecenie::loadFromFile(std::ifstream& sourcefile) { + std::string nazwa, opis, przypisany; + int id; + if (!(sourcefile >> id)) { + throw std::runtime_error("Nieudany odczyt ID"); + } + sourcefile.ignore(); // Ignoruj znak nowej linii po ID + if (!std::getline(sourcefile, nazwa)) { + throw std::runtime_error("Nieudany odczyt nazwy"); + } + if (!std::getline(sourcefile, opis)) { + throw std::runtime_error("Nieudany odczyt opisu"); + } + if (!std::getline(sourcefile, przypisany)) { + throw std::runtime_error("Nieudany odczyt przypisanego użytkownika"); + } + return Zlecenie(id, nazwa, opis, przypisany); +} diff --git a/zlecenie.h b/zlecenie.h new file mode 100644 index 0000000..4dc1f92 --- /dev/null +++ b/zlecenie.h @@ -0,0 +1,27 @@ +#ifndef ZLECENIE_H +#define ZLECENIE_H + +#include +#include +#include + +class Zlecenie { +public: + Zlecenie(int id, std::string nazwa, std::string opis, std::string przypisany); + + int GetId() const; + std::string GetNazwa() const; + std::string GetOpis() const; + std::string GetPrzypisany() const; + + void saveToFile(std::ofstream& outFile) const; + static Zlecenie loadFromFile(std::ifstream& sourcefile); + +private: + int id; + std::string nazwa; + std::string opis; + std::string przypisany; +}; + +#endif // ZLECENIE_H