#include "headers/Interface.h" // I added it to pass spots, because the parking options need it to check where // is free parking_spots is declared in main, and if i declare it // liberal use of // cin.ignore(10000, '\n'); // so it skips to the next newline, in essence clearing the cin buffer void interface(vector& spots) { /* string introduction = "P A R K M A N N E"; //logo animation, disable during testing text_animation(introduction, 50); */ cout << "\nWelcome to the parking system. Please login.."; int id; string password; cout << "\nEnter your id: "; cin >> id; cin.ignore(10000, '\n'); 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:\n"; std::getline(cin, password); } if(query_role_customer(id)==1){ interface_admin(spots); } else if(query_role_customer(id)==0){ interface_member(spots, c); } else { cout << "ERROR ROLE_INVALID!"; } } 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; cin >> option; cin.ignore(10000, '\n'); switch (option) { case 1: { park(c, spots); break; } case 2: { cout << "Has not been implemented yet\n"; break; } default: break; } } void interface_admin(vector& spots) { 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: { 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: { 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 << "[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'); switch (option_3) { case 1: { new_customer(); break; } case 2: { new_admin(); break; } default: break; } } default: break; } } // --------- individual things. void park(Customer& c, vector& spots) { cout << "You have selected parking option.\n"; if (!(c.parked())) { 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 << "\nWhere do you want to park?"; int parkID; cin >> parkID; cin.ignore(10000, '\n'); for (Park_spot& i : spots) { if (i.id == parkID) { i.clock(c); cout << "You have parked sucessfully!"; } } } else { cout << "You are parked at spot " << c.parked_at() << ", do you want to clock out?\n[1] yes\n[2] no"; int answer = 0; cin >> answer; cin.ignore(10000, '\n'); if (answer) { 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 } } } void new_customer() { int vtype; string name; string password; string telephone; int role = 0; cout << "\nWhat's the name of the customer? "; std::getline(cin, name); 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? +"; std::getline(cin, telephone); cout << "\nWhat's the password? "; std::getline(cin, password); Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role}; cout << "\nNew customer sucessfully created\n"; newcustomer.update_db(); } void new_admin() { int vtype = 2; //revision required! Needs to be set to NULL string name; string password; string telephone; int role = 1; cout << "\nWhat's the name of the admin? "; std::getline(cin, name); cout << "\nWhat's the telephone number? +"; std::getline(cin, telephone); cout << "\nWhat's the password?"; std::getline(cin, password); Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role}; cout << "\nNew customer sucessfully created\n"; newcustomer.update_db(); } void new_parkspot(vector& spots) { 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"; }