Advertisement
Guest User

Untitled

a guest
Oct 6th, 2015
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.40 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <conio.h>
  4.  
  5. using namespace std;
  6.  
  7. const int truePass = 1234;
  8. const int dfltMoney = 4000;
  9. const int dfltBillStr = 40;
  10.  
  11. int getPass() //Ввод пароля
  12. {
  13. int a;
  14. cout << "\nВведите пароль (4 цифры): ";
  15. cin >> a;
  16. return a;
  17. }
  18.  
  19. void wrongPassword()
  20. {
  21. cout << "Неверный пароль!\n";
  22. }
  23.  
  24. void noPaper()
  25. {
  26. cout << "\a\tНЕТ ЧЕКОВОЙ ЛЕНТЫ ДЛЯ ПОСЛЕДУЮЩИХ ОПЕРАЦИЙ!\n";
  27. }
  28.  
  29. enum state {work, dnwork, err}; //Состояние банкомата - работает, не работает, ошибка
  30.  
  31. class atm
  32. {
  33. private:
  34. state stateOfWork;
  35. int money;
  36. int billString;
  37. bool ifBillStr;
  38. bool admin;
  39. public:
  40. void setStateOfWork(state);
  41. void setMoney(int);
  42. void setBillString(int);
  43. void setAdmin(bool);
  44. bool getAdmin(void);
  45. state getStateOfWork(void);
  46. int getBillStr(void);
  47. void sendToOutput(void);
  48. void autorization(bool);
  49. void unLogin(void);
  50. void receiveMoney(int);
  51. };
  52.  
  53. void current(state e, int f, int g, bool h, bool i) //Вывод содержимого всех свойств объекта
  54. {
  55. cout << "\n\t\tСостояние (0 - работает, 1 - не работает, 2 - ошибка): " << e << endl;
  56. cout << "\t\tКоличество денег: " << f << endl;
  57. cout << "\t\tДлина кассовой ленты: " << g << endl;
  58. cout << "\t\tНаличие кассововой ленты: " << std::boolalpha << h << endl;
  59. cout << "\t\tАдминистратор: " << std::boolalpha << i << endl << endl;
  60. }
  61.  
  62. int atm::getBillStr() //Возвращает длину чековой ленты
  63. {
  64. return billString;
  65. }
  66.  
  67. void atm::sendToOutput() //Метод передает все свойства объекта функции current
  68. {
  69. current(stateOfWork, money, billString, ifBillStr, admin);
  70. }
  71.  
  72. bool atm::getAdmin() //Возвращает статус авторизации
  73. {
  74. return admin;
  75. }
  76.  
  77. void atm::setAdmin(bool b) //Устанавливает статус авторизации
  78. {
  79. admin = b;
  80. }
  81.  
  82. void atm::setStateOfWork(state a) //Устанавливает состояние
  83. {
  84. stateOfWork = a;
  85. }
  86.  
  87. state atm::getStateOfWork() //Возвращает состояние
  88. {
  89. return stateOfWork;
  90. }
  91.  
  92. void atm::autorization(bool b) //Авторизация без учета текущего статуса
  93. {
  94. if (!b)
  95. {
  96. admin = 0;
  97. }else{
  98. while (true)
  99. {
  100. int a = getPass();
  101. if (a == truePass)
  102. break;
  103. wrongPassword();
  104. }
  105. admin = 1;
  106. }
  107. }
  108.  
  109. void atm::unLogin() //Выход из аккаунта администратора
  110. {
  111. admin = 0;
  112. setStateOfWork(dnwork);
  113. }
  114.  
  115. void atm::setMoney(int a) //Устанавливает количество денег в банкомате
  116. {
  117. if (a > 0)
  118. {
  119. money = a;
  120. }
  121. }
  122.  
  123. void atm::setBillString(int a) //Устанавливает длину чековой ленты в банкомате
  124. {
  125. if (a > 0)
  126. {
  127. billString = a;
  128. }
  129. }
  130.  
  131. void atm::receiveMoney(int a) //Снятие денег
  132. {
  133. /*if (monVal < 50)
  134. setSt(err);*/
  135. if (getStateOfWork() == work && billString >= 10 && money >=50)
  136. {
  137. if (money >= a)
  138. {
  139. money-=a;
  140. billString-=10;
  141. ifBillStr = (billString >= 10);
  142. }else{
  143. setStateOfWork(err);
  144. }
  145. }
  146. }
  147.  
  148. int main()
  149. {
  150. setlocale(0, ""); //Не думаю, что это нужно, скажем, в VS
  151. atm Terminal;
  152. Terminal.setAdmin(1); //Чтобы задать количество денег и длину чековой ленты
  153. Terminal.setMoney(dfltMoney);
  154. Terminal.setBillString(dfltBillStr);
  155. Terminal.setAdmin(0); //По умолчанию - гость
  156. Terminal.setStateOfWork(work); //Установить состояние - работает
  157. bool ifLoginAsAdmin;
  158. while (true)
  159. {
  160. if (Terminal.getStateOfWork() == err)
  161. Terminal.setStateOfWork(work);
  162. if (Terminal.getBillStr()<10)
  163. noPaper();
  164. if (!Terminal.getAdmin()) //Если не администратор: залогиниться или войти как гость
  165. {
  166. cout << "Авторизируйтесь.\nВойти как: администратор(1), гость(0): ";
  167. cin >> ifLoginAsAdmin;
  168. Terminal.autorization(ifLoginAsAdmin);
  169. }
  170. Terminal.sendToOutput();
  171. cout << "Возможные действия:\nАдмин:\n\tУстановить количество денег в автомате(1);\n\tУстановить длину кассовой ленты(2);";
  172. cout << "\nСнятие денег(3);\nВыход из системы(иные значения ввода);\n\nВаш выбор: ";
  173. int todo;
  174. cin >> todo;
  175. int val;
  176. switch (todo)
  177. {
  178. case 1:
  179. if (Terminal.getAdmin())
  180. {
  181. while (true)
  182. {
  183. cout << "\nУстановить количество денег в банкомате\n(значения меньше 0 не учитываются): ";
  184. cin >> val;
  185. if (val%5==0)
  186. break;
  187. cout << "Сумма должна быть кратна 5\n";
  188. }
  189. Terminal.setMoney(val);
  190. if (Terminal.getStateOfWork() == err)
  191. cout << "\n\aОШИБКА\n";
  192. }else
  193. cout << "ОШИБКА ДОСТУПА\n";
  194. break;
  195. case 2:
  196. if (Terminal.getAdmin())
  197. {
  198. while (true)
  199. {
  200. cout << "\nУстановить длину кассовой ленты (значения меньше 0 не учитываются): ";
  201. cin >> val;
  202. if (val%10 == 0)
  203. break;
  204. cout << "Длина должна быть кратна 10\n";
  205. }
  206. Terminal.setBillString(val);
  207. if (Terminal.getStateOfWork() == err)
  208. cout << "\n\aОШИБКА\n";
  209. }else
  210. cout << "ОШИБКА ДОСТУПА\n";
  211. break;
  212. case 3:
  213. while (true)
  214. {
  215. cout << "\nВведите сумму денег: ";
  216. cin >> val;
  217. if (val%5==0)
  218. break;
  219. cout << "Сумма должна быть кратна 5\n";
  220. }
  221. Terminal.receiveMoney(val);
  222. if (Terminal.getStateOfWork() == err)
  223. cout << "\n\aОШИБКА\n";
  224. break;
  225. default:
  226. cout << "\nВыйти из системы? (1/0) ";
  227. cin >> ifLoginAsAdmin;
  228. if (ifLoginAsAdmin)
  229. Terminal.unLogin();
  230. break;
  231. }
  232. cin.get();
  233. cin.get();
  234. system("cls"); //Очистка экрана, clrscr() не работает
  235. }
  236. cin.get();
  237. cin.get();
  238. return 0;
  239. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement