Advertisement
fabis_sparks

new

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