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

@ -6,14 +6,13 @@
// 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 string introduction = "P A R K M A N N E"; //logo animation, disable during testing
text_animation(introduction, 50); text_animation(introduction, 50);
*/ */
__label__ exit; __label__ exit;
system("CLS");
cout << "\nWelcome to the parking system. Please login..."; cout << "\nWelcome to the parking system. Please login...";
int id; int id;
string password; string password;
@ -27,7 +26,8 @@ void interface(vector<Park_spot>& spots) {
while (!(verify_password(c.password, password))) { while (!(verify_password(c.password, password))) {
cout << "ERROR: wrong password. Please retype your password or type [x] to exit:\n"; cout << "ERROR: wrong password. Please retype your password or type [x] to exit:\n";
std::getline(cin, password); std::getline(cin, password);
if(password=="x")goto exit; if (password == "x")
goto exit;
} }
if (query_role_customer(id) == 1) { if (query_role_customer(id) == 1) {
interface_admin(spots); interface_admin(spots);
@ -44,7 +44,9 @@ void interface_member(vector<Park_spot>& spots, Customer& c) {
cout << "\nLogged in succesfully!\n"; cout << "\nLogged in succesfully!\n";
begin: begin:
cout <<"Hello! "<<c.name<< ", please select an option:\n[1]Parking\n[2]Monthly report\n" 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"; "[3]Edit information\n[4]Exit\n";
int option; int option;
cin >> option; cin >> option;
@ -55,17 +57,21 @@ void interface_member(vector<Park_spot>& spots, Customer& c) {
break; break;
} }
case 2: { case 2: {
cout << "Has not been implemented yet\n"; report_customer(c.id);
string lol;
std::cout<<"Enter any character to continue...";
std::cin>>lol;
break; break;
} }
case 3: { case 3: {
cout << "Has not been implemented yet\n"; edit_information(c);
break; break;
} }
case 4: { case 4: {
cout << "Exiting...\n"; cout << "Exiting...\n";
Sleep(2000);
goto exit; goto exit;
break; break;
} }
@ -80,6 +86,7 @@ void interface_member(vector<Park_spot>& spots, Customer& c) {
void interface_admin(vector<Park_spot>& spots) { void interface_admin(vector<Park_spot>& spots) {
__label__ begin, exit; __label__ begin, exit;
begin: begin:
system("CLS");
cout << "\nWelcome to the admin interface\n"; cout << "\nWelcome to the admin interface\n";
cout << "\n[1] Reports & analytics"; cout << "\n[1] Reports & analytics";
cout << "\n[2] Parking spots"; cout << "\n[2] Parking spots";
@ -95,7 +102,9 @@ void interface_admin(vector<Park_spot>& spots) {
cout << "[2] See weekly 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 << "[3] See monthly report of a specific parking spot\n";
cout << "[4] See weekly report of a specific parking spot\n"; cout << "[4] See weekly report of a specific parking spot\n";
cout << "[5] Return\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: "; cout << "Enter option number: ";
int option_1; int option_1;
cin >> option_1; cin >> option_1;
@ -118,11 +127,24 @@ void interface_admin(vector<Park_spot>& spots) {
break; break;
} }
case 5: { case 5: {
report_customer(0);
break;
}
case 6: {
report_customer(0, true);
break;
}
case 7: {
goto begin; goto begin;
break; break;
} }
default:
break; break;
} }
string lol;
std::cout<<"Enter any character to continue...";
std::cin>>lol;
break;
} }
case 2: { case 2: {
cout << "[1] See current status of parking spots\n"; cout << "[1] See current status of parking spots\n";
@ -135,6 +157,9 @@ void interface_admin(vector<Park_spot>& spots) {
switch (option_2) { switch (option_2) {
case 1: { case 1: {
current_status_parkspots(spots); current_status_parkspots(spots);
string lol;
std::cout<<"Enter any character to continue...";
std::cin>>lol;
break; break;
} }
case 2: { case 2: {
@ -148,9 +173,11 @@ void interface_admin(vector<Park_spot>& spots) {
default: default:
break; break;
} }
break; break;
} }
case 3: { case 3: {
system("CLS");
cout << "[1] Make new customer\n"; cout << "[1] Make new customer\n";
cout << "[2] Make new admin\n"; cout << "[2] Make new admin\n";
cout << "[3] Return\n"; cout << "[3] Return\n";
@ -174,8 +201,12 @@ void interface_admin(vector<Park_spot>& spots) {
default: default:
break; break;
} }
case 4: {goto exit;break;} case 4: {
std::cout<<"Exiting...";
Sleep(2000);
goto exit;
break; break;
} break;
} }
default: default:
@ -183,6 +214,7 @@ void interface_admin(vector<Park_spot>& spots) {
} }
goto begin; goto begin;
exit:; exit:;
} }
// --------- individual things. // --------- individual things.
@ -201,12 +233,12 @@ void park(Customer& c, vector<Park_spot>& spots) {
cout << "\nWhere do you want to park? Or type [0] to exit."; cout << "\nWhere do you want to park? Or type [0] to exit.";
int parkID; int parkID;
cin >> parkID; cin >> parkID;
if (!parkID)goto exit; if (!parkID)
goto exit;
cin.ignore(10000, '\n'); cin.ignore(10000, '\n');
for (Park_spot& i : spots) { for (Park_spot& i : spots) {
if (i.id == parkID) { if (i.id == parkID) {
if (verify()) if (confirm()) {
{
i.clock(c); i.clock(c);
cout << "You have parked sucessfully!"; cout << "You have parked sucessfully!";
} }
@ -223,7 +255,7 @@ void park(Customer& c, vector<Park_spot>& spots) {
query_parkspot_with_id(c.parked_at(), spots).clock(c); query_parkspot_with_id(c.parked_at(), spots).clock(c);
cout << "You have sucessfully clocked out."; cout << "You have sucessfully clocked out.";
} else { } else {
cout << "OK, have a nice day."; // exit to customer login cout << "OK, have a nice day.";
} }
} }
exit:; exit:;
@ -245,8 +277,9 @@ void new_customer() {
cout << "\nWhat's the password? "; cout << "\nWhat's the password? ";
std::getline(cin, password); std::getline(cin, password);
Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role}; Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role};
cout << "\nNew customer sucessfully created\n"; cout << "\nNew customer sucessfully created with ID:" << newcustomer.id << "\n";
if (verify())newcustomer.update_db(); if (confirm())
newcustomer.update_db();
} }
void new_admin() { void new_admin() {
@ -261,19 +294,49 @@ void new_admin() {
std::getline(cin, telephone); std::getline(cin, telephone);
cout << "\nWhat's the password?"; cout << "\nWhat's the password?";
std::getline(cin, password); std::getline(cin, password);
Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role}; Customer newadmin{name, password, Vehicle_type(vtype), telephone, role};
cout << "\nNew customer sucessfully created\n"; cout << "\nNew customer sucessfully created with ID=" << newadmin.id << "\n";
if(verify())newcustomer.update_db(); if (confirm())
newadmin.update_db();
} }
void new_parkspot(vector<Park_spot>& spots) { void new_parkspot(vector<Park_spot>& spots) {
cout << "What type of parking spot? \n[1] Twowheeler\n[2] Fourwheeler\n"; cout << "What type of parking spot? \n[1] Two-wheeler\n[2] Four-wheeler\n";
int vtype; int vtype;
cin >> vtype; cin >> vtype;
cin.ignore(10000, '\n'); cin.ignore(10000, '\n');
Park_spot newspot{Vehicle_type(vtype)}; Park_spot newspot{Vehicle_type(vtype)};
if(verify()){spots.push_back(newspot); if (confirm()) {
cout << "New parking spot sucessfully created.\n";} spots.push_back(newspot);
cout << "New parking spot sucessfully created.\n";
}
}
void edit_information(Customer& c)
{
string string0; int int0;
/*std::cout<<"\nInput to update name or press [0] to keep name:\n";
std::getline(cin,string0);
if (string0=="0");
else c.name=string0;*/
std::cout<<"\n Input to update vehicle to [1]Two-Wheeler,"
"[2]Four-Wheeler or press [0] to keep vehicle type:\n";
std::cin>>int0;
if (!int0);
else c.vehicle=Vehicle_type(int0);
cin.ignore();
std::cout<<"\n Input to update password or press [0] to keep current password:\n";
std::getline(cin,string0);
if (string0=="0");
else c.password=hash_password(string0);
std::cout<<"\n Input to update phone number or press [0] to keep current number:\n";
std::getline(cin,string0);
if (string0=="0");
else c.telephone=string0;
c.role=0;
if(confirm()){c.update_db();}
} }
// time stuff----------------------------------------------------- // time stuff-----------------------------------------------------
@ -311,6 +374,26 @@ pair<int, int> create_week_period() {
return period; return period;
} }
bool confirm(void) {
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")
{
std::cout<<"Succes! Changes Saved.";
Sleep(1000);
return true;
}
else
{
std::cout<<"No changes committed.";
Sleep(1000);
return false;
}
}
// ------------------------------ report stuff // ------------------------------ report stuff
void report_all_spots(bool weekly) { void report_all_spots(bool weekly) {
@ -351,21 +434,9 @@ void report_customer(int customerID, bool weekly) {
} }
pair<int, int> period; pair<int, int> period;
if (weekly) { if (weekly) {
pair<int, int> period = create_week_period(); period = create_week_period();
} else { } else {
pair<int, int> period = create_month_period(); period = create_month_period();
} }
reports_from_customer(customerID, period); reports_from_customer(customerID, period);
} }
bool verify(void)
{
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;
}

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:
@ -46,10 +46,10 @@ 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.