wohyperion

Course prj. Lab 5

Apr 11th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <fstream>
  4. #include <list>
  5. #include <cstring>
  6.  
  7. using namespace std;
  8.  
  9. #define CHAR_LEN 255
  10.  
  11. // Структура - пользователь
  12. typedef struct user
  13. {
  14.     int id,
  15.         status;
  16.     char name[CHAR_LEN],
  17.         password[CHAR_LEN];
  18. } user_t;
  19.  
  20. int main()
  21. {
  22.     //Устанавливаем кодировку ввода-вывода для корректного отображения кириллицы
  23.     system("chcp 1251");
  24.  
  25.     int userCount;
  26.     cout << "Какое количество пользователей вы хотите добавить в систему: ";
  27.     cin >> userCount;
  28.     user_t tempUser;
  29.     list<user_t> userList;
  30.  
  31.     //Ввод данных
  32.     cout << "ВВОД ДАННЫХ" << endl;
  33.     for (int i = 0; i < userCount; i++)
  34.     {
  35.         //Заполняем поля временного объекта структуры
  36.         while (true)
  37.         {
  38.             cout << "ID:     ";
  39.             cin >> tempUser.id;
  40.             cin.clear();
  41.             if ((cin.get() != '\n') || (tempUser.id < 0))
  42.             {
  43.                 cout << "  ID может быть только целым неотрицательным числом!\n";
  44.             }
  45.             else
  46.                 break;
  47.         }
  48.         while (true)
  49.         {
  50.             cout << "Статус: ";
  51.             cin >> tempUser.status;
  52.             cin.clear();
  53.             if ((cin.get() != '\n') || tempUser.status >= 3 || tempUser.status < 0)
  54.             {
  55.                 cout << "Статус может быть задан только 0, 1 или 2!\n";
  56.             }
  57.             else
  58.                 break;
  59.         }
  60.         cout << "Логин:  ";
  61.         cin >> tempUser.name;
  62.         cout << "Пароль: ";
  63.         cin >> tempUser.password;
  64.         cout << "\n";
  65.         //Записываем временный объект в связный список
  66.         userList.push_back(tempUser);
  67.     }
  68.  
  69.     //Вывод введенных на консоль данных
  70.     cout << "ВВЕДЕННЫЕ ДАННЫЕ" << endl;
  71.     for (list<user_t>::iterator it = userList.begin(); it != userList.end(); ++it)
  72.         cout << "ID:     " << it->id << '\n'
  73.         << "Статус: " << it->status << "\n"
  74.         << "Логин:  " << it->name << '\n'
  75.         << "Пароль: " << it->password << '\n'
  76.         << "----------" << endl;
  77.  
  78.     // Запись данных из связного списка в двоичный файл
  79.     ofstream output_file("users.dat", ios::binary);
  80.     for (list<user_t>::iterator it = userList.begin(); it != userList.end(); ++it)
  81.     {
  82.         output_file.write((char*)&it->id, sizeof(it->id));
  83.         output_file.write((char*)&it->status, sizeof(it->status));
  84.         output_file.write((char*)&it->name, sizeof(it->name));
  85.         output_file.write((char*)&it->password, sizeof(it->password));
  86.  
  87.     }
  88.     output_file.close();
  89.  
  90.     // Чтение из двоичного файла в связный список
  91.     user_t readUser;
  92.     list<user_t> readUserList;
  93.     ifstream input_file("users.dat", ios::binary);
  94.     while (true)
  95.     {
  96.         input_file.read((char*)&readUser.id, sizeof(readUser.id));
  97.         input_file.read((char*)&readUser.status, sizeof(readUser.status));
  98.         input_file.read((char*)&readUser.name, sizeof(readUser.name));
  99.         input_file.read((char*)&readUser.password, sizeof(readUser.password));
  100.         if (input_file.eof())
  101.             break;
  102.         readUserList.push_back(readUser);
  103.     }
  104.     input_file.close();
  105.  
  106.     // Вывод данных считанных из файла
  107.     cout << "\nДАННЫЕ ИЗ ФАЙЛА" << endl;
  108.     for (list<user_t>::iterator it = readUserList.begin(); it != readUserList.end(); ++it)
  109.         cout << "ID:     " << it->id << '\n'
  110.         << "Статус: " << it->status << "\n"
  111.         << "Логин:  " << it->name << '\n'
  112.         << "Пароль: " << it->password << '\n'
  113.         << "----------" << endl;
  114.  
  115.     // Удаление элемента по ID
  116.     int temp;
  117.     cout << "\nВведите ID элемента, который вы хотите удалить: ";
  118.     cin >> temp;
  119.     for (list<user_t>::iterator it = readUserList.begin(); it != readUserList.end(); ++it)
  120.     {
  121.         if (it->id == temp)
  122.         {
  123.             readUserList.erase(it);
  124.             break;
  125.         }
  126.     }
  127.     cout << "\nИТОГОВЫЙ СПИСОК" << endl;
  128.     for (list<user_t>::iterator it = readUserList.begin(); it != readUserList.end(); ++it)
  129.         cout << "ID:     " << it->id << '\n'
  130.         << "Статус: " << it->status << "\n"
  131.         << "Логин:  " << it->name << '\n'
  132.         << "Пароль: " << it->password << '\n'
  133.         << "----------" << endl;
  134.  
  135.     // Удаление элемента по имени
  136.     char buff1[CHAR_LEN];
  137.     cout << "\nВведите имя элемента, который вы хотите удалить: ";
  138.     cin >> buff1;
  139.     for (list<user_t>::iterator it = readUserList.begin(); it != readUserList.end(); ++it)
  140.     {
  141.         if (strcmp(it->name, buff1) == 0)
  142.         {
  143.             readUserList.erase(it);
  144.             break;
  145.         }
  146.     }
  147.     cout << "\nИТОГОВЫЙ СПИСОК" << endl;
  148.     for (list<user_t>::iterator it = readUserList.begin(); it != readUserList.end(); ++it)
  149.         cout << "ID:     " << it->id << '\n'
  150.         << "Статус: " << it->status << "\n"
  151.         << "Логин:  " << it->name << '\n'
  152.         << "Пароль: " << it->password << '\n'
  153.         << "----------" << endl;
  154.  
  155.     system("pause");
  156.     return 0;
  157. }
Advertisement
Add Comment
Please, Sign In to add comment