From dafa1ab97ae75bfb546af7cfc44fbe1ca781d5a0 Mon Sep 17 00:00:00 2001 From: Stefan Date: Thu, 18 Jul 2019 18:42:37 -0300 Subject: [PATCH 1/4] Menu with sub menu, revised the UI of the interface.cpp --- Interface.cpp | 191 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 123 insertions(+), 68 deletions(-) diff --git a/Interface.cpp b/Interface.cpp index c38f7cb..7a1e624 100644 --- a/Interface.cpp +++ b/Interface.cpp @@ -30,13 +30,13 @@ void interface(vector& spots) { } else if(query_role_customer(id)==0){ interface_member(spots, c); } else { - cout << "ERROR ROLE_INVALID.."; + cout << "ERROR ROLE_INVALID!"; } } void interface_member(vector& spots,Customer& c) { - cout << "Logged in succesfully\n"; - cout << "select an option\n [1] Parking options\n[2]monthy report\n"; + cout << "\nLogged in succesfully!\n"; + cout << "select an option:\n [1] Parking\n[2]Monthly report\n"; int option; cin >> option; cin.ignore(10000, '\n'); @@ -56,60 +56,116 @@ void interface_member(vector& spots,Customer& c) { } void interface_admin(vector& spots) { - cout << "Welcome to the admin interface. It is not completely ready yet.\n"; - 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 current status of parking spots\n"; - cout << "[6] Make new customer\n"; - cout << "[7] Make new admin\n"; - cout << "[8] Make new parking spot\n"; - cout << "option[1-8]:"; + cout << "\nWelcome to the admin interface.\n"; + cout << "\n[1] Reports & analytics"; + cout << "\n[2] Parking spots"; + cout << "\n[3] Make new user"; + cout << "\nEnter option number: "; int option; cin >> option; cin.ignore(10000, '\n'); switch (option) { case 1: { - reports_from_allparkspots(); - break; + 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 month\n"; + cout << "[6] See weekly report of a specific week\n"; */ + cout << "Enter option number: "; + int option_1; + cin >> option_1; + cin.ignore(10000, '\n'); + switch (option_1) { + case 1: { + reports_from_allparkspots(); + break; + } + case 2: { + reports_from_allparkspots(true); + break; + } + case 3: { + cout << "Which parking spot would you like a report on?\n"; + cout << "Parking spot ID: "; + int spotID; + cin >> spotID; + cin.ignore(10000, '\n'); + reports_from_parkspot(spotID); + break; + } + case 4: { + cout << "Which parking spot would you like a report on?\n"; + cout << "Parking spot ID: "; + int spotID; + cin >> spotID; + cin.ignore(10000, '\n'); + reports_from_parkspot(spotID, true); + break; + } + /*case 5: { + cout << "Which month would you like a report on?\n"; + cout << "[1] January, [2] February, [3] March, [4] April, [5] May," + "\n[6] June, [7] July, [8] August, [9] September, [10] October, [11] November, [12] December\n"; + cout << "Enter month number: "; + int month; + cin >> month; + cin.ignore(10000, '\n'); + report_from_month(month); + break; + } + case 6: { + cout << "Which week would you like a report on?\n"; + cout << "Enter week number: "; + int week; + cin >> week; + cin.ignore(10000, '\n'); + report_from_week(week); + break; + }*/ + default: + break; + } } case 2: { - reports_from_allparkspots(true); - break; + cout << "[1] See current status of parking spots\n"; + cout << "[2] Make new parking spot\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); + } + default: + break; + } } case 3: { - cout << "Which parking spot would you like a report on?\nID:"; - int spotid; - cin >> spotid; + cout << "[1] Make new customer\n"; + cout << "[2] Make new admin\n"; + cout << "Enter option number: "; + int option_3; + cin >> option_3; cin.ignore(10000, '\n'); - reports_from_parkspot(spotid); - break; + switch (option_3) { + case 1: { + new_customer(); + break; + } + case 2: { + new_admin(); + break; + } + default: + break; + } } - case 4: { - cout << "Which parking spot would you like a report on?\nID:"; - int spotid; - cin >> spotid; - cin.ignore(10000, '\n'); - reports_from_parkspot(spotid, true); - break; - } - case 5: { - current_status_parkspots(spots); - break; - } - case 6: { - new_customer(); - break; - } - case 7: { - new_admin(); - } - case 8: { - new_parkspot(spots); - break; - } - default: break; } @@ -118,30 +174,29 @@ void interface_admin(vector& spots) { // --------- individual things. void park(Customer& c, vector& spots) { - cout << "You have selected parking option"; + cout << "You have selected parking option.\n"; if (!(c.parked())) { - cout << "The following spots[which can fit your vehicle] are " - "available: "; + cout << "The following spots fit your vehicle and are available: "; for (Park_spot i : spots) { if (i.v_type == c.vehicle) { cout << i.id << ", "; } } - cout << "where do you want to park?"; - int parkid; - cin >> parkid; + cout << "\nWhere do you want to park?"; + int parkID; + cin >> parkID; cin.ignore(10000, '\n'); for (Park_spot& i : spots) { - if (i.id == parkid) { + if (i.id == parkID) { i.clock(c); - cout << "You have parked sucessfully"; + cout << "You have parked sucessfully!"; } } } else { cout << "You are parked at spot " << c.parked_at() - << ", do you want to clock out?\n enter [1] for yes and [0] for no"; + << ", do you want to clock out?\n[1] yes\n[2] no"; int answer = 0; cin >> answer; cin.ignore(10000, '\n'); @@ -149,7 +204,7 @@ void park(Customer& c, vector& 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 } } } @@ -160,43 +215,43 @@ void new_customer() { string password; string telephone; int role = 0; - cout << "What's the name of the customer? "; + cout << "\nWhat's the name of the customer? "; std::getline(cin, name); - cout << "What's the vehicle type? [1]twoweeler, [2] fourweeler: "; + cout << "\nWhat's the vehicle type? \n[1]twoweeler\n[2] fourweeler\n"; cin >> vtype; cin.ignore(10000, '\n'); - cout << "What's the telephone number? "; + cout << "What's the telephone number? +"; std::getline(cin, telephone); - cout << "What's the password?"; + cout << "\nWhat's the password? "; std::getline(cin, password); Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role}; - cout << "New customer sucessfully created\n"; + cout << "\nNew customer sucessfully created\n"; newcustomer.update_db(); } void new_admin() { - int vtype = 2; //revision required! + int vtype = 2; //revision required! Needs to be set to NULL string name; string password; string telephone; int role = 1; - cout << "What's the name of the admin? "; + cout << "\nWhat's the name of the admin? "; std::getline(cin, name); - cout << "What's the telephone number? "; + cout << "\nWhat's the telephone number? +"; std::getline(cin, telephone); - cout << "What's the password?"; + cout << "\nWhat's the password?"; std::getline(cin, password); Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role}; - cout << "New customer sucessfully created\n"; + cout << "\nNew customer sucessfully created\n"; newcustomer.update_db(); } void new_parkspot(vector& spots) { - cout << "What type of parking spot? [1] twoweeler, [2] fourweeler: "; + cout << "What type of parking spot? \n[1] twoweeler\n[2] fourweeler\n"; int vtype; cin >> vtype; cin.ignore(10000, '\n'); Park_spot newspot{Vehicle_type(vtype)}; spots.push_back(newspot); - cout << "new parking spot sucessfully created.\n"; + cout << "New parking spot sucessfully created.\n"; } -- 2.45.2 From 6706f6a58e5ae09ea7cf3b1433eee4f8372a630e Mon Sep 17 00:00:00 2001 From: MassiveAtoms Date: Sat, 20 Jul 2019 10:33:19 -0300 Subject: [PATCH 2/4] timme functs, not incorporated yet --- Query.cpp | 46 ++++++++++++++++++++++++++++++---------------- headers/Query.h | 4 ++++ main.cpp | 2 +- 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/Query.cpp b/Query.cpp index 7dd237d..dfc2524 100644 --- a/Query.cpp +++ b/Query.cpp @@ -83,6 +83,36 @@ int query_role_customer(int id){ //------------------------------- parkspot info + +pair create_month_period(int month, int year) { + std::time_t t = std::time(0); + std::tm* date = std::localtime(&t); + date->tm_year = year - 1900; + date->tm_mday = 1; + date->tm_mon = month - 1; + pair period; + period.first = mktime(date); + date->tm_mon = month; + period.second = mktime(date); + return period; +} + +pair create_week_period(int day, int month, int year){ + std::time_t t = std::time(0); + std::tm* date = std::localtime(&t); + date->tm_year = year - 1900; + date->tm_mday = day; + date->tm_mon = month - 1; + date->tm_hour = 0; + date->tm_min = 0; + pair period; + period.first = mktime(date); + period.second = period.first + 604800; // plus 7 days in seconds + return period; +} + +// -- parkspots info, report gen + Park_spot query_parkspot_with_id(int id, vector& parkspots) { for (Park_spot& i : parkspots) { if (i.id == id) { @@ -163,19 +193,3 @@ void current_status_parkspots(vector& spots) { } } -// -------------- paroking spots - -// vector populate_spots(){ -// vector spots; -// SQLite::Statement query(data::db, "SELECT * FROM Park_spot WHERE id > -// 0;"); -// // query.bind(1, 2); -// while (query.executeStep()) { -// int id = query.getColumn(0); -// int taken = query.getColumn(1); -// int cid = query.getColumn(2); -// // park_customers.push_back(query_customer_with_id(cid)); -// spots.push_back({id, taken, cid}); -// } -// return spots; -// } \ No newline at end of file diff --git a/headers/Query.h b/headers/Query.h index 5401990..1b4ef9e 100644 --- a/headers/Query.h +++ b/headers/Query.h @@ -3,6 +3,7 @@ #pragma once #include "Park_spot.h" +using std::pair; /*these are the functions that search the database and create objects from it. @@ -65,4 +66,7 @@ void reports_from_parkspot(int spotid, bool weekly = false); void reports_from_allparkspots(bool weekly = false); void current_status_parkspots(vector& spots); + +pair create_month_period(int month, int year) ; +pair create_week_period(int day, int month, int year); #endif // CUSTOMER_H diff --git a/main.cpp b/main.cpp index 7b1b50d..52a582a 100644 --- a/main.cpp +++ b/main.cpp @@ -76,4 +76,4 @@ vector populate_spots() { spots.push_back({id, taken, cid, vtype}); } return spots; -} \ No newline at end of file +} -- 2.45.2 From a79081febf5976fb33426fd88a2dfb248443ba65 Mon Sep 17 00:00:00 2001 From: MassiveAtoms Date: Sat, 20 Jul 2019 20:32:47 -0300 Subject: [PATCH 3/4] WIP reportgen --- Interface.cpp | 199 ++++++++++++++++++++++++++++---------------- Query.cpp | 63 ++------------ headers/Interface.h | 11 ++- headers/Query.h | 7 +- 4 files changed, 151 insertions(+), 129 deletions(-) diff --git a/Interface.cpp b/Interface.cpp index 7a1e624..3e9823d 100644 --- a/Interface.cpp +++ b/Interface.cpp @@ -9,7 +9,7 @@ void interface(vector& spots) { /* string introduction = "P A R K M A N N E"; //logo animation, disable during testing - text_animation(introduction, 50); + text_animation(introduction, 50); */ cout << "\nWelcome to the parking system. Please login.."; @@ -25,16 +25,16 @@ void interface(vector& spots) { cout << "ERROR: wrong password. Please retype your password:\n"; std::getline(cin, password); } - if(query_role_customer(id)==1){ + if (query_role_customer(id) == 1) { interface_admin(spots); - } else if(query_role_customer(id)==0){ + } else if (query_role_customer(id) == 0) { interface_member(spots, c); } else { cout << "ERROR ROLE_INVALID!"; } } -void interface_member(vector& spots,Customer& c) { +void interface_member(vector& spots, Customer& c) { cout << "\nLogged in succesfully!\n"; cout << "select an option:\n [1] Parking\n[2]Monthly report\n"; int option; @@ -77,53 +77,49 @@ void interface_admin(vector& spots) { cin >> option_1; cin.ignore(10000, '\n'); switch (option_1) { - case 1: { - reports_from_allparkspots(); - break; - } - case 2: { - reports_from_allparkspots(true); - break; - } - case 3: { - cout << "Which parking spot would you like a report on?\n"; - cout << "Parking spot ID: "; - int spotID; - cin >> spotID; - cin.ignore(10000, '\n'); - reports_from_parkspot(spotID); - break; - } - case 4: { - cout << "Which parking spot would you like a report on?\n"; - cout << "Parking spot ID: "; - int spotID; - cin >> spotID; - cin.ignore(10000, '\n'); - reports_from_parkspot(spotID, true); - break; - } - /*case 5: { - cout << "Which month would you like a report on?\n"; - cout << "[1] January, [2] February, [3] March, [4] April, [5] May," - "\n[6] June, [7] July, [8] August, [9] September, [10] October, [11] November, [12] December\n"; - cout << "Enter month number: "; - int month; - cin >> month; - cin.ignore(10000, '\n'); - report_from_month(month); - break; - } - case 6: { - cout << "Which week would you like a report on?\n"; - cout << "Enter week number: "; - int week; - cin >> week; - cin.ignore(10000, '\n'); - report_from_week(week); - break; - }*/ - default: + case 1: { + reports_from_allparkspots(); + break; + } + case 2: { + reports_from_allparkspots(true); + break; + } + case 3: { + cout << "Which parking spot would you like a report on?\n"; + cout << "Parking spot ID: "; + int spotID; + cin >> spotID; + cin.ignore(10000, '\n'); + reports_from_parkspot(spotID); + break; + } + case 4: { + cout << "Which parking spot would you like a report on?\n"; + cout << "Parking spot ID: "; + int spotID; + cin >> spotID; + cin.ignore(10000, '\n'); + reports_from_parkspot(spotID, true); + break; + } + /*case 5: { + cout << "Which month would you like a report on?\n"; + cout << "[1] January, [2] February, [3] March, [4] April, [5] May," + "\n[6] June, [7] July, [8] August, [9] September, [10] October, [11] November, [12] + December\n"; cout << "Enter month number: "; int month; cin >> month; cin.ignore(10000, + '\n'); report_from_month(month); break; + } + case 6: { + cout << "Which week would you like a report on?\n"; + cout << "Enter week number: "; + int week; + cin >> week; + cin.ignore(10000, '\n'); + report_from_week(week); + break; + }*/ + default: break; } } @@ -135,14 +131,14 @@ void interface_admin(vector& spots) { cin >> option_2; cin.ignore(10000, '\n'); switch (option_2) { - case 1: { - current_status_parkspots(spots); - break; - } - case 2: { - new_parkspot(spots); - } - default: + case 1: { + current_status_parkspots(spots); + break; + } + case 2: { + new_parkspot(spots); + } + default: break; } } @@ -154,15 +150,15 @@ void interface_admin(vector& spots) { cin >> option_3; cin.ignore(10000, '\n'); switch (option_3) { - case 1: { - new_customer(); - break; - } - case 2: { - new_admin(); - break; - } - default: + case 1: { + new_customer(); + break; + } + case 2: { + new_admin(); + break; + } + default: break; } } @@ -204,7 +200,7 @@ void park(Customer& c, vector& spots) { query_parkspot_with_id(c.parked_at(), spots).clock(c); cout << "You have sucessfully clocked out."; } else { - cout << "OK, have a nice day."; //exit to customer login + cout << "OK, have a nice day."; // exit to customer login } } } @@ -230,7 +226,7 @@ void new_customer() { } void new_admin() { - int vtype = 2; //revision required! Needs to be set to NULL + int vtype = 2; // revision required! Needs to be set to NULL string name; string password; string telephone; @@ -255,3 +251,66 @@ void new_parkspot(vector& spots) { spots.push_back(newspot); cout << "New parking spot sucessfully created.\n"; } + +// time stuff----------------------------------------------------- + +pair 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 period; + period.first = mktime(date); + date->tm_mon = month; + period.second = mktime(date); + return period; +} + +pair 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 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 period; + if (weekly) { + pair period = create_week_period(); + } else { + pair period = create_month_period(); + } + + 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 period; + if (weekly) { + pair period = create_week_period(); + } else { + pair period = create_month_period(); + } + reports_from_parkspot(spotID, period); +} diff --git a/Query.cpp b/Query.cpp index dfc2524..295f53a 100644 --- a/Query.cpp +++ b/Query.cpp @@ -84,33 +84,6 @@ int query_role_customer(int id){ //------------------------------- parkspot info -pair create_month_period(int month, int year) { - std::time_t t = std::time(0); - std::tm* date = std::localtime(&t); - date->tm_year = year - 1900; - date->tm_mday = 1; - date->tm_mon = month - 1; - pair period; - period.first = mktime(date); - date->tm_mon = month; - period.second = mktime(date); - return period; -} - -pair create_week_period(int day, int month, int year){ - std::time_t t = std::time(0); - std::tm* date = std::localtime(&t); - date->tm_year = year - 1900; - date->tm_mday = day; - date->tm_mon = month - 1; - date->tm_hour = 0; - date->tm_min = 0; - pair period; - period.first = mktime(date); - period.second = period.first + 604800; // plus 7 days in seconds - return period; -} - // -- parkspots info, report gen Park_spot query_parkspot_with_id(int id, vector& parkspots) { @@ -121,22 +94,12 @@ Park_spot query_parkspot_with_id(int id, vector& parkspots) { } } -void reports_from_parkspot(int spotid, bool weekly) { - std::time_t t = std::time(0); // get time now - std::tm* now = std::localtime(&t); - - if (weekly) { - now->tm_wday = 1; - } else { - now->tm_mday = 1; - } - - int s_since_epoch = mktime(now); - +void reports_from_parkspot(int spotid, pair period) { vector park_times; - SQLite::Statement query(data::db, "SELECT * FROM Park_time WHERE spot_id = ? AND start > ?;"); + SQLite::Statement query(data::db, "SELECT * FROM Park_time WHERE spot_id = ? AND start > ? AND end < ?;"); query.bind(1, spotid); - query.bind(2, s_since_epoch); + query.bind(2, period.first); + query.bind(3, period.second); while (query.executeStep()) { int id = query.getColumn(0); int cid = query.getColumn(1); @@ -152,20 +115,12 @@ void reports_from_parkspot(int spotid, bool weekly) { } } -void reports_from_allparkspots(bool weekly) { - std::time_t t = std::time(0); // get time now - std::tm* now = std::localtime(&t); - if (weekly) { - now->tm_wday = 1; - } else { - now->tm_mday = 1; - } - - int s_since_epoch = mktime(now); - +void reports_from_allparkspots(pair period) { vector park_times; - SQLite::Statement query(data::db, "SELECT * FROM Park_time WHERE start > ?;"); - query.bind(1, s_since_epoch); + SQLite::Statement query(data::db, "SELECT * FROM Park_time WHERE start > ? AND end < >;"); + query.bind(1, period.first); + query.bind(2, period.second); + while (query.executeStep()) { int id = query.getColumn(0); int cid = query.getColumn(1); diff --git a/headers/Interface.h b/headers/Interface.h index 355c88e..89e4688 100644 --- a/headers/Interface.h +++ b/headers/Interface.h @@ -5,10 +5,19 @@ using std::cin; + void interface(vector& spots); void interface_member(vector& spots, Customer& c); void interface_admin(vector& spots); void park(Customer& c, vector& spots); void new_customer(); void new_admin(); -void new_parkspot(vector& spots); \ No newline at end of file +void new_parkspot(vector& spots); + +// time creation +pair create_month_period() ; +pair create_week_period(); + +// report stuff +void report_single_spot(bool weekly); +void report_all_spots(bool weekly) \ No newline at end of file diff --git a/headers/Query.h b/headers/Query.h index 1b4ef9e..9ab6e5e 100644 --- a/headers/Query.h +++ b/headers/Query.h @@ -62,11 +62,10 @@ vector populate_spots(); Park_spot query_parkspot_with_id(int id, vector& parkspots); int query_role_customer(int id); -void reports_from_parkspot(int spotid, bool weekly = false); -void reports_from_allparkspots(bool weekly = false); +void reports_from_parkspot(int spotid, pair period); +void reports_from_allparkspots(pair period); void current_status_parkspots(vector& spots); -pair create_month_period(int month, int year) ; -pair create_week_period(int day, int month, int year); + #endif // CUSTOMER_H -- 2.45.2 From 8c2cbb8a111e63ec13d1b450dc69d5f20013bc61 Mon Sep 17 00:00:00 2001 From: MassiveAtoms Date: Sat, 20 Jul 2019 21:40:24 -0300 Subject: [PATCH 4/4] Made report functions, monthly weekly for any month or week --- Interface.cpp | 55 ++++++++++++++++++--------------------------- Park_time.cpp | 13 +++++------ Query.cpp | 35 ++++++++++++++++++++++------- data.cpp | 4 +++- headers/Interface.h | 10 +++------ headers/Park_time.h | 2 +- headers/Query.h | 9 +++----- main.cpp | 8 ++++--- 8 files changed, 70 insertions(+), 66 deletions(-) diff --git a/Interface.cpp b/Interface.cpp index 3e9823d..a4dfd93 100644 --- a/Interface.cpp +++ b/Interface.cpp @@ -70,55 +70,27 @@ void interface_admin(vector& spots) { 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 month\n"; - cout << "[6] See weekly report of a specific week\n"; */ cout << "Enter option number: "; int option_1; cin >> option_1; cin.ignore(10000, '\n'); switch (option_1) { case 1: { - reports_from_allparkspots(); + report_all_spots(); break; } case 2: { - reports_from_allparkspots(true); + report_all_spots(true); break; } case 3: { - cout << "Which parking spot would you like a report on?\n"; - cout << "Parking spot ID: "; - int spotID; - cin >> spotID; - cin.ignore(10000, '\n'); - reports_from_parkspot(spotID); + report_single_spot(); break; } case 4: { - cout << "Which parking spot would you like a report on?\n"; - cout << "Parking spot ID: "; - int spotID; - cin >> spotID; - cin.ignore(10000, '\n'); - reports_from_parkspot(spotID, true); + report_single_spot(true); break; } - /*case 5: { - cout << "Which month would you like a report on?\n"; - cout << "[1] January, [2] February, [3] March, [4] April, [5] May," - "\n[6] June, [7] July, [8] August, [9] September, [10] October, [11] November, [12] - December\n"; cout << "Enter month number: "; int month; cin >> month; cin.ignore(10000, - '\n'); report_from_month(month); break; - } - case 6: { - cout << "Which week would you like a report on?\n"; - cout << "Enter week number: "; - int week; - cin >> week; - cin.ignore(10000, '\n'); - report_from_week(week); - break; - }*/ default: break; } @@ -283,7 +255,7 @@ pair create_week_period() { date->tm_min = 0; pair period; period.first = mktime(date); - period.second = period.first + 604800; // plus 7 days in seconds + period.second = period.first + 604800; // plus 7 days in seconds. return period; } @@ -314,3 +286,20 @@ void report_single_spot(bool weekly) { } 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 period; + if (weekly) { + pair period = create_week_period(); + } else { + pair period = create_month_period(); + } + reports_from_customer(customerID, period); +} \ No newline at end of file diff --git a/Park_time.cpp b/Park_time.cpp index 70a7987..53811ef 100644 --- a/Park_time.cpp +++ b/Park_time.cpp @@ -124,11 +124,10 @@ cpp/header } // 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)); - } +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)); + } } diff --git a/Query.cpp b/Query.cpp index 295f53a..0dbac1d 100644 --- a/Query.cpp +++ b/Query.cpp @@ -65,17 +65,14 @@ Customer query_customer_with_id(int id) { string telephone = query.getColumn(4); vector park_instances = query_parktimes_for_customer(id); Customer result{id, name, password, Vehicle_type(vehicle), park_instances, telephone}; - // DEBUG - // cout << "{" << result.id << "," <& parkspots) { @@ -96,7 +92,8 @@ Park_spot query_parkspot_with_id(int id, vector& parkspots) { void reports_from_parkspot(int spotid, pair period) { vector park_times; - SQLite::Statement query(data::db, "SELECT * FROM Park_time WHERE spot_id = ? AND start > ? AND end < ?;"); + SQLite::Statement query(data::db, + "SELECT * FROM Park_time WHERE spot_id = ? AND start > ? AND end < ?;"); query.bind(1, spotid); query.bind(2, period.first); query.bind(3, period.second); @@ -117,7 +114,7 @@ void reports_from_parkspot(int spotid, pair period) { void reports_from_allparkspots(pair period) { vector park_times; - SQLite::Statement query(data::db, "SELECT * FROM Park_time WHERE start > ? AND end < >;"); + SQLite::Statement query(data::db, "SELECT * FROM Park_time WHERE start > ? AND end < ?;"); query.bind(1, period.first); query.bind(2, period.second); @@ -148,3 +145,25 @@ void current_status_parkspots(vector& spots) { } } +vector reports_from_customer(int cid, pair period) { + vector park_times; + SQLite::Statement query( + data::db, "SELECT * FROM Park_time WHERE customer_id = ? AND start > ? AND end < ?;"); + query.bind(1, cid); + query.bind(2, period.first); + query.bind(3, period.second); + while (query.executeStep()) { + int id = query.getColumn(0); + int spotid = query.getColumn(2); + int start = query.getColumn(3); + int duration = query.getColumn(5); + Park_time result{id, cid, spotid, start, duration}; + park_times.push_back(result); + } + query.reset(); + + for (auto i : park_times) { + cout << i; + } + return park_times; +} \ No newline at end of file diff --git a/data.cpp b/data.cpp index 91b9033..3a3737b 100644 --- a/data.cpp +++ b/data.cpp @@ -13,7 +13,9 @@ SQLite::Database start_db() { This shouldn't be here, really, but I can't think of a better place where it runs at least once. This seeds the random generator needed for salts and other stuff, and needs to be run at least once when working - with any libsodium function. + with any libsodium function. And since this definitely needs to be run at least once, why + not include it here? you can't (well, shouldn't be able to) login into anything if this + doesn't run, since you need to compare passwords to login */ } db.exec( diff --git a/headers/Interface.h b/headers/Interface.h index 89e4688..b7171c3 100644 --- a/headers/Interface.h +++ b/headers/Interface.h @@ -1,11 +1,7 @@ - - #include "Query.h" - using std::cin; - void interface(vector& spots); void interface_member(vector& spots, Customer& c); void interface_admin(vector& spots); @@ -15,9 +11,9 @@ void new_admin(); void new_parkspot(vector& spots); // time creation -pair create_month_period() ; +pair create_month_period(); pair create_week_period(); // report stuff -void report_single_spot(bool weekly); -void report_all_spots(bool weekly) \ No newline at end of file +void report_single_spot(bool weekly = false); +void report_all_spots(bool weekly = false); \ No newline at end of file diff --git a/headers/Park_time.h b/headers/Park_time.h index 8ce44bc..854392a 100644 --- a/headers/Park_time.h +++ b/headers/Park_time.h @@ -15,8 +15,8 @@ using std::cout; using std::flush; using std::string; using std::to_string; -using std::this_thread::sleep_for; using std::chrono::milliseconds; +using std::this_thread::sleep_for; /* diff --git a/headers/Query.h b/headers/Query.h index 9ab6e5e..fc70a39 100644 --- a/headers/Query.h +++ b/headers/Query.h @@ -53,19 +53,16 @@ furhter. */ vector query_parktimes_for_customer(int cid); - vector query_customer_with_name(string name); Customer query_customer_with_id(int id); - -vector populate_spots(); - Park_spot query_parkspot_with_id(int id, vector& parkspots); int query_role_customer(int id); +vector populate_spots(); + void reports_from_parkspot(int spotid, pair period); void reports_from_allparkspots(pair period); - void current_status_parkspots(vector& spots); - +vector reports_from_customer(int cid, pair period); #endif // CUSTOMER_H diff --git a/main.cpp b/main.cpp index 52a582a..579c2c1 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,6 @@ #include "headers/Interface.h" + /* Code structure is like this: 1. encrypt.cpp en /header/encrypt.h contain functions to hash passwords and @@ -47,14 +48,14 @@ int main() { // state of db: // er zijn 10 parkspots, 5 met biketype en 5 met pickup type // er is een customer met id 1(testcustomer) met password "password" - while(true) { + while (true) { cin.clear(); interface(parking_spots); - cout<<"\nexit? Input 'y' or 'n'.."; + cout << "\nexit? Input 'y' or 'n'.."; char n; cin >> n; cin.clear(); - if(n=='y'){ + if (n == 'y') { break; } } @@ -65,6 +66,7 @@ Why is this not in query.cpp? Because somehow, it errors out when it's there. The error message indicates it is a memory issue but I suspect it's a concurrency issue. Do not move this. */ + vector populate_spots() { vector spots; SQLite::Statement query(data::db, "SELECT * FROM Park_spot WHERE id > 0;"); -- 2.45.2