TheRasVa

Симулятор банка v3

Oct 10th, 2015
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.31 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. using namespace std;
  6. bool success = false;
  7.  
  8.  
  9. class Account
  10. {
  11. public:
  12.     string id;
  13.     long double balance;
  14.     double percent;
  15.     long overdraft;
  16.  
  17.     Account(string sid)
  18.     {
  19.         id = sid;
  20.  
  21.         ifstream fin("id" + sid + ".txt");
  22.         if (fin.fail())
  23.         {
  24.             system("color 0C");
  25.             cout << "E: Файл " << "id" + sid + ".txt" << " не существует.\n";
  26.             system("pause");
  27.             exit(0);
  28.         }
  29.         else if (fin.eof())
  30.         {
  31.             system("color 0C");
  32.             cout << "E: Файл " << "id" + sid + ".txt" << " повреждён.\n";
  33.             system("pause");
  34.             exit(0);
  35.         }
  36.  
  37.         fin >> balance;
  38.         if (fin.eof())
  39.         {
  40.             system("color 0C");
  41.             cout << "E: Файл " << "id" + sid + ".txt" << " повреждён.\n";
  42.             system("pause");
  43.             exit(0);
  44.         }
  45.  
  46.         fin >> overdraft;
  47.         if (fin.eof())
  48.         {
  49.             system("color 0C");
  50.             cout << "E: Файл " << "id" + sid + ".txt" << " повреждён.\n";
  51.             system("pause");
  52.             exit(0);
  53.         }
  54.  
  55.         fin >> percent;
  56.         fin.close();
  57.  
  58.         system("color 0A");
  59.         success = true;
  60.         cout << "I: Считывание из файла " << "id" + sid + ".txt" << " выполнено.\n";
  61.         system("pause");
  62.         system("cls");
  63.     }
  64.  
  65.     ~Account()
  66.     {
  67.         if (success)
  68.         {
  69.             ofstream fout("id" + id + ".txt");
  70.             fout << balance << " " << overdraft << " " << percent;
  71.             system("color 0A");
  72.             cout << "I: Запись в файл " << "id" + id + ".txt" << " выполнена.\n";
  73.             system("pause");
  74.             system("cls");
  75.         }
  76.     }
  77.  
  78.     bool change(double amount)
  79.     {
  80.         if (amount == 0)
  81.         {
  82.             cout << "E: Не указано сколько вводить/выводить.\n";
  83.             system("color 0C");
  84.             return false;
  85.         }
  86.         else if (balance + overdraft <= -amount)
  87.         {
  88.             cout << "E: Недостаточно средств.\n";
  89.             system("color 0C");
  90.             return false;
  91.         }
  92.         else
  93.         {
  94.             balance += amount;
  95.             cout << "I: Операция выполнена.\n";
  96.             system("color 0A");
  97.             return true;
  98.         }
  99.     }
  100.  
  101.     bool adv_change()
  102.     {
  103.         char confirm = 'n';
  104.         system("color 0D");
  105.         system("cls");
  106.         cout << "W: Изменение переменных напрямую является небезопасным, при вводе неправильного значения вы можете сломать программу и повредить файл клиента.\nПродолжить? (y/n)\n>> ";
  107.         cin >> confirm;
  108.         if (confirm == 'n' || confirm == 'N') return true;
  109.         system("cls");
  110.         system("color 0C");
  111.         cout << "CHNG [НЕБЕЗОПАСНО]:\nВведите новое значение ID (старое - " << id << ")\n>> ";
  112.         cin >> id;
  113.         cout << "Введите новое значение баланса (старое - " << balance << ")\n>> ";
  114.         cin >> balance;
  115.         cout << "Введите новое значение овердрафта (старое - " << overdraft << ")\n>> ";
  116.         cin >> overdraft;
  117.         cout << "Введите новое значение процентной ставки (старое - " << percent << ")\n>> ";
  118.         cin >> percent;
  119.         cout << "I: Операция выполнена.\n";
  120.         return true;
  121.     }
  122. };
  123.  
  124.  
  125. int main()
  126. {
  127.     setlocale(0, "");
  128.     system("color 0E");
  129.     system("title Bank Simulator (old)");
  130.  
  131.     string chosen_id;
  132.  
  133.     /*Account account;
  134.     account.id = 1024;
  135.     account.balance = 767.3;
  136.     account.percent = 0.06;
  137.     account.overdraft = 1000;*/
  138.  
  139.     cout << "Введите ID клиента: ";
  140.     getline(cin, chosen_id);
  141.  
  142.     Account account(chosen_id);
  143.  
  144.     while (true)
  145.     {
  146.         system("color 0E");
  147.         double amount;
  148.         long action;
  149.         cout << "Какую операцию вы желаете выполнить?\n  1 -- APND - положить деньги на счет\n  2 -- TAKE - снять деньги со счета\n  3 -- INFO - информация о клиенте\n  4 -- CHNG - вручную изменить информацию о клиенте [НЕБЕЗОПАСНО]\n  0 -- QUIT - сохранить и выйти\n>> ";
  150.         cin >> action;
  151.         if (action < 0) // При введении буквы буфер переходит в состояние ошибки и замусоривается. Необходимо переинициализировать и очистить его.
  152.         {
  153.             system("color 0C");
  154.             cout << "E: Команда не распознана.\n";
  155.             cin.clear();
  156.             cin.sync();
  157.             system("pause");
  158.             system("cls");
  159.             continue;
  160.         }
  161.         system("cls");
  162.         switch (action)
  163.         {
  164.         case 1: cout << "Введите кол-во: "; cin >> amount; account.change(amount); break;
  165.         case 2: cout << "Введите кол-во: "; cin >> amount; account.change(-amount); break;
  166.         case 3: cout << "INFO:\n  ID:        " << account.id << "\n  Баланс:    " << account.balance << "\n  Овердрафт: " << account.overdraft << "\n  % ставка:  " << account.percent << endl; break;
  167.         case 4: account.adv_change(); break;
  168.         case 0: return 0;
  169.         default: system("color 0C"); cout << "E: Команда не распознана.\n"; break;
  170.         }
  171.         system("pause");
  172.         system("cls");
  173.  
  174.         cin.clear(); // При введении букву значение в буфере не всегда минусовое: переинициализация при каждой итерации цикла.
  175.         cin.sync();
  176.     }
  177.  
  178.     system("pause");
  179.     return 0;
  180. }
Advertisement
Add Comment
Please, Sign In to add comment