From 8c2cbb8a111e63ec13d1b450dc69d5f20013bc61 Mon Sep 17 00:00:00 2001 From: MassiveAtoms Date: Sat, 20 Jul 2019 21:40:24 -0300 Subject: [PATCH] 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;");