diff --git a/Interface.cpp b/Interface.cpp index 04f1773..8989abc 100644 --- a/Interface.cpp +++ b/Interface.cpp @@ -6,13 +6,14 @@ // 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.."; + __label__ exit; + cout << "\nWelcome to the parking system. Please login..."; int id; string password; cout << "\nEnter your id: "; @@ -21,9 +22,11 @@ void interface(vector& 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:\n"; + cout << "ERROR: wrong password. Please retype your password or type [x] to exit:\n"; std::getline(cin, password); + if(password=="x")goto exit; } if (query_role_customer(id) == 1) { interface_admin(spots); @@ -32,11 +35,16 @@ void interface(vector& spots) { } else { cout << "ERROR ROLE_INVALID!"; } + exit:; } void interface_member(vector& spots, Customer& c) { + __label__ begin, exit; cout << "\nLogged in succesfully!\n"; - cout << "select an option:\n [1] Parking\n[2]Monthly report\n"; + + begin: + cout <<"Hello! "<> option; cin.ignore(10000, '\n'); @@ -50,16 +58,32 @@ void interface_member(vector& spots, Customer& c) { break; } + case 3: { + cout << "Has not been implemented yet\n"; + break; + } + + case 4: { + cout << "Exiting...\n"; + goto exit; + break; + } + default: break; } + goto begin; + exit:; } void interface_admin(vector& spots) { - cout << "\nWelcome to the admin interface.\n"; + __label__ begin,exit; + begin: + cout << "\nWelcome to the admin interface\n"; cout << "\n[1] Reports & analytics"; cout << "\n[2] Parking spots"; cout << "\n[3] Make new user"; + cout << "\n[4] Exit"; cout << "\nEnter option number: "; int option; cin >> option; @@ -70,8 +94,7 @@ 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 customer\n"; - cout << "[6] See weekly report of a specific customer\n"; + cout << "[5] Return\n"; cout << "Enter option number: "; int option_1; cin >> option_1; @@ -93,21 +116,17 @@ void interface_admin(vector& spots) { report_single_spot(true); break; } - case 5: { - report_customer(0); + case 5:{ + goto begin; break; } - case 6: { - report_customer(0, true); - break; - } - default: - break; + break; } } case 2: { cout << "[1] See current status of parking spots\n"; cout << "[2] Make new parking spot\n"; + cout << "[3] Return\n"; cout << "Enter option number: "; int option_2; cin >> option_2; @@ -119,14 +138,21 @@ void interface_admin(vector& spots) { } case 2: { new_parkspot(spots); + break; + } + case 3:{ + goto begin; + break; } default: break; } + break; } case 3: { cout << "[1] Make new customer\n"; cout << "[2] Make new admin\n"; + cout << "[3] Return\n"; cout << "Enter option number: "; int option_3; cin >> option_3; @@ -140,41 +166,55 @@ void interface_admin(vector& spots) { new_admin(); break; } + case 3:{ + goto begin; + break; + } default: break; } + case 4: {goto exit;break;} + break; } + default: break; } + goto begin; + exit:; } // --------- individual things. void park(Customer& c, vector& spots) { + __label__ exit; cout << "You have selected parking option.\n"; if (!(c.parked())) { - cout << "The following spots fit your vehicle and are available: "; + cout << "The following spots fit your vehicle and are available: \n"; for (Park_spot i : spots) { - if (i.v_type == c.vehicle) { + if ((i.v_type == c.vehicle)&(i.taken==false)) { cout << i.id << ", "; } } - cout << "\nWhere do you want to park?"; + cout << "\nWhere do you want to park? Or type [0] to exit."; int parkID; cin >> parkID; + if (!parkID)goto exit; cin.ignore(10000, '\n'); for (Park_spot& i : spots) { if (i.id == parkID) { + if (verify()) + { 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"; + << ", do you want to clock out?\n[1] Yes\n[2] No"; int answer = 0; cin >> answer; cin.ignore(10000, '\n'); @@ -185,6 +225,7 @@ void park(Customer& c, vector& spots) { cout << "OK, have a nice day."; // exit to customer login } } + exit:; } void new_customer() { @@ -195,7 +236,7 @@ void new_customer() { 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"; + cout << "\nWhat's the vehicle type? \n[1]Twowheeler\n[2] Fourwheeler\n"; cin >> vtype; cin.ignore(10000, '\n'); cout << "What's the telephone number? +"; @@ -204,7 +245,7 @@ void new_customer() { std::getline(cin, password); Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role}; cout << "\nNew customer sucessfully created\n"; - newcustomer.update_db(); + if (verify())newcustomer.update_db(); } void new_admin() { @@ -221,17 +262,17 @@ void new_admin() { std::getline(cin, password); Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role}; cout << "\nNew customer sucessfully created\n"; - newcustomer.update_db(); + if(verify())newcustomer.update_db(); } void new_parkspot(vector& spots) { - cout << "What type of parking spot? \n[1] twoweeler\n[2] fourweeler\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)}; - spots.push_back(newspot); - cout << "New parking spot sucessfully created.\n"; + if(verify()){spots.push_back(newspot); + cout << "New parking spot sucessfully created.\n";} } // time stuff----------------------------------------------------- @@ -269,6 +310,18 @@ pair create_week_period() { return 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; + +} + // ------------------------------ report stuff void report_all_spots(bool weekly) { diff --git a/headers/Interface.h b/headers/Interface.h index 7cf6935..2c3922a 100644 --- a/headers/Interface.h +++ b/headers/Interface.h @@ -18,3 +18,6 @@ pair create_week_period(); void report_single_spot(bool weekly = false); void report_all_spots(bool weekly = false); void report_customer(int customerID, bool weekly = false); + +// stuff +bool verify(); \ No newline at end of file