diff --git a/.gitignore b/.gitignore index b8bd026..a5b0124 100644 --- a/.gitignore +++ b/.gitignore @@ -1,28 +1,28 @@ -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app diff --git a/README.md b/README.md index aadddc0..9286f6c 100644 --- a/README.md +++ b/README.md @@ -1,49 +1,110 @@ -#### __* Work in progress__ - -##### Disclaimer: - -This program is written solely on personal time with the purpose to pick up the C++ programming language once again after a long long time since I last wrote anything with it. - -The original version of this program (as seen in the initial commit) was a version of my work years ago. I decided that starting from scratch might not be the best idea when it comes to a programming language that I haven't use for a long time. However, as years pass, there are different things that I've learn from other programming languages that I thought would be fun to see how that implementation works with C++ so it will eventually be very much different from what it was. - -# Ticketing System - -Currently the program only works as a login system that keeps track of users and enable them to login and logout while updating their information. - -## Person.hpp / Person.cpp - -#### Constructors - -| Parameters | Task | -|:-----------|:-----------------------------| -| `()` | Empty constructor. | -| `string newName`
`string newEmail`
`string newPhoneNo`
`string newPassword`
`int newId` | Constructor with all parameters to populate all data slots in the object. | - -#### Functions - -| Function | Task | -|:----------------------|:-------------------------| -| `void setName(string);` | Set `name` to the new given input. | -| `string getName();` | Return `name` to caller. | -| `void setEmail(string);` | Set `email` to the new given input. | -| `string getEmail();` | Return `email` to caller. | -| `void setPhoneNo(string);` | Set `phoneNo` to the new given input. | -| `string getPhoneNo();` | Return `phoneNo` to caller. | -| `void setPassword(string);` | Set `password` to the new given input. | -| `string getPassword();` | Return `password` to the caller. | -| `bool checkPassword(string);` | Return if the given string matches `password`. | -| `int getId();` | Return `id` to the caller. | - -## LogInSystem.cpp - -#### Functions - -| Function | Task | -|:----------------------|:-------------------------| -| `Person getUser(string);` | Takes in a string parameter that will be used to searched for a matching username in the users vector. | -| `Person getUser(int);` | Takes in an int parameter that will be used to searched for a matching id in the users vector. | -| `void login();` | | -| `void loggedIn(Person);` | Takes in a Person parameter after the user has logged in as that identity. It provides the user options to display and modify the information of that specific identity in the database (vector). | -| `Person registration();` | Request all the required information from the user to register for a new account and add them into the users vector. | -| `Person editCredentials(Person);` | Takes in a Person parameter and make edit to it according to the user's intention. It will then return the updated Person to the caller. | -| `void update(Person);` | Take in a Person parameter that is to be updated into the users vector. It will search for the Person in the vector with matching ID and replace it. | +#### __* Work in progress__ + +##### Disclaimer: + +This program is written solely on personal time with the purpose to pick up the C++ programming language once again after a long long time since I last wrote anything with it. + +The original version of this program (as seen in the initial commit) was a version of my work years ago. I decided that starting from scratch might not be the best idea when it comes to a programming language that I haven't use for a long time. However, as years pass, there are different things that I've learn from other programming languages that I thought would be fun to see how that implementation works with C++ so it will eventually be very much different from what it was. + +# Ticketing System + +Currently the program only works as a login system that keeps track of users and enable them to login and logout while updating their information. + +## Person.hpp / Person.cpp + +#### Constructors + +| Parameters | Task | +|:-----------|:-----------------------------| +| `()` | Empty constructor. | +| `(string newName, string newEmail, string newPhoneNo, string newPassword, int newId)` | Constructor with all parameters to populate all data slots in the object. | + +#### Functions + +| Function | Task | +|:----------------------|:-------------------------| +| `void setName(string);` | Set `name` to the new given input. | +| `string getName();` | Return `name` to caller. | +| `void setEmail(string);` | Set `email` to the new given input. | +| `string getEmail();` | Return `email` to caller. | +| `void setPhoneNo(string);` | Set `phoneNo` to the new given input. | +| `string getPhoneNo();` | Return `phoneNo` to caller. | +| `void setPassword(string);` | Set `password` to the new given input. | +| `string getPassword();` | Return `password` to the caller. | +| `bool checkPassword(string);` | Return if the given string matches `password`. | +| `int getId();` | Return `id` to the caller. | + +## LogInSystem.hpp / LogInSystem.cpp + +#### Constructors + +| Parameters | Task | +|:-----------|:-----------------------------------| +| `()` | Creates an empty `LogInSystem` with nothing in the `users` vector. | +| `(string filename)` | Initialize the `users` vector from the file of the given filename. | + +#### Functions + +| Function | Task | +|:----------------------|:-------------------------| +| `Person getUser(string);` | Takes in a string parameter that will be used to searched for a matching username in the users vector. | +| `Person getUser(int);` | Takes in an int parameter that will be used to searched for a matching id in the users vector. | +| `int login();` | Verify user credentials and return the user's id. | +| `void loggedIn(Person);` | Takes in a Person parameter after the user has logged in as that identity. It provides the user options to display and modify the information of that specific identity in the database (vector). | +| `Person registration();` | Request all the required information from the user to register for a new account and add them into the users vector. | +| `Person editCredentials(Person);` | Takes in a `Person` parameter and make edit to it according to the user's intention. It will then return the updated Person to the caller. | +| `void update(Person);` | Take in a `Person` parameter that is to be updated into the users vector. It will search for the `Person` in the vector with matching ID and replace it. | +| `string chgUsername();` | Changes the `username` of the `Person`. | +| `string chgPassword(Person);` | Changes the `password` of the `Person`. | +| `string chgEmail();` | Changes the `email` of the `Person`. | +| `string chgPhoneNo();` | Changes the `phoneNo` of the `Person`. + +## Vehicle.hpp / Vehicle.cpp + +#### Constructors + +| Parameters | Task | +|:-----------|:-----------------------------| +| `(int length, int width, int id)` | Basic constructor that fill in the rest of the missing information with "TBA". | +| `(string type, int length, int width, string origin, string destination, string dateNtime, int id)` | Complete constructor with all the information except the seatMap. | +| `(string type, int length, int width, string origin, string destination, string dateNtime, int id, vector< vector > seatMap)` | Complete constructor that is used to read data from the database. | + +#### Functions + +| Function | Task | +|:---------------------------|:-------------------------| +| `void setType(string type);` | Set `type` to the new given input. | +| `void setOrigin(string origin);` | Set `origin` to the new given input. | +| `void setDestination(string destination);` | Set `destination` to the new given input. | +| `void setDateNTime(string dateNtime);` | Set `dateNtime` to the new given input. | +| `string getType();` | Return `type` to the caller. | +| `int getLength();` | Return `length` to the caller. | +| `int getWidth();` | Return `width` to the caller. | +| `string getOrigin();` | Return `origin` to the caller. | +| `string getDestination();` | Return `destination` to the caller. | +| `string getDateNTime();` | Return `dateNtime` to the caller. | +| `int getId();` | Return `id` to the caller. | +| `void initialize();` | Initialize the `seatMap` to the intended size. | +| `bool bookSeat(int x, int y, int guestId);` | Register a specific seat to the given guestId. Returns if the proces is successful. | +| `bool checkAvailabilty(int x, int y);` | Check if the seat at the given coordinate is still available. | +| `void printMap();` | Print the map with label of 'A' as *available* and 'X' as *not available*. | +| `void printMap(int guestId);` | Takes in the user id and print the map with label of 'A' as *available*, 'U' as the *user* and 'X' as *not available*. | + +## VehicleManager.hpp / VehicleManager.cpp + +#### Constructors + +| Parameters | Task | +|:-----------|:--------------------------------| +| `()` | Empty constructor. Creates an empty vector of `vehicles`. | +| `(string jsonFile)` | Creates a vector of `vehicles` by importing the data from a json file. | + +#### Functions + +| Function | Task | +|:----------------------------------|:-------------------------| +| `bool add(Vehicle newVehicle);` | Add a new `Vehicle` into the vector. | +| `bool remove(Vehicle toRemove);` | Remove a specific `Vehicle` from the vector. | +| `Vehicle get(int id);` | Get a specific `Vehicle` with the given `id`. | +| `void toJson(string jsonFile);` | Export all data to a json file. | +| `int getId();` | Returns a suggested `id` for the next item. | diff --git a/VehicleManager.cpp b/VehicleManager.cpp deleted file mode 100644 index 492d5f6..0000000 --- a/VehicleManager.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include -#include -#include -#include "VehicleManager.hpp" -using namespace std; - -VehicleManager::VehicleManager() -{ - -} - -VehicleManager::VehicleManager(string jsonFile) -{ - ifstream jsonFile(jsonFile.c_str()); - - Json::Reader reader; - Json::Value vehicle; - - ifstream json(jsonFile.c_str(), ifstream::binary); - - bool parseSuccess = reader.parse(json, vehicle, false); - - if(parseSuccess) - { - - } -} diff --git a/database.txt b/database.txt index adca3d9..a10b596 100644 --- a/database.txt +++ b/database.txt @@ -1,4 +1,4 @@ -binhonglee bhlee03655 binhonglee@hotmail.com +13479618886 1 -binhong binhong binhong@binhong.me +14802527013 2 -who whut wtf_is_happening@binhong.me +999999999 3 -testing password testing@binhong.me +601111111111 4 +binhonglee bhlee03655 binhonglee@hotmail.com +13479618886 1 +binhong binhong binhong@binhong.me +14802527013 2 +who whut wtf_is_happening@binhong.me +999999999 3 +testing password testing@binhong.me +601111111111 4 diff --git a/main.cpp b/main.cpp deleted file mode 100644 index 299694a..0000000 --- a/main.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include -#include -#include -#include "VehicleManager.cpp" -using namespace std; - -int main() -{ - Vehicle test = Vehicle(10, 5, 0); - - if (test.bookSeat(3, 4, 10)) - { - cout << "Booking success" << endl; - } - test.printMap(10); -} diff --git a/LogInSystem.cpp b/src/LogInSystem.cpp similarity index 73% rename from LogInSystem.cpp rename to src/LogInSystem.cpp index 2fc1a89..a4038ce 100644 --- a/LogInSystem.cpp +++ b/src/LogInSystem.cpp @@ -1,431 +1,360 @@ -/* - * Written by : Bin Hong Lee - * Last edited : Dec 29, 2016 - * - */ - -#include -#include -#include -#include -#include -#include "Person.cpp" -#include "Vehicle.cpp" -using namespace std; - -//Declaration of functions -Person getUser(string); -Person getUser(int); -bool login(); -void loggedIn(Person); -Person registration(); -Person editCredentials(Person); -void update(Person); -string chgUsername(); -string chgPassword(Person); -string chgEmail(); -string chgPhoneNo(); - -vector vehicles; -vector users; -static int wrongPass = 0; -static int globalUserId; - -int main() -{ - ifstream fin("database.txt"); - while (!fin.eof()) - { - string username; - string password; - string email; - string phoneNo; - int id; - - fin >> username >> password >> email >> phoneNo >> id; - - Person newPerson(username, password, email, phoneNo, id); - users.push_back(newPerson); - } - - users.pop_back(); - globalUserId = users.back().getId() + 1; - -/* - ifstream otherFin("vehiclesData.txt"); - - while (!otherFin.eof()) - { - string type; - int length; - int width; - string origin; - string destination; - string dateNtime; - int id; - otherFin >> type >> length >> width >> origin >> destination >> dateNtime >> id; - - vector< vector > seatMap; - - for (int i = 0; i < length; i++) - { - vector row; - for (int j = 0; j < width; j++) - { - int temp; - otherFin >> temp; - row.push_back(temp); - } - seatMap.push_back(row); - } - - Vehicle newVehicle(type, length, width, origin, destination, dateNtime, id, seatMap); - vehicles.push_back(newVehicle); - } - - vehicles.pop_back(); -*/ - - int userOption = -1; - - while (userOption != 0) - { - cout << "Please choose one of the following options :" << endl; - cout << "Log In - 1" << endl; - cout << "Registration - 2" << endl; - cout << "Exit - 0" << endl; - - cin >> userOption; - bool loggedOut = 0; - - switch (userOption) - { - case 1: - while (wrongPass < 3 && !loggedOut) - { - loggedOut = login(); - } - break; - case 2: loggedIn(registration()); break; - case 0: break; - default: - cout << "Invalid input. Please try again." << endl; - } - } - - ofstream fout("database.txt"); - - while (!users.empty()) - { - fout << users.begin()->getName() << " " << users.begin()->getPassword() << " " << users.begin()->getEmail() << " " << users.begin()->getPhoneNo() << " " << users.begin()->getId() << endl; - users.erase(users.begin()); - } - - return 0; -} - -Person getUser(string name) -{ - for (int i = 0; i < users.size(); i++) - { - if (users.at(i).getName() == name) - { - return users.at(i); - } - } - - throw invalid_argument(""); -} - -Person getUser(int toSearchId) -{ - for (int i = 0; i < users.size(); i++) - { - if (users.at(i).getId() == toSearchId) - { - return users.at(i); - } - } - - throw invalid_argument(""); -} - -bool login() -{ - Person currentUser(-1); - string username; - string password; - //If the user already has 3 fail attempt to login - if (wrongPass > 2) - { - //Print error message and exit - cout << "Too many failed login attempt. The program will now be terminated." << endl; - return false; - } - - try - { - //Ask for username - cout << "Username:"; - cin >> username; - - //Ask for password - cout << "Password:"; - cin >> password; - - //Get the user - currentUser = getUser(username); - } - catch (invalid_argument ag) - { - cout << "Invalid username or password. Please try again." << endl; - - wrongPass++; - return false; - } - - if (!currentUser.checkPassword(password)) - { - cout << "Invalid username or password. Please try again." << endl; - - wrongPass++; - return false; - } - - loggedIn(currentUser); - return true; -} - -Person registration() -{ - bool available; - string username; - string password; - string password2; - string email; - string phoneNo; - - do - { - try - { - cout << "Username: "; - cin >> username; - - getUser(username); - - cout << "Username taken. Please try again." << endl; - - available = false; - } - catch (invalid_argument ag) - { - available = true; - } - } while (!available); - - cout << "Username is available." << endl; - - do - { - //Get password - cout << "Password : "; - cin >> password; - - //Confirm password - cout << "Confirm password :"; - cin >> password2; - - //Print error message if both password is not the same - if (password != password2) - cout << "Password unmatched. Please try again."; - //Loop until both password input is the same - } while (password != password2); - - //Get email - cout << "Email : "; - cin >> email; - - //Get phone number - cout << "Phone No. : "; - cin >> phoneNo; - - //Create and push the new 'Person' into stack - Person newUser(username, password, email, phoneNo, globalUserId); - users.push_back(newUser); - - globalUserId++; - - //Print success message - cout << "Account is successfully registered." << endl; - - return newUser; -} - -void loggedIn(Person currentUser) -{ - int choice; - - do { - cout << "Please choose one of the following options: " << endl; - cout << "View credentials - 1" << endl; - cout << "Edit credentials - 2" << endl; - cout << "Exit - 0" << endl; - - cin >> choice; - - switch(choice) - { - case 1: - cout << "Username : " << currentUser.getName() << endl; - cout << "Email : " << currentUser.getEmail() << endl; - cout << "Phone No.: " << currentUser.getPhoneNo() << endl; - break; - case 2: - currentUser = editCredentials(currentUser); - break; - case 0: - return; - default: - cout << "Invalid option. Please try again." << endl; - cout << endl; - } - } while(choice != 0); -} - -Person editCredentials(Person currentUser) -{ - int choice; - - cout << "Which of the following to edit?" << endl; - cout << "Username - 1" << endl; - cout << "Password - 2" << endl; - cout << "Email - 3" << endl; - cout << "Phone No. - 4" << endl; - cout << "Exit - 0" << endl; - - cin >> choice; - - switch (choice) - { - case 1: - currentUser.setName(chgUsername()); - update(currentUser); - cout << "Username is updated." << endl; - break; - case 2: - currentUser.setPassword(chgPassword(currentUser)); - cout << "Password is updated." << endl; - break; - case 3: - currentUser.setEmail(chgEmail()); - cout << "Email is updated." << endl; - break; - case 4: - currentUser.setPhoneNo(chgPhoneNo()); - cout << "Phone number is updated." << endl; - break; - } - - return currentUser; -} - -void update(Person newInfo) -{ - int position = users.size() / 2; - - while (position < users.size() && position >= 0) - { - if (users.at(position).getId() == newInfo.getId()) - { - users.erase(users.begin() + position); - users.insert(users.begin() + position, newInfo); - cout << users.at(position).getName() << endl; - return; - } - - if (users.at(position).getId() < newInfo.getId()) - { - position++; - } - else - { - position--; - } - } -} - -string chgUsername() -{ - bool availablility; - string newUsername; - - do - { - availablility = true; - - cout << "New Username: "; - cin >> newUsername; - - for (int i = 0; i < users.size(); i++) - { - if (users.at(i).getName() == newUsername) - { - availablility = false; - break; - } - } - } while (!availablility); - - cout << "Username is available." << endl; - return newUsername; -} - -string chgPassword(Person currentUser) -{ - string password; - string newPassword0; - string newPassword1; - - cout << "Please input the current password : "; - cin >> password; - - while (!currentUser.checkPassword(password) && wrongPass < 3) - { - cout << "Wrong password. Please try again." << endl; - wrongPass++; - - cout << "Please input the current password : "; - cin >> password; - } - - do { - cout << "Please input the new password : "; - cin >> newPassword0; - - cout << "Please confirm your new password : "; - cin >> newPassword1; - } while(newPassword0 != newPassword1); - - return newPassword0; -} - -string chgEmail() -{ - string newEmail; - - cout << "Please input the new email : "; - cin >> newEmail; - - return newEmail; -} - -string chgPhoneNo() -{ - string newPhoneNo; - - cout << "Please input the new phone no. : "; - cin >> newPhoneNo; - - return newPhoneNo; -} +/* + * Written by : Bin Hong Lee + * Last edited : Dec 29, 2016 + * + */ + +#include +#include +#include +#include +#include +#include "LogInSystem.hpp" +using namespace std; + +LogInSystem::LogInSystem() +{ + +} + +LogInSystem::LogInSystem(string filename) +{ + ifstream fin(filename); + while (!fin.eof()) + { + string username; + string password; + string email; + string phoneNo; + int id; + + fin >> username >> password >> email >> phoneNo >> id; + + Person newPerson(username, password, email, phoneNo, id); + users.push_back(newPerson); + } + + users.pop_back(); + globalUserId = users.back().getId() + 1; +} + +Person LogInSystem::getUser(string name) +{ + for (int i = 0; i < users.size(); i++) + { + if (users.at(i).getName() == name) + { + return users.at(i); + } + } + + throw invalid_argument(""); +} + +Person LogInSystem::getUser(int toSearchId) +{ + for (int i = 0; i < users.size(); i++) + { + if (users.at(i).getId() == toSearchId) + { + return users.at(i); + } + } + + throw invalid_argument(""); +} + +int LogInSystem::getWrongPass() +{ + return wrongPass; +} + +int LogInSystem::login() +{ + Person currentUser(-1); + string username; + string password; + //If the user already has 3 fail attempt to login + if (wrongPass > 2) + { + //Print error message and exit + cout << "Too many failed login attempt. The program will now be terminated." << endl; + return -1; + } + + try + { + //Ask for username + cout << "Username:"; + cin >> username; + + //Ask for password + cout << "Password:"; + cin >> password; + + //Get the user + currentUser = getUser(username); + } + catch (invalid_argument ag) + { + cout << "Invalid username or password. Please try again." << endl; + + wrongPass++; + return -1; + } + + if (!currentUser.checkPassword(password)) + { + cout << "Invalid username or password. Please try again." << endl; + + wrongPass++; + return -1; + } + + return currentUser.getId(); +} + +Person LogInSystem::registration() +{ + bool available; + string username; + string password; + string password2; + string email; + string phoneNo; + + do + { + try + { + cout << "Username: "; + cin >> username; + + getUser(username); + + cout << "Username taken. Please try again." << endl; + + available = false; + } + catch (invalid_argument ag) + { + available = true; + } + } while (!available); + + cout << "Username is available." << endl; + + do + { + //Get password + cout << "Password : "; + cin >> password; + + //Confirm password + cout << "Confirm password :"; + cin >> password2; + + //Print error message if both password is not the same + if (password != password2) + cout << "Password unmatched. Please try again."; + //Loop until both password input is the same + } while (password != password2); + + //Get email + cout << "Email : "; + cin >> email; + + //Get phone number + cout << "Phone No. : "; + cin >> phoneNo; + + //Create and push the new 'Person' into stack + Person newUser(username, password, email, phoneNo, globalUserId); + users.push_back(newUser); + + globalUserId++; + + //Print success message + cout << "Account is successfully registered." << endl; + + return newUser; +} + +void LogInSystem::loggedIn(Person currentUser) +{ + int choice; + + do { + cout << "Please choose one of the following options: " << endl; + cout << "View credentials - 1" << endl; + cout << "Edit credentials - 2" << endl; + cout << "Exit - 0" << endl; + + cin >> choice; + + switch(choice) + { + case 1: + cout << "Username : " << currentUser.getName() << endl; + cout << "Email : " << currentUser.getEmail() << endl; + cout << "Phone No.: " << currentUser.getPhoneNo() << endl; + break; + case 2: + currentUser = editCredentials(currentUser); + break; + case 0: + return; + default: + cout << "Invalid option. Please try again." << endl; + cout << endl; + } + } while(choice != 0); +} + +Person LogInSystem::editCredentials(Person currentUser) +{ + int choice; + + cout << "Which of the following to edit?" << endl; + cout << "Username - 1" << endl; + cout << "Password - 2" << endl; + cout << "Email - 3" << endl; + cout << "Phone No. - 4" << endl; + cout << "Exit - 0" << endl; + + cin >> choice; + + switch (choice) + { + case 1: + currentUser.setName(chgUsername()); + update(currentUser); + cout << "Username is updated." << endl; + break; + case 2: + currentUser.setPassword(chgPassword(currentUser)); + cout << "Password is updated." << endl; + break; + case 3: + currentUser.setEmail(chgEmail()); + cout << "Email is updated." << endl; + break; + case 4: + currentUser.setPhoneNo(chgPhoneNo()); + cout << "Phone number is updated." << endl; + break; + } + + return currentUser; +} + +void LogInSystem::update(Person newInfo) +{ + int position = users.size() / 2; + + while (position < users.size() && position >= 0) + { + if (users.at(position).getId() == newInfo.getId()) + { + users.erase(users.begin() + position); + users.insert(users.begin() + position, newInfo); + cout << users.at(position).getName() << endl; + return; + } + + if (users.at(position).getId() < newInfo.getId()) + { + position++; + } + else + { + position--; + } + } +} + +string LogInSystem::chgUsername() +{ + bool availablility; + string newUsername; + + do + { + availablility = true; + + cout << "New Username: "; + cin >> newUsername; + + for (int i = 0; i < users.size(); i++) + { + if (users.at(i).getName() == newUsername) + { + availablility = false; + break; + } + } + } while (!availablility); + + cout << "Username is available." << endl; + return newUsername; +} + +string LogInSystem::chgPassword(Person currentUser) +{ + string password; + string newPassword0; + string newPassword1; + + cout << "Please input the current password : "; + cin >> password; + + while (!currentUser.checkPassword(password) && wrongPass < 3) + { + cout << "Wrong password. Please try again." << endl; + wrongPass++; + + cout << "Please input the current password : "; + cin >> password; + } + + do { + cout << "Please input the new password : "; + cin >> newPassword0; + + cout << "Please confirm your new password : "; + cin >> newPassword1; + } while(newPassword0 != newPassword1); + + return newPassword0; +} + +string LogInSystem::chgEmail() +{ + string newEmail; + + cout << "Please input the new email : "; + cin >> newEmail; + + return newEmail; +} + +string LogInSystem::chgPhoneNo() +{ + string newPhoneNo; + + cout << "Please input the new phone no. : "; + cin >> newPhoneNo; + + return newPhoneNo; +} + +void LogInSystem::toTxtFile(string filename) +{ + ofstream fout(filename); + + while (!users.empty()) + { + fout << users.begin()->getName() << " " << users.begin()->getPassword() << " " << users.begin()->getEmail() << " " << users.begin()->getPhoneNo() << " " << users.begin()->getId() << endl; + users.erase(users.begin()); + } +} diff --git a/src/LogInSystem.hpp b/src/LogInSystem.hpp new file mode 100644 index 0000000..7a6616b --- /dev/null +++ b/src/LogInSystem.hpp @@ -0,0 +1,33 @@ +#include +#include +#include +#include +#include +#include "Person.cpp" +using namespace std; + +class LogInSystem +{ +public: + LogInSystem(); + LogInSystem(string filename); + //Declaration of functions + Person getUser(string); + Person getUser(int); + int getWrongPass(); + int login(); + void loggedIn(Person); + Person registration(); + Person editCredentials(Person); + void update(Person); + string chgUsername(); + string chgPassword(Person); + string chgEmail(); + string chgPhoneNo(); + void toTxtFile(); + +private: + vector users; + static int wrongPass = 0; + static int globalUserId; +}; diff --git a/Person.cpp b/src/Person.cpp similarity index 93% rename from Person.cpp rename to src/Person.cpp index 62f16d6..a6ed561 100644 --- a/Person.cpp +++ b/src/Person.cpp @@ -1,76 +1,76 @@ -/* - * Written by : BinHong Lee - * Last edited : 5/11/2016 - */ - -#include -#include "Person.hpp" -using namespace std; - -//Empty constructor -Person::Person(int id) -{ - this->id = id; -} - -//Complete comstructor -Person::Person(string name, string password, string email, string phoneNo, int id) -{ - this->name = name; - this->password = password; - this->email = email; - this->phoneNo = phoneNo; - this->id = id; -} - -//Getters and setters -void Person::setName(string name) -{ - this->name = name; -} - -string Person::getName() -{ - return name; -} - -void Person::setEmail(string email) -{ - this->email = email; -} - -string Person::getEmail() -{ - return email; -} - -void Person::setPhoneNo(string phoneNo) -{ - this->phoneNo = phoneNo; -} - -string Person::getPhoneNo() -{ - return phoneNo; -} - -void Person::setPassword(string password) -{ - this->password = password; -} - -string Person::getPassword() -{ - return password; -} - -//"password" do not have getter but only a checker instead -bool Person::checkPassword(string password) -{ - return (this->password == password); -} - -int Person::getId() -{ - return id; -} +/* + * Written by : BinHong Lee + * Last edited : 5/11/2016 + */ + +#include +#include "Person.hpp" +using namespace std; + +//Empty constructor +Person::Person(int id) +{ + this->id = id; +} + +//Complete comstructor +Person::Person(string name, string password, string email, string phoneNo, int id) +{ + this->name = name; + this->password = password; + this->email = email; + this->phoneNo = phoneNo; + this->id = id; +} + +//Getters and setters +void Person::setName(string name) +{ + this->name = name; +} + +string Person::getName() +{ + return name; +} + +void Person::setEmail(string email) +{ + this->email = email; +} + +string Person::getEmail() +{ + return email; +} + +void Person::setPhoneNo(string phoneNo) +{ + this->phoneNo = phoneNo; +} + +string Person::getPhoneNo() +{ + return phoneNo; +} + +void Person::setPassword(string password) +{ + this->password = password; +} + +string Person::getPassword() +{ + return password; +} + +//"password" do not have getter but only a checker instead +bool Person::checkPassword(string password) +{ + return (this->password == password); +} + +int Person::getId() +{ + return id; +} diff --git a/Person.hpp b/src/Person.hpp similarity index 94% rename from Person.hpp rename to src/Person.hpp index e7cca25..dca5a22 100644 --- a/Person.hpp +++ b/src/Person.hpp @@ -1,27 +1,27 @@ -#include -#include -using namespace std; - -class Person -{ - private : - string name; - string password; - string email; - string phoneNo; - int id; - - public : - Person(int id); - Person(string, string, string, string, int); - void setName(string); - string getName(); - void setEmail(string); - string getEmail(); - void setPhoneNo(string); - string getPhoneNo(); - void setPassword(string); - string getPassword(); - bool checkPassword(string); - int getId(); -}; +#include +#include +using namespace std; + +class Person +{ + private : + string name; + string password; + string email; + string phoneNo; + int id; + + public : + Person(int id); + Person(string, string, string, string, int); + void setName(string); + string getName(); + void setEmail(string); + string getEmail(); + void setPhoneNo(string); + string getPhoneNo(); + void setPassword(string); + string getPassword(); + bool checkPassword(string); + int getId(); +}; diff --git a/Vehicle.cpp b/src/Vehicle.cpp similarity index 85% rename from Vehicle.cpp rename to src/Vehicle.cpp index 0d50c9c..3248159 100644 --- a/Vehicle.cpp +++ b/src/Vehicle.cpp @@ -1,141 +1,156 @@ -#include -#include "Vehicle.hpp" -using namespace std; - -Vehicle::Vehicle(int length, int width, int id) -{ - type = "TBA"; - origin = "TBA"; - destination = "TBA"; - dateNtime = "TBA"; - this->length = length; - this->width = width; - this->id = id; - initialize(); -} - -Vehicle::Vehicle(string type, int length, int width, string origin, string destination, string dateNtime, int id) -{ - this->type = type; - this->length = length; - this->width = width; - this->origin = origin; - this->destination = destination; - this->dateNtime = dateNtime; - this->id = id; - initialize(); -} - -Vehicle::Vehicle(string type, int length, int width, string origin, string destination, string dateNtime, int id, vector< vector > seatMap) -{ - this->type = type; - this->length = length; - this->width = width; - this->origin = origin; - this->destination = destination; - this->dateNtime = dateNtime; - this->id = id; - this->seatMap = seatMap; -} - -void Vehicle::setType(string type) -{ - this->type = type; -} - -void Vehicle::setOrigin(string origin) -{ - this->origin = origin; -} - -void Vehicle::setDestination(string destination) -{ - this->destination = destination; -} - -string Vehicle::getType() -{ - return type; -} - -int Vehicle::getLength() -{ - return length; -} - -int Vehicle::getWidth() -{ - return width; -} - -string Vehicle::getOrigin() -{ - return origin; -} - -string Vehicle::getDestination() -{ - return destination; -} - -string Vehicle::getDateNTime() -{ - return dateNtime; -} - -int Vehicle::getId() -{ - return id; -} - -void Vehicle::initialize() -{ - for (int i = 0; i < length; i++) - { - vector row; - for (int j = 0; j < width; j++) - { - row.push_back(-1); - } - seatMap.push_back(row); - } -} - -bool Vehicle::bookSeat(int x, int y, int guestId) -{ - if (seatMap[x][y] == -1) - { - seatMap[x][y] = guestId; - return true; - } - - return false; -} - -bool Vehicle::checkAvailabilty(int x, int y) -{ - return seatMap[x][y] == -1; -} - -void Vehicle::printMap(int guestId) -{ - for (int i = 0; i < length; i++) - { - for (int j = 0; j < width; j++) - { - if (seatMap[i][j] == -1) - { - cout << "A "; - } - else if (seatMap[i][j] == guestId) - { - cout << "U "; - } - else - { - cout << "X "; - } - } - cout << endl; - } -} +#include +#include "Vehicle.hpp" +using namespace std; + +Vehicle::Vehicle(int length, int width, int id) +{ + type = "TBA"; + origin = "TBA"; + destination = "TBA"; + dateNtime = "TBA"; + this->length = length; + this->width = width; + this->id = id; + initialize(); +} + +Vehicle::Vehicle(string type, int length, int width, string origin, string destination, string dateNtime, int id) +{ + this->type = type; + this->length = length; + this->width = width; + this->origin = origin; + this->destination = destination; + this->dateNtime = dateNtime; + this->id = id; + initialize(); +} + +Vehicle::Vehicle(string type, int length, int width, string origin, string destination, string dateNtime, int id, vector< vector > seatMap) +{ + this->type = type; + this->length = length; + this->width = width; + this->origin = origin; + this->destination = destination; + this->dateNtime = dateNtime; + this->id = id; + this->seatMap = seatMap; +} + +void Vehicle::setType(string type) +{ + this->type = type; +} + +void Vehicle::setOrigin(string origin) +{ + this->origin = origin; +} + +void Vehicle::setDestination(string destination) +{ + this->destination = destination; +} + +void Vehicle::setDateNTime(string dateNtime) +{ + this->dateNtime = dateNtime; +} + +string Vehicle::getType() +{ + return type; +} + +int Vehicle::getLength() +{ + return length; +} + +int Vehicle::getWidth() +{ + return width; +} + +string Vehicle::getOrigin() +{ + return origin; +} + +string Vehicle::getDestination() +{ + return destination; +} + +string Vehicle::getDateNTime() +{ + return dateNtime; +} + +int Vehicle::getId() +{ + return id; +} + +void Vehicle::initialize() +{ + for (int i = 0; i < length; i++) + { + vector row; + for (int j = 0; j < width; j++) + { + row.push_back(-1); + } + seatMap.push_back(row); + } +} + +bool Vehicle::bookSeat(int x, int y, int guestId) +{ + if (checkAvailabilty(x, y)) + { + seatMap[x][y] = guestId; + return true; + } + + return false; +} + +bool Vehicle::checkAvailabilty(int x, int y) +{ + return seatMap[x][y] == -1; +} + +int Vehicle::getGuest(int x, int y) +{ + return seatMap[x][y]; +} + +void Vehicle::printMap() +{ + printMap(-2); +} + +void Vehicle::printMap(int guestId) +{ + for (int i = 0; i < length; i++) + { + for (int j = 0; j < width; j++) + { + if (seatMap[i][j] == -1) + { + cout << "A "; + } + else if (seatMap[i][j] == guestId) + { + cout << "U "; + } + else + { + cout << "X "; + } + } + cout << endl; + } +} diff --git a/Vehicle.hpp b/src/Vehicle.hpp similarity index 87% rename from Vehicle.hpp rename to src/Vehicle.hpp index 007abb9..de21dbb 100644 --- a/Vehicle.hpp +++ b/src/Vehicle.hpp @@ -1,38 +1,39 @@ -#include -#include -#include -using namespace std; - -class Vehicle -{ -private: - string type; - int length; - int width; - string origin; - string destination; - string dateNtime; - int id; - vector< vector > seatMap; - -public: - Vehicle(int length, int width, int id); - Vehicle(string type, int length, int width, string origin, string destination, string dateNtime, int id); - Vehicle(string type, int length, int width, string origin, string destination, string dateNtime, int id, vector< vector > seatMap); - void setType(string type); - void setLength(int length); - void setWidth(int width); - void setOrigin(string origin); - void setDestination(string origin); - string getType(); - int getLength(); - int getWidth(); - string getOrigin(); - string getDestination(); - string getDateNTime(); - int getId(); - void initialize(); - bool bookSeat(int x, int y, int guestId); - bool checkAvailabilty(int x, int y); - void printMap(int guestId); -}; +#include +#include +#include +using namespace std; + +class Vehicle +{ +private: + string type; + int length; + int width; + string origin; + string destination; + string dateNtime; + int id; + vector< vector > seatMap; + +public: + Vehicle(int length, int width, int id); + Vehicle(string type, int length, int width, string origin, string destination, string dateNtime, int id); + Vehicle(string type, int length, int width, string origin, string destination, string dateNtime, int id, vector< vector > seatMap); + void setType(string type); + void setOrigin(string origin); + void setDestination(string origin); + void setDateNTime(string dateNtime); + string getType(); + int getLength(); + int getWidth(); + string getOrigin(); + string getDestination(); + string getDateNTime(); + int getId(); + void initialize(); + bool bookSeat(int x, int y, int guestId); + bool checkAvailabilty(int x, int y); + int getGuest(int x, int y); + void printMap(); + void printMap(int guestId); +}; diff --git a/src/VehicleManager.cpp b/src/VehicleManager.cpp new file mode 100644 index 0000000..43c65f4 --- /dev/null +++ b/src/VehicleManager.cpp @@ -0,0 +1,143 @@ +#include +#include +#include +#include +#include "VehicleManager.hpp" +using namespace std; + +VehicleManager::VehicleManager() +{ + +} + +VehicleManager::VehicleManager(string jsonFile) +{ + ifstream jsonFile(jsonFile.c_str()); + + Json::Reader reader; + Json::Value vehicles; + + ifstream json(jsonFile.c_str(), ifstream::binary); + + bool parseSuccess = reader.parse(json, vehicles, false); + + if(parseSuccess) + { + Json::Value::Members mbr = vehicles.getMemberNames(); + + for (vector::const_iterator i = mbr.begin(); i != mbr.end(); i++) + { + Json::Value jsonVehicle = vehicles[*i]; + string vhcStr = "vehicle"; + + if (vhcStr.compare(*i) == 0) + { + string placeholder = jsonVehicle.asString(); + } + else + { + string type = jsonVehicle["Type"].asString(); + int length = jsonVehicle["Length"].asInt(); + int width = jsonVehicle["Width"].asInt(); + string origin = jsonVehicle["Origin"].asString(); + string destination = jsonVehicle["Destination"].asString(); + string dateNtime = jsonVehicle["DateNTime"].asString(); + int id = jsonVehicle["id"].asInt(); + + Json::Value jsonSeatMap = jsonVehicle["SeatMap"]; + vector< vector > seatMap; + + for (int i = 0; i < length; i++) + { + vector row; + + for (int j = 0; i < width; j++) + { + row.push_back(jsonSeatMap[i][j].asInt()); + } + + seatMap.push_back(row); + } + + Vehicle vehicle(type, length, width, origin, destination, dateNtime, id, seatMap); + add(vehicle); + } + } + } +} + +bool VehicleManager::add(Vehicle newVehicle) +{ + if (newVehicle.getId() <= vehicle.back().getId()) + { + return false; + } + + vehicles.push_back(newVehicle); + return (vehicles.back().getId() == newVehicle.getId()); +} + +bool VehicleManager::remove(Vehicle toRemove) +{ + for (int i = 0; i < vehicles.size(); i++) + { + if (vehicles.at(i).getId() == toRemove.getId()) + { + vehicles.erase(vehicles.begin() + i); + return true; + } + } + + return false; +} + +Vehicle VehicleManager::get(int id) +{ + for (int i = 0; i < vehicles.size(); i++) + { + if (vehicles.at(i).getId() == id) + { + return vehicles.at(i); + } + } +} + +void VehicleManager::toJson(string jsonFile) +{ + Json::Value jsonLib; + + for (int i = 0; i < vehicles.size(); i++) + { + Json::Value jsonVehicle; + Vehicle vehicle = vehicles.at(i); + + jsonVehicle["Type"] = vehicle.getType(); + jsonVehicle["Length"] = vehicle.getLength(); + jsonVehicle["Width"] = vehicle.getWidth(); + jsonVehicle["Origin"] = vehicle.getOrigin(); + jsonVehicle["Destination"] = vehicle.getDestination(); + jsonVehicle["DateNTime"] = vehicle.getDateNTime(); + jsonVehicle["id"] = vehicle.getId(); + + int* seatMap = new int[vehicle.getLength()][vehicle.getWidth()]; + + for (int i = 0; i < vehicle.getLength(); i++) + { + for (int j = 0; j < vehicle.getWidth(); j++) + { + seatMap[i][j] = vehicle.getGuest(i, y); + } + } + + jsonVehicle["SeatMap"] = seatMap; + } + + Json::StyledStreamWriter ssw(" "); + ofstream jsonOutFile(jsonFile.c_str(), ofstream::binary); + ssw.write(jsonOutFile, jsonLib); +} + +int VehicleManager::getId() +{ + return (vehicles.back().getId() + 1); +} diff --git a/VehicleManager.hpp b/src/VehicleManager.hpp similarity index 90% rename from VehicleManager.hpp rename to src/VehicleManager.hpp index 41a2976..5d9089d 100644 --- a/VehicleManager.hpp +++ b/src/VehicleManager.hpp @@ -1,18 +1,19 @@ -#include -#include -#include "Vehicle.hpp" -using namespace std; - -class VehicleManager -{ -private: - vector vehicles; - -public: - VehicleManager(); - VehicleManager(string jsonFile); - bool add(Vehicle newVehicle); - bool remove(Vehicle toRemove); - Vehicle get(int id); - void toJson(string jsonFile); -} +#include +#include +#include "Vehicle.hpp" +using namespace std; + +class VehicleManager +{ +private: + vector vehicles; + +public: + VehicleManager(); + VehicleManager(string jsonFile); + bool add(Vehicle newVehicle); + bool remove(Vehicle toRemove); + Vehicle get(int id); + void toJson(string jsonFile); + int getId(); +} diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..50b5f86 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include "VehicleManager.cpp" +#include "LogInSystem.cpp" +#include "Person.cpp" +using namespace std; + +int main() +{ + LogInSystem users("database.txt"); + VehicleManager vehicles("vehiclesData.json"); + + int currentUser = -1; + + int userOption = -1; + + while (userOption != 0) + { + cout << "Please choose one of the following options :" << endl; + cout << "Log In - 1" << endl; + cout << "Registration - 2" << endl; + cout << "Exit - 0" << endl; + + cin >> userOption; + + switch (userOption) + { + case 1: + while (users.getWrongPass() < 3 && currentUser != -1) + { + currentUser = users.login(); + } + break; + case 2: users.loggedIn(users.registration()); break; + case 0: break; + default: + cout << "Invalid input. Please try again." << endl; + } + } + + Vehicle test = Vehicle(10, 5, 0); + + if (test.bookSeat(3, 4, 10)) + { + cout << "Booking success" << endl; + } + test.printMap(10); +} diff --git a/vehiclesData.txt b/vehiclesData.json similarity index 100% rename from vehiclesData.txt rename to vehiclesData.json