#include "headers/Interface.h" #include #include // 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 update_information(Customer& c);//temp declaration of independence void interface(vector& spots) { /* string introduction = "P A R K M A N N E"; //logo animation, disable during testing text_animation(introduction, 50); */ __label__ begin; begin: 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 or type [exit] to exit:\n"; std::getline(cin, password); if (password=="exit") {goto begin;} } 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) { __label__ exit,begin ; begin: cout << "Logged in succesfully as "<> option; cin.ignore(10000, '\n'); switch (option) { case 1: park(c, spots); break; case 2: cout << "Has not been implemented yet\n"; break; case 3: update_information(c); break; case 4: goto exit; break; default: break; } cout<<"\n[1]Return or [2]Log out?\n"; //cin.ignore(10000, '\n'); cin>>option; if(option==1)goto begin; exit: cout<<"Logging out..."; Sleep(3000);//testing wait synchapi header system ("CLS");//testing clear screen , stdlib header } void interface_admin(vector& spots) { __label__ begin,exit; begin: Sleep(1000); system("CLS"); 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 << "[9] Exit\n"; cout << "option[1-9]:"; 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?\nID:"; 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?\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; } case 9: { goto exit; break; } default: break; } cout<<"\n[1]Return or [2]Log out?\n"; cin.ignore(10000, '\n'); cin>>option; if(option==1)goto begin; exit: cout<<"Logging out..."; Sleep(3000); system("CLS"); } // --------- 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: \n"; for (Park_spot i : spots) { if ((i.v_type == c.vehicle)&(i.taken==false)) { 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"; Sleep(3000); system("CLS"); } } } void new_customer() { int vtype; string name; string password; string telephone; int role = 0; cout << "What's the name of the customer? "; std::getline(cin, name); cout << "What's the vehicle type? [1]Twowheeler, [2] Fourwheeler: "; 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, role}; cout << "New customer sucessfully created\n"; newcustomer.update_db(); } void new_admin() { int vtype = 2; //revision required! string name; string password; string telephone; int role = 1; cout << "What's the name of the admin? "; std::getline(cin, name); 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, role}; 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"; } void update_information(Customer& c)//Do not know how to use customer::update_db() { string string0; int int0; std::cout<<"\n fixme pls Input to update name or press 0 to keep name:\n"; std::getline(cin,string0); //cin.ignore(10000, '\n'); if (string0=="0"); else c.name=string0; //vehicle type give problem//std::cout<<"\n Input to update vehicle to [1]Two-Wheeler, [2]Four-Wheeler or press [0] to keep vehicle type:\n"; //std::cin>>int0; //if (int0==0); //else c.Vehicle_type(int0); std::cout<<"\n Input to update password or press [0] to keep current password:\n"; std::getline(cin,string0); if (string0=="0"); else c.password=string0; //cin.ignore(10000, '\n'); std::cout<<"\n Input to update phone number or press [0] to keep current number:\n"; std::getline(cin,string0); //cin.ignore(10000, '\n'); if (string0=="0"); else c.telephone=string0; c.update_db(); }