#include #include #include #include #include #include #include using namespace std; class User { // Product class declaration with public variables public: //Product order number in the menu string name, password, date; double number{};//Product name and manufacturing date //Product price }; vector split(string str, char delimeter) { //Function to split rows in txt file vector result; stringstream ss(str); string item; while (getline(ss, item, delimeter)) { result.push_back(item); } return result; } void show_menu(vector& menu) { //Function to write out menu file content in console cout << "\nVending machine menu: "; for (User i : menu) { cout << "\n\nUser number: " << i.number << "\nUser name: " << i.name; } } /* void fill_menu(vector& menu) { //Function to fill menu vector with products objects ifstream myfile; myfile.open("menu.txt"); string data; vector row; if (myfile.is_open()) { while (myfile) { getline(myfile, data); row = split(data, ','); //Splitting text in menu.txt file if (row.size() > 1) { Product product; product.number = stoi(row[0]); product.name = row[1]; product.date = row[2]; product.price = stod(row[3]); menu.push_back(product); } } } else { cout << "Error: couldnt open menu file\n"; } myfile.close(); } */ void add_user(vector& menu) { //Function to add user cout << "Adding new User\n"; string name, password; int last_product_number{}; cout << "\nEnter new user name: "; cin >> name; cout << "\nEnter new user password: "; cin >> password; User user; //Declaring an object last_product_number = menu[menu.size() - 1].number; //Getting last user number by its size user.number = last_product_number + 1; user.name = name; user.password = password; menu.push_back(user); cout << "\nNew User have been succesfully added to the list"; } void edit_user(vector& menu) { //Function to edit user details show_menu(menu); cout << "Editing user\n"; cout << "\nEnter number of user you want to edit: "; int number; cin >> number; for (int i = 0; i < menu.size(); i++) { if (menu[i].number == number) { cout << "\n\nUser number: " << number //Program write current details about the user he want to edit to console << "\nCurrent user name: " << menu[i].name << "\nCurrent product password: " << menu[i].password; cout << "\n\nEnter new name for user: "; cin >> menu[i].name; //entering new user details cout << "\nEnter new password for user: "; cin >> menu[i].password; } else if (number > menu.size() || number < 0) { cout << "\n\nInvalid user number!\n"; break; } } } void remove_user(vector& menu) { //Function to remove User from the menu int choice = MessageBox(0, (LPCWSTR)L"Are you sure that you want to remove a User from the menu?", (LPCWSTR)L"Confirmation", MB_YESNO | MB_ICONQUESTION); if (choice == IDYES) { show_menu(menu); cout << "Enter number of User to remove: "; int number; cin >> number; for (int i = 0; i < menu.size(); i++) { if (menu[i].number == number) { menu.erase(menu.begin() + i); //Delete the row with the User from the menu cout << "\nUser is deleted from the menu!\n"; } else if (number > menu.size() || number < 0) { cout << "\n\nInvalid User number!\n"; break; } } } else { return; } } void addRecord(vector& menu) { //Function to add financial record int counter = 0, answer = 1; double revenue = 0, loss = 0; vector records_name; vector records_price; fstream myfile("records.txt", ios::app); /* cout << "Enter date (YYYY-MM-DD): "; cin >> menu.date; cout << "Enter revenue: "; cin >> record.revenue; cout << "Enter profit: "; cin >> record.profit; */ myfile.close(); } void records_report() { //Writing records info from the records.txt file string line; ifstream myfile("records.txt"); //Reading from the file while (getline(myfile, line)) { cout << "\n" << line; } myfile.close(); } void add_edit_remove_menu(vector& menu) { //Function to display add/menu/remove menu from workers menu int answer; cout << "\n\nInventory configuration menu\n\n1. Add User\n2. Edit User\n3. Remove User\n4. Return to worker menu\n\nEnter your option and press return: "; cin >> answer; switch (answer) { case 1: add_user(menu); break; case 2: edit_user(menu); break; case 3: remove_user(menu); break; case 4: return; default: //Handling not valid and non numeric input cin.clear(); cin.ignore(9999, '\n'); cout << "\nPlease enter valid option!\n"; break; } } void client_menu(vector& menu) { //Function to display users menu int answer; cout << "\nClient menu\n\n1. Add Record\n2. Back to main menu\n\nEnter your option and press return: "; cin >> answer; switch (answer) { case 1: addRecord(menu); break; case 2: return; default: //Handling not valid and non numeric input cin.clear(); cin.ignore(9999, '\n'); cout << "\nPlease enter valid option!\n"; break; } } void user_menu(vector& menu) { //Function to display workers menu while (true) { int answer; cout << "\nWorker menu\n\n1. Check records history\n2. Add/Edit/Remove record\n3. Show menu\n4. Back to main menu\nEnter your option and press return: "; cin >> answer; switch (answer) { case 1: records_report(); break; case 2: add_edit_remove_menu(menu); break; case 3: show_menu(menu); break; case 4: return; default: //Handling not valid and non numeric input cin.clear(); cin.ignore(9999, '\n'); cout << "\nPlease enter valid option!\n"; break; } } } void worker_menu_access(vector& menu) { //Function asks password (1234) from an user to access the worker menu or 0 to return back int access_code = 0; do { cout << "\n\nEnter code to gain access to the worker menu or 0 to return back (format: 0000): "; cin >> access_code; if (access_code == 1234 && to_string(access_code).length() == 4) { user_menu(menu); break; } else if (access_code != 1234 && access_code != 0 || to_string(access_code).length() != 4 && access_code != 0) { cout << "\nIncorrect password or wrong format "; } else if (access_code == 0) { return; } else if (cin.eof()) { cin.clear(); cin.ignore(9999, '\n'); cout << "\nPlease enter valid option!\n"; break; } } while (access_code != 1234 || access_code != 0); } int main() { vector menu; int answer = 0; //fill_menu(menu); ofstream myfile("records.txt", ios::app); //Creating bills text file myfile.close(); do { cout << "\n\Accounting software\n\n1. Create new user\n2. Log in user\n3. Exit\n\nEnter your option and press return: "; cin >> answer; switch (answer) { case 1: client_menu(menu); break; case 2: worker_menu_access(menu); break; case 3: exit(0); default: //Handling not valid and non numeric input cin.clear(); cin.ignore(9999, '\n'); cout << "\nPlease enter valid option!\n"; break; } } while (answer != 3); myfile.close(); return 0; }