#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) { int selector; cout << "\nHello and welcome to the parking spot! Please select a suitable " "option:"; cout << "\n[1]Log in as member"; cout << "\n[2]Log in as administrator"; cin >> selector; cin.ignore(10000, '\n'); switch (selector) { case 1: { interface_member(spots); break; } case 2: { interface_admin(spots); break; } } } void interface_member(vector& spots) { __label__ exit; int id; string password; cout << "\nPlease input id:"; cin >> id; cin.ignore(10000, '\n'); Customer c = query_customer_with_id(id); cout << "\nPlease input password:"; std::getline(cin, password); while (!(verify_password(c.password, password))) { cout << "ERROR: wrong password. Please retype your password or enter [exit] to exit :\n"; std::getline(cin, password); if (password=="exit") goto exit; } cout << "Logged in succesfully\n"; cout << "select an option\n [1] Parking options\n[2]monthy 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; } exit: ; } void interface_admin(vector& spots) { __label__ exit, begin; begin: ; 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 parking spot\n"; cout << "[8] Exit\n"; cout << "option[1-7]:"; int option; cin >> option; cin.ignore(10000, '\n'); switch (option) { 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?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?ID:"; 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_parkspot(spots); break; } case 8: { goto exit; break; } default: break; } goto begin; exit: ; } // --------- individual things. void park(Customer& c, vector& spots) { cout << "You have selected parking option"; if (!(c.parked())) { cout << "The following spots[which can fit your vehicle] 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; 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 enter [1] for yes and [0] for 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"; } } } void new_customer() { int vtype; string name; string password; string telephone; cout << "What's the name of the customer? "; std::getline(cin, name); cout << "What's the vehicle type? [1]twoweeler, [2] fourweeler: "; cin >> vtype; cin.ignore(10000, '\n'); cout << "What's the telephone number? "; std::getline(cin, telephone); cout << "What's the password?"; std::getline(cin, password); Customer newcustomer{name, password, Vehicle_type(vtype), telephone}; cout << "New customer sucessfully created\n"; newcustomer.update_db(); } void new_parkspot(vector& spots) { cout << "What type of parking spot? [1] Twowheeler, [2] Fourwheeler: "; 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"; }