Advertisement
silicogel

Untitled

Apr 5th, 2023
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <Windows.h>
  3. #include <io.h>
  4.  
  5. using namespace std;
  6.  
  7. const int m = 5; // Количество предметов
  8. const int n = 30; // Максимальное количество студентов в группе
  9.  
  10. typedef struct {
  11. char fio[50];
  12. int group;
  13. float marks[m];
  14. } Student;
  15.  
  16. int main();
  17. void data_entry();
  18. void stats();
  19.  
  20. void sort_students(Student students[], int len) {
  21. Student temp;
  22. int min_indx;
  23.  
  24. for (int i = 0; i < len; i++) {
  25. min_indx = i;
  26. for (int j = i + 1; j < len; j++) {
  27. if (strcmp(students[j].fio, students[min_indx].fio) < 0) {
  28. min_indx = j;
  29. }
  30. }
  31.  
  32. temp = students[min_indx];
  33. students[min_indx] = students[i];
  34. students[i] = temp;
  35. }
  36. }
  37.  
  38. int save_group(Student group[], int len) {
  39. FILE* output_file;
  40. fopen_s(&output_file, "students.bin", "wb");
  41. if (output_file) {
  42. fwrite(group, sizeof(Student), len, output_file);
  43. fclose(output_file);
  44. return 1;
  45. }
  46. else {
  47. return 0;
  48. }
  49. }
  50.  
  51. int read_group(Student students[]) {
  52. FILE* input_file;
  53.  
  54.  
  55. fopen_s(&input_file, "students.bin", "rb");
  56. if (input_file) {
  57. int len = _filelength(_fileno(input_file)) / sizeof(Student);
  58. fread(students, sizeof(Student), len, input_file);
  59. fclose(input_file);
  60. return len;
  61. }
  62. else {
  63. return -1;
  64. }
  65. }
  66.  
  67. void create_student() {
  68. system("cls");
  69.  
  70.  
  71. printf("[Создание нового студента]\n\n");
  72. int group_number;
  73.  
  74. while (1) {
  75. printf("Введите номер группы для нового студента (0 - выйти): ");
  76. if (scanf_s("%d", &group_number) != 1) {
  77. while (getchar() != '\n');
  78. printf("Ошибка: введите корректное значение\n");
  79. continue;
  80. }
  81. else break;
  82. }
  83.  
  84. if (group_number == 0) {
  85. system("cls");
  86. printf("[Ввод данных]\n\n1 - Добавить нового студента\n0 - Вернуться назад\n\n");
  87. return;
  88. }
  89.  
  90. while (getchar() != '\n');
  91.  
  92. FILE* input;
  93.  
  94. fopen_s(&input, "students.bin", "rb");
  95.  
  96. if (input) {
  97. int count = _filelength(_fileno(input)) / sizeof(Student);
  98. fclose(input);
  99. Student* group = new Student[count + 1];
  100.  
  101. int len = read_group(group);
  102.  
  103. if (len == -1) {
  104. printf("\nНе удалось прочитать данные о студентах. Нажмите Enter, чтобы продолжить.");
  105. while (getchar() != '\n');
  106. system("cls");
  107. printf("[Ввод данных]\n\n1 - Добавить нового студента\n0 - Вернуться назад\n\n");
  108. return;
  109. }
  110.  
  111. group[len].group = group_number;
  112.  
  113. system("cls");
  114. printf("Введите ФИО нового студента: ");
  115. gets_s(group[len].fio);
  116.  
  117. printf("\n");
  118.  
  119. for (int i = 0; i < m; i++) {
  120. printf("Введите оценку по предмету #%d: ", i + 1);
  121. while (scanf_s("%f", &group[len].marks[i]) != 1 or (group[len].marks[i] < 0 or group[len].marks[i] > 5)) {
  122. while (getchar() != '\n');
  123. printf("Введите оценку в формате числа от 0 до 5.\n");
  124. printf("Введите оценку по предмету #%d: ", i + 1);
  125. }
  126. }
  127.  
  128. while (getchar() != '\n');
  129. if (save_group(group, len + 1)) printf("\nДанные сохранены. Нажмите Enter, чтобы продолжить.");
  130. else printf("\nНе удалось сохранить данные. Нажмите Enter, чтобы продолжить.");
  131. while (getchar() != '\n');
  132. system("cls");
  133. printf("[Ввод данных]\n\n1 - Добавить нового студента\n0 - Вернуться назад\n\n");
  134. }
  135. else {
  136. printf("\nНе удалось открыть файл с данными о студентах. Нажмите Enter, чтобы продолжить.");
  137. while (getchar() != '\n');
  138. system("cls");
  139. printf("[Ввод данных]\n\n1 - Добавить нового студента\n0 - Вернуться назад\n\n");
  140. }
  141. }
  142.  
  143. void data_entry() {
  144. system("cls");
  145.  
  146. printf("[Ввод данных]\n\n1 - Добавить нового студента\n0 - Вернуться назад\n\n");
  147.  
  148. int inp;
  149. while (1) {
  150. printf("Выберите пункт меню: ");
  151. if (scanf_s("%d", &inp) != 1) {
  152. while (getchar() != '\n');
  153. printf("Ошибка: введите корректное значение\n");
  154. continue;
  155. }
  156.  
  157. while (getchar() != '\n');
  158.  
  159. if (inp == 1) create_student();
  160. else if (inp == 0) {
  161. system("cls");
  162. printf("[Главное меню]\n\n1 - Ввод данных\n2 - Статистика\n3 - Журнал\n4 - Сортировки\n0 - Выйти\n\n");
  163. break;
  164. }
  165. else {
  166. printf("Ошибка: такого пункта не существует\n");
  167. }
  168. }
  169. }
  170.  
  171. void print_table(Student students[], int len, int group = -1) {
  172. int max_name_len = 0;
  173.  
  174. for (int i = 0; i < len; i++) {
  175. if (strlen(students[i].fio) > max_name_len) max_name_len = strlen(students[i].fio);
  176. }
  177.  
  178. char title[256];
  179.  
  180. sprintf_s(title, "|%-*s|\0", max_name_len, "Имя");
  181.  
  182. for (int i = 0; i < m; i++) {
  183. char x[25];
  184. sprintf_s(x, "Предмет #%d|", i + 1);
  185. strcat_s(title, sizeof(title), x);
  186. }
  187. strcat_s(title, sizeof(title), "Средний балл|");
  188. strcat_s(title, sizeof(title), "Группа|");
  189.  
  190. printf("%s\n", title);
  191.  
  192. char* underline = new char[2 + max_name_len + 11 * m + 7 + 13];
  193. for (int i = 0; i < 2 + max_name_len + 11 * m + 7 + 13; i++) underline[i] = '—';
  194. underline[2 + max_name_len + 11 * m + 7 + 13] = '\0';
  195.  
  196. printf("%s\n", underline);
  197.  
  198. for (int i = 0; i < len; i++) {
  199. if (group != -1 && students[i].group != group) continue;
  200. char str[256];
  201. sprintf_s(str, "|%-*s|\0", max_name_len, students[i].fio);
  202.  
  203. for (int j = 0; j < m; j++) {
  204. char x[25];
  205. sprintf_s(x, "%10.2f|", students[i].marks[j]);
  206. strcat_s(str, sizeof(str), x);
  207. }
  208.  
  209. int sum = 0; float average;
  210.  
  211. for (int x = 0; x < m; x++) {
  212. sum += students[i].marks[x];
  213. }
  214. average = (float)sum / m;
  215.  
  216. char x[25];
  217. sprintf_s(x, "%12.2f|", average);
  218. strcat_s(str, sizeof(str), x);
  219.  
  220. sprintf_s(x, "%6d|", students[i].group);
  221. strcat_s(str, sizeof(str), x);
  222. printf("%s\n", str);
  223. }
  224.  
  225. printf("%s\n", underline);
  226. }
  227.  
  228. void journal() {
  229. system("cls");
  230.  
  231. int group_number;
  232.  
  233. while (1) {
  234. printf("Введите номер группы: ");
  235. if (scanf_s("%d", &group_number) != 1) {
  236. while (getchar() != '\n');
  237. printf("Ошибка: введите корректное значение\n");
  238. continue;
  239. }
  240. else break;
  241. }
  242.  
  243. while (getchar() != '\n');
  244.  
  245. FILE* group;
  246. fopen_s(&group, "students.bin", "rb");
  247.  
  248. if (!group) {
  249. printf("\nНе удалось открыть файл со студентами. Нажмите Enter, чтобы продолжить.");
  250. }
  251. else {
  252. int count = _filelength(_fileno(group)) / sizeof(Student);
  253. fclose(group);
  254. Student* students = new Student[count];
  255.  
  256. int students_number = read_group(students);
  257.  
  258. sort_students(students, count);
  259.  
  260. if (students_number != -1) {
  261. system("cls");
  262. print_table(students, students_number, group_number);
  263. printf("\nНажмите Enter, чтобы продолжить.");
  264. }
  265. else {
  266. printf("\nНе удалось прочитать данные о группе. Нажмите Enter, чтобы продолжить");
  267. }
  268. }
  269.  
  270. while (getchar() != '\n');
  271. system("cls");
  272. printf("[Главное меню]\n\n1 - Ввод данных\n2 - Статистика\n3 - Журнал\n4 - Сортировки\n0 - Выйти\n\n");
  273. }
  274.  
  275. void get_student(int mode) {
  276. char group_name[25];
  277. system("cls");
  278.  
  279. int group_number;
  280. while (1) {
  281. printf("Введите номер группы: ");
  282. if (scanf_s("%d", &group_number) != 1) {
  283. while (getchar() != '\n');
  284. printf("Ошибка: введите корректное значение\n");
  285. continue;
  286. }
  287. else break;
  288. }
  289.  
  290. while (getchar() != '\n');
  291.  
  292. FILE* file;
  293. fopen_s(&file, "students.bin", "rb");
  294.  
  295. if (file) {
  296. int count = _filelength(_fileno(file)) / sizeof(Student);
  297. Student* students = new Student[count];
  298.  
  299. int len = read_group(students);
  300.  
  301. if (len == -1) {
  302. printf("\nНе удалось прочитать данные о студентах. Нажмите Enter, чтобы продолжить.");
  303. while (getchar() != '\n');
  304. system("cls");
  305. printf("[Статистика]\n\n1 - Определить лучшего студента\n2 - Определить худшего студента\n3 - Определить среднестатистического стундента\n0 - Вернуться в меню\n\n");
  306. }
  307. else {
  308. int subject;
  309. printf("\nВведите номер предмета (1-%d): ", m);
  310.  
  311. while (1) {
  312. scanf_s("%d", &subject);
  313. while (getchar() != '\n');
  314. if (subject < 1 or subject > m) {
  315. printf("Номер предмета должен быть от 1 до %d\n", m);
  316. printf("Введите номер предмета(1-%d): ", m);
  317. }
  318. else break;
  319. }
  320.  
  321. if (mode == 1) {
  322. float max_mark = -1;
  323. int best = -1;
  324.  
  325. for (int i = 0; i < len; i++) {
  326. if (students[i].group != group_number) continue;
  327. if (students[i].marks[subject - 1] > max_mark) {
  328. max_mark = students[i].marks[subject - 1];
  329. best = i;
  330. }
  331. }
  332.  
  333. if (best == -1) {
  334. printf("В выбранной группе нет студентов.\n\nНажмите Enter, чтобы продолжить.");
  335. while (getchar() != '\n');
  336. system("cls");
  337. printf("[Статистика]\n\n1 - Определить лучшего студента\n2 - Определить худшего студента\n3 - Определить среднестатистического стундента\n0 - Вернуться в меню\n\n");
  338. return;
  339. }
  340.  
  341. printf("\nЛучший студент по предмету #%d - %s. Его оценка - %.2f\n\nНажмите Enter, чтобы продолжить.", subject, students[best].fio, students[best].marks[subject - 1]);
  342. while (getchar() != '\n');
  343. system("cls");
  344. printf("[Статистика]\n\n1 - Определить лучшего студента\n2 - Определить худшего студента\n3 - Определить среднестатистического стундента\n0 - Вернуться в меню\n\n");
  345. }
  346. else if (mode == 2) {
  347. float min_mark = 6;
  348. int worst = -1;
  349.  
  350. for (int i = 0; i < len; i++) {
  351. if (students[i].group != group_number) continue;
  352. if (students[i].marks[subject - 1] < min_mark) {
  353. min_mark = students[i].marks[subject - 1];
  354. worst = i;
  355. }
  356. }
  357.  
  358. if (worst == -1) {
  359. printf("В выбранной группе нет студентов.\n\nНажмите Enter, чтобы продолжить.");
  360. while (getchar() != '\n');
  361. system("cls");
  362. printf("[Статистика]\n\n1 - Определить лучшего студента\n2 - Определить худшего студента\n3 - Определить среднестатистического стундента\n0 - Вернуться в меню\n\n");
  363. return;
  364. }
  365.  
  366. printf("\nХудший студент по предмету #%d - %s. Его оценка - %.2f\n\nНажмите Enter, чтобы продолжить.", subject, students[worst].fio, students[worst].marks[subject - 1]);
  367. while (getchar() != '\n');
  368. system("cls");
  369. printf("[Статистика]\n\n1 - Определить лучшего студента\n2 - Определить худшего студента\n3 - Определить среднестатистического стундента\n0 - Вернуться в меню\n\n");
  370. }
  371. else if (mode == 3) {
  372. float sum = 0, average;
  373.  
  374. for (int i = 0; i < len; i++) sum += students[i].marks[subject - 1];
  375.  
  376. average = sum / len;
  377.  
  378. int closest = -1;
  379. float diff = 6;
  380.  
  381. for (int i = 0; i < len; i++) {
  382. if (students[i].group != group_number) continue;
  383. if (abs(average - students[i].marks[subject - 1]) < diff) {
  384. diff = abs(average - students[i].marks[subject - 1]);
  385. closest = i;
  386. }
  387. }
  388.  
  389. if (closest == -1) {
  390. printf("В выбранной группе нет студентов.\n\nНажмите Enter, чтобы продолжить.");
  391. while (getchar() != '\n');
  392. system("cls");
  393. printf("[Статистика]\n\n1 - Определить лучшего студента\n2 - Определить худшего студента\n3 - Определить среднестатистического стундента\n0 - Вернуться в меню\n\n");
  394. return;
  395. }
  396.  
  397. printf("\nСреднестатистиеский студент по предмету #%d - %s. Его оценка - %.2f\n\nНажмите Enter, чтобы продолжить.", subject, students[closest].fio, students[closest].marks[subject - 1]);
  398. while (getchar() != '\n');
  399. system("cls");
  400. printf("[Статистика]\n\n1 - Определить лучшего студента\n2 - Определить худшего студента\n3 - Определить среднестатистического стундента\n0 - Вернуться в меню\n\n");
  401. }
  402. }
  403. }
  404. else {
  405. printf("\nНе удалось открыть файл со студентами. Нажмите Enter, чтобы продолжить.");
  406. while (getchar() != '\n');
  407. system("cls");
  408. printf("[Статистика]\n\n1 - Определить лучшего студента\n2 - Определить худшего студента\n3 - Определить среднестатистического стундента\n0 - Вернуться в меню\n\n");
  409. }
  410. }
  411.  
  412. void stats() {
  413. system("cls");
  414.  
  415. printf("[Статистика]\n\n1 - Определить лучшего студента\n2 - Определить худшего студента\n3 - Определить среднестатистического стундента\n0 - Вернуться в меню\n\n");
  416.  
  417. int inp;
  418.  
  419. while (1) {
  420. printf("Выберите пункт меню: ");
  421. if (scanf_s("%d", &inp) != 1) {
  422. while (getchar() != '\n');
  423. printf("Ошибка: введите корректное значение\n");
  424. continue;
  425. }
  426.  
  427. while (getchar() != '\n');
  428.  
  429. if (inp == 1) get_student(1);
  430. else if (inp == 2) get_student(2);
  431. else if (inp == 3) get_student(3);
  432. else if (inp == 0) {
  433. system("cls");
  434. printf("[Главное меню]\n\n1 - Ввод данных\n2 - Статистика\n3 - Журнал\n4 - Сортировки\n0 - Выйти\n\n");
  435. break;
  436. }
  437. else {
  438. printf("Ошибка: такого пункта не существует\n");;
  439. }
  440. }
  441. }
  442.  
  443. void swap(Student* a, Student* b) {
  444. Student temp = *a;
  445. *a = *b;
  446. *b = temp;
  447. }
  448.  
  449. int compare(const void* s1, const void* s2)
  450. {
  451. // Приводим указатели к нужному типу
  452. Student* st1 = (Student*)s1;
  453. Student* st2 = (Student*)s2;
  454. // Сравниваем поля group
  455. if (st1->group < st2->group)
  456. return -1; // Первая структура меньше второй
  457. else if (st1->group > st2->group)
  458. return 1; // Первая структура больше второй
  459. else // Поля group равны, сравниваем поля fio
  460. return strcmp(st1->fio, st2->fio); // Возвращаем результат сравнения строк
  461. }
  462.  
  463. void shuttle_sort(int mode) {
  464. system("cls");
  465.  
  466. FILE* input;
  467.  
  468. fopen_s(&input, "students.bin", "rb");
  469.  
  470. if (input) {
  471. int count = _filelength(_fileno(input)) / sizeof(Student);
  472. fclose(input);
  473. Student* students = new Student[count + 1];
  474.  
  475. int len = read_group(students);
  476.  
  477. if (len == -1) {
  478. printf("\nНе удалось прочитать данные о студентах. Нажмите Enter, чтобы продолжить.");
  479. while (getchar() != '\n');
  480. system("cls");
  481. printf("[Сортировка по имени и группе]\n\n1 - Группа по возрастанию, имя по возрастанию\n2 - Группа по возрастанию, имя по убыванию\n3 - Группа по убыванию, имя по возрастанию\n4 - Группа по убыванию, имя по убыванию\n0 - Выйти\n\n");
  482. return;
  483. }
  484.  
  485. if (mode == 1) {
  486. for (int i = 1; i < count; i++) {
  487. if (students[i].group < students[i - 1].group || (students[i].group == students[i - 1].group && strcmp(students[i].fio, students[i - 1].fio) < 0)) {
  488. swap(students[i], students[i - 1]);
  489. for (int j = i; j >= 1; j--) {
  490. if (students[j].group < students[j - 1].group || (students[j].group == students[j - 1].group && strcmp(students[j].fio, students[j - 1].fio) < 0)) swap(students[j], students[j - 1]);
  491. }
  492. }
  493. }
  494. }
  495. else if (mode == 2) {
  496. for (int i = 1; i < count; i++) {
  497. if (students[i].group < students[i - 1].group || (students[i].group == students[i - 1].group && strcmp(students[i].fio, students[i - 1].fio) > 0)) {
  498. swap(students[i], students[i - 1]);
  499. for (int j = i; j >= 1; j--) {
  500. if (students[j].group < students[j - 1].group || (students[j].group == students[j - 1].group && strcmp(students[j].fio, students[j - 1].fio) > 0)) swap(students[j], students[j - 1]);
  501. }
  502. }
  503. }
  504. }
  505. else if (mode == 3) {
  506. for (int i = 1; i < count; i++) {
  507. if (students[i].group > students[i - 1].group || (students[i].group == students[i - 1].group && strcmp(students[i].fio, students[i - 1].fio) < 0)) {
  508. swap(students[i], students[i - 1]);
  509. for (int j = i; j >= 1; j--) {
  510. if (students[j].group > students[j - 1].group || (students[j].group == students[j - 1].group && strcmp(students[j].fio, students[j - 1].fio) < 0)) swap(students[j], students[j - 1]);
  511. }
  512. }
  513. }
  514. }
  515. else if (mode == 4) {
  516. for (int i = 1; i < count; i++) {
  517. if (students[i].group > students[i - 1].group || (students[i].group == students[i - 1].group && strcmp(students[i].fio, students[i - 1].fio) > 0)) {
  518. swap(students[i], students[i - 1]);
  519. for (int j = i; j >= 1; j--) {
  520. if (students[j].group > students[j - 1].group || (students[j].group == students[j - 1].group && strcmp(students[j].fio, students[j - 1].fio) > 0)) swap(students[j], students[j - 1]);
  521. }
  522. }
  523. }
  524. }
  525.  
  526. print_table(students, count);
  527. printf("\nНажмите Enter, чтобы продолжить.");
  528. while (getchar() != '\n');
  529. system("cls");
  530. printf("[Сортировка по имени и группе]\n\n1 - Группа по возрастанию, имя по возрастанию\n2 - Группа по возрастанию, имя по убыванию\n3 - Группа по убыванию, имя по возрастанию\n4 - Группа по убыванию, имя по убыванию\n0 - Выйти\n\n");
  531. }
  532. else {
  533. printf("Не удалось открыть файл с данными студентов. Нажмите Enter, чтобы продолжить.");
  534. while (getchar() != '\n');
  535. system("cls");
  536. printf("[Сортировка по имени и группе]\n\n1 - Группа по возрастанию, имя по возрастанию\n2 - Группа по возрастанию, имя по убыванию\n3 - Группа по убыванию, имя по возрастанию\n4 - Группа по убыванию, имя по убыванию\n0 - Выйти\n\n");
  537. }
  538. }
  539.  
  540. void sort_a() {
  541. system("cls");
  542.  
  543. printf("[Сортировка по имени и группе]\n\n1 - Группа по возрастанию, имя по возрастанию\n2 - Группа по возрастанию, имя по убыванию\n3 - Группа по убыванию, имя по возрастанию\n4 - Группа по убыванию, имя по убыванию\n0 - Выйти\n\n");
  544.  
  545. int inp;
  546.  
  547. while (1) {
  548. printf("Выберите пункт меню: ");
  549. if (scanf_s("%d", &inp) != 1) {
  550. while (getchar() != '\n');
  551. printf("Ошибка: введите корректное значение\n");
  552. continue;
  553. }
  554.  
  555. while (getchar() != '\n');
  556.  
  557. if (inp == 1) shuttle_sort(1);
  558. else if (inp == 2) shuttle_sort(2);
  559. else if (inp == 3) shuttle_sort(3);
  560. else if (inp == 4) shuttle_sort(4);
  561. else if (inp == 0) {
  562. system("cls");
  563. printf("[Сортировки]\n\n1 - По имени и номеру группы\n2 - По среднему баллу\n0 - Выйти\n\n");
  564. break;
  565. }
  566. else {
  567. printf("Ошибка: такого пункта не существует\n");;
  568. }
  569. }
  570. }
  571.  
  572. void selection_sort(int mode) {
  573. system("cls");
  574.  
  575. FILE* input;
  576.  
  577. fopen_s(&input, "students.bin", "rb");
  578.  
  579. if (input) {
  580. int count = _filelength(_fileno(input)) / sizeof(Student);
  581. fclose(input);
  582. Student* students = new Student[count + 1];
  583.  
  584. int len = read_group(students);
  585.  
  586. if (len == -1) {
  587. printf("\nНе удалось прочитать данные о студентах. Нажмите Enter, чтобы продолжить.");
  588. while (getchar() != '\n');
  589. system("cls");
  590. printf("[Сортировка по среднему баллу]\n\n1 - По убыванию\n2 - По возрастанию\n0 - Выйти\n\n");
  591. return;
  592. }
  593.  
  594. if (mode == 1) {
  595. for (int i = 0; i < count - 1; i++) {
  596. int min_index = i;
  597. for (int j = i + 1; j < count; j++) {
  598. int sum_1 = 0, sum_2 = 0; float average_1, average_2;
  599.  
  600. for (int x = 0; x < m; x++) {
  601. sum_1 += students[j].marks[x];
  602. sum_2 += students[min_index].marks[x];
  603. }
  604. average_1 = (float)sum_1 / m;
  605. average_2 = (float)sum_2 / m;
  606.  
  607. if (average_1 > average_2) {
  608. min_index = j;
  609. }
  610. }
  611. swap(&students[i], &students[min_index]);
  612. }
  613. }
  614. else if (mode == 2) {
  615. for (int i = 0; i < count - 1; i++) {
  616. int min_index = i;
  617. for (int j = i + 1; j < count; j++) {
  618. int sum_1 = 0, sum_2 = 0; float average_1, average_2;
  619.  
  620. for (int x = 0; x < m; x++) {
  621. sum_1 += students[j].marks[x];
  622. sum_2 += students[min_index].marks[x];
  623. }
  624. average_1 = sum_1 / m;
  625. average_2 = sum_2 / m;
  626.  
  627. if (average_1 < average_2) {
  628. min_index = j;
  629. }
  630. }
  631. swap(&students[i], &students[min_index]);
  632. }
  633. }
  634.  
  635. print_table(students, count);
  636. printf("\nНажмите Enter, чтобы продолжить.");
  637. while (getchar() != '\n');
  638. system("cls");
  639. printf("[Сортировка по среднему баллу]\n\n1 - По убыванию\n2 - По возрастанию\n0 - Выйти\n\n");
  640. }
  641. else {
  642. printf("Не удалось открыть файл с данными студентов. Нажмите Enter, чтобы продолжить.");
  643. while (getchar() != '\n');
  644. system("cls");
  645. printf("[Сортировка по среднему баллу]\n\n1 - По убыванию\n2 - По возрастанию\n0 - Выйти\n\n");
  646. }
  647. }
  648.  
  649. void sort_b() {
  650. system("cls");
  651.  
  652. printf("[Сортировка по среднему баллу]\n\n1 - По убыванию\n2 - По возрастанию\n0 - Выйти\n\n");
  653.  
  654. int inp;
  655.  
  656. while (1) {
  657. printf("Выберите пункт меню: ");
  658. if (scanf_s("%d", &inp) != 1) {
  659. while (getchar() != '\n');
  660. printf("Ошибка: введите корректное значение\n");
  661. continue;
  662. }
  663.  
  664. while (getchar() != '\n');
  665.  
  666. if (inp == 1) selection_sort(1);
  667. else if (inp == 2) selection_sort(2);
  668. else if (inp == 0) {
  669. system("cls");
  670. printf("[Сортировки]\n\n1 - По имени и номеру группы\n2 - По среднему баллу\n0 - Выйти\n\n");
  671. break;
  672. }
  673. else {
  674. printf("Ошибка: такого пункта не существует\n");;
  675. }
  676. }
  677. }
  678.  
  679. void sorts() {
  680. system("cls");
  681.  
  682. printf("[Сортировки]\n\n1 - По имени и номеру группы\n2 - По среднему баллу\n0 - Выйти\n\n");
  683.  
  684. int inp;
  685.  
  686. while (1) {
  687. printf("Выберите пункт меню: ");
  688. if (scanf_s("%d", &inp) != 1) {
  689. while (getchar() != '\n');
  690. printf("Ошибка: введите корректное значение\n");
  691. continue;
  692. }
  693.  
  694. while (getchar() != '\n');
  695.  
  696. if (inp == 1) sort_a();
  697. else if (inp == 2) sort_b();
  698. else if (inp == 0) {
  699. system("cls");
  700. printf("[Главное меню]\n\n1 - Ввод данных\n2 - Статистика\n3 - Журнал\n4 - Сортировки\n0 - Выйти\n\n");
  701. break;
  702. }
  703. else {
  704. printf("Ошибка: такого пункта не существует\n");;
  705. }
  706. }
  707. }
  708.  
  709. int main() {
  710. SetConsoleCP(1251);
  711. SetConsoleOutputCP(1251);
  712.  
  713. system("cls");
  714.  
  715. FILE* _file;
  716. fopen_s(&_file, "students.bin", "rb");
  717.  
  718. if (!_file) {
  719. fopen_s(&_file, "students.bin", "wb");
  720. fclose(_file);
  721. }
  722. else {
  723. fclose(_file);
  724. }
  725.  
  726. printf("[Главное меню]\n\n1 - Ввод данных\n2 - Статистика\n3 - Журнал\n4 - Сортировки\n0 - Выйти\n\n");
  727.  
  728. int inp;
  729. while (1) {
  730. printf("Выберите пункт меню: ");
  731. if (scanf_s("%d", &inp) != 1) {
  732. while (getchar() != '\n');
  733. printf("Ошибка: введите корректное значение\n");
  734. continue;
  735. }
  736.  
  737. while (getchar() != '\n');
  738.  
  739. if (inp == 1) data_entry();
  740. else if (inp == 2) stats();
  741. else if (inp == 3) journal();
  742. else if (inp == 4) sorts();
  743. else if (inp == 0) {
  744. system("cls");
  745. break;
  746. }
  747. else {
  748. printf("Ошибка: такого пункта не существует\n");
  749. }
  750. }
  751. }
  752.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement