13 Commits

Author SHA1 Message Date
3b45ae4d02 Cosmetic changes 2019-07-22 10:17:36 -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
MassiveAtoms
c256f5f589 ?? 2019-07-22 09:39:56 -03:00
MassiveAtoms
23144deb04 intergration 2019-07-22 08:57:53 -03:00
MassiveAtoms
e5d736eb9a working? 2019-07-22 08:48:17 -03:00
MassiveAtoms
9a471428a6 works, fixed another db problem 2019-07-22 00:34:26 -03:00
MassiveAtoms
3bf5b26c2b working now 2019-07-21 23:04:26 -03:00
914792948d Parktimes populated 2019-07-21 22:28:43 -03:00
MassiveAtoms
e49b206df7 idk what 2019-07-21 22:21:09 -03:00
MassiveAtoms
a54016340a sdf 2019-07-21 22:13:34 -03:00
b987a2eb78 db - address 2019-07-21 21:58:03 -03:00
MassiveAtoms
03c40541a5 aaaaaaaaaaaa 2019-07-21 21:25:51 -03:00
9 changed files with 150 additions and 64 deletions

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);
@@ -36,16 +36,18 @@ void interface(vector<Park_spot>& spots) {
} else { } else {
cout << "ERROR ROLE_INVALID!"; cout << "ERROR ROLE_INVALID!";
} }
exit:; exit:;
} }
void interface_member(vector<Park_spot>& spots, Customer& c) { void interface_member(vector<Park_spot>& spots, Customer& c) {
__label__ begin, exit; __label__ begin, exit;
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");
"[3]Edit information\n[4]Exit\n"; 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; int option;
cin >> option; cin >> option;
cin.ignore(10000, '\n'); cin.ignore(10000, '\n');
@@ -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;
} }
@@ -74,12 +80,13 @@ void interface_member(vector<Park_spot>& spots, Customer& c) {
break; break;
} }
goto begin; goto begin;
exit:; exit:;
} }
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;
@@ -117,12 +126,25 @@ void interface_admin(vector<Park_spot>& spots) {
report_single_spot(true); report_single_spot(true);
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;
} }
break; default:
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,22 +157,27 @@ 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: {
new_parkspot(spots); new_parkspot(spots);
break; break;
} }
case 3:{ case 3: {
goto begin; goto begin;
break; break;
} }
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";
@@ -167,22 +194,27 @@ void interface_admin(vector<Park_spot>& spots) {
new_admin(); new_admin();
break; break;
} }
case 3:{ case 3: {
goto begin; goto begin;
break; break;
} }
default: default:
break; break;
} }
case 4: {goto exit;break;} case 4: {
std::cout<<"Exiting...";
Sleep(2000);
goto exit;
break; break;
} break;
} }
default: default:
break; break;
} }
goto begin; goto begin;
exit:; exit:;
} }
// --------- individual things. // --------- individual things.
@@ -193,7 +225,7 @@ void park(Customer& c, vector<Park_spot>& spots) {
if (!(c.parked())) { if (!(c.parked())) {
cout << "The following spots fit your vehicle and are available: \n"; cout << "The following spots fit your vehicle and are available: \n";
for (Park_spot i : spots) { for (Park_spot i : spots) {
if ((i.v_type == c.vehicle)&(i.taken==false)) { if ((i.v_type == c.vehicle) & (i.taken == false)) {
cout << i.id << ", "; cout << i.id << ", ";
} }
} }
@@ -201,14 +233,14 @@ 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,10 +255,10 @@ 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:;
} }
void new_customer() { void new_customer() {
@@ -246,7 +278,8 @@ void new_customer() {
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\n";
if (verify())newcustomer.update_db(); if (confirm())
newcustomer.update_db();
} }
void new_admin() { void new_admin() {
@@ -263,17 +296,47 @@ void new_admin() {
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\n";
if(verify())newcustomer.update_db(); if (confirm())
newcustomer.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) {
@@ -336,7 +419,7 @@ void report_single_spot(bool weekly) {
if (weekly) { if (weekly) {
period = create_week_period(); // remove the pair<int, int> period = create_week_period(); // remove the pair<int, int>
} else { } else {
period = create_month_period(); period = create_month_period();
} }
reports_from_parkspot(spotID, period); reports_from_parkspot(spotID, period);
} }
@@ -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

@@ -135,18 +135,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 +161,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

@@ -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.