Advertisement
fabis_sparks

LenaKurs_ver4

May 23rd, 2017
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.43 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <iostream>
  4. #include <string.h>
  5. #include <conio.h>
  6. #include <cstdlib>
  7. #include <fstream>
  8.  
  9. #define _CRT_SECURE_NO_WARNINGS
  10. #define file_ext ".txt"
  11.  
  12. void file_read(); // Чтение из файла
  13. void file_edit(); // Редактирование файла
  14. void file_delete(); // Удаление файла
  15. void file_exist(); // Проверка на существование файла
  16. void file_create(); // Создание файла
  17. void file_append(); // Добавление записей в файл
  18. void file_search(); // Поиск по файлу
  19. void name_view(); // Вывод имени рабочего файла
  20. void name_check(int); // Проверка введенного имени
  21. void struct_output(int);
  22. void file_work();
  23. void sort_list();
  24. void delete_elem(int);
  25.  
  26.  
  27. const int elems = 100; // Кол-во студентов Не требуется
  28. int num_records = 0;
  29. FILE *f;
  30. char * filename = (char*)malloc(260);
  31. int choice;
  32.  
  33. struct book { // Структура для книги
  34.     unsigned short int ID;
  35.     char *fname = (char*)malloc(40);
  36.     char *lname = (char*)malloc(40);
  37.     char *birth_day = (char*)malloc(40);
  38.     char *birth_month = (char*)malloc(40);
  39.     char *birth_year = (char*)malloc(40);
  40.     char *phone_number = (char*)malloc(40);
  41.     char *email = (char*)malloc(40);
  42. } ad_book[elems];
  43.  
  44.  
  45. int main()
  46. {
  47.     setlocale(LC_ALL, "Russian");
  48.  
  49.     printf_s("=== Выберите нужную опцию: \n");
  50.     printf_s("1. Создать новую Записную книгу \n");
  51.     printf_s("2. Использовать существующую \n");
  52.     printf_s("3. Выход \n");
  53.     printf_s("Введите номер выбора: ");
  54.     int choice_one = 0;
  55.     scanf("%d", &choice_one);
  56.     switch (choice_one) {
  57.     case 1: { name_check(choice_one); break; }
  58.     case 2: { name_check(choice_one); break; }
  59.     case 3: { return 0; }
  60.     default: {
  61.         system("cls");
  62.         printf_s("Нет такой опции. Сделай выбор заново \n");
  63.         main();
  64.     }
  65.     }
  66.     if (f != NULL) {
  67.         system("cls");
  68.         printf_s("\n Файл успешно открыт/создан. Продолжаем работу.\n");
  69.         file_work();
  70.     }
  71.     else if (f == NULL) {
  72.         printf_s("По какой-либо причине файл не может быть создан. Возможно, у вас нет прав на запись в этот каталог.");
  73.         system("pause");
  74.         exit(1);
  75.     }
  76.     system("pause");
  77.     return 0;
  78. }
  79.  
  80. /*rdy*/void file_work() {
  81.     name_view();
  82.     printf_s("Выберите нужную опцию: \n");
  83.     printf_s("1. Вывести записи из адресной книги \n");
  84.     printf_s("2. Добавить запись \n");
  85.     printf_s("3. Редактировать запись \n");
  86.     printf_s("4. Удалить запись \n");
  87.     printf_s("5. Поиск по записям в книге \n");
  88.     printf_s("6. Удалить адресную книгу \n");
  89.     printf_s("7. Выход \n\n");
  90.     printf_s("DEBUG ZONE:\n %d%s", num_records, "\n", ad_book[0].fname, "\n");
  91.     printf_s("Введите цифру: ");
  92.     scanf_s("%d", &choice);
  93.     switch (choice) {
  94.     case 1: { file_read(); break; }
  95.     case 2: { file_append(); break; }
  96.     case 3: { file_edit(); break; }
  97.     case 4: { file_search(); break; }
  98.     case 5: {sort_list(); break; }
  99. //  case 6: {delete_elem(); break; }
  100.     case 7: { file_delete(); break; }
  101.     case 8: { exit(0); }
  102.     default: {
  103.         system("cls");
  104.         printf_s("Нет такой опции. Сделай выбор заново \n");
  105.         main();
  106.     }
  107.     }
  108. }
  109. /*rdy*/void file_read()
  110. {
  111.     for (int i = 0; i < num_records; i++) {
  112.         printf_s("%d\t%s\t%s\t%s.%s.%s\t%s\t%s", ad_book[i].ID, ad_book[i].fname, ad_book[i].lname, ad_book[i].birth_day, ad_book[i].birth_month, ad_book[i].birth_year, ad_book[i].phone_number, ad_book[i].email);
  113.     }
  114. }
  115. /*rdy*/void file_append(void) {
  116.     f = fopen(filename, "a+");
  117.     ad_book[num_records].ID = num_records;
  118.     printf_s("\nВведите имя: ");
  119.     scanf_s(ad_book[num_records].fname);
  120.     printf_s("\nВведите фамилию: ");
  121.     scanf_s(ad_book[num_records].lname);
  122.     printf_s("\nКакого числа родился: ");
  123.     scanf_s(ad_book[num_records].birth_day);
  124.     printf_s("\nВведите месяц рождения: ");
  125.     scanf_s(ad_book[num_records].birth_month);
  126.     printf_s("\nВведите год рождения: ");
  127.     scanf_s(ad_book[num_records].birth_year);
  128.     printf_s("\nВведите номер телефона: ");
  129.     scanf_s(ad_book[num_records].phone_number);
  130.     printf_s("\nВведите email: ");
  131.     scanf_s(ad_book[num_records].email);
  132.     fwrite(&ad_book[num_records], sizeof(struct book), 1, f);
  133.     fclose(f);
  134. }
  135. /*rdy*/void file_search()
  136. {
  137.     int counter = 0;
  138.     char *search_string;
  139.     system("cls");
  140.     printf_s("По какой информации будет проводиться поиск? \n\n");
  141.     printf_s("1. Имя\n");
  142.     printf_s("2. Фамилия\n");
  143.     printf_s("3. День рождения\n");
  144.     printf_s("4. Месяц рождения\n");
  145.     printf_s("5. Год рождения\n");
  146.     printf_s("6. Мобильный телефон\n");
  147.     printf_s("7. Адрес эл. почты\n\n");
  148.     printf_s("Введите нужную цифру: ");
  149.     scanf_s("%d", choice);
  150.     printf_s("\n\n Введите искомую информацию: ");
  151.     scanf_s("%s", search_string);
  152.     printf_s("\n\n ====================== Искомая информация ======================");
  153.     switch (choice) {
  154.     case 1: {
  155.         for (int i = 0; i < elems; i++) {
  156.             if (strstr(ad_book[i].fname, search_string)) {
  157.                 struct_output(i);
  158.                 counter++;
  159.             }
  160.         }
  161.         if (counter == 0) printf_s("Подобных записей не найдено! \n");
  162.     }
  163.     case 2: {
  164.         for (int i = 0; i < elems; i++) {
  165.             if (strstr(ad_book[i].lname, search_string)) {
  166.                 struct_output(i);
  167.                 counter++;
  168.             }
  169.         }
  170.         if (counter == 0) printf_s("\nПо вашему запросу не найдено ни одной записи! \n");
  171.         else if (counter != 0) printf_s("\nПо вашему запросу найдено %d  записи(ей)", counter);
  172.     }
  173.     case 3: {
  174.         for (int i = 0; i < elems; i++) {
  175.             if (strstr(ad_book[i].birth_day, search_string)) {
  176.                 struct_output(i);
  177.                 counter++;
  178.             }
  179.         }
  180.         if (counter == 0) printf_s("Подобных записей не найдено! \n");
  181.         else if (counter != 0) printf_s("\nПо вашему запросу найдено %d  записи(ей)", counter);
  182.     }
  183.     case 4: {
  184.         for (int i = 0; i < elems; i++) {
  185.             if (strstr(ad_book[i].birth_month, search_string)) {
  186.                 struct_output(i);
  187.                 counter++;
  188.             }
  189.         }
  190.         if (counter == 0) printf_s("Подобных записей не найдено! \n");
  191.         else if (counter != 0) printf_s("\nПо вашему запросу найдено %d  записи(ей)", counter);
  192.     }
  193.     case 5: {
  194.         for (int i = 0; i < elems; i++) {
  195.             if (strstr(ad_book[i].birth_year, search_string)) {
  196.                 struct_output(i);
  197.                 counter++;
  198.             }
  199.         }
  200.         if (counter == 0) printf_s("Подобных записей не найдено! \n");
  201.         else if (counter != 0) printf_s("\nПо вашему запросу найдено %d  записи(ей)", counter);
  202.     }
  203.     case 6: {
  204.         for (int i = 0; i < elems; i++) {
  205.             if (strstr(ad_book[i].phone_number, search_string)) {
  206.                 struct_output(i);
  207.                 counter++;
  208.             }
  209.         }
  210.         if (counter == 0) printf_s("Подобных записей не найдено! \n");
  211.         else if (counter != 0) printf_s("\nПо вашему запросу найдено %d  записи(ей)", counter);
  212.     }
  213.     case 7: {
  214.         for (int i = 0; i < elems; i++) {
  215.             if (strstr(ad_book[i].email, search_string)) {
  216.                 struct_output(i);
  217.                 counter++;
  218.             }
  219.         }
  220.         if (counter == 0) printf_s("Подобных записей не найдено! \n");
  221.         else if (counter != 0) printf_s("\nПо вашему запросу найдено %d  записи(ей)", counter);
  222.     }
  223.     case 8: {
  224.         system("cls");
  225.         main();
  226.     }
  227.     default: {
  228.         system("cls");
  229.         printf_s("\n Неверная команда! Попробуйте ещё раз!");
  230.         file_search;
  231.     }
  232.     }
  233.  
  234. }
  235.  
  236. /*rdy*/void file_edit()
  237. {
  238.     f = fopen(filename, "w+");
  239.     // Редактируем записи из файла. Выбор для редакторования по ID
  240.     file_read();
  241.     printf_s("Выберите пункт для редактирования по ID: ");
  242.     unsigned short int edit_input;
  243.     scanf_s("%d", edit_input);
  244.     edit_input--;
  245.     printf_s("\n Для редактирования выбрана строка: \n");
  246.     printf_s("%d\t%s\t%s\t%s.%s.%s\t%s\t%s", ad_book[edit_input].ID, ad_book[edit_input].fname, ad_book[edit_input].lname, ad_book[edit_input].birth_day, ad_book[edit_input].birth_month, ad_book[edit_input].birth_year, ad_book[edit_input].phone_number, ad_book[edit_input].email);
  247.     printf_s("\nВведите имя: ");
  248.     scanf_s("%s", ad_book[edit_input].fname);
  249.     printf_s("\nВведите фамилию: ");
  250.     scanf_s("%s", ad_book[edit_input].lname);
  251.     printf_s("\nКакого числа родился: ");
  252.     scanf_s("%s", ad_book[edit_input].birth_day);
  253.     printf_s("\nВведите месяц рождения: ");
  254.     scanf_s("%s", ad_book[edit_input].birth_month);
  255.     printf_s("\nВведите год рождения: ");
  256.     scanf_s("%s", ad_book[edit_input].birth_year);
  257.     printf_s("\nВведите номер телефона: ");
  258.     scanf_s("%s", ad_book[edit_input].phone_number);
  259.     printf_s("\nВведите email: ");
  260.     scanf_s("%s", ad_book[edit_input].email);
  261.     fwrite(&ad_book[edit_input], sizeof(struct book), 1, f);
  262.     fclose(f);
  263. }
  264.  
  265.  
  266. /*rdy*/void file_delete()
  267. {
  268.     system("cls");
  269.     if (remove(filename) != 0)
  270.     {
  271.         printf_s("Ошибка удаления файла\n");
  272.         system("pause");
  273.         exit(1);
  274.     }
  275.     else {
  276.         printf_s("Файл успешно удалён\n");
  277.         system("pause");
  278.         exit(0);
  279.     }
  280.  
  281. }
  282.  
  283. /*rdy*/void file_exist()
  284. {
  285.     FILE *outfile;
  286.     f = fopen(filename, "r");
  287.     if (f == NULL) outfile = fopen(filename, "rt");
  288.     else {
  289.         system("cls");
  290.         printf_s("Файл уже существует. Выберите другую опцию или введите другое имя файла\n");
  291.         main();
  292.     }
  293. }
  294.  
  295. /*rdy*/void file_create()
  296. {
  297.     file_exist();
  298.     FILE *outfile;
  299.     f = fopen(filename, "r");
  300.     if (f == NULL) {
  301.         outfile = fopen(filename, "wt");
  302.     }
  303.     else {
  304.         fclose(f);
  305.     }
  306. }
  307. /*rdy*/void already_exist() {
  308.     FILE *f;
  309.     f = fopen(filename, "r");
  310.     int i = 0;
  311.     if ((f = fopen(filename, "r")) != NULL) {
  312.         while (!feof(f)) {
  313.             if (fread(&ad_book[i], sizeof(struct book), 1, f) != ferror(f)) { i++; num_records++; }
  314.             else break;
  315.         }
  316.  
  317.         file_work();
  318.     }
  319.     else {
  320.         system("cls");
  321.         printf_s("Файла не существует. Попытайтесь ещё раз.\n");
  322.         main();
  323.     }
  324. }
  325. /*rdy*/void name_view()
  326. {
  327.     system("cls");
  328.     printf_s("Для работы выбран файл с именем: ", filename, "\n");
  329.     printf_s("Количество записей в файле: ", num_records, "\n\n");
  330. }
  331.  
  332. /*rdy*/void name_check(int choice_one)
  333. {
  334.     printf_s("Введите имя файла (БЕЗ РАСШИРЕНИЯ): ");
  335.     scanf_s("%s", filename);
  336.     strcat(filename, file_ext);
  337.     // Для нового файла. Делаем вызов функции создания
  338.     if (choice_one == 1) {
  339.         file_create();
  340.     }
  341.     // Для существующего. Проверяем наличие
  342.     else if (choice_one == 2) {
  343.         already_exist();
  344.     }
  345. }
  346.  
  347. /*rdy*/void struct_output(int counter) {
  348.     printf_s("%d\t%s\t%s\t%s.%s.%s\t%s\t%s", ad_book[counter].fname, ad_book[counter].lname, ad_book[counter].birth_day, ad_book[counter].birth_month, ad_book[counter].birth_year, ad_book[counter].phone_number, ad_book[counter].email);
  349. }
  350.  
  351. void sort_list()
  352. {
  353.     short int temp = 0;
  354.     for (int counter = 0; counter < num_records - 1; counter++)
  355.     {
  356.         if (strcmp(ad_book[counter].fname, ad_book[counter + 1].fname) < 0)
  357.         {
  358.             ad_book[counter].ID = temp;
  359.             ad_book[counter].ID = ad_book[counter + 1].ID;
  360.             ad_book[counter + 1].ID = temp;
  361.         }
  362.     }
  363. }
  364. void delete_elem(int id)
  365. {
  366.     for (int i = id; i < num_records - 1; i++)
  367.     {
  368.         ad_book[i].ID = ad_book[i + 1].ID;
  369.         strcpy(ad_book[i].birth_day, ad_book[i + 1].birth_day);
  370.         strcpy(ad_book[i].birth_month, ad_book[i + 1].birth_month);
  371.         strcpy(ad_book[i].birth_year, ad_book[i + 1].birth_year);
  372.         strcpy(ad_book[i].email, ad_book[i + 1].email);
  373.         strcpy(ad_book[i].fname, ad_book[i + 1].fname);
  374.         strcpy(ad_book[i].lname, ad_book[i + 1].lname);
  375.         strcpy(ad_book[i].phone_number, ad_book[i + 1].phone_number);
  376.     }
  377. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement