SHARE
TWEET

Untitled

a guest Jun 18th, 2019 59 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top