Upload files to "/"
parent
18a6da4a6e
commit
93611c81c1
|
@ -0,0 +1,299 @@
|
|||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <windows.h>
|
||||
#include <limits>
|
||||
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<string> split(string str, char delimeter) { //Function to split rows in txt file
|
||||
vector<string> result;
|
||||
stringstream ss(str);
|
||||
string item;
|
||||
while (getline(ss, item, delimeter))
|
||||
{
|
||||
result.push_back(item);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
void show_menu(vector<User>& 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<Product>& menu) { //Function to fill menu vector with products objects
|
||||
ifstream myfile;
|
||||
myfile.open("menu.txt");
|
||||
string data;
|
||||
vector<string> 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<User>& 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<User>& 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<User>& 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<User>& menu) { //Function to add financial record
|
||||
int counter = 0, answer = 1;
|
||||
double revenue = 0, loss = 0;
|
||||
vector<string> records_name;
|
||||
vector<double> 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<User>& 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<User>& 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<User>& 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<User>& 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<User> 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;
|
||||
}
|
Loading…
Reference in New Issue