Guest User

structs

a guest
Oct 20th, 2015
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.55 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <locale>
  4. #include <fstream>
  5. #include <algorithm>
  6. using namespace std;
  7. struct Student
  8. {
  9.     string lastName;
  10.     string firstName;
  11.     string middleName;
  12.     int numbRecordBook;
  13.     int birthYear;
  14.     double averageScore;
  15.     string scholarship;
  16. };
  17. bool comp1(const Student& a, const Student& b){
  18.     return a.lastName < b.lastName;
  19. }
  20. bool comp2(const Student& a, const Student& b){
  21.     return a.firstName < b.firstName;
  22. }
  23. bool comp3(const Student& a, const Student& b){
  24.     return a.middleName < b.middleName;
  25. }
  26. bool comp4(const Student& a, const Student& b){
  27.     return a.numbRecordBook < b.numbRecordBook;
  28. }
  29. bool comp5(const Student& a, const Student& b){
  30.     return a.birthYear < b.birthYear;
  31. }
  32. bool comp6(const Student& a, const Student& b){
  33.     return a.averageScore < b.averageScore;
  34. }
  35. bool comp7(const Student& a, const Student& b){
  36.     return a.scholarship < b.scholarship;
  37. }
  38. void studIn(vector<Student>& v)
  39. {
  40.     char ch;
  41.     do {
  42.         Student st;
  43.         cout << "Введите фамилию студента: "; cin >> st.lastName;
  44.         cout << "Введите имя студента: "; cin >> st.firstName;
  45.         cout << "Введите отчество студента: "; cin >> st.middleName;
  46.         cout << "Введите номер зачетной книжки: "; cin >> st.numbRecordBook;
  47.         cout << "Введите год рождения: "; cin >> st.birthYear;
  48.         cout << "Введите среднюю оценку: "; cin >> st.averageScore;
  49.         if (st.averageScore < 4) st.scholarship = "--//--";
  50.         if (st.averageScore >= 4 && st.averageScore < 4.5) st.scholarship = "usual";
  51.         if (st.averageScore >= 4.5 && st.averageScore < 5) st.scholarship = "+50%";
  52.         if (st.averageScore == 5) st.scholarship = "+100%";
  53.         v.push_back(st);
  54.         cout << "Хотите продолжить? y/n\n";
  55.         do {
  56.             cin >> ch;
  57.             if (ch != 'y' && ch != 'n') {
  58.                 cout << "Неправильный ввод.\nПопробуйте снова.\n";
  59.             }
  60.         }
  61.         while (ch != 'y' && ch != 'n');
  62.         cout << "\n";
  63.     }
  64.     while (ch != 'n');
  65. }
  66. void studOut(vector<Student>& v)
  67. {
  68.     if(v.size() > 0) {
  69.         cout << "Выберите поле для сортировки:\n"
  70.             << "1 - Фамилия.\n"
  71.             << "2 - Имя.\n"
  72.             << "3 - Отчество.\n"
  73.             << "4 - Номер зачетной книжки.\n"
  74.             << "5 - Год рождения.\n"
  75.             << "6 - Средняя оценка.\n"
  76.             << "7 - Размер стипендии.\n";
  77.         char ch;
  78.         cin >> ch;
  79.         switch (ch) {
  80.             case '1': sort(v.begin(), v.end(), comp1); break;
  81.             case '2': sort(v.begin(), v.end(), comp2); break;
  82.             case '3': sort(v.begin(), v.end(), comp3); break;
  83.             case '4': sort(v.begin(), v.end(), comp4); break;
  84.             case '5': sort(v.begin(), v.end(), comp5); break;
  85.             case '6': sort(v.begin(), v.end(), comp6); break;
  86.             case '7': sort(v.begin(), v.end(), comp7); break;
  87.             default : cout << "Неправильный ввод.\n"; return;
  88.         }
  89.         for (int i = 0; i < v.size(); i++) {
  90.             cout << i+1 << ")"
  91.                 << "\nФамилия: "<< v[i].lastName
  92.                 << "\nИмя: " << v[i].firstName
  93.                 << "\nОтчество: " << v[i].middleName
  94.                 << "\nНомер зачетной книжки: " << v[i].numbRecordBook
  95.                 << "\nГод рождения: " << v[i].birthYear
  96.                 << "\nСредняя оценка: " << v[i].averageScore
  97.                 << "\nРазмер стипендии: " << v[i].scholarship << "\n";
  98.         }
  99.     }
  100.     else {
  101.         cout << "Нет студентов для вывода\n";
  102.     }
  103. }
  104. void studDel(vector<Student>& v)
  105. {
  106.     if(v.size() > 0) {
  107.         int n;
  108.         char ch;
  109.         cout << "Введите номер студента для удаления: ";
  110.         cin >> n;
  111.         if (n < 1 || n > v.size()) {
  112.             cout << "Студента с таким номером нет.";
  113.         }
  114.         else {
  115.             cout << "Удалить студента <" << v[n-1].lastName << " " << v[n-1].firstName << " " << v[n-1].middleName << "> (y/n)?\n";
  116.             do {
  117.                 cin >> ch;
  118.                 if (ch != 'y' && ch != 'n') cout << "Неправильный ввод.\nПопробуйте снова: ";
  119.             }
  120.             while (ch != 'y' && ch != 'n');
  121.             if (ch == 'y') v.erase(v.begin() + n - 1);
  122.         }
  123.         cout << "\n";
  124.     }
  125.     else {
  126.         cout << "Нет студентов для удаления\n";
  127.     }
  128. }
  129. void studInFile(vector<Student>& v)
  130. {
  131.     char ch[150];
  132.     cout << "Введите директорию файла для чтения: ";
  133.     cin >> ch;
  134.     ifstream fin(ch);
  135.     if (!fin.is_open()) {
  136.         cout << "Не удалось открыть файл для чтения.\n";
  137.         return;
  138.     }
  139.     while (!fin.eof()) {
  140.         Student t;
  141.         fin >> t.lastName >> t.firstName >> t.middleName;
  142.         fin >> t.numbRecordBook >> t.birthYear >> t.averageScore;
  143.         if (t.averageScore < 4) t.scholarship = "--//--";
  144.         if (t.averageScore >= 4 && t.averageScore < 4.5) t.scholarship = "usual";
  145.         if (t.averageScore >= 4.5 && t.averageScore < 5) t.scholarship = "+50%";
  146.         if (t.averageScore == 5) t.scholarship = "+100%";
  147.         v.push_back(t);
  148.     }
  149.     fin.close();
  150. }
  151. void studOutFile(vector<Student>& v)
  152. {
  153.     if(v.size() > 0) {
  154.         char ch[150];
  155.         cout << "Введите директорию файла для записи: ";
  156.         cin >> ch;
  157.         ofstream fout(ch);
  158.         if (!fout.is_open()) {
  159.             cout << "Не удалось открыть файл для записи.\n";
  160.             return;
  161.         }
  162.         for (int i = 0; i < v.size(); i++) {
  163.             fout << i+1 << ")"
  164.                 << "\nФамилия: "<< v[i].lastName
  165.                 << "\nИмя: " << v[i].firstName
  166.                 << "\nОтчество: " << v[i].middleName
  167.                 << "\nНомер зачетной книжки: " << v[i].numbRecordBook
  168.                 << "\nГод рождения: " << v[i].birthYear
  169.                 << "\nСредняя оценка: " << v[i].averageScore
  170.                 << "\nРазмер стипендии: " << v[i].scholarship << "\n";
  171.         }
  172.         fout.close();
  173.     }
  174.     else {
  175.         cout << "Нет студентов для записи в файл\n";
  176.     }
  177. }
  178. int main()
  179. {
  180.     setlocale(LC_ALL, "Russian");
  181.     vector<Student> v;
  182.     while (true) {
  183.         cout << "Меню пользователя:\n1. Ввод.\n2. Вывод.\n3. Удаление.\n4. Чтение из файла.\n5. Запись в файл.\n6. Выход.\n";
  184.         char menu;
  185.         cin >> menu;
  186.         switch (menu) {
  187.             case '1': studIn(v);
  188.                     break;
  189.             case '2': studOut(v);
  190.                     break;
  191.             case '3': studDel(v);
  192.                     break;
  193.             case '4': studInFile(v);
  194.                     break;
  195.             case '5': studOutFile(v);
  196.                     break;
  197.             case '6': return 0;
  198.             default: cout << "Неправильный ввод.\nПопробуйте снова.\n";
  199.                      break;
  200.         }
  201.         cout << '\n';
  202.     }
  203. }
Advertisement
Add Comment
Please, Sign In to add comment