Advertisement
KniazFalcon

Курсовая

Mar 13th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 28.62 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <fstream>
  4. #include <string>
  5. #include <vector>
  6. #include <windows.h>
  7.  
  8. using namespace std;
  9.  
  10. const string DATA_FILE = "data.txt", ACCOUNTS_FILE = "users.txt", DEPARTMENTS_FILE = "departments.txt", POSTS_FILE = "posts.txt", TEMP_FILE = "temp.txt", NEW_USERS_FILE = "newusers.txt";
  11.  
  12. const string LINES_MAIN_MENU[] = { "\n------------Главное меню--------------\n\n","1 - Регистрация\n","2 - Войти как гость\n","3 - Войти как юзер\n","4 - Войти как администратор\n","5 - Выйти из программы\n\n" };
  13. const int COUNTER_MAIN_MENU = 5;
  14. const string LINES_GUEST_MENU[] = { "\n\n\n------------Гостевое меню--------------\n\n","1 - Просмотр сотрудников\n","2 - Сортировка сотрудников\n","3 - Поиск сотрудника\n","4 - Выйти из программы\n","5 - Вернуться в главное меню\n\n" };
  15. const int COUNTER_GUEST_MENU = 5;
  16. const string LINES_USER_MENU[] = { "\n\n\n------------Меню пользователя--------------\n\n","1 - Просмотр данных\n","2 - Сортировка данных\n","3 - Поиск по данным\n","4 - Выполнить задание\n","5 - Выйти из программы\n","6 - Вернуться в главное меню\n","7 - Сменить пароль\n\n" };
  17. const int COUNTER_USER_MENU = 7;
  18. const string LINES_ADMIN_MENU[] = { "\n\n\n------------Меню администратора--------------\n\n","1 - Учетные записи\n","2 - Файлы\n","3 - Данные\n","4 - Пользовательский модуль\n","5 - Выйти из программы\n","6 - Вернуться в главное меню\n", "7 - Сменить пароль\n\n" };
  19. const int COUNTER_ADMIN_MENU = 7;
  20. const string LINES_FILE_MENU[] = { "\n\n\n------------Диспетчер файлов--------------\n\n","1 - Создать файлы\n","2 - Удалить файлы\n","3 - Просмотреть файлы\n","4 - Вернуться в меню администратора\n\n" };
  21. const int COUNTER_FILE_MENU = 4;
  22. const string LINES_ACCOUNT_MENU[] = { "\n\n\n------------Диспетчер аккаунтов--------------\n\n","1 - Просмотр аккаунтов\n","2 - Добавить аккаунт\n","3 - Изменить аккаунт\n","4 - Удалить аккаунт\n","5 - Вернуться в меню администратора\n\n" };
  23. const int COUNTER_ACCOUNT_MENU = 5;
  24. const string LINES_DATA_MENU[] = { "\n\n\n------------Диспетчер данных--------------\n\n","1 - Просмотр данных\n","2 - Добавить данные\n","3 - Изменить данные\n","4 - Удалить данные\n","5 - Добавить отдел\n","6 - Добавить должность\n","7 - Вернуться в меню администратора\n\n" };
  25. const int COUNTER_DATA_MENU = 7;
  26.  
  27. const string FOR_EDIT_MESSAGE = "Некоторые данные были некорректны.\nПрименено автоиcправление.\n";
  28.  
  29. const string FOR_EXIT = "\nВы уверенны, что хотите выйти?\n";
  30.  
  31. const string FOR_CHOOSE_HACKER_REGIME = "Желаете ли активировать режим \"Хакер\"?\n";
  32. const string ABOUT_HACKER_REGIME = "Добро пожаловать в режим \"Хакер\"!\nЕдинственное отличие от режима администратора - цвет консоли.\nПомните, настоящие хакеры всегда работают в черной консоли с зеленым шрифтом!\n";
  33.  
  34. const string COLOR_HACKER = "color 02", COLOR_ADMIN = "color 1F", COLOR_USER = "color F1", COLOR_GUEST = "color F0", COLOR_MAIN = "color 0F";
  35.  
  36. const string SALT = "HrenVamANeBruteForce";
  37.  
  38. const string INPUT_LOGIN = "\nВведите логин:\n", INPUT_PASSWORD = "\nВведите пароль:\n", CONFIRM_PASSWORD = "\nПовторите пароль:\n";
  39. const string FOR_LOGIN = "\nЛогин должен содержать 6-10 символов.\n", FOR_PASSWORD = "\nПароль должен содержать 8-16 символов\n", HELP_LINE = "Допустимы символы A-Z, a-z, 0-9, _\n";
  40.  
  41. const string FILE_OPEN_ERROR = "Ошибка. Не удалось открыть файл. Создан новый файл.";
  42. const string FILE_CREATE_ERROR = "Ошибка. Не удалось создать файл.";
  43.  
  44. const string SEPARATOR = "---------------------------\n";
  45. const string LINE_UNKNOWN = "Не известно";
  46. const string LINE_TRUE = "1 - Да\n";
  47. const string LINE_FALSE = "2 - Нет\n\n";
  48.  
  49. //-----------------------------------
  50. //-----------------------------------
  51. char chooseItem(int );
  52. //-----------------------------------
  53. void installRusSupport();
  54. //-----------------------------------
  55. void activateHackerRegime();
  56. //-----------------------------------
  57. void showMainMenu();
  58. void chooseMainMenu();
  59.  
  60. void showGuestMenu();
  61. void chooseGuestMenu(bool&);
  62.  
  63. void showUserMenu();
  64. void chooseUserMenu(bool&);
  65.  
  66. void showAdminMenu();
  67. void chooseAdminMenu(bool&, vector<struct user>&);
  68.  
  69. void showFileMenu();
  70. void chooseFileMenu();
  71.  
  72. void showAccountMenu();
  73. void chooseAccountMenu(vector<struct user>&);
  74.  
  75. void showDataMenu();
  76. void chooseDataMenu();
  77. //-----------------------------------
  78. void inspectFile(string);
  79. void createFile(string);
  80. int countLines(string);
  81. //-----------------------------------
  82. vector<struct worker> readDataFile();
  83. void showDataFile(vector<struct worker>&);
  84. void writeDataFile(vector<struct worker>&);
  85. //-----------------------------------
  86. vector<struct user> readAccountsFile();
  87. void showAccountsFile(vector<struct user>&);
  88. void writeAccountsFile(vector<struct user>&);
  89. //-----------------------------------
  90. void verifyData(worker&);
  91. int verifyFullName(string&);
  92. int verifyDay(int&, int, int);
  93. int verifyMonth(int&);
  94. int verifyYear(int&);
  95. int verifyDepartment(string&);
  96. int verifyPost(string&);
  97. void showEditMessage();
  98. //-----------------------------------
  99. void verifyZero(int);
  100. //-----------------------------------
  101. int verifyReadInt(string);
  102. //-----------------------------------
  103. int learnLongestLine(vector<struct worker>&);
  104. int learnLongestLine(string);
  105. //-----------------------------------
  106. string cipherUser(user);
  107. //-----------------------------------
  108. void registrUser(vector<struct user>&);
  109. string registrLogin(vector<struct user>&);
  110. string inputPassword();
  111. bool isOriginalLogin(string, vector<struct user>&);
  112. //-----------
  113. void logInAccount(vector<struct user>&, bool&);
  114. string inputLogin(vector<struct user>&);
  115. bool isTruePassword(string, string, vector<struct user>&);
  116. //-----------------------------------
  117. void sortAlfabet(vector<struct worker>&);
  118. void sortDepartment(vector<struct worker>&);
  119. void sortPost(vector<struct worker>&);
  120. //-----------------------------------
  121. bool isExit();
  122.  
  123. struct worker
  124. {
  125.     struct tname
  126.     {
  127.         string name, patronum, full_name;
  128.         string surname = name + ' ' + patronum + ' ' + full_name;
  129.     } tname;
  130.     struct birth
  131.     {
  132.         int day, month, year;
  133.     } birth;
  134.     struct work
  135.     {
  136.         struct begin
  137.         {
  138.             int day, month, year;
  139.         } begin;
  140.         string department, post;
  141.     } work;
  142. };
  143.  
  144. struct user
  145. {
  146.     string login, password;
  147.     bool role;
  148. };
  149.  
  150.  
  151. int main()
  152. {
  153.     installRusSupport();
  154.     chooseMainMenu();
  155.  
  156.     system("pause");
  157.     return 0;
  158. }
  159.  
  160. char chooseItem(int count_menu)
  161. {
  162.     cout << "Вы выбираете пункт: ";
  163.     string choice;
  164.     cin >> choice;
  165.     cout << "\n";
  166.  
  167.     if (choice.length() == 1)
  168.     {
  169.         return choice[0];
  170.     }
  171.     else
  172.     {
  173.         return (char)(count_menu + 48);
  174.     }
  175.  
  176. }
  177.  
  178. void installRusSupport()
  179. {
  180.     SetConsoleCP(1251);
  181.     SetConsoleOutputCP(1251);
  182. }
  183.  
  184. void activateHackerRegime()
  185. {
  186.     cout << SEPARATOR << FOR_CHOOSE_HACKER_REGIME<<LINE_TRUE<<LINE_FALSE;
  187.  
  188.     if (chooseItem(2) == '1')
  189.     {
  190.         system(COLOR_HACKER.c_str());
  191.         cout << ABOUT_HACKER_REGIME;
  192.     }
  193.     else
  194.     {
  195.         system(COLOR_ADMIN.c_str());
  196.     }
  197. }
  198.  
  199. void showMainMenu()
  200. {
  201.     system(COLOR_MAIN.c_str());
  202.     for (int i = 0; i <= COUNTER_MAIN_MENU; i++)
  203.     {
  204.         cout << LINES_MAIN_MENU[i];
  205.     }
  206. }
  207.  
  208. void showGuestMenu()
  209. {
  210.     system(COLOR_GUEST.c_str());
  211.     for (int i = 0; i <= COUNTER_GUEST_MENU; i++)
  212.     {
  213.         cout << LINES_GUEST_MENU[i];
  214.     }
  215. }
  216.  
  217. void showUserMenu()
  218. {
  219.     system(COLOR_USER.c_str());
  220.     for (int i = 0; i <= COUNTER_USER_MENU; i++)
  221.     {
  222.         cout << LINES_USER_MENU[i];
  223.     }
  224. }
  225.  
  226. void showAdminMenu()
  227. {
  228.     for (int i = 0; i <= COUNTER_ADMIN_MENU; i++)
  229.     {
  230.         cout << LINES_ADMIN_MENU[i];
  231.     }
  232. }
  233.  
  234. void showFileMenu()
  235. {
  236.     for (int i = 0; i <= COUNTER_FILE_MENU; i++)
  237.     {
  238.         cout << LINES_FILE_MENU[i];
  239.     }
  240. }
  241.  
  242. void showAccountMenu()
  243. {
  244.     for (int i = 0; i <= COUNTER_ACCOUNT_MENU; i++)
  245.     {
  246.         cout << LINES_ACCOUNT_MENU[i];
  247.     }
  248. }
  249.  
  250. void showDataMenu()
  251. {
  252.     for (int i = 0; i <= COUNTER_DATA_MENU; i++)
  253.     {
  254.         cout << LINES_DATA_MENU[i];
  255.     }
  256. }
  257.  
  258. void chooseMainMenu()
  259. {
  260.     bool main_menu_flag = true;
  261.     vector<struct user> accounts_vector = readAccountsFile();
  262.     while (main_menu_flag == true)                            
  263.     {
  264.         showMainMenu();
  265.         switch (chooseItem(COUNTER_MAIN_MENU))
  266.         {
  267.         case '1':
  268.         {
  269.             registrUser(accounts_vector);
  270.             break;
  271.         }
  272.  
  273.         case '2':
  274.         {
  275.             chooseGuestMenu(main_menu_flag);
  276.             break;
  277.         }
  278.  
  279.         case '3':
  280.         {
  281.             logInAccount(accounts_vector, main_menu_flag);
  282.             break;
  283.         }
  284.  
  285.         case '4':
  286.         {
  287.             chooseAdminMenu(main_menu_flag, accounts_vector);
  288.             break;
  289.         }
  290.  
  291.         case '5': default:
  292.         {
  293.             main_menu_flag = isExit();
  294.         }
  295.         }
  296.     }
  297. }
  298.  
  299. void chooseGuestMenu(bool& main_menu_flag)
  300. {
  301.     bool menu_flag = true;
  302.     vector <struct worker> workers_vector = readDataFile();
  303.     while (menu_flag == true)                          
  304.     {
  305.         showGuestMenu();
  306.         switch (chooseItem(COUNTER_GUEST_MENU))
  307.         {
  308.         case '1':
  309.         {
  310.             showDataFile(workers_vector);
  311.             break;
  312.         }
  313.  
  314.         case '2':
  315.         {
  316.             //sort
  317.             break;
  318.         }
  319.  
  320.         case '3':
  321.         {
  322.             //search
  323.             break;
  324.         }
  325.  
  326.         case '4':
  327.         {
  328.             main_menu_flag = menu_flag = isExit();
  329.             break;
  330.         }
  331.  
  332.         case '5': default:
  333.         {
  334.             menu_flag = isExit();
  335.         }
  336.         }
  337.     }
  338. }
  339.  
  340. void chooseUserMenu(bool& main_menu_flag)
  341. {
  342.     vector <struct worker> workers_vector = readDataFile();
  343.     bool menu_flag = true;
  344.     while (menu_flag == true)                          
  345.     {
  346.         showUserMenu();
  347.         switch (chooseItem(COUNTER_USER_MENU))
  348.         {
  349.         case '1':
  350.         {
  351.             showDataFile(workers_vector);
  352.             break;
  353.         }
  354.  
  355.         case '2':
  356.         {
  357.             //sort
  358.             break;
  359.         }
  360.  
  361.         case '3':
  362.         {
  363.             //search
  364.             break;
  365.         }
  366.  
  367.         case '4':
  368.         {
  369.             //make task
  370.             break;
  371.         }
  372.  
  373.         case '5':
  374.         {
  375.             main_menu_flag = menu_flag = isExit();
  376.             break;
  377.         }
  378.  
  379.         case '7':
  380.         {
  381.             //сменить пароль
  382.             break;
  383.         }
  384.  
  385.         case '6': default:
  386.         {
  387.             menu_flag = isExit();
  388.         }
  389.         }
  390.     }
  391. }
  392.  
  393. void chooseAdminMenu(bool& main_menu_flag, vector<struct user>& accounts_vector)
  394. {
  395.     bool menu_flag = true;
  396.     while (menu_flag == true)                            
  397.     {
  398.         activateHackerRegime();
  399.         showAdminMenu();
  400.         switch (chooseItem(COUNTER_ADMIN_MENU))
  401.         {
  402.         case '1':
  403.         {
  404.             chooseFileMenu();
  405.             break;
  406.         }
  407.  
  408.         case '2':
  409.         {
  410.             chooseAccountMenu(accounts_vector);
  411.             break;
  412.         }
  413.  
  414.         case '3':
  415.         {
  416.             chooseDataMenu();
  417.             break;
  418.         }
  419.  
  420.         case '4':
  421.         {
  422.             chooseUserMenu(main_menu_flag);
  423.             break;
  424.         }
  425.  
  426.         case '5':
  427.         {
  428.             main_menu_flag = menu_flag = isExit();
  429.             break;
  430.         }
  431.  
  432.         case '7':
  433.         {
  434.             //сменить пароль
  435.             break;
  436.         }
  437.  
  438.         case '6': default:
  439.         {
  440.             menu_flag = isExit();
  441.         }
  442.         }
  443.     }
  444. }
  445.  
  446. void chooseFileMenu()
  447. {
  448.     bool menu_flag = true;
  449.     while (menu_flag == true)                            
  450.     {
  451.         showFileMenu();
  452.         switch (chooseItem(COUNTER_FILE_MENU))
  453.         {
  454.         case '1':
  455.         {
  456.             //create
  457.             break;
  458.         }
  459.  
  460.         case '2':
  461.         {
  462.             //delete
  463.             break;
  464.         }
  465.  
  466.         case '3':
  467.         {
  468.             //show+
  469.             break;
  470.         }
  471.  
  472.         case '4': default:
  473.         {
  474.             menu_flag = isExit();
  475.         }
  476.         }
  477.     }
  478. }
  479.  
  480. void chooseAccountMenu(vector<struct user>& accounts_vector)
  481. {
  482.     bool menu_flag = true;
  483.     while (menu_flag == true)                        
  484.     {
  485.         showAccountMenu();
  486.         switch (chooseItem(COUNTER_ACCOUNT_MENU))
  487.         {
  488.         case '1':
  489.         {
  490.             showAccountsFile(accounts_vector);
  491.             break;
  492.         }
  493.  
  494.         case '2':
  495.         {
  496.             //add
  497.             break;
  498.         }
  499.  
  500.         case '3':
  501.         {
  502.             //edit
  503.             break;
  504.         }
  505.  
  506.         case '4':
  507.         {
  508.             //delete
  509.             break;
  510.         }
  511.  
  512.         case '5': default:
  513.         {
  514.             menu_flag = isExit();//exit
  515.         }
  516.         }
  517.         writeAccountsFile(accounts_vector);
  518.     }
  519. }
  520.  
  521. void chooseDataMenu()
  522. {
  523.     bool menu_flag = true;
  524.     vector <struct worker> workers_vector = readDataFile();
  525.     while (menu_flag == true)                            
  526.     {
  527.         showDataMenu();
  528.         switch (chooseItem(COUNTER_DATA_MENU))
  529.         {
  530.         case '1':
  531.         {
  532.             showDataFile(workers_vector);
  533.             break;
  534.         }
  535.  
  536.         case '2':
  537.         {
  538.             //добавить
  539.             break;
  540.         }
  541.  
  542.         case '3':
  543.         {
  544.             //edit
  545.             break;
  546.         }
  547.  
  548.         case '4':
  549.         {
  550.             //delete
  551.             break;
  552.         }
  553.  
  554.         case '5':
  555.         {
  556.             //добавить отдел
  557.             break;
  558.         }
  559.  
  560.         case '6':
  561.         {
  562.             //добавить должность
  563.             break;
  564.         }
  565.  
  566.         case '7': default:
  567.         {
  568.             menu_flag = isExit();
  569.         }
  570.         }
  571.     }
  572.     writeDataFile(workers_vector);
  573. }
  574.  
  575.  
  576. void inspectFile(string file_name)
  577. {
  578.     ofstream out(file_name, ios::out);
  579.  
  580.     if (!out.is_open())
  581.     {
  582.         cout << FILE_OPEN_ERROR;
  583.         createFile(file_name);
  584.     }
  585.  
  586.     out.close();
  587. }
  588.  
  589. void createFile(string file_name)
  590. {
  591.     ofstream out(file_name, ios::out);
  592.  
  593.     if (!out.is_open())
  594.     {
  595.         cout << FILE_CREATE_ERROR;
  596.     }
  597.  
  598.     cout << "\nНет данных!\n";
  599.     out.close();
  600. }
  601.  
  602. int countLines(string file_name)
  603. {
  604.     ifstream in(file_name, ios::in);
  605.  
  606.     if (!in.is_open())
  607.     {
  608.         cout << FILE_OPEN_ERROR;
  609.         createFile(file_name);
  610.     }
  611.  
  612.     int counter = 0;
  613.     string temp_line;
  614.     while (!in.eof())
  615.     {
  616.         getline(in, temp_line);
  617.         if (temp_line.length() != 0)
  618.         {
  619.             counter++;
  620.         }
  621.     }
  622.  
  623.     in.close();
  624.     return counter;
  625. }
  626.  
  627. vector<struct worker> readDataFile()
  628. {
  629.     ifstream in(DATA_FILE, ios::in);
  630.  
  631.     if (!in.is_open())
  632.     {
  633.         cout << FILE_OPEN_ERROR;
  634.         createFile(DATA_FILE);
  635.     }
  636.  
  637.     vector<struct worker> work_vector;
  638.     struct worker temp_vector;
  639.     while (!in.eof())
  640.     {
  641.         getline(in, temp_vector.tname.surname, '.');
  642.         getline(in, temp_vector.tname.name, '.');
  643.         getline(in, temp_vector.tname.patronum, '.');
  644.  
  645.  
  646.         string temp;
  647.         getline(in, temp, '.');
  648.         temp_vector.birth.day = verifyReadInt(temp);
  649.  
  650.         getline(in, temp, '.');
  651.         temp_vector.birth.month = verifyReadInt(temp);
  652.  
  653.         getline(in, temp, '.');
  654.         temp_vector.birth.year = verifyReadInt(temp);
  655.  
  656.         getline(in, temp, '.');
  657.         temp_vector.work.begin.day = verifyReadInt(temp);
  658.  
  659.         getline(in, temp, '.');
  660.         temp_vector.work.begin.month = verifyReadInt(temp);
  661.  
  662.         getline(in, temp, '.');
  663.         temp_vector.work.begin.year = verifyReadInt(temp);
  664.  
  665.  
  666.  
  667.         getline(in, temp_vector.work.department, '.');
  668.         getline(in, temp_vector.work.post, '.');
  669.  
  670.         work_vector.push_back(temp_vector);
  671.     }
  672.  
  673.     in.close();
  674.     return work_vector;
  675. }
  676.  
  677. void showDataFile(vector<struct worker>& work_vector)
  678. {
  679.     cout << SEPARATOR;
  680.     if (work_vector.size() == 0)
  681.     {
  682.         cout << "Нет данных!\n\n";
  683.     }
  684.     else
  685.     {
  686.         int full_name_size, department_size, post_size;
  687.         full_name_size = learnLongestLine(work_vector);
  688.         department_size = learnLongestLine(DEPARTMENTS_FILE);
  689.         post_size = learnLongestLine(POSTS_FILE);
  690.        
  691.         cout << setw(4) << left << "№" << ' | ' << setw(full_name_size) << left << "ФИО" << ' | ' << setw(10) << left << "Дата рожд." << ' | ' << setw(10) << left << "Начал р-ть" << ' | ' << setw(department_size) << left << "Отдел" << ' | ' << setw(post_size) << left << "Должность" << endl << endl;
  692.        
  693.         for (int i = 0; i < work_vector.size(); i++)
  694.         {
  695.             work_vector[i].tname.full_name = work_vector[i].tname.surname + ' ' + work_vector[i].tname.name + ' ' + work_vector[i].tname.patronum;
  696.             verifyData(work_vector[i]);
  697.  
  698.             cout << setw(4) << left << i + 1  << ' | ' << setw(full_name_size) << left << work_vector[i].tname.full_name << ' | ';
  699.  
  700.             verifyZero(work_vector[i].birth.day);
  701.             cout << work_vector[i].birth.day << '.';
  702.  
  703.             verifyZero(work_vector[i].birth.month);
  704.             cout << work_vector[i].birth.month << '.' << work_vector[i].birth.year << ' | ';
  705.  
  706.             verifyZero(work_vector[i].work.begin.day);
  707.             cout << work_vector[i].work.begin.day << '.';
  708.  
  709.             verifyZero(work_vector[i].work.begin.month);
  710.             cout << work_vector[i].work.begin.month << '.' << work_vector[i].work.begin.year << ' | ';
  711.  
  712.             cout << setw(department_size) << left << work_vector[i].work.department << ' | ';
  713.             cout << setw(post_size) << left << work_vector[i].work.post << endl;
  714.         }
  715.         cout << endl;
  716.     }
  717. }
  718. //разбить на функции, ввести константы
  719. void writeDataFile(vector<struct worker>& work_vector)
  720. {
  721.     ofstream out(DATA_FILE, ios::out);
  722.  
  723.     if (!out.is_open())
  724.     {
  725.         cout << FILE_OPEN_ERROR;
  726.         createFile(DATA_FILE);
  727.     }
  728.  
  729.     for (int i = 0; i < work_vector.size(); i++)
  730.     {
  731.         out << work_vector[i].tname.surname <<'.'<< work_vector[i].tname.name <<'.'<< work_vector[i].tname.patronum<<'.';
  732.         out << work_vector[i].birth.day << '.' << work_vector[i].birth.month << '.' << work_vector[i].birth.year << '.';
  733.         out << work_vector[i].work.begin.day << '.' << work_vector[i].work.begin.month << '.' << work_vector[i].work.begin.year << '.';
  734.         out << work_vector[i].work.department << '.' << work_vector[i].work.post << '.' << endl;
  735.     }
  736.  
  737.     out.close();
  738. }
  739.  
  740. vector<struct user> readAccountsFile()
  741. {
  742.     ifstream in(ACCOUNTS_FILE, ios::in);
  743.     vector <struct user> users;
  744.     if (!in.is_open())
  745.     {
  746.         cout << FILE_OPEN_ERROR;
  747.         createFile(ACCOUNTS_FILE);
  748.     }
  749.     else
  750.     {
  751.         user temp_user;
  752.         while (!in.eof())
  753.         {
  754.             in >> temp_user.login >> temp_user.password;
  755.            
  756.             string temp_role;
  757.             in >> temp_role;
  758.             temp_user.role=verifyReadInt(temp_role);
  759.  
  760.             users.push_back(temp_user);
  761.         }
  762.     }
  763.     in.close();
  764.     return users;
  765. }
  766.  
  767. void showAccountsFile(vector<struct user>& users)
  768. {
  769.     cout << SEPARATOR;
  770.     if (users.size() == 0)
  771.     {
  772.         cout << "Файл пуст!\n\n";
  773.     }
  774.     else
  775.     {
  776.         cout << setw(10) << left << "Логин" << ' ' << setw(32) << left << "Пароль" << ' ' << "Роль";
  777.  
  778.         for (int i = 0; i < users.size(); i++)
  779.         {
  780.             cout << endl << setw(10) << left << users[i].login << ' ' << setw(32) << left << users[i].password << ' ' << users[i].role;
  781.         }
  782.     }
  783. }
  784. //разбить на функции, ввести константы
  785. void writeAccountsFile(vector<struct user>& users)
  786. {
  787.     ofstream out(ACCOUNTS_FILE, ios::out);
  788.  
  789.     if (!out.is_open())
  790.     {
  791.         cout << FILE_OPEN_ERROR;
  792.         createFile(ACCOUNTS_FILE);
  793.     }
  794.     else
  795.     {
  796.         for (int i = 0; i < users.size(); i++)
  797.         {
  798.             out << endl << users[i].login << ' ' << users[i].login << ' ' << users[i].role;
  799.         }
  800.     }
  801.     out.close();
  802. }
  803.  
  804.  
  805. void verifyData(worker& temp_worker)
  806. {
  807.     string& full_name = temp_worker.tname.full_name;
  808.     int& birth_day = temp_worker.birth.day, &birth_month = temp_worker.birth.month, &birth_year = temp_worker.birth.year;
  809.     int& work_day = temp_worker.work.begin.day, &work_month= temp_worker.work.begin.month, &work_year = temp_worker.work.begin.year;
  810.     string& department = temp_worker.work.department;
  811.     string& post = temp_worker.work.post;
  812.    
  813.     if (verifyFullName(full_name) + verifyDay(birth_day, birth_month, birth_year) + verifyMonth(birth_month) + verifyYear(birth_year) + verifyDepartment(department) + verifyPost(post) + verifyDay(work_day, work_month, work_year) + verifyMonth(work_month) + verifyYear(work_year) != 0)
  814.     {
  815.         showEditMessage();
  816.     }
  817. }
  818.  
  819. int verifyFullName(string& full_name)
  820. {
  821.     bool flag = true;
  822.     for (int i = 0; i < full_name.length(); i++)
  823.     {
  824.         if (((full_name[i]>127) && (full_name[i]<127)) || ((full_name[i]>223) && (full_name[i]<242)) || (full_name[i] == 32) || (full_name[i] == 45))
  825.         {
  826.             continue;
  827.         }
  828.         full_name.erase(i, 1);
  829.         flag = false;
  830.     }
  831.     if (flag)
  832.         return 0;
  833.     else
  834.         return 1;
  835. }
  836.  
  837. int verifyDay(int& day, int month, int year)
  838. {
  839.     if (day > 0)
  840.     {
  841.         if ((month != 2) && (day < 31))
  842.             return 0;
  843.         else if (((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) && (day < 32))
  844.             return 0;  
  845.         else if ((month == 2) && (day < 29))
  846.             return 0;
  847.         else if ((month == 2) && (day < 29) && (((year % 100 != 0) && (year % 4 == 0))) || ((year % 100 == 0) && (year % 400 == 0)))
  848.             return 0;
  849.         else
  850.         {
  851.             day = 1;
  852.             return 1;
  853.         }
  854.     }
  855.     else
  856.     {
  857.         day = 1;
  858.         return 1;
  859.     }
  860. }
  861.  
  862. int verifyMonth(int& month)
  863. {
  864.     if ((month < 1) || (month > 12))
  865.     {
  866.         month = 1;
  867.         return 1;
  868.     }
  869.     else
  870.         return 0;
  871. }
  872.  
  873. int verifyYear(int& year)
  874. {
  875.     if ((year < 1900) || (year > 2000))
  876.     {
  877.         year = 1900;
  878.         return 1;
  879.     }
  880.     else
  881.         return 0;
  882. }
  883.  
  884. int verifyDepartment(string& department)
  885. {
  886.     ifstream in(DEPARTMENTS_FILE, ios::in);
  887.     if (!in.is_open())
  888.     {
  889.         cout << FILE_OPEN_ERROR;
  890.         createFile(DEPARTMENTS_FILE);
  891.     }
  892.     else
  893.     {
  894.         string temp_line;
  895.             while (!in.eof())
  896.             {
  897.                 getline(in, temp_line);
  898.                 if (department == temp_line)
  899.                 {
  900.                     in.close();
  901.                     return 0;
  902.                 }
  903.             }
  904.     }
  905.     department = LINE_UNKNOWN;
  906.     in.close();
  907.     return 1;
  908. }
  909.  
  910. int verifyPost(string& post)
  911. {
  912.     ifstream in(POSTS_FILE, ios::in);
  913.     if (!in.is_open())
  914.     {
  915.         cout << FILE_OPEN_ERROR;
  916.         createFile(POSTS_FILE);
  917.     }
  918.     else
  919.     {
  920.         string temp_line;
  921.         while (!in.eof())
  922.         {
  923.             getline(in, temp_line);
  924.             if (post == temp_line)
  925.             {
  926.                 in.close();
  927.                 return 0;
  928.             }
  929.         }
  930.     }
  931.     post = LINE_UNKNOWN;
  932.     in.close();
  933.     return 1;
  934. }
  935.  
  936. void showEditMessage()
  937. {
  938.     cout << SEPARATOR << FOR_EDIT_MESSAGE;
  939. }
  940.  
  941. void verifyZero(int number)
  942. {
  943.     if (number < 10)
  944.     {
  945.         cout << "0";
  946.     }
  947. }
  948.  
  949. int verifyReadInt(string temp)
  950. {
  951.     for (int i = 0; i < temp.length(); i++)
  952.     {
  953.         if ((temp[i] < 48) || (temp[i]>57))
  954.         {
  955.             temp.erase(i, 1);
  956.         }
  957.     }
  958.     if (temp.length() == 0)
  959.     {
  960.         temp = "1";
  961.     }
  962.     return stoi(temp);
  963. }
  964.  
  965. int learnLongestLine(vector<struct worker>& work_vector)
  966. {
  967.     int max_line_size = LINE_UNKNOWN.length();
  968.     for (int i = 0; i < work_vector.size(); i++)
  969.     {
  970.         if (max_line_size < work_vector[i].tname.full_name.length())
  971.         {
  972.             max_line_size = work_vector[i].tname.full_name.length();
  973.         }
  974.     }
  975.     return max_line_size;
  976. }
  977.  
  978. int learnLongestLine(string file_name)
  979. {
  980.     ifstream in(file_name, ios::in);
  981.     if (!in.is_open())
  982.     {
  983.         cout << FILE_OPEN_ERROR;
  984.         createFile(file_name);
  985.     }
  986.     else
  987.     {
  988.         int max_line_size = LINE_UNKNOWN.length();
  989.         string temp_line;
  990.         while (!in.eof())
  991.         {
  992.             getline(in, temp_line);
  993.             if (max_line_size < temp_line.length())
  994.             {
  995.                 max_line_size = temp_line.length();
  996.             }
  997.         }
  998.        
  999.         in.close();
  1000.         return max_line_size;
  1001.     }
  1002. }
  1003.  
  1004.  
  1005. string cipherUser(user temp_user)
  1006. {
  1007.     if (temp_user.login.length() < 10)
  1008.     {
  1009.         while (temp_user.login.length() < 10)
  1010.             temp_user.login += ',';
  1011.     }
  1012.     if (temp_user.password.length() < 16)
  1013.     {
  1014.         while (temp_user.login.length() < 16)
  1015.             temp_user.login += '\'';
  1016.     }
  1017.  
  1018.     string cipher_string;
  1019.     cipher_string = temp_user.login + "..." + temp_user.password + SALT + (char)(temp_user.role + temp_user.login[1]);
  1020.  
  1021.     for (int i = 0; i < cipher_string.length(); i++)
  1022.     {
  1023.         switch (cipher_string[i] % 5)
  1024.         {
  1025.             case 0:
  1026.             {
  1027.                 cipher_string[i] += 3;
  1028.                 break;
  1029.             }
  1030.             case 1:
  1031.             {
  1032.                 cipher_string[i] += 5;
  1033.                 break;
  1034.             }
  1035.             case 2:
  1036.             {
  1037.                 cipher_string[i] += 2;
  1038.                 break;
  1039.             }
  1040.             case 3:
  1041.             {
  1042.                 cipher_string[i] += 1;
  1043.                 break;
  1044.             }
  1045.             case 4:
  1046.             {
  1047.                 cipher_string[i] += 4;
  1048.                 break;
  1049.             }
  1050.         }
  1051.         cipher_string[i] -= 1;
  1052.     }
  1053.     return cipher_string;
  1054. }
  1055.  
  1056.  
  1057.  
  1058. void registrUser(vector<struct user>& work_vector)
  1059. {
  1060.     ofstream out(NEW_USERS_FILE, ios::app);
  1061.     if (!out.is_open())
  1062.     {
  1063.         cout << FILE_OPEN_ERROR;
  1064.         createFile(NEW_USERS_FILE);
  1065.     }
  1066.     else
  1067.     {
  1068.         out << registrLogin(work_vector) << ' ' << inputPassword() << endl;
  1069.     }
  1070.  
  1071.     out.close();
  1072. }
  1073. //прописать возврат в главное меню
  1074. string registrLogin(vector<struct user>& work_vector)
  1075. {
  1076.     bool flag = false;
  1077.     while (!flag)
  1078.     {
  1079.         cout << "\nДля выхода в главное меню нажмите \"0\": \n Для продолжения - любую другую клавишу: \n";
  1080.         int check_out;
  1081.         cin >> check_out;
  1082.         cout << endl;
  1083.         if (!check_out)
  1084.         {
  1085.             return 0;
  1086.         }
  1087.         else
  1088.         {
  1089.             flag = true;
  1090.  
  1091.             cout << INPUT_LOGIN;
  1092.             string login;
  1093.             cin >> login;
  1094.  
  1095.             if ((login.length() >= 6) || (login.length() <= 10))
  1096.             {
  1097.                 bool symbols_flag = true;
  1098.                 int i = 0;
  1099.                 while ((flag) && (i < login.length()))
  1100.                 {
  1101.                     if ((login[i] == 95) || ((login[i]>47) && (login[i] < 58)) || ((login[i]>64) && (login[i] < 91)) || ((login[i]>96) && (login[i] < 123)))
  1102.                     {
  1103.                         i++;
  1104.                         continue;
  1105.                     }
  1106.                     symbols_flag = false;
  1107.                 }
  1108.             }
  1109.             if (isOriginalLogin(login, work_vector))
  1110.             {
  1111.                 return login;
  1112.             }
  1113.         }
  1114.     }
  1115. }
  1116. //разбить на функции
  1117. string inputPassword()
  1118. {
  1119.     cout << INPUT_PASSWORD;
  1120.     string pass;
  1121.     cin >> pass;
  1122.  
  1123.     if ((pass.length() >= 8) || (pass.length() <= 16))
  1124.     {
  1125.         bool flag = true;
  1126.         int i = 0;
  1127.         while ((flag) && (i < pass.length()))
  1128.         {
  1129.             if ((pass[i] == 95) || ((pass[i]>47) && (pass[i] < 58)) || ((pass[i]>64) && (pass[i] < 91)) || ((pass[i]>96) && (pass[i] < 123)))
  1130.             {
  1131.                 i++;
  1132.                 continue;
  1133.             }
  1134.             flag = false;
  1135.         }
  1136.         if (flag)
  1137.         {
  1138.             return pass;
  1139.         }
  1140.     }
  1141.     cout << FOR_PASSWORD << HELP_LINE;
  1142.     inputPassword();
  1143. }
  1144. //разбить на функции
  1145. bool isOriginalLogin(string login, vector<struct user>& work_vector)
  1146. {
  1147.     for (int i = 0; i < work_vector.size(); i++)
  1148.     {
  1149.         if (login == work_vector[i].login)
  1150.         {
  1151.             return false;
  1152.         }
  1153.     }
  1154.     return true;
  1155. }
  1156.  
  1157. void logInAccount(vector<struct user>& work_vector, bool& main_menu_flag)
  1158. {
  1159.     bool flag = false;
  1160.     while (!flag)
  1161.     {
  1162.         string login = inputLogin(work_vector);
  1163.         string password = inputPassword();
  1164.         if (login == "0")
  1165.         {
  1166.             return;
  1167.         }
  1168.         else if (!isTruePassword(login, password, work_vector))
  1169.         {
  1170.             cout << SEPARATOR << "\nЗдравствуйте, " << login << "!\n\n";
  1171.             chooseUserMenu(main_menu_flag);
  1172.             flag = true;
  1173.         }
  1174.         else
  1175.         {
  1176.             cout << "\n\nНеверный логин или пароль. Попробуйте еще раз.\n\n";
  1177.         }
  1178.     }
  1179. }
  1180.  
  1181. string inputLogin(vector<struct user>& work_vector)
  1182. {
  1183.     bool flag = false;
  1184.     while (!flag)
  1185.     {
  1186.         cout << "\nДля выхода в главное меню нажмите \"0\": \nДля продолжения - любую другую клавишу: \n";
  1187.         char check_out;
  1188.         cin >> check_out;
  1189.         cout << endl;
  1190.         if (check_out =='0')
  1191.         {
  1192.             return "0";
  1193.         }
  1194.         else
  1195.         {
  1196.             flag = true;
  1197.  
  1198.             cout << INPUT_LOGIN;
  1199.             string login;
  1200.             cin >> login;
  1201.  
  1202.             if ((login.length() >= 6) || (login.length() <= 10))
  1203.             {
  1204.                 bool symbols_flag = true;
  1205.                 int i = 0;
  1206.                 while ((flag) && (i < login.length()))
  1207.                 {
  1208.                     if ((login[i] == 95) || ((login[i]>47) && (login[i] < 58)) || ((login[i]>64) && (login[i] < 91)) || ((login[i]>96) && (login[i] < 123)))
  1209.                     {
  1210.                         i++;
  1211.                         continue;
  1212.                     }
  1213.                     symbols_flag = false;
  1214.                 }
  1215.  
  1216.                 if (!isOriginalLogin(login, work_vector))
  1217.                 {
  1218.                     return login;
  1219.                 }
  1220.             }
  1221.         }
  1222.     }
  1223. }
  1224.  
  1225. bool isTruePassword(string login, string password, vector<struct user>& work_vector)
  1226. {
  1227.     for (int i = 0; i < work_vector.size(); i++)
  1228.     {
  1229.         if ((password == work_vector[i].password) && (login == work_vector[i].login))
  1230.         {
  1231.             return false;
  1232.         }
  1233.     }
  1234.     return true;
  1235. }
  1236.  
  1237.  
  1238. void sortAlfabet(vector<struct worker>& work_vector)
  1239. {
  1240.     cout << "\nВведите искомое сочетание букв: \n";
  1241.     string temp_search;
  1242.     getline(cin, temp_search);
  1243.  
  1244.     vector<struct worker> sort_vector;
  1245.     for (int i = 0; i < work_vector.size(); i++)
  1246.     {
  1247.         if (work_vector[i].tname.full_name.find(temp_search) != string::npos)
  1248.         {
  1249.             sort_vector.push_back(work_vector[i]);
  1250.         }
  1251.     }
  1252.  
  1253.     showDataFile(sort_vector);
  1254. }
  1255.  
  1256. void sortDepartment(vector<struct worker>& work_vector)
  1257. {
  1258.     cout << "\nВведите искомое сочетание букв: \n";
  1259.     string temp_search;
  1260.     getline(cin, temp_search);
  1261.  
  1262.     vector<struct worker> sort_vector;
  1263.     for (int i = 0; i < work_vector.size(); i++)
  1264.     {
  1265.         if (work_vector[i].work.department.find(temp_search) != string::npos)
  1266.         {
  1267.             sort_vector.push_back(work_vector[i]);
  1268.         }
  1269.     }
  1270.  
  1271.     showDataFile(sort_vector);
  1272. }
  1273.  
  1274. void sortPost(vector<struct worker>& work_vector)
  1275. {
  1276.     cout << "\nВведите искомое сочетание букв: \n";
  1277.     string temp_search;
  1278.     getline(cin, temp_search);
  1279.  
  1280.     vector<struct worker> sort_vector;
  1281.     for (int i = 0; i < work_vector.size(); i++)
  1282.     {
  1283.         if (work_vector[i].work.post.find(temp_search) != string::npos)
  1284.         {
  1285.             sort_vector.push_back(work_vector[i]);
  1286.         }
  1287.     }
  1288.  
  1289.     showDataFile(sort_vector);
  1290. }
  1291.  
  1292.  
  1293. bool isExit()
  1294. {
  1295.     cout << SEPARATOR << FOR_EXIT << LINE_TRUE << LINE_FALSE;
  1296.  
  1297.     bool flag = true;
  1298.     if (chooseItem(2) == '1')
  1299.     {
  1300.         flag = false;
  1301.     }
  1302.    
  1303.     return flag;
  1304. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement