Compare commits

...

4 Commits
exit ... master

14 changed files with 163 additions and 90 deletions

View File

@ -1,3 +1,5 @@
cmake_minimum_required(VERSION 3.10) cmake_minimum_required(VERSION 3.10)
project(park) project(park)
@ -49,3 +51,4 @@ elseif (MSYS OR MINGW)
libsodium libsodium
) )
endif() endif()

View File

@ -2,12 +2,13 @@
// constructors // constructors
Customer::Customer(string name_, string password_, Vehicle_type vehicle_, string telephone_) Customer::Customer(string name_, string password_, Vehicle_type vehicle_, string telephone_, int role_)
: id{auto_increment_db() + 1}, : id{auto_increment_db() + 1},
name{name_}, name{name_},
password{hash_password(password_)}, password{hash_password(password_)},
vehicle{vehicle_}, vehicle{vehicle_},
telephone{telephone_} { telephone{telephone_},
role{role_} {
save_db(); save_db();
} }
@ -54,8 +55,9 @@ int Customer::parked_at() { return park_instances[park_instances.size() - 1].spo
// functions that interact with the database // functions that interact with the database
void Customer::save_db() { void Customer::save_db() {
string statement{"insert into Customer values (, '', '', ,'');"}; string statement{"insert into Customer values (, '', '', ,'', );"};
// after ( = 28) // after ( = 28)
statement.insert(43, to_string(role));
statement.insert(41, telephone); statement.insert(41, telephone);
statement.insert(38, to_string(int(vehicle))); statement.insert(38, to_string(int(vehicle)));
statement.insert(36, password); statement.insert(36, password);
@ -70,8 +72,9 @@ void Customer::save_db() {
void Customer::update_db() { void Customer::update_db() {
string statement = string statement =
"UPDATE Customer SET name = '', password = '', " "UPDATE Customer SET name = '', password = '', "
"vehicle = '', telephone = '' where id = '';"; "vehicle = '', telephone = '', role = '' where id = '';";
statement.insert(87, to_string(id)); statement.insert(89, to_string(id));
statement.insert(84, to_string(role));
statement.insert(73, telephone); statement.insert(73, telephone);
statement.insert(57, to_string(int(vehicle))); statement.insert(57, to_string(int(vehicle)));
statement.insert(43, password); statement.insert(43, password);

View File

@ -7,39 +7,34 @@
// so it skips to the next newline, in essence clearing the cin buffer // so it skips to the next newline, in essence clearing the cin buffer
void interface(vector<Park_spot>& spots) { void interface(vector<Park_spot>& spots) {
int selector; /*
cout << "\nHello and welcome to the parking spot! Please select a suitable " string introduction = "P A R K M A N N E"; //logo animation, disable during testing
"option:"; text_animation(introduction, 50);
cout << "\n[1]Log in as member"; */
cout << "\n[2]Log in as administrator";
cin >> selector;
cin.ignore(10000, '\n');
switch (selector) {
case 1: {
interface_member(spots);
break;
}
case 2: {
interface_admin(spots);
break;
}
}
}
void interface_member(vector<Park_spot>& spots) { cout << "\nWelcome to the parking system. Please login..";
int id; int id;
string password; string password;
cout << "\nPlease input id:"; cout << "\nEnter your id: ";
cin >> id; cin >> id;
cin.ignore(10000, '\n'); cin.ignore(10000, '\n');
Customer c = query_customer_with_id(id); Customer c = query_customer_with_id(id);
cout << "\nPlease input password:"; cout << "\nEnter your password: ";
std::getline(cin, password); std::getline(cin, password);
while (!(verify_password(c.password, password))) { while (!(verify_password(c.password, password))) {
cout << "ERROR: wrong password. Please retype your password:\n"; cout << "ERROR: wrong password. Please retype your password:\n";
std::getline(cin, password); std::getline(cin, password);
} }
if(query_role_customer(id)==1){
interface_admin(spots);
} else if(query_role_customer(id)==0){
interface_member(spots, c);
} else {
cout << "ERROR ROLE_INVALID..";
}
}
void interface_member(vector<Park_spot>& spots,Customer& c) {
cout << "Logged in succesfully\n"; cout << "Logged in succesfully\n";
cout << "select an option\n [1] Parking options\n[2]monthy report\n"; cout << "select an option\n [1] Parking options\n[2]monthy report\n";
int option; int option;
@ -68,8 +63,9 @@ void interface_admin(vector<Park_spot>& spots) {
cout << "[4] See weekly report of a specific parking spot\n"; cout << "[4] See weekly report of a specific parking spot\n";
cout << "[5] See current status of parking spots\n"; cout << "[5] See current status of parking spots\n";
cout << "[6] Make new customer\n"; cout << "[6] Make new customer\n";
cout << "[7] Make new parking spot\n"; cout << "[7] Make new admin\n";
cout << "option[1-7]:"; cout << "[8] Make new parking spot\n";
cout << "option[1-8]:";
int option; int option;
cin >> option; cin >> option;
cin.ignore(10000, '\n'); cin.ignore(10000, '\n');
@ -83,7 +79,7 @@ void interface_admin(vector<Park_spot>& spots) {
break; break;
} }
case 3: { case 3: {
cout << "Which parking spot would you like a report on?ID:"; cout << "Which parking spot would you like a report on?\nID:";
int spotid; int spotid;
cin >> spotid; cin >> spotid;
cin.ignore(10000, '\n'); cin.ignore(10000, '\n');
@ -91,7 +87,7 @@ void interface_admin(vector<Park_spot>& spots) {
break; break;
} }
case 4: { case 4: {
cout << "Which parking spot would you like a report on?ID:"; cout << "Which parking spot would you like a report on?\nID:";
int spotid; int spotid;
cin >> spotid; cin >> spotid;
cin.ignore(10000, '\n'); cin.ignore(10000, '\n');
@ -107,6 +103,9 @@ void interface_admin(vector<Park_spot>& spots) {
break; break;
} }
case 7: { case 7: {
new_admin();
}
case 8: {
new_parkspot(spots); new_parkspot(spots);
break; break;
} }
@ -160,6 +159,7 @@ void new_customer() {
string name; string name;
string password; string password;
string telephone; string telephone;
int role = 0;
cout << "What's the name of the customer? "; cout << "What's the name of the customer? ";
std::getline(cin, name); std::getline(cin, name);
cout << "What's the vehicle type? [1]twoweeler, [2] fourweeler: "; cout << "What's the vehicle type? [1]twoweeler, [2] fourweeler: ";
@ -169,7 +169,24 @@ void new_customer() {
std::getline(cin, telephone); std::getline(cin, telephone);
cout << "What's the password?"; cout << "What's the password?";
std::getline(cin, password); std::getline(cin, password);
Customer newcustomer{name, password, Vehicle_type(vtype), telephone}; Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role};
cout << "New customer sucessfully created\n";
newcustomer.update_db();
}
void new_admin() {
int vtype = 2; //revision required!
string name;
string password;
string telephone;
int role = 1;
cout << "What's the name of the admin? ";
std::getline(cin, name);
cout << "What's the telephone number? ";
std::getline(cin, telephone);
cout << "What's the password?";
std::getline(cin, password);
Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role};
cout << "New customer sucessfully created\n"; cout << "New customer sucessfully created\n";
newcustomer.update_db(); newcustomer.update_db();
} }

View File

@ -122,3 +122,13 @@ cpp/header
*/ */
std::this_thread::sleep_for(seconds{sec}); std::this_thread::sleep_for(seconds{sec});
} }
// text animtion duh
void text_animation(const string& text, unsigned int pause_time)
{
for(const char m:text) // range loop; for each character in string
{
cout << m << flush;
sleep_for(milliseconds(pause_time));
}
}

View File

@ -72,6 +72,15 @@ Customer query_customer_with_id(int id) {
} }
} }
int query_role_customer(int id){
SQLite::Statement query(data::db, "SELECT * FROM Customer WHERE id = ?;");
query.bind(1, id);
while(query.executeStep()){
int role = query.getColumn(5);
return role;
}
}
//------------------------------- parkspot info //------------------------------- parkspot info
Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots) { Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots) {

View File

@ -40,7 +40,8 @@ class Customer {
string password; string password;
Vehicle_type vehicle; Vehicle_type vehicle;
string telephone; string telephone;
Customer(string name_, string password_, Vehicle_type vehicle_, string telephone_); int role;
Customer(string name_, string password_, Vehicle_type vehicle_, string telephone_, int role);
Customer(int id_, string name_, string password_, Vehicle_type vehicle_, Customer(int id_, string name_, string password_, Vehicle_type vehicle_,
vector<Park_time> instances, string telephone_); vector<Park_time> instances, string telephone_);
void clock_in(int s_id); void clock_in(int s_id);

View File

@ -6,8 +6,9 @@
using std::cin; using std::cin;
void interface(vector<Park_spot>& spots); void interface(vector<Park_spot>& spots);
void interface_member(vector<Park_spot>& spots); void interface_member(vector<Park_spot>& spots, Customer& c);
void interface_admin(vector<Park_spot>& spots); void interface_admin(vector<Park_spot>& spots);
void park(Customer& c, vector<Park_spot>& spots); void park(Customer& c, vector<Park_spot>& spots);
void new_customer(); void new_customer();
void new_admin();
void new_parkspot(vector<Park_spot>& spots); void new_parkspot(vector<Park_spot>& spots);

View File

@ -12,8 +12,11 @@
using namespace std::chrono; using namespace std::chrono;
using std::cout; using std::cout;
using std::flush;
using std::string; using std::string;
using std::to_string; using std::to_string;
using std::this_thread::sleep_for;
using std::chrono::milliseconds;
/* /*
@ -64,7 +67,10 @@ class Park_time {
int start_to_int(); // helper int start_to_int(); // helper
}; };
// test funciton // test function
void Wait(int sec); void Wait(int sec);
// function that slowly outputs each character one by one
void text_animation(const string& text, unsigned int pause_time);
#endif // Park_time #endif // Park_time

View File

@ -59,6 +59,7 @@ Customer query_customer_with_id(int id);
vector<Park_spot> populate_spots(); vector<Park_spot> populate_spots();
Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots); Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots);
int query_role_customer(int id);
void reports_from_parkspot(int spotid, bool weekly = false); void reports_from_parkspot(int spotid, bool weekly = false);
void reports_from_allparkspots(bool weekly = false); void reports_from_allparkspots(bool weekly = false);

View File

@ -47,8 +47,17 @@ int main() {
// state of db: // state of db:
// er zijn 10 parkspots, 5 met biketype en 5 met pickup type // er zijn 10 parkspots, 5 met biketype en 5 met pickup type
// er is een customer met id 1(testcustomer) met password "password" // er is een customer met id 1(testcustomer) met password "password"
while(true) {
cin.clear();
interface(parking_spots); interface(parking_spots);
cout<<"\nexit? Input 'y' or 'n'..";
char n;
cin >> n;
cin.clear();
if(n=='y'){
break;
}
}
} }
/* /*

5
newParkManne.cpp Normal file
View File

@ -0,0 +1,5 @@
#include <iostream>
void say_hello(){
std::cout << "Hello, from newParkManne!\n";
}

BIN
park Executable file

Binary file not shown.

View File

@ -12,6 +12,14 @@ Or click the build icon in vscode *shrugs*
# Parkmanne # Parkmanne
## A stroll in the park ## A stroll in the park
######TO-DO List:
- [x] Admin login
- [ ] Billing report menu
- [ ] Report from a specific month i.e. january
- [ ] Edit option in menu
- [ ] Option to confirm edit after input
- [ ] Divide menu in sub menus
- [ ] Analytics of customer (e.g. # customers with 2-wheeler or list of customer and telephone numbers etc.)
This is a graph of how everything is connected. This is a graph of how everything is connected.
If you need to add functionality that doesn't fall in any of these, and you're unsure of what to include, you can decide something like this: If you need to add functionality that doesn't fall in any of these, and you're unsure of what to include, you can decide something like this:

BIN
test.db3

Binary file not shown.