Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <conio.h>
- using namespace std;
- const int truePass = 1234;
- const int dfltMoney = 4000;
- const int dfltBillStr = 40;
- int getPass() //Ввод пароля
- {
- int a;
- cout << "\nВведите пароль (4 цифры): ";
- cin >> a;
- return a;
- }
- void wrongPassword()
- {
- cout << "Неверный пароль!\n";
- }
- void noPaper()
- {
- cout << "\a\tНЕТ ЧЕКОВОЙ ЛЕНТЫ ДЛЯ ПОСЛЕДУЮЩИХ ОПЕРАЦИЙ!\n";
- }
- enum state {work, dnwork, err}; //Состояние банкомата - работает, не работает, ошибка
- class atm
- {
- private:
- state stateOfWork;
- int money;
- int billString;
- bool ifBillStr;
- bool admin;
- public:
- void setStateOfWork(state);
- void setMoney(int);
- void setBillString(int);
- void setAdmin(bool);
- bool getAdmin(void);
- state getStateOfWork(void);
- int getBillStr(void);
- void sendToOutput(void);
- void autorization(bool);
- void unLogin(void);
- void receiveMoney(int);
- };
- void current(state e, int f, int g, bool h, bool i) //Вывод содержимого всех свойств объекта
- {
- cout << "\n\t\tСостояние (0 - работает, 1 - не работает, 2 - ошибка): " << e << endl;
- cout << "\t\tКоличество денег: " << f << endl;
- cout << "\t\tДлина кассовой ленты: " << g << endl;
- cout << "\t\tНаличие кассововой ленты: " << std::boolalpha << h << endl;
- cout << "\t\tАдминистратор: " << std::boolalpha << i << endl << endl;
- }
- int atm::getBillStr() //Возвращает длину чековой ленты
- {
- return billString;
- }
- void atm::sendToOutput() //Метод передает все свойства объекта функции current
- {
- current(stateOfWork, money, billString, ifBillStr, admin);
- }
- bool atm::getAdmin() //Возвращает статус авторизации
- {
- return admin;
- }
- void atm::setAdmin(bool b) //Устанавливает статус авторизации
- {
- admin = b;
- }
- void atm::setStateOfWork(state a) //Устанавливает состояние
- {
- stateOfWork = a;
- }
- state atm::getStateOfWork() //Возвращает состояние
- {
- return stateOfWork;
- }
- void atm::autorization(bool b) //Авторизация без учета текущего статуса
- {
- if (!b)
- {
- admin = 0;
- }else{
- while (true)
- {
- int a = getPass();
- if (a == truePass)
- break;
- wrongPassword();
- }
- admin = 1;
- }
- }
- void atm::unLogin() //Выход из аккаунта администратора
- {
- admin = 0;
- setStateOfWork(dnwork);
- }
- void atm::setMoney(int a) //Устанавливает количество денег в банкомате
- {
- if (a > 0)
- {
- money = a;
- }
- }
- void atm::setBillString(int a) //Устанавливает длину чековой ленты в банкомате
- {
- if (a > 0)
- {
- billString = a;
- }
- }
- void atm::receiveMoney(int a) //Снятие денег
- {
- /*if (monVal < 50)
- setSt(err);*/
- if (getStateOfWork() == work && billString >= 10 && money >=50)
- {
- if (money >= a)
- {
- money-=a;
- billString-=10;
- ifBillStr = (billString >= 10);
- }else{
- setStateOfWork(err);
- }
- }
- }
- int main()
- {
- setlocale(0, ""); //Не думаю, что это нужно, скажем, в VS
- atm Terminal;
- Terminal.setAdmin(1); //Чтобы задать количество денег и длину чековой ленты
- Terminal.setMoney(dfltMoney);
- Terminal.setBillString(dfltBillStr);
- Terminal.setAdmin(0); //По умолчанию - гость
- Terminal.setStateOfWork(work); //Установить состояние - работает
- bool ifLoginAsAdmin;
- while (true)
- {
- if (Terminal.getStateOfWork() == err)
- Terminal.setStateOfWork(work);
- if (Terminal.getBillStr()<10)
- noPaper();
- if (!Terminal.getAdmin()) //Если не администратор: залогиниться или войти как гость
- {
- cout << "Авторизируйтесь.\nВойти как: администратор(1), гость(0): ";
- cin >> ifLoginAsAdmin;
- Terminal.autorization(ifLoginAsAdmin);
- }
- Terminal.sendToOutput();
- cout << "Возможные действия:\nАдмин:\n\tУстановить количество денег в автомате(1);\n\tУстановить длину кассовой ленты(2);";
- cout << "\nСнятие денег(3);\nВыход из системы(иные значения ввода);\n\nВаш выбор: ";
- int todo;
- cin >> todo;
- int val;
- switch (todo)
- {
- case 1:
- if (Terminal.getAdmin())
- {
- while (true)
- {
- cout << "\nУстановить количество денег в банкомате\n(значения меньше 0 не учитываются): ";
- cin >> val;
- if (val%5==0)
- break;
- cout << "Сумма должна быть кратна 5\n";
- }
- Terminal.setMoney(val);
- if (Terminal.getStateOfWork() == err)
- cout << "\n\aОШИБКА\n";
- }else
- cout << "ОШИБКА ДОСТУПА\n";
- break;
- case 2:
- if (Terminal.getAdmin())
- {
- while (true)
- {
- cout << "\nУстановить длину кассовой ленты (значения меньше 0 не учитываются): ";
- cin >> val;
- if (val%10 == 0)
- break;
- cout << "Длина должна быть кратна 10\n";
- }
- Terminal.setBillString(val);
- if (Terminal.getStateOfWork() == err)
- cout << "\n\aОШИБКА\n";
- }else
- cout << "ОШИБКА ДОСТУПА\n";
- break;
- case 3:
- while (true)
- {
- cout << "\nВведите сумму денег: ";
- cin >> val;
- if (val%5==0)
- break;
- cout << "Сумма должна быть кратна 5\n";
- }
- Terminal.receiveMoney(val);
- if (Terminal.getStateOfWork() == err)
- cout << "\n\aОШИБКА\n";
- break;
- default:
- cout << "\nВыйти из системы? (1/0) ";
- cin >> ifLoginAsAdmin;
- if (ifLoginAsAdmin)
- Terminal.unLogin();
- break;
- }
- cin.get();
- cin.get();
- system("cls"); //Очистка экрана, clrscr() не работает
- }
- cin.get();
- cin.get();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement