Advertisement
Guest User

Курсач

a guest
Jan 31st, 2018
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 21.95 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\n" };
  17. const int COUNTER_USER_MENU = 6;
  18. const string LINES_ADMIN_MENU[] = { "\n\n\n------------Меню администратора--------------\n\n","1 - Учетные записи\n","2 - Файлы\n","3 - Данные\n","4 - Пользовательский модуль\n","5 - Выйти из программы\n","6 - Вернуться в главное меню\n\n" };
  19. const int COUNTER_ADMIN_MENU = 6;
  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\n" };
  25. const int COUNTER_DATA_MENU = 5;
  26.  
  27. const string FOR_EDIT_MESSAGE = "Некоторые данные были некорректнs.\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___________________________________\n\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&);
  68.  
  69. void showFileMenu();
  70. void chooseFileMenu();
  71.  
  72. void showAccountMenu();
  73. void chooseAccountMenu();
  74.  
  75. void showDataMenu();
  76. void chooseDataMenu();
  77. //-----------------------------------
  78. void inspectFile(string);
  79. void createFile(string);
  80. int countLines(string);
  81. //-----------------------------------
  82. void readFile(vector<struct worker>&);
  83. void showFile(vector<struct worker>&);
  84. void writeFile(vector<struct worker>&);
  85. //-----------------------------------
  86. void readFile(vector<struct user>&);
  87. void showFile(vector<struct user>&);
  88. void writeFile(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. struct user unscrambleUser(string);
  108. //-----------------------------------
  109. void registrUser();
  110. string inputLogin();
  111. string inputPassword();
  112. //-----------------------------------
  113. bool isExit();
  114.  
  115. struct worker
  116. {
  117.     struct tname
  118.     {
  119.         string surname, name, patronum, full_name;
  120.     } tname;
  121.     struct birth
  122.     {
  123.         int day, month, year;
  124.     } birth;
  125.     struct work
  126.     {
  127.         struct begin
  128.         {
  129.             int day, month, year;
  130.         } begin;
  131.         string department, post;
  132.     } work;
  133. };
  134.  
  135. struct user
  136. {
  137.     string login, password;
  138.     bool role;
  139. };
  140.  
  141. int main()
  142. {
  143.     installRusSupport();
  144.     chooseMainMenu();
  145.  
  146.     system("pause");
  147.     return 0;
  148. }
  149.  
  150. char chooseItem(int count_menu)
  151. {
  152.     cout << "Вы выбираете пункт: ";
  153.     string choice;
  154.     cin >> choice;
  155.     cout << "\n";
  156.  
  157.     if (choice.length() == 1)
  158.     {
  159.         return choice[0];
  160.     }
  161.     else
  162.     {
  163.         return (char)(count_menu + 48);
  164.     }
  165.  
  166. }
  167.  
  168. void installRusSupport()
  169. {
  170.     SetConsoleCP(1251);
  171.     SetConsoleOutputCP(1251);
  172. }
  173.  
  174. void activateHackerRegime()
  175. {
  176.     cout << SEPARATOR << FOR_CHOOSE_HACKER_REGIME<<LINE_TRUE<<LINE_FALSE;
  177.  
  178.     if (chooseItem(2) == '1')
  179.     {
  180.         system(COLOR_HACKER.c_str());
  181.         cout << ABOUT_HACKER_REGIME;
  182.     }
  183.     else
  184.     {
  185.         system(COLOR_ADMIN.c_str());
  186.     }
  187. }
  188.  
  189. void showMainMenu()
  190. {
  191.     system(COLOR_MAIN.c_str());
  192.     for (int i = 0; i <= 5; i++)
  193.     {
  194.         cout << LINES_MAIN_MENU[i];
  195.     }
  196. }
  197.  
  198. void showGuestMenu()
  199. {
  200.     system(COLOR_GUEST.c_str());
  201.     for (int i = 0; i <= 5; i++)
  202.     {
  203.         cout << LINES_GUEST_MENU[i];
  204.     }
  205. }
  206.  
  207. void showUserMenu()
  208. {
  209.     system(COLOR_USER.c_str());
  210.     for (int i = 0; i <= 6; i++)
  211.     {
  212.         cout << LINES_USER_MENU[i];
  213.     }
  214. }
  215.  
  216. void showAdminMenu()
  217. {
  218.     for (int i = 0; i <= 6; i++)
  219.     {
  220.         cout << LINES_ADMIN_MENU[i];
  221.     }
  222. }
  223.  
  224. void showFileMenu()
  225. {
  226.     for (int i = 0; i <= 4; i++)
  227.     {
  228.         cout << LINES_FILE_MENU[i];
  229.     }
  230. }
  231.  
  232. void showAccountMenu()
  233. {
  234.     for (int i = 0; i <= 5; i++)
  235.     {
  236.         cout << LINES_ACCOUNT_MENU[i];
  237.     }
  238. }
  239.  
  240. void showDataMenu()
  241. {
  242.     for (int i = 0; i <= 5; i++)
  243.     {
  244.         cout << LINES_DATA_MENU[i];
  245.     }
  246. }
  247. //функции "добавить отдел" и "добавить должность"
  248. void chooseMainMenu()
  249. {
  250.     bool main_menu_flag0 = true;
  251.     bool& main_menu_flag = main_menu_flag0;
  252.     while (main_menu_flag == true)                            
  253.     {
  254.         showMainMenu();
  255.         switch (chooseItem(COUNTER_MAIN_MENU))
  256.         {
  257.         case '1':
  258.         {
  259.             //sign up
  260.             break;
  261.         }
  262.  
  263.         case '2':
  264.         {
  265.             chooseGuestMenu(main_menu_flag);
  266.             break;
  267.         }
  268.  
  269.         case '3':
  270.         {
  271.             chooseUserMenu(main_menu_flag);
  272.             break;
  273.         }
  274.  
  275.         case '4':
  276.         {
  277.             chooseAdminMenu(main_menu_flag);
  278.             break;
  279.         }
  280.  
  281.         case '5': default:
  282.         {
  283.             main_menu_flag = isExit();
  284.         }
  285.         }
  286.     }
  287. }
  288.  
  289. void chooseGuestMenu(bool& main_menu_flag)
  290. {
  291.     bool menu_flag = true;
  292.     while (menu_flag == true)                          
  293.     {
  294.         vector <struct workers> workers_data();
  295.  
  296.         showGuestMenu();
  297.         switch (chooseItem(COUNTER_GUEST_MENU))
  298.         {
  299.         case '1':
  300.         {
  301.             //show
  302.             break;
  303.         }
  304.  
  305.         case '2':
  306.         {
  307.             //sort
  308.             break;
  309.         }
  310.  
  311.         case '3':
  312.         {
  313.             //search
  314.             break;
  315.         }
  316.  
  317.         case '4':
  318.         {
  319.             main_menu_flag = menu_flag = isExit();
  320.             break;
  321.         }
  322.  
  323.         case '5': default:
  324.         {
  325.             menu_flag = isExit();
  326.         }
  327.         }
  328.     }
  329. }
  330.  
  331. void chooseUserMenu(bool& main_menu_flag)
  332. {
  333.     bool menu_flag = true;
  334.     while (menu_flag == true)                          
  335.     {
  336.         showUserMenu();
  337.         switch (chooseItem(COUNTER_USER_MENU))
  338.         {
  339.         case '1':
  340.         {
  341.             //show
  342.             break;
  343.         }
  344.  
  345.         case '2':
  346.         {
  347.             //sort
  348.             break;
  349.         }
  350.  
  351.         case '3':
  352.         {
  353.             //search
  354.             break;
  355.         }
  356.  
  357.         case '4':
  358.         {
  359.             //make task
  360.             break;
  361.         }
  362.  
  363.         case '5':
  364.         {
  365.             main_menu_flag = menu_flag = isExit();
  366.             break;
  367.         }
  368.  
  369.         case '6': default:
  370.         {
  371.             menu_flag = isExit();
  372.         }
  373.         }
  374.     }
  375. }
  376.  
  377. void chooseAdminMenu(bool& main_menu_flag)
  378. {
  379.     bool menu_flag = true;
  380.     while (menu_flag == true)                            
  381.     {
  382.         activateHackerRegime();
  383.         showAdminMenu();
  384.         switch (chooseItem(COUNTER_ADMIN_MENU))
  385.         {
  386.         case '1':
  387.         {
  388.             chooseFileMenu();
  389.             break;
  390.         }
  391.  
  392.         case '2':
  393.         {
  394.             chooseAccountMenu();
  395.             break;
  396.         }
  397.  
  398.         case '3':
  399.         {
  400.             chooseDataMenu();
  401.             break;
  402.         }
  403.  
  404.         case '4':
  405.         {
  406.             chooseUserMenu(main_menu_flag);
  407.             break;
  408.         }
  409.  
  410.         case '5':
  411.         {
  412.             main_menu_flag = menu_flag = isExit();
  413.             break;
  414.         }
  415.  
  416.         case '6': default:
  417.         {
  418.             menu_flag = isExit();
  419.         }
  420.         }
  421.     }
  422. }
  423.  
  424. void chooseFileMenu()
  425. {
  426.     bool menu_flag = true;
  427.     while (menu_flag == true)                            
  428.     {
  429.         showFileMenu();
  430.         switch (chooseItem(COUNTER_FILE_MENU))
  431.         {
  432.         case '1':
  433.         {
  434.             //create
  435.             break;
  436.         }
  437.  
  438.         case '2':
  439.         {
  440.             //delete
  441.             break;
  442.         }
  443.  
  444.         case '3':
  445.         {
  446.             //show
  447.             break;
  448.         }
  449.  
  450.         case '4': default:
  451.         {
  452.             menu_flag = isExit();
  453.         }
  454.         }
  455.     }
  456. }
  457.  
  458. void chooseAccountMenu()
  459. {
  460.     bool menu_flag = true;
  461.     while (menu_flag == true)                        
  462.     {
  463.         showAccountMenu();
  464.         switch (chooseItem(COUNTER_ACCOUNT_MENU))
  465.         {
  466.         case '1':
  467.         {
  468.             //show
  469.             break;
  470.         }
  471.  
  472.         case '2':
  473.         {
  474.             //add
  475.             break;
  476.         }
  477.  
  478.         case '3':
  479.         {
  480.             //edit
  481.             break;
  482.         }
  483.  
  484.         case '4':
  485.         {
  486.             //delete
  487.             break;
  488.         }
  489.  
  490.         case '5': default:
  491.         {
  492.             menu_flag = isExit();//exit
  493.         }
  494.         }
  495.     }
  496. }
  497.  
  498. void chooseDataMenu()
  499. {
  500.     bool menu_flag = true;
  501.     while (menu_flag == true)                            
  502.     {
  503.         showDataMenu();
  504.         switch (chooseItem(COUNTER_DATA_MENU))
  505.         {
  506.         case '1':
  507.         {
  508.             //delete
  509.             break;
  510.         }
  511.  
  512.         case '2':
  513.         {
  514.             //add
  515.             break;
  516.         }
  517.  
  518.         case '3':
  519.         {
  520.             //edit
  521.             break;
  522.         }
  523.  
  524.         case '4':
  525.         {
  526.             //delete
  527.             break;
  528.         }
  529.  
  530.         case '5': default:
  531.         {
  532.             menu_flag = isExit();
  533.         }
  534.         }
  535.     }
  536. }
  537.  
  538.  
  539.  
  540. void inspectFile(string file_name)
  541. {
  542.     ofstream out(file_name, ios::out);
  543.  
  544.     if (!out.is_open())
  545.     {
  546.         cout << FILE_OPEN_ERROR;
  547.         createFile(file_name);
  548.     }
  549.  
  550.     out.close();
  551. }
  552.  
  553. void createFile(string file_name)
  554. {
  555.     ofstream out(file_name, ios::out);
  556.  
  557.     if (!out.is_open())
  558.     {
  559.         cout << FILE_CREATE_ERROR;
  560.     }
  561.  
  562.     out.close();
  563. }
  564.  
  565. int countLines(string file_name)
  566. {
  567.     ifstream in(file_name, ios::in);
  568.  
  569.     if (!in.is_open())
  570.     {
  571.         cout << FILE_OPEN_ERROR;
  572.         createFile(file_name);
  573.     }
  574.  
  575.     int counter = 0;
  576.     string temp_line;
  577.     while (!in.eof())
  578.     {
  579.         getline(in, temp_line);
  580.         if (temp_line.length() != 0)
  581.         {
  582.             counter++;
  583.         }
  584.     }
  585.  
  586.     in.close();
  587.     return counter;
  588. }
  589.  
  590. void readFile(vector<struct worker>& work_vector)
  591. {
  592.     ifstream in(DATA_FILE, ios::in);
  593.  
  594.     if (!in.is_open())
  595.     {
  596.         cout << FILE_OPEN_ERROR;
  597.         createFile(DATA_FILE);
  598.     }
  599.  
  600.     struct worker temp_vector;
  601.     while (!in.eof())
  602.     {
  603.         getline(in, temp_vector.tname.surname, '.');
  604.         getline(in, temp_vector.tname.name, '.');
  605.         getline(in, temp_vector.tname.patronum, '.');
  606.  
  607.  
  608.         string temp;
  609.         getline(in, temp, '.');
  610.         temp_vector.birth.day = verifyReadInt(temp);
  611.  
  612.         getline(in, temp, '.');
  613.         temp_vector.birth.month = verifyReadInt(temp);
  614.  
  615.         getline(in, temp, '.');
  616.         temp_vector.birth.year = verifyReadInt(temp);
  617.  
  618.         getline(in, temp, '.');
  619.         temp_vector.work.begin.day = verifyReadInt(temp);
  620.  
  621.         getline(in, temp, '.');
  622.         temp_vector.work.begin.month = verifyReadInt(temp);
  623.  
  624.         getline(in, temp, '.');
  625.         temp_vector.work.begin.year = verifyReadInt(temp);
  626.  
  627.  
  628.  
  629.         getline(in, temp_vector.work.department, '.');
  630.         getline(in, temp_vector.work.post, '.');
  631.  
  632.         work_vector.push_back(temp_vector);
  633.     }
  634.  
  635.     in.close();
  636. }
  637.  
  638. void showFile(vector<struct worker>& work_vector)
  639.  
  640. {
  641.     cout << SEPARATOR;
  642.     int full_name_size, department_size, post_size;
  643.     full_name_size = learnLongestLine(work_vector);
  644.     department_size = learnLongestLine(DEPARTMENTS_FILE);
  645.     post_size = learnLongestLine(POSTS_FILE);
  646.  
  647.     for (int i = 0; i < work_vector.size(); i++)
  648.     {
  649.         work_vector[i].tname.full_name = work_vector[i].tname.surname + ' ' + work_vector[i].tname.name + ' ' + work_vector[i].tname.patronum;
  650.         verifyData(work_vector[i]);
  651.  
  652.         cout << i + 1 << '. | ' << setw(full_name_size) << left << work_vector[i].tname.full_name << ' | ';
  653.  
  654.         verifyZero(work_vector[i].birth.day);
  655.         cout << work_vector[i].birth.day << '.';
  656.  
  657.         verifyZero(work_vector[i].birth.month);
  658.         cout << work_vector[i].birth.month << '.' << work_vector[i].birth.year << ' | ';
  659.  
  660.         verifyZero(work_vector[i].work.begin.day);
  661.         cout << work_vector[i].work.begin.day << '.';
  662.        
  663.         verifyZero(work_vector[i].work.begin.month);
  664.         cout << work_vector[i].work.begin.month << '.' << work_vector[i].work.begin.year << ' | ';
  665.  
  666.         cout << setw(department_size) << left << work_vector[i].work.department << ' | ';
  667.         cout << setw(post_size) << left << work_vector[i].work.post << endl;
  668.     }
  669.     cout << endl;
  670. }
  671.  
  672. void writeFile(vector<struct worker>& work_vector)
  673. {
  674.     ofstream out(DATA_FILE, ios::out);
  675.  
  676.     if (!out.is_open())
  677.     {
  678.         cout << FILE_OPEN_ERROR;
  679.         createFile(DATA_FILE);
  680.     }
  681.  
  682.     for (int i = 0; i < work_vector.size(); i++)
  683.     {
  684.         out << work_vector[i].tname.surname <<'.'<< work_vector[i].tname.name <<'.'<< work_vector[i].tname.patronum<<'.';
  685.         out << work_vector[i].birth.day << '.' << work_vector[i].birth.month << '.' << work_vector[i].birth.year << '.';
  686.         out << work_vector[i].work.begin.day << '.' << work_vector[i].work.begin.month << '.' << work_vector[i].work.begin.year << '.';
  687.         out << work_vector[i].work.department << '.' << work_vector[i].work.post << '.' << endl;
  688.     }
  689.  
  690.     out.close();
  691. }
  692.  
  693. void readFile(vector<struct user>&)
  694. {
  695.  
  696. }
  697. //-
  698. void showFile(vector<struct user>&)
  699. {
  700.  
  701. }
  702. //-
  703. void writeFile(vector<struct user>&)
  704. {
  705.     ofstream out(ACCOUNTS_FILE, ios::out);
  706.  
  707.     if (!out.is_open())
  708.     {
  709.         cout << FILE_OPEN_ERROR;
  710.         createFile(ACCOUNTS_FILE);
  711.     }
  712.  
  713.     out.close();
  714. }
  715. //-
  716.  
  717. void verifyData(worker& temp_worker)
  718. {
  719.     string& full_name = temp_worker.tname.full_name;
  720.     int& birth_day = temp_worker.birth.day, &birth_month = temp_worker.birth.month, &birth_year = temp_worker.birth.year;
  721.     int& work_day = temp_worker.work.begin.day, &work_month= temp_worker.work.begin.month, &work_year = temp_worker.work.begin.year;
  722.     string& department = temp_worker.work.department;
  723.     string& post = temp_worker.work.post;
  724.    
  725.     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)
  726.     {
  727.         showEditMessage();
  728.     }
  729. }
  730.  
  731. int verifyFullName(string& full_name)
  732. {
  733.     bool flag = true;
  734.     for (int i = 0; i < full_name.length(); i++)
  735.     {
  736.         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))
  737.         {
  738.             continue;
  739.         }
  740.         full_name.erase(i, 1);
  741.         flag = false;
  742.     }
  743.     if (flag)
  744.         return 0;
  745.     else
  746.         return 1;
  747. }
  748.  
  749. int verifyDay(int& day, int month, int year)
  750. {
  751.     if (day > 0)
  752.     {
  753.         if ((month != 2) && (day < 31))
  754.             return 0;
  755.         else if (((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) && (day < 32))
  756.             return 0;  
  757.         else if ((month == 2) && (day < 29))
  758.             return 0;
  759.         else if ((month == 2) && (day < 29) && (((year % 100 != 0) && (year % 4 == 0))) || ((year % 100 == 0) && (year % 400 == 0)))
  760.             return 0;
  761.         else
  762.         {
  763.             day = 1;
  764.             return 1;
  765.         }
  766.     }
  767.     else
  768.     {
  769.         day = 1;
  770.         return 1;
  771.     }
  772. }
  773.  
  774. int verifyMonth(int& month)
  775. {
  776.     if ((month < 1) || (month > 12))
  777.     {
  778.         month = 1;
  779.         return 1;
  780.     }
  781.     else
  782.         return 0;
  783. }
  784.  
  785. int verifyYear(int& year)
  786. {
  787.     if ((year < 1900) || (year > 2000))
  788.     {
  789.         year = 1900;
  790.         return 1;
  791.     }
  792.     else
  793.         return 0;
  794. }
  795.  
  796. int verifyDepartment(string& department)
  797. {
  798.     ifstream in(DEPARTMENTS_FILE, ios::in);
  799.     if (!in.is_open())
  800.     {
  801.         cout << FILE_OPEN_ERROR;
  802.         createFile(DEPARTMENTS_FILE);
  803.     }
  804.     else
  805.     {
  806.         string temp_line;
  807.             while (!in.eof())
  808.             {
  809.                 getline(in, temp_line);
  810.                 if (department == temp_line)
  811.                 {
  812.                     in.close();
  813.                     return 0;
  814.                 }
  815.             }
  816.             department = LINE_UNKNOWN;
  817.             in.close();
  818.             return 1;
  819.     }
  820. }
  821.  
  822. int verifyPost(string& post)
  823. {
  824.     ifstream in(POSTS_FILE, ios::in);
  825.     if (!in.is_open())
  826.     {
  827.         cout << FILE_OPEN_ERROR;
  828.         createFile(POSTS_FILE);
  829.     }
  830.     else
  831.     {
  832.         string temp_line;
  833.         while (!in.eof())
  834.         {
  835.             getline(in, temp_line);
  836.             if (post == temp_line)
  837.             {
  838.                 in.close();
  839.                 return 0;
  840.             }
  841.         }
  842.         post = LINE_UNKNOWN;
  843.         in.close();
  844.         return 1;
  845.     }
  846. }
  847. //уточнить по возврату значения
  848. void showEditMessage()
  849. {
  850.     cout << SEPARATOR << FOR_EDIT_MESSAGE;
  851. }
  852.  
  853. void verifyZero(int number)
  854. {
  855.     if (number < 10)
  856.     {
  857.         cout << "0";
  858.     }
  859. }
  860.  
  861. int verifyReadInt(string temp)
  862. {
  863.     for (int i = 0; i < temp.length(); i++)
  864.     {
  865.         if ((temp[i] < 48) || (temp[i]>57))
  866.         {
  867.             temp.erase(i, 1);
  868.         }
  869.     }
  870.     if (temp.length() == 0)
  871.     {
  872.         temp = "1";
  873.     }
  874.     return stoi(temp);
  875. }
  876.  
  877. int learnLongestLine(vector<struct worker>& work_vector)
  878. {
  879.     int max_line_size = LINE_UNKNOWN.length();
  880.     for (int i = 0; i < work_vector.size(); i++)
  881.     {
  882.         if (max_line_size < work_vector[i].tname.full_name.length())
  883.         {
  884.             max_line_size = work_vector[i].tname.full_name.length();
  885.         }
  886.     }
  887.     return max_line_size;
  888. }
  889.  
  890. int learnLongestLine(string file_name)
  891. {
  892.     ifstream in(file_name, ios::in);
  893.     if (!in.is_open())
  894.     {
  895.         cout << FILE_OPEN_ERROR;
  896.         createFile(file_name);
  897.     }
  898.     else
  899.     {
  900.         int max_line_size = LINE_UNKNOWN.length();
  901.         string temp_line;
  902.         while (!in.eof())
  903.         {
  904.             getline(in, temp_line);
  905.             if (max_line_size < temp_line.length())
  906.             {
  907.                 max_line_size = temp_line.length();
  908.             }
  909.         }
  910.        
  911.         in.close();
  912.         return max_line_size;
  913.     }
  914. }
  915.  
  916.  
  917. string cipherUser(user temp_user)
  918. {
  919.     if (temp_user.login.length() < 10)
  920.     {
  921.         while (temp_user.login.length() < 10)
  922.             temp_user.login += ',';
  923.     }
  924.     if (temp_user.password.length() < 16)
  925.     {
  926.         while (temp_user.login.length() < 16)
  927.             temp_user.login += '\'';
  928.     }
  929.  
  930.     string cipher_string;
  931.     cipher_string = temp_user.login + "..." + temp_user.password + SALT + (char)(temp_user.role + temp_user.login[1]);
  932.  
  933.     for (int i = 0; i < cipher_string.length(); i++)
  934.     {
  935.         switch (cipher_string[i] % 5)
  936.         {
  937.             case 0:
  938.             {
  939.                 cipher_string[i] += 3;
  940.                 break;
  941.             }
  942.             case 1:
  943.             {
  944.                 cipher_string[i] += 5;
  945.                 break;
  946.             }
  947.             case 2:
  948.             {
  949.                 cipher_string[i] += 2;
  950.                 break;
  951.             }
  952.             case 3:
  953.             {
  954.                 cipher_string[i] += 1;
  955.                 break;
  956.             }
  957.             case 4:
  958.             {
  959.                 cipher_string[i] += 4;
  960.                 break;
  961.             }
  962.         }
  963.         cipher_string[i] -= 1;
  964.     }
  965.     return cipher_string;
  966. }
  967.  
  968. struct user unscrambleUser(string temp_line)
  969. {
  970.    
  971. }
  972. //-
  973.  
  974. void registrUser()
  975. {
  976.     ofstream out(NEW_USERS_FILE, ios::app);
  977.     if (!out.is_open())
  978.     {
  979.         cout << FILE_OPEN_ERROR;
  980.         createFile(NEW_USERS_FILE);
  981.     }
  982.     else
  983.     {
  984.         out << inputLogin() << ' ' << inputPassword() << endl;
  985.     }
  986.  
  987.     out.close();
  988. }
  989.  
  990. string inputLogin()
  991. {
  992.     cout << INPUT_LOGIN;
  993.     string login;
  994.     cin >> login;
  995.  
  996.     if ((login.length() >= 6) || (login.length() <= 10))
  997.     {
  998.         bool flag = true;
  999.         int i = 0;
  1000.         while ((flag) && (i < login.length()))
  1001.         {
  1002.             if ((login[i] == 95) || ((login[i]>47) && (login[i] < 58)) || ((login[i]>64) && (login[i] < 91)) || ((login[i]>96) && (login[i] < 123)))
  1003.             {
  1004.                 i++;
  1005.                 continue;
  1006.             }
  1007.             flag = false;
  1008.         }
  1009.         if (flag)
  1010.         {
  1011.             return login;
  1012.         }
  1013.     }
  1014.         cout << FOR_LOGIN << HELP_LINE;
  1015.         inputLogin();  
  1016. }
  1017. //разбить на функции
  1018. string inputPassword()
  1019. {
  1020.     cout << INPUT_PASSWORD;
  1021.     string pass;
  1022.     cin >> pass;
  1023.  
  1024.     if ((pass.length() >= 8) || (pass.length() <= 16))
  1025.     {
  1026.         bool flag = true;
  1027.         int i = 0;
  1028.         while ((flag) && (i < pass.length()))
  1029.         {
  1030.             if ((pass[i] == 95) || ((pass[i]>47) && (pass[i] < 58)) || ((pass[i]>64) && (pass[i] < 91)) || ((pass[i]>96) && (pass[i] < 123)))
  1031.             {
  1032.                 i++;
  1033.                 continue;
  1034.             }
  1035.             flag = false;
  1036.         }
  1037.         if (flag)
  1038.         {
  1039.             return pass;
  1040.         }
  1041.     }
  1042.     cout << FOR_PASSWORD << HELP_LINE;
  1043.     inputPassword();
  1044. }
  1045. //разбить на функции
  1046. bool isExit()
  1047. {
  1048.     cout << SEPARATOR << FOR_EXIT << LINE_TRUE << LINE_FALSE;
  1049.  
  1050.     bool flag = true;
  1051.     if (chooseItem(2) == '1')
  1052.     {
  1053.         flag = false;
  1054.     }
  1055.    
  1056.     return flag;
  1057. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement