Compare commits
6 Commits
billing5re
...
billing
Author | SHA1 | Date | |
---|---|---|---|
ad188addfd | |||
61c27028bf | |||
9fcd1214c7 | |||
1c840a04f5 | |||
97dc792773 | |||
5b39b46ec8 |
171
Interface.cpp
171
Interface.cpp
@ -6,13 +6,14 @@
|
||||
// cin.ignore(10000, '\n');
|
||||
// so it skips to the next newline, in essence clearing the cin buffer
|
||||
|
||||
bool verify(void);
|
||||
|
||||
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);
|
||||
*/
|
||||
__label__ exit;
|
||||
system("CLS");
|
||||
__label__ exit;
|
||||
cout << "\nWelcome to the parking system. Please login...";
|
||||
int id;
|
||||
string password;
|
||||
@ -22,12 +23,11 @@ void interface(vector<Park_spot>& spots) {
|
||||
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(password=="x")goto exit;
|
||||
}
|
||||
if (query_role_customer(id) == 1) {
|
||||
interface_admin(spots);
|
||||
@ -36,18 +36,16 @@ void interface(vector<Park_spot>& spots) {
|
||||
} else {
|
||||
cout << "ERROR ROLE_INVALID!";
|
||||
}
|
||||
exit:;
|
||||
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";
|
||||
|
||||
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');
|
||||
@ -57,21 +55,17 @@ begin:
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
report_customer(c.id);
|
||||
string lol;
|
||||
std::cout<<"Enter any character to continue...";
|
||||
std::cin>>lol;
|
||||
cout << "Has not been implemented yet\n";
|
||||
break;
|
||||
}
|
||||
|
||||
case 3: {
|
||||
edit_information(c);
|
||||
cout << "Has not been implemented yet\n";
|
||||
break;
|
||||
}
|
||||
|
||||
case 4: {
|
||||
cout << "Exiting...\n";
|
||||
Sleep(2000);
|
||||
goto exit;
|
||||
break;
|
||||
}
|
||||
@ -80,13 +74,12 @@ begin:
|
||||
break;
|
||||
}
|
||||
goto begin;
|
||||
exit:;
|
||||
exit:;
|
||||
}
|
||||
|
||||
void interface_admin(vector<Park_spot>& spots) {
|
||||
__label__ begin, exit;
|
||||
begin:
|
||||
system("CLS");
|
||||
__label__ begin,exit;
|
||||
begin:
|
||||
cout << "\nWelcome to the admin interface\n";
|
||||
cout << "\n[1] Reports & analytics";
|
||||
cout << "\n[2] Parking spots";
|
||||
@ -102,9 +95,7 @@ begin:
|
||||
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 << "[5] Return\n";
|
||||
cout << "Enter option number: ";
|
||||
int option_1;
|
||||
cin >> option_1;
|
||||
@ -126,25 +117,12 @@ begin:
|
||||
report_single_spot(true);
|
||||
break;
|
||||
}
|
||||
case 5: {
|
||||
report_customer(0);
|
||||
break;
|
||||
}
|
||||
case 6: {
|
||||
report_customer(0, true);
|
||||
break;
|
||||
}
|
||||
case 7: {
|
||||
case 5:{
|
||||
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";
|
||||
@ -157,27 +135,22 @@ begin:
|
||||
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: {
|
||||
case 3:{
|
||||
goto begin;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
system("CLS");
|
||||
cout << "[1] Make new customer\n";
|
||||
cout << "[2] Make new admin\n";
|
||||
cout << "[3] Return\n";
|
||||
@ -194,27 +167,22 @@ begin:
|
||||
new_admin();
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
case 3:{
|
||||
goto begin;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
std::cout<<"Exiting...";
|
||||
Sleep(2000);
|
||||
goto exit;
|
||||
case 4: {goto exit;break;}
|
||||
break;
|
||||
} break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
goto begin;
|
||||
exit:;
|
||||
|
||||
exit:;
|
||||
}
|
||||
|
||||
// --------- individual things.
|
||||
@ -225,7 +193,7 @@ void park(Customer& c, vector<Park_spot>& spots) {
|
||||
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)) {
|
||||
if ((i.v_type == c.vehicle)&(i.taken==false)) {
|
||||
cout << i.id << ", ";
|
||||
}
|
||||
}
|
||||
@ -233,14 +201,14 @@ void park(Customer& c, vector<Park_spot>& spots) {
|
||||
cout << "\nWhere do you want to park? Or type [0] to exit.";
|
||||
int parkID;
|
||||
cin >> parkID;
|
||||
if (!parkID)
|
||||
goto exit;
|
||||
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!";
|
||||
if (verify())
|
||||
{
|
||||
i.clock(c);
|
||||
cout << "You have parked sucessfully!";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -255,10 +223,10 @@ void park(Customer& c, vector<Park_spot>& spots) {
|
||||
query_parkspot_with_id(c.parked_at(), spots).clock(c);
|
||||
cout << "You have sucessfully clocked out.";
|
||||
} else {
|
||||
cout << "OK, have a nice day.";
|
||||
cout << "OK, have a nice day."; // exit to customer login
|
||||
}
|
||||
}
|
||||
exit:;
|
||||
exit:;
|
||||
}
|
||||
|
||||
void new_customer() {
|
||||
@ -278,8 +246,7 @@ void new_customer() {
|
||||
std::getline(cin, password);
|
||||
Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role};
|
||||
cout << "\nNew customer sucessfully created\n";
|
||||
if (confirm())
|
||||
newcustomer.update_db();
|
||||
if (verify())newcustomer.update_db();
|
||||
}
|
||||
|
||||
void new_admin() {
|
||||
@ -296,47 +263,17 @@ void new_admin() {
|
||||
std::getline(cin, password);
|
||||
Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role};
|
||||
cout << "\nNew customer sucessfully created\n";
|
||||
if (confirm())
|
||||
newcustomer.update_db();
|
||||
if(verify())newcustomer.update_db();
|
||||
}
|
||||
|
||||
void new_parkspot(vector<Park_spot>& spots) {
|
||||
cout << "What type of parking spot? \n[1] Two-wheeler\n[2] Four-wheeler\n";
|
||||
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 (confirm()) {
|
||||
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();}
|
||||
if(verify()){spots.push_back(newspot);
|
||||
cout << "New parking spot sucessfully created.\n";}
|
||||
}
|
||||
|
||||
// time stuff-----------------------------------------------------
|
||||
@ -374,26 +311,6 @@ pair<int, int> create_week_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
|
||||
|
||||
void report_all_spots(bool weekly) {
|
||||
@ -419,7 +336,7 @@ void report_single_spot(bool weekly) {
|
||||
if (weekly) {
|
||||
period = create_week_period(); // remove the pair<int, int>
|
||||
} else {
|
||||
period = create_month_period();
|
||||
period = create_month_period();
|
||||
}
|
||||
reports_from_parkspot(spotID, period);
|
||||
}
|
||||
@ -434,9 +351,21 @@ void report_customer(int customerID, bool weekly) {
|
||||
}
|
||||
pair<int, int> period;
|
||||
if (weekly) {
|
||||
period = create_week_period();
|
||||
pair<int, int> period = create_week_period();
|
||||
} else {
|
||||
period = create_month_period();
|
||||
pair<int, int> period = create_month_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;
|
||||
|
||||
}
|
@ -60,8 +60,7 @@ std::ostream& operator<<(std::ostream& os, const Park_time& pt) {
|
||||
os << "Customer # " << pt.customer_id << "at parking spot " << pt.spot_id << "\n";
|
||||
os << "Clocked in :" << std::ctime(&start_);
|
||||
os << "clocked out : " << std::ctime(&end_);
|
||||
float dur_h = pt.duration / 3600.0;
|
||||
os << "duration : " << dur_h << " h\n";
|
||||
os << "duration : " << pt.duration << "\n";
|
||||
os << "- - - - - - - - - - - - - - - - - - - -\n";
|
||||
return os;
|
||||
}
|
||||
|
15
Query.cpp
15
Query.cpp
@ -135,20 +135,18 @@ void reports_from_allparkspots(pair<int, int> period) {
|
||||
}
|
||||
|
||||
void current_status_parkspots(vector<Park_spot>& spots) {
|
||||
cout << "P.spot \t\tStatus\t\t Customer\n";
|
||||
for (auto& i : spots) {
|
||||
cout << "\n" << i.id << "\t\t" << ((i.taken) ? "true" : "false");
|
||||
cout << "---------------------------\n";
|
||||
cout << "PS #" << i.id << "\n";
|
||||
cout << "Taken: " << ((i.taken) ? "true" : "false") << "\n";
|
||||
if (i.taken) {
|
||||
cout << "\t\t" << i.parked_customer;
|
||||
cout << "Customer#" << i.parked_customer << " parked there\n";
|
||||
}
|
||||
}
|
||||
cout << "\n";
|
||||
}
|
||||
|
||||
vector<Park_time> reports_from_customer(int cid, pair<int, int> period) {
|
||||
vector<Park_time> park_times;
|
||||
int verhicle = int(query_customer_with_id(cid).vehicle);
|
||||
float sum = 0;
|
||||
SQLite::Statement query(
|
||||
data::db, "SELECT * FROM Park_time WHERE customer_id = ? AND start > ? AND end < ?;");
|
||||
query.bind(1, cid);
|
||||
@ -161,14 +159,11 @@ vector<Park_time> reports_from_customer(int cid, pair<int, int> period) {
|
||||
int duration = query.getColumn(5);
|
||||
Park_time result{id, cid, spotid, start, duration};
|
||||
park_times.push_back(result);
|
||||
sum += duration/3600;
|
||||
}
|
||||
query.reset();
|
||||
|
||||
for (auto i : park_times) {
|
||||
cout << std::setprecision(2) << i;
|
||||
sum += i.duration / 3600.0;
|
||||
cout << i;
|
||||
}
|
||||
cout << "Your fees for this month: $" << std::setprecision(4) << sum * verhicle << "\n";
|
||||
return park_times;
|
||||
}
|
2
data.cpp
2
data.cpp
@ -20,7 +20,7 @@ SQLite::Database start_db() {
|
||||
}
|
||||
db.exec(
|
||||
"create table if not exists Customer (id integer primary key, name "
|
||||
"text, password text, vehicle int, telephone text, role int)");
|
||||
"text, password text, vehicle int, telephone text)");
|
||||
db.exec(
|
||||
"create table if not exists Park_spot (id integer primary key, taken "
|
||||
"int, customer_id int, vehicle_type int)");
|
||||
|
@ -1,10 +1,7 @@
|
||||
#include "Query.h"
|
||||
#include <stdlib.h>
|
||||
#include <synchapi.h>
|
||||
|
||||
using std::cin;
|
||||
|
||||
//interface functions
|
||||
void interface(vector<Park_spot>& spots);
|
||||
void interface_member(vector<Park_spot>& spots, Customer& c);
|
||||
void interface_admin(vector<Park_spot>& spots);
|
||||
@ -12,16 +9,11 @@ void park(Customer& c, vector<Park_spot>& spots);
|
||||
void new_customer();
|
||||
void new_admin();
|
||||
void new_parkspot(vector<Park_spot>& spots);
|
||||
void edit_information(Customer&);
|
||||
|
||||
// time creation
|
||||
pair<int, int> create_month_period();
|
||||
pair<int, int> create_week_period();
|
||||
|
||||
// report functions
|
||||
// report stuff
|
||||
void report_single_spot(bool weekly = false);
|
||||
void report_all_spots(bool weekly = false);
|
||||
void report_customer(int customerID, bool weekly = false);
|
||||
|
||||
// confirmation function
|
||||
bool confirm();
|
||||
void report_all_spots(bool weekly = false);
|
@ -3,7 +3,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "Park_spot.h"
|
||||
#include <iomanip>
|
||||
using std::pair;
|
||||
|
||||
/*these are the functions that search the database and create objects from it.
|
||||
|
10
main.cpp
10
main.cpp
@ -1,6 +1,6 @@
|
||||
|
||||
#include "headers/Interface.h"
|
||||
|
||||
|
||||
/*
|
||||
Code structure is like this:
|
||||
1. encrypt.cpp en /header/encrypt.h contain functions to hash passwords and
|
||||
@ -45,11 +45,11 @@ static vector<Park_spot> parking_spots = populate_spots();
|
||||
static vector<Customer> park_customers;
|
||||
|
||||
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.
|
||||
|
Reference in New Issue
Block a user