Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.75 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <conio.h>
  5. //#include <iostream>
  6. #include <locale>
  7. #include <Windows.h>
  8.  
  9. const int len_fio = 150;
  10.  
  11. struct PHONENOTE {
  12. char fio[len_fio];
  13. int year;
  14. float tel;
  15. };
  16.  
  17. const int size_p = sizeof(PHONENOTE);
  18.  
  19. int create_file(FILE* fbin);
  20. //int sort_file(FILE*fbin);
  21. int print_file(FILE* fbin);
  22. //int search_PHONENOTEs(FILE*fbin);
  23. using namespace std;
  24.  
  25. int main() {
  26. SetConsoleCP(1251);
  27. SetConsoleOutputCP(1251);
  28.  
  29. char menu_point;
  30. FILE* fbin;
  31. fbin = fopen("tex1.txt", "a+b");
  32. if (!fbin) {
  33. puts("Не могу открыть (создать) файл. \n");
  34. return 1;
  35. }
  36. while (1) {
  37. // Вывод меню
  38. puts("___________________________");
  39. puts(" Выбор действия:");
  40. puts("___________________________");
  41. puts("1- Запись в файл");
  42. puts("2- Сортировка файла");
  43. puts("3- Вывод файла");
  44. puts("4- Поиск и вычисления");
  45. puts("5- Выход");
  46. puts("___________________________");
  47. puts("Bвeдитe номер пункта меню\n");
  48. // Считывание выбранного пункта меню
  49. menu_point = _getch();
  50. // Запуск соответствующих задач
  51. switch (menu_point) {
  52. case '1': create_file(fbin); break;
  53. // case '2': sort_file(fbin); break;
  54. case '3': print_file(fbin); break;
  55. //case '4': search_persons(fbin); break;
  56. case '5':
  57. fclose(fbin);
  58. return 0;
  59. }
  60. }
  61. }
  62. /*---------Запись в файл--------------------*/
  63. int create_file(FILE* fbin) {
  64. PHONENOTE elem;
  65. char buf[100];
  66. fseek(fbin, 0, SEEK_END);
  67. puts("Ввод данных ");
  68. puts("Для вывода нажмте '*'");
  69. puts(" \n");
  70. while (1) {
  71. using namespace std;
  72. puts("Введите Ф.И.О ");
  73. scanf("%149[^\n]", elem.fio);
  74. if (!strcmp(elem.fio, "*")) {
  75. return 1;
  76. }
  77. puts("Введите год рождения");
  78. scanf("%i", &elem.year);
  79. puts("Введите телефон.");
  80. scanf("%f", &elem.tel);
  81. fgets(buf, 10, stdin); // считать \n
  82. fwrite(&elem, size_p, 1, fbin);
  83. }
  84. fflush(fbin);
  85. return 0;
  86. }
  87.  
  88.  
  89. int print_file(FILE* fbin) {
  90. PHONENOTE elem;
  91. int n;
  92. rewind(fbin);
  93. puts("ФИО. Год");
  94. do {
  95. n = fread(&elem, size_p, 1, fbin);
  96. if (n < 1)break;
  97. printf("%-50s%-6i-\8.2f\n", elem.fio, elem.year);
  98.  
  99. } while (1);
  100. puts(" ");
  101. puts("Нажмите любую кнопку");
  102. _getch();
  103. return 0;
  104. }
  105. int sort_file(FILE* fbin) {
  106. long i, j; PHONENOTE elem1, elem2;
  107. puts("Для начала сортировки нажмите любую клавишу.");
  108. _getch();
  109. fseek(fbin, 0, SEEK_END); // Указатель в конец
  110. long len = ftell(fbin) / size_p; // Определяем длину файла
  111. rewind(fbin); // Указатель в начало
  112. // Пузырьковая сортировка:
  113. for (i = len - 1; i >= 1; i--) {
  114. for (j = 0; j <= i - 1; j++) {
  115. // Указатель на j-ю запись
  116. fseek(fbin, j * size_p, SEEK_SET);
  117. // Читаем запись j в elem1
  118. fread(&elem1, size_p, 1, fbin);
  119. // Читаем след. запись в elem2
  120. fread(&elem2, size_p, 1, fbin);
  121.  
  122. // Сравниваем Ф.И.О.
  123. if (strcmp(elem1.fio, elem2.fio) >= 0)
  124. { // Обмен значений :
  125. // Указатель на 2 позиции назад
  126. fseek(fbin, (-2) * size_p, SEEK_CUR);
  127. // Записываем elem2
  128. fwrite(&elem2, size_p, 1, fbin);
  129. // Записываем elem1
  130. fwrite(&elem1, size_p, 1, fbin);
  131. }
  132. }
  133. }
  134. puts("Сортировка выполнена. Нажмите любую клавишу.");
  135. _getch(); return 0;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement