15 Commits

Author SHA1 Message Date
ec089c66e7 id fix 2019-07-22 10:28:44 -03:00
ef607e7ffc cosmetic merge 2019-07-22 10:19:52 -03:00
aa52f96beb fixed customer role 2019-07-22 10:16:07 -03:00
8778a72c29 Merge branch 'outputfix' of AP-CT/Parkmanne into billing4real 2019-07-22 12:53:15 +00:00
f3061fe3bc +Edit f, +CLS 2019-07-22 09:51:47 -03:00
c256f5f589 ?? 2019-07-22 09:39:56 -03:00
23144deb04 intergration 2019-07-22 08:57:53 -03:00
e5d736eb9a working? 2019-07-22 08:48:17 -03:00
9a471428a6 works, fixed another db problem 2019-07-22 00:34:26 -03:00
3bf5b26c2b working now 2019-07-21 23:04:26 -03:00
914792948d Parktimes populated 2019-07-21 22:28:43 -03:00
e49b206df7 idk what 2019-07-21 22:21:09 -03:00
a54016340a sdf 2019-07-21 22:13:34 -03:00
b987a2eb78 db - address 2019-07-21 21:58:03 -03:00
03c40541a5 aaaaaaaaaaaa 2019-07-21 21:25:51 -03:00
11 changed files with 451 additions and 361 deletions

View File

@ -13,13 +13,14 @@ Customer::Customer(string name_, string password_, Vehicle_type vehicle_, string
} }
Customer::Customer(int id_, string name_, string password_, Vehicle_type vehicle_, Customer::Customer(int id_, string name_, string password_, Vehicle_type vehicle_,
vector<Park_time> instances, string telephone_) vector<Park_time> instances, string telephone_, int role_)
: id{id_}, : id{id_},
name{name_}, name{name_},
password{password_}, password{password_},
vehicle{vehicle_}, vehicle{vehicle_},
park_instances{instances}, park_instances{instances},
telephone{telephone_} {} telephone{telephone_},
role{role_} {}
// clock in/out methods // clock in/out methods
// ==================================================================================== // ====================================================================================

View File

@ -1,371 +1,442 @@
#include "headers/Interface.h" #include "headers/Interface.h"
// I added it to pass spots, because the parking options need it to check where // I added it to pass spots, because the parking options need it to check where
// is free parking_spots is declared in main, and if i declare it // is free parking_spots is declared in main, and if i declare it
// liberal use of // liberal use of
// cin.ignore(10000, '\n'); // cin.ignore(10000, '\n');
// 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
bool verify(void); void interface(vector<Park_spot>& spots) {
/*
void interface(vector<Park_spot>& spots) { string introduction = "P A R K M A N N E"; //logo animation, disable during testing
/* text_animation(introduction, 50);
string introduction = "P A R K M A N N E"; //logo animation, disable during testing */
text_animation(introduction, 50); __label__ exit;
*/ system("CLS");
__label__ exit; cout << "\nWelcome to the parking system. Please login...";
cout << "\nWelcome to the parking system. Please login..."; int id;
int id; string password;
string password; cout << "\nEnter your id: ";
cout << "\nEnter your id: "; cin >> id;
cin >> id;
cin.ignore(10000, '\n');
Customer c = query_customer_with_id(id);
cout << "\nEnter your password: ";
std::getline(cin, password);
while (!(verify_password(c.password, password))) {
cout << "ERROR: wrong password. Please retype your password or type [x] to exit:\n";
std::getline(cin, password);
if(password=="x")goto exit;
}
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!";
}
exit:;
}
void interface_member(vector<Park_spot>& spots, Customer& c) {
__label__ begin, exit;
cout << "\nLogged in succesfully!\n";
begin:
cout <<"Hello! "<<c.name<< ", please select an option:\n[1]Parking\n[2]Monthly report\n"
"[3]Edit information\n[4]Exit\n";
int option;
cin >> option;
cin.ignore(10000, '\n');
switch (option) {
case 1: {
park(c, spots);
break;
}
case 2: {
cout << "Has not been implemented yet\n";
break;
}
case 3: {
cout << "Has not been implemented yet\n";
break;
}
case 4: {
cout << "Exiting...\n";
goto exit;
break;
}
default:
break;
}
goto begin;
exit:;
}
void interface_admin(vector<Park_spot>& spots) {
__label__ begin,exit;
begin:
cout << "\nWelcome to the admin interface\n";
cout << "\n[1] Reports & analytics";
cout << "\n[2] Parking spots";
cout << "\n[3] Make new user";
cout << "\n[4] Exit";
cout << "\nEnter option number: ";
int option;
cin >> option;
cin.ignore(10000, '\n');
switch (option) {
case 1: {
cout << "[1] See monthly report of ALL parking spots\n";
cout << "[2] See weekly report of ALL parking spots\n";
cout << "[3] See monthly report of a specific parking spot\n";
cout << "[4] See weekly report of a specific parking spot\n";
cout << "[5] Return\n";
cout << "Enter option number: ";
int option_1;
cin >> option_1;
cin.ignore(10000, '\n'); cin.ignore(10000, '\n');
switch (option_1) { Customer c = query_customer_with_id(id);
cout << "\nEnter your password: ";
std::getline(cin, password);
while (!(verify_password(c.password, password))) {
cout << "ERROR: wrong password. Please retype your password or type [x] to exit:\n";
std::getline(cin, password);
if (password == "x")
goto exit;
}
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!";
}
exit:;
}
void interface_member(vector<Park_spot>& spots, Customer& c) {
__label__ begin, exit;
cout << "\nLogged in succesfully!\n";
begin:
system("CLS");
cout << "Hello! " << c.name
<< ", please select an option:\n[1]Parking\n[2]Monthly report\n"
"[3]Edit information\n[4]Exit\n";
int option;
cin >> option;
cin.ignore(10000, '\n');
switch (option) {
case 1: { case 1: {
report_all_spots(); park(c, spots);
break; break;
} }
case 2: { case 2: {
report_all_spots(true); report_customer(c.id);
string lol;
std::cout<<"Enter any character to continue...";
std::cin>>lol;
break;
}
case 3: {
edit_information(c);
break;
}
case 4: {
cout << "Exiting...\n";
Sleep(2000);
goto exit;
break;
}
default:
break;
}
goto begin;
exit:;
}
void interface_admin(vector<Park_spot>& spots) {
__label__ begin, exit;
begin:
system("CLS");
cout << "\nWelcome to the admin interface\n";
cout << "\n[1] Reports & analytics";
cout << "\n[2] Parking spots";
cout << "\n[3] Make new user";
cout << "\n[4] Exit";
cout << "\nEnter option number: ";
int option;
cin >> option;
cin.ignore(10000, '\n');
switch (option) {
case 1: {
cout << "[1] See monthly report of ALL parking spots\n";
cout << "[2] See weekly report of ALL parking spots\n";
cout << "[3] See monthly report of a specific parking spot\n";
cout << "[4] See weekly report of a specific parking spot\n";
cout << "[5] See monthly report of a specific customer\n";
cout << "[6] See weekly report of a specific customer\n";
cout << "[7] Return\n";
cout << "Enter option number: ";
int option_1;
cin >> option_1;
cin.ignore(10000, '\n');
switch (option_1) {
case 1: {
report_all_spots();
break;
}
case 2: {
report_all_spots(true);
break;
}
case 3: {
report_single_spot();
break;
}
case 4: {
report_single_spot(true);
break;
}
case 5: {
report_customer(0);
break;
}
case 6: {
report_customer(0, true);
break;
}
case 7: {
goto begin;
break;
}
default:
break;
}
string lol;
std::cout<<"Enter any character to continue...";
std::cin>>lol;
break;
}
case 2: {
cout << "[1] See current status of parking spots\n";
cout << "[2] Make new parking spot\n";
cout << "[3] Return\n";
cout << "Enter option number: ";
int option_2;
cin >> option_2;
cin.ignore(10000, '\n');
switch (option_2) {
case 1: {
current_status_parkspots(spots);
string lol;
std::cout<<"Enter any character to continue...";
std::cin>>lol;
break;
}
case 2: {
new_parkspot(spots);
break;
}
case 3: {
goto begin;
break;
}
default:
break;
}
break; break;
} }
case 3: { case 3: {
report_single_spot(); system("CLS");
break; cout << "[1] Make new customer\n";
} cout << "[2] Make new admin\n";
case 4: { cout << "[3] Return\n";
report_single_spot(true); cout << "Enter option number: ";
break; int option_3;
} cin >> option_3;
case 5:{ cin.ignore(10000, '\n');
goto begin; switch (option_3) {
break; case 1: {
} new_customer();
break; break;
}
}
case 2: {
cout << "[1] See current status of parking spots\n";
cout << "[2] Make new parking spot\n";
cout << "[3] Return\n";
cout << "Enter option number: ";
int option_2;
cin >> option_2;
cin.ignore(10000, '\n');
switch (option_2) {
case 1: {
current_status_parkspots(spots);
break;
}
case 2: {
new_parkspot(spots);
break;
}
case 3:{
goto begin;
break;
}
default:
break;
}
break;
}
case 3: {
cout << "[1] Make new customer\n";
cout << "[2] Make new admin\n";
cout << "[3] Return\n";
cout << "Enter option number: ";
int option_3;
cin >> option_3;
cin.ignore(10000, '\n');
switch (option_3) {
case 1: {
new_customer();
break;
}
case 2: {
new_admin();
break;
}
case 3:{
goto begin;
break;
}
default:
break;
}
case 4: {goto exit;break;}
break;
}
default:
break;
}
goto begin;
exit:;
}
// --------- individual things.
void park(Customer& c, vector<Park_spot>& spots) {
__label__ exit;
cout << "You have selected parking option.\n";
if (!(c.parked())) {
cout << "The following spots fit your vehicle and are available: \n";
for (Park_spot i : spots) {
if ((i.v_type == c.vehicle)&(i.taken==false)) {
cout << i.id << ", ";
} }
case 2: {
new_admin();
break;
}
case 3: {
goto begin;
break;
}
default:
break;
}
case 4: {
std::cout<<"Exiting...";
Sleep(2000);
goto exit;
break;
} break;
} }
cout << "\nWhere do you want to park? Or type [0] to exit."; default:
int parkID; break;
cin >> parkID; }
if (!parkID)goto exit; goto begin;
cin.ignore(10000, '\n'); exit:;
for (Park_spot& i : spots) {
if (i.id == parkID) { }
if (verify())
{ // --------- individual things.
i.clock(c);
cout << "You have parked sucessfully!"; void park(Customer& c, vector<Park_spot>& spots) {
__label__ exit;
cout << "You have selected parking option.\n";
if (!(c.parked())) {
cout << "The following spots fit your vehicle and are available: \n";
for (Park_spot i : spots) {
if ((i.v_type == c.vehicle) & (i.taken == false)) {
cout << i.id << ", ";
}
}
cout << "\nWhere do you want to park? Or type [0] to exit.";
int parkID;
cin >> parkID;
if (!parkID)
goto exit;
cin.ignore(10000, '\n');
for (Park_spot& i : spots) {
if (i.id == parkID) {
if (confirm()) {
i.clock(c);
cout << "You have parked sucessfully!";
}
} }
} }
}
} else {
cout << "You are parked at spot " << c.parked_at()
<< ", do you want to clock out?\n[1] Yes\n[2] No";
int answer = 0;
cin >> answer;
cin.ignore(10000, '\n');
if (answer) {
query_parkspot_with_id(c.parked_at(), spots).clock(c);
cout << "You have sucessfully clocked out.";
} else { } else {
cout << "OK, have a nice day."; // exit to customer login cout << "You are parked at spot " << c.parked_at()
<< ", do you want to clock out?\n[1] Yes\n[2] No";
int answer = 0;
cin >> answer;
cin.ignore(10000, '\n');
if (answer) {
query_parkspot_with_id(c.parked_at(), spots).clock(c);
cout << "You have sucessfully clocked out.";
} else {
cout << "OK, have a nice day.";
}
}
exit:;
}
void new_customer() {
int vtype;
string name;
string password;
string telephone;
int role = 0;
cout << "\nWhat's the name of the customer? ";
std::getline(cin, name);
cout << "\nWhat's the vehicle type? \n[1]Twowheeler\n[2] Fourwheeler\n";
cin >> vtype;
cin.ignore(10000, '\n');
cout << "What's the telephone number? +";
std::getline(cin, telephone);
cout << "\nWhat's the password? ";
std::getline(cin, password);
Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role};
cout << "\nNew customer sucessfully created with ID:" << newcustomer.id << "\n";
if (confirm())
newcustomer.update_db();
}
void new_admin() {
int vtype = 2; // revision required! Needs to be set to NULL
string name;
string password;
string telephone;
int role = 1;
cout << "\nWhat's the name of the admin? ";
std::getline(cin, name);
cout << "\nWhat's the telephone number? +";
std::getline(cin, telephone);
cout << "\nWhat's the password?";
std::getline(cin, password);
Customer newadmin{name, password, Vehicle_type(vtype), telephone, role};
cout << "\nNew customer sucessfully created with ID=" << newadmin.id << "\n";
if (confirm())
newadmin.update_db();
}
void new_parkspot(vector<Park_spot>& spots) {
cout << "What type of parking spot? \n[1] Two-wheeler\n[2] Four-wheeler\n";
int vtype;
cin >> vtype;
cin.ignore(10000, '\n');
Park_spot newspot{Vehicle_type(vtype)};
if (confirm()) {
spots.push_back(newspot);
cout << "New parking spot sucessfully created.\n";
} }
} }
exit:;
}
void new_customer() { void edit_information(Customer& c)
int vtype; {
string name; string string0; int int0;
string password; /*std::cout<<"\nInput to update name or press [0] to keep name:\n";
string telephone; std::getline(cin,string0);
int role = 0; if (string0=="0");
cout << "\nWhat's the name of the customer? "; else c.name=string0;*/
std::getline(cin, name);
cout << "\nWhat's the vehicle type? \n[1]Twowheeler\n[2] Fourwheeler\n";
cin >> vtype;
cin.ignore(10000, '\n');
cout << "What's the telephone number? +";
std::getline(cin, telephone);
cout << "\nWhat's the password? ";
std::getline(cin, password);
Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role};
cout << "\nNew customer sucessfully created\n";
if (verify())newcustomer.update_db();
}
void new_admin() { std::cout<<"\n Input to update vehicle to [1]Two-Wheeler,"
int vtype = 2; // revision required! Needs to be set to NULL "[2]Four-Wheeler or press [0] to keep vehicle type:\n";
string name; std::cin>>int0;
string password; if (!int0);
string telephone; else c.vehicle=Vehicle_type(int0);
int role = 1; cin.ignore();
cout << "\nWhat's the name of the admin? "; std::cout<<"\n Input to update password or press [0] to keep current password:\n";
std::getline(cin, name); std::getline(cin,string0);
cout << "\nWhat's the telephone number? +"; if (string0=="0");
std::getline(cin, telephone); else c.password=hash_password(string0);
cout << "\nWhat's the password?";
std::getline(cin, password); std::cout<<"\n Input to update phone number or press [0] to keep current number:\n";
Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role}; std::getline(cin,string0);
cout << "\nNew customer sucessfully created\n"; if (string0=="0");
if(verify())newcustomer.update_db(); else c.telephone=string0;
} c.role=0;
if(confirm()){c.update_db();}
void new_parkspot(vector<Park_spot>& spots) {
cout << "What type of parking spot? \n[1] Twowheeler\n[2] Fourwheeler\n";
int vtype;
cin >> vtype;
cin.ignore(10000, '\n');
Park_spot newspot{Vehicle_type(vtype)};
if(verify()){spots.push_back(newspot);
cout << "New parking spot sucessfully created.\n";}
}
// time stuff-----------------------------------------------------
pair<int, int> create_month_period() {
std::time_t t = std::time(0);
std::tm* date = std::localtime(&t);
int month, year = 0;
cout << "Which month do you want a report on?[6 2018 for June 2018]\n";
cin >> month >> year;
date->tm_year = year - 1900;
date->tm_mday = 1;
date->tm_mon = month - 1;
pair<int, int> period;
period.first = mktime(date);
date->tm_mon = month;
period.second = mktime(date);
return period;
}
pair<int, int> create_week_period() {
std::time_t t = std::time(0);
std::tm* date = std::localtime(&t);
int day, month, year = 0;
cout << "Which month do you want a report on?[ 20 6 2018 for June 20th, 2018]\n";
cin >> day >> month >> year;
date->tm_year = year - 1900;
date->tm_mday = day;
date->tm_mon = month - 1;
date->tm_hour = 0;
date->tm_min = 0;
pair<int, int> period;
period.first = mktime(date);
period.second = period.first + 604800; // plus 7 days in seconds.
return period;
}
// ------------------------------ report stuff
void report_all_spots(bool weekly) {
pair<int, int> period;
if (weekly) {
period = create_week_period(); // remove the pair<int, int>
} else {
period = create_month_period(); // ^
} }
cout << "working timeperiods: " << period.first << ", " << period.second; // DEBUG // time stuff-----------------------------------------------------
reports_from_allparkspots(period); // TODO: namechange of reports_from_allparkspots in query? pair<int, int> create_month_period() {
} std::time_t t = std::time(0);
std::tm* date = std::localtime(&t);
void report_single_spot(bool weekly) { int month, year = 0;
cout << "Which parking spot would you like a report on?\n"; cout << "Which month do you want a report on?[6 2018 for June 2018]\n";
cout << "Parking spot ID: "; cin >> month >> year;
int spotID; date->tm_year = year - 1900;
cin >> spotID; date->tm_mday = 1;
cin.ignore(10000, '\n'); date->tm_mon = month - 1;
pair<int, int> period; pair<int, int> period;
if (weekly) { period.first = mktime(date);
period = create_week_period(); // remove the pair<int, int> date->tm_mon = month;
} else { period.second = mktime(date);
period = create_month_period(); return period;
} }
reports_from_parkspot(spotID, period);
}
void report_customer(int customerID, bool weekly) { pair<int, int> create_week_period() {
// use report_customer(0) to make interactive std::time_t t = std::time(0);
// so admin can call the interactive version, but customer can only call std::tm* date = std::localtime(&t);
// report_customer(own_cid) int day, month, year = 0;
if (!customerID) { cout << "Which month do you want a report on?[ 20 6 2018 for June 20th, 2018]\n";
cout << "What customer do you want a report on? ID: "; cin >> day >> month >> year;
cin >> customerID; date->tm_year = year - 1900;
date->tm_mday = day;
date->tm_mon = month - 1;
date->tm_hour = 0;
date->tm_min = 0;
pair<int, int> period;
period.first = mktime(date);
period.second = period.first + 604800; // plus 7 days in seconds.
return period;
} }
pair<int, int> period;
if (weekly) { bool confirm(void) {
pair<int, int> period = create_week_period(); string ver;
} else { std::cout << "\nAre you sure you want to commit these actions?"
pair<int, int> period = create_month_period(); "\n[No] Revert."
"\n[Yes] Commit.";
std::cin >> ver;
if (ver == "YES" | ver == "Yes" | ver == "yes")
{
std::cout<<"Succes! Changes Saved.";
Sleep(1000);
return true;
}
else
{
std::cout<<"No changes committed.";
Sleep(1000);
return false;
}
} }
reports_from_customer(customerID, period);
}
bool verify(void) // ------------------------------ report stuff
{
string ver;
std::cout<<"\nAre you sure you want to commit these actions?"
"\n[No] Revert."
"\n[Yes] Commit.";
std::cin>>ver;
if (ver=="YES"|ver=="Yes"|ver=="yes") return true;
else return false;
} void report_all_spots(bool weekly) {
pair<int, int> period;
if (weekly) {
period = create_week_period(); // remove the pair<int, int>
} else {
period = create_month_period(); // ^
}
cout << "working timeperiods: " << period.first << ", " << period.second; // DEBUG
reports_from_allparkspots(period); // TODO: namechange of reports_from_allparkspots in query?
}
void report_single_spot(bool weekly) {
cout << "Which parking spot would you like a report on?\n";
cout << "Parking spot ID: ";
int spotID;
cin >> spotID;
cin.ignore(10000, '\n');
pair<int, int> period;
if (weekly) {
period = create_week_period(); // remove the pair<int, int>
} else {
period = create_month_period();
}
reports_from_parkspot(spotID, period);
}
void report_customer(int customerID, bool weekly) {
// use report_customer(0) to make interactive
// so admin can call the interactive version, but customer can only call
// report_customer(own_cid)
if (!customerID) {
cout << "What customer do you want a report on? ID: ";
cin >> customerID;
}
pair<int, int> period;
if (weekly) {
period = create_week_period();
} else {
period = create_month_period();
}
reports_from_customer(customerID, period);
}

View File

@ -60,7 +60,8 @@ std::ostream& operator<<(std::ostream& os, const Park_time& pt) {
os << "Customer # " << pt.customer_id << "at parking spot " << pt.spot_id << "\n"; os << "Customer # " << pt.customer_id << "at parking spot " << pt.spot_id << "\n";
os << "Clocked in :" << std::ctime(&start_); os << "Clocked in :" << std::ctime(&start_);
os << "clocked out : " << std::ctime(&end_); os << "clocked out : " << std::ctime(&end_);
os << "duration : " << pt.duration << "\n"; float dur_h = pt.duration / 3600.0;
os << "duration : " << dur_h << " h\n";
os << "- - - - - - - - - - - - - - - - - - - -\n"; os << "- - - - - - - - - - - - - - - - - - - -\n";
return os; return os;
} }

View File

@ -41,9 +41,10 @@ vector<Customer> query_customer_with_name(string name) {
string password = query.getColumn(2); string password = query.getColumn(2);
int vehicle = query.getColumn(3); // cast to vehicle int vehicle = query.getColumn(3); // cast to vehicle
string telephone = query.getColumn(4); string telephone = query.getColumn(4);
int role = query.getColumn(5);
vector<Park_time> park_instances = query_parktimes_for_customer(id); vector<Park_time> park_instances = query_parktimes_for_customer(id);
result.push_back( result.push_back(
Customer{id, name_, password, Vehicle_type(vehicle), park_instances, telephone}); Customer{id, name_, password, Vehicle_type(vehicle), park_instances, telephone, role});
} }
return result; return result;
} }
@ -63,8 +64,10 @@ Customer query_customer_with_id(int id) {
string password = query.getColumn(2); string password = query.getColumn(2);
int vehicle = query.getColumn(3); // cast to vehicle int vehicle = query.getColumn(3); // cast to vehicle
string telephone = query.getColumn(4); string telephone = query.getColumn(4);
int role = query.getColumn(5);
vector<Park_time> park_instances = query_parktimes_for_customer(id); vector<Park_time> park_instances = query_parktimes_for_customer(id);
Customer result{id, name, password, Vehicle_type(vehicle), park_instances, telephone}; Customer result{id, name, password, Vehicle_type(vehicle), park_instances, telephone, role};
return result; return result;
} }
} }
@ -135,18 +138,20 @@ void reports_from_allparkspots(pair<int, int> period) {
} }
void current_status_parkspots(vector<Park_spot>& spots) { void current_status_parkspots(vector<Park_spot>& spots) {
cout << "P.spot \t\tStatus\t\t Customer\n";
for (auto& i : spots) { for (auto& i : spots) {
cout << "---------------------------\n"; cout << "\n" << i.id << "\t\t" << ((i.taken) ? "true" : "false");
cout << "PS #" << i.id << "\n";
cout << "Taken: " << ((i.taken) ? "true" : "false") << "\n";
if (i.taken) { if (i.taken) {
cout << "Customer#" << i.parked_customer << " parked there\n"; cout << "\t\t" << i.parked_customer;
} }
} }
cout << "\n";
} }
vector<Park_time> reports_from_customer(int cid, pair<int, int> period) { vector<Park_time> reports_from_customer(int cid, pair<int, int> period) {
vector<Park_time> park_times; vector<Park_time> park_times;
int verhicle = int(query_customer_with_id(cid).vehicle);
float sum = 0;
SQLite::Statement query( SQLite::Statement query(
data::db, "SELECT * FROM Park_time WHERE customer_id = ? AND start > ? AND end < ?;"); data::db, "SELECT * FROM Park_time WHERE customer_id = ? AND start > ? AND end < ?;");
query.bind(1, cid); query.bind(1, cid);
@ -159,11 +164,14 @@ vector<Park_time> reports_from_customer(int cid, pair<int, int> period) {
int duration = query.getColumn(5); int duration = query.getColumn(5);
Park_time result{id, cid, spotid, start, duration}; Park_time result{id, cid, spotid, start, duration};
park_times.push_back(result); park_times.push_back(result);
sum += duration/3600;
} }
query.reset(); query.reset();
for (auto i : park_times) { for (auto i : park_times) {
cout << i; cout << std::setprecision(2) << i;
sum += i.duration / 3600.0;
} }
cout << "Your fees for this month: $" << std::setprecision(4) << sum * verhicle << "\n";
return park_times; return park_times;
} }

BIN
_test.db3 Normal file

Binary file not shown.

View File

@ -20,7 +20,7 @@ SQLite::Database start_db() {
} }
db.exec( db.exec(
"create table if not exists Customer (id integer primary key, name " "create table if not exists Customer (id integer primary key, name "
"text, password text, vehicle int, telephone text)"); "text, password text, vehicle int, telephone text, role int)");
db.exec( db.exec(
"create table if not exists Park_spot (id integer primary key, taken " "create table if not exists Park_spot (id integer primary key, taken "
"int, customer_id int, vehicle_type int)"); "int, customer_id int, vehicle_type int)");

View File

@ -41,9 +41,9 @@ class Customer {
Vehicle_type vehicle; Vehicle_type vehicle;
string telephone; string telephone;
int role; int role;
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_, int role_);
void clock_in(int s_id); void clock_in(int s_id);
void clock_out(int s_id); void clock_out(int s_id);
bool parked(); bool parked();

View File

@ -1,7 +1,10 @@
#include "Query.h" #include "Query.h"
#include <stdlib.h>
#include <synchapi.h>
using std::cin; using std::cin;
//interface functions
void interface(vector<Park_spot>& spots); void interface(vector<Park_spot>& spots);
void interface_member(vector<Park_spot>& spots, Customer& c); void interface_member(vector<Park_spot>& spots, Customer& c);
void interface_admin(vector<Park_spot>& spots); void interface_admin(vector<Park_spot>& spots);
@ -9,11 +12,16 @@ void park(Customer& c, vector<Park_spot>& spots);
void new_customer(); void new_customer();
void new_admin(); void new_admin();
void new_parkspot(vector<Park_spot>& spots); void new_parkspot(vector<Park_spot>& spots);
void edit_information(Customer&);
// time creation // time creation
pair<int, int> create_month_period(); pair<int, int> create_month_period();
pair<int, int> create_week_period(); pair<int, int> create_week_period();
// report stuff // report functions
void report_single_spot(bool weekly = false); void report_single_spot(bool weekly = false);
void report_all_spots(bool weekly = false); void report_all_spots(bool weekly = false);
void report_customer(int customerID, bool weekly = false);
// confirmation function
bool confirm();

View File

@ -3,6 +3,7 @@
#pragma once #pragma once
#include "Park_spot.h" #include "Park_spot.h"
#include <iomanip>
using std::pair; using std::pair;
/*these are the functions that search the database and create objects from it. /*these are the functions that search the database and create objects from it.

View File

@ -1,5 +1,5 @@
#include "headers/Interface.h"
#include "headers/Interface.h"
/* /*
Code structure is like this: Code structure is like this:
@ -45,11 +45,11 @@ static vector<Park_spot> parking_spots = populate_spots();
static vector<Customer> park_customers; static vector<Customer> park_customers;
int main() { int main() {
while (true) {interface(parking_spots); }
}
while (true) {
interface(parking_spots);
}
}
/* /*
Why is this not in query.cpp? Because somehow, it errors out when it's there. Why is this not in query.cpp? Because somehow, it errors out when it's there.

BIN
test.db3

Binary file not shown.