From 39686e5307416702cd33514b8d9172bfe96a7746 Mon Sep 17 00:00:00 2001 From: kgmd111 Date: Wed, 19 Feb 2025 12:31:48 +0100 Subject: [PATCH] =?UTF-8?q?System=20zlece=C5=84=20-=20kopia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- animals.cpp | 39 +++++ animals.h | 68 ++++++++ compile.sh | 1 + main.cpp | 441 +++++++++++++++++++++++++++++++++++++++++++++++++++ ticket.cpp | 153 ++++++++++++++++++ ticket.h | 28 ++++ tickets.txt | 15 ++ ui.cpp | 67 ++++++++ user.cpp | 72 +++++++++ user.h | 42 +++++ users.txt | 45 ++++++ zlecenia.txt | 60 +++++++ zlecenie.cpp | 46 ++++++ zlecenie.h | 27 ++++ 14 files changed, 1104 insertions(+) create mode 100644 animals.cpp create mode 100644 animals.h create mode 100755 compile.sh create mode 100644 main.cpp create mode 100644 ticket.cpp create mode 100644 ticket.h create mode 100644 tickets.txt create mode 100644 ui.cpp create mode 100644 user.cpp create mode 100644 user.h create mode 100644 users.txt create mode 100644 zlecenia.txt create mode 100644 zlecenie.cpp create mode 100644 zlecenie.h 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