- LogInSystem is now a class - All source files are moved into src folder - Updated README.md to reflect the codes' current progress - renamed vehiclesData.txt to vehiclesData.jsonFixing-travis-yml
@@ -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 |
@@ -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`<br>`string newEmail`<br>`string newPhoneNo`<br>`string newPassword`<br>`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<int> > 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. | |
@@ -1,28 +0,0 @@ | |||||
#include <string> | |||||
#include <vector> | |||||
#include <iostream> | |||||
#include <json/json.h> | |||||
#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) | |||||
{ | |||||
} | |||||
} |
@@ -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 |
@@ -1,17 +0,0 @@ | |||||
#include <string> | |||||
#include <vector> | |||||
#include <iostream> | |||||
#include <json/json.h> | |||||
#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); | |||||
} |
@@ -1,431 +1,360 @@ | |||||
/* | |||||
* Written by : Bin Hong Lee | |||||
* Last edited : Dec 29, 2016 | |||||
* | |||||
*/ | |||||
#include <iostream> | |||||
#include <fstream> | |||||
#include <json/json.h> | |||||
#include <string> | |||||
#include <vector> | |||||
#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<Vehicle> vehicles; | |||||
vector<Person> 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<int> > seatMap; | |||||
for (int i = 0; i < length; i++) | |||||
{ | |||||
vector<int> 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 <iostream> | |||||
#include <fstream> | |||||
#include <json/json.h> | |||||
#include <string> | |||||
#include <vector> | |||||
#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()); | |||||
} | |||||
} |
@@ -0,0 +1,33 @@ | |||||
#include <iostream> | |||||
#include <fstream> | |||||
#include <json/json.h> | |||||
#include <string> | |||||
#include <vector> | |||||
#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<Person> users; | |||||
static int wrongPass = 0; | |||||
static int globalUserId; | |||||
}; |
@@ -1,76 +1,76 @@ | |||||
/* | |||||
* Written by : BinHong Lee | |||||
* Last edited : 5/11/2016 | |||||
*/ | |||||
#include <string> | |||||
#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 <string> | |||||
#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; | |||||
} |
@@ -1,27 +1,27 @@ | |||||
#include <string> | |||||
#include <iostream> | |||||
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 <string> | |||||
#include <iostream> | |||||
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(); | |||||
}; |
@@ -1,141 +1,156 @@ | |||||
#include <string> | |||||
#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<int> > 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<int> 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 <string> | |||||
#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<int> > 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<int> 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; | |||||
} | |||||
} |
@@ -1,38 +1,39 @@ | |||||
#include <string> | |||||
#include <iostream> | |||||
#include <vector> | |||||
using namespace std; | |||||
class Vehicle | |||||
{ | |||||
private: | |||||
string type; | |||||
int length; | |||||
int width; | |||||
string origin; | |||||
string destination; | |||||
string dateNtime; | |||||
int id; | |||||
vector< vector<int> > 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<int> > 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 <string> | |||||
#include <iostream> | |||||
#include <vector> | |||||
using namespace std; | |||||
class Vehicle | |||||
{ | |||||
private: | |||||
string type; | |||||
int length; | |||||
int width; | |||||
string origin; | |||||
string destination; | |||||
string dateNtime; | |||||
int id; | |||||
vector< vector<int> > 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<int> > 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); | |||||
}; |
@@ -0,0 +1,143 @@ | |||||
#include <string> | |||||
#include <vector> | |||||
#include <iostream> | |||||
#include <json/json.h> | |||||
#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<string>::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<int> > seatMap; | |||||
for (int i = 0; i < length; i++) | |||||
{ | |||||
vector<int> 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); | |||||
} |
@@ -1,18 +1,19 @@ | |||||
#include <string> | |||||
#include <vector> | |||||
#include "Vehicle.hpp" | |||||
using namespace std; | |||||
class VehicleManager | |||||
{ | |||||
private: | |||||
vector<Vehicle> vehicles; | |||||
public: | |||||
VehicleManager(); | |||||
VehicleManager(string jsonFile); | |||||
bool add(Vehicle newVehicle); | |||||
bool remove(Vehicle toRemove); | |||||
Vehicle get(int id); | |||||
void toJson(string jsonFile); | |||||
} | |||||
#include <string> | |||||
#include <vector> | |||||
#include "Vehicle.hpp" | |||||
using namespace std; | |||||
class VehicleManager | |||||
{ | |||||
private: | |||||
vector<Vehicle> vehicles; | |||||
public: | |||||
VehicleManager(); | |||||
VehicleManager(string jsonFile); | |||||
bool add(Vehicle newVehicle); | |||||
bool remove(Vehicle toRemove); | |||||
Vehicle get(int id); | |||||
void toJson(string jsonFile); | |||||
int getId(); | |||||
} |
@@ -0,0 +1,50 @@ | |||||
#include <string> | |||||
#include <vector> | |||||
#include <iostream> | |||||
#include <json/json.h> | |||||
#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); | |||||
} |