Advertisement
fabis_sparks

LenaKurs_ver3

May 21st, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.61 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 file_ext ".txt"
  11. void file_read(void); // Чтение из файла
  12. void file_edit(void); // Редактирование файла
  13. void file_delete(void); // Удаление файла
  14. void file_exist(void); // Проверка на существование файла
  15. void file_create(void); // Создание файла
  16. void file_append(void); // Добавление записей в файл
  17. void file_search(void); // Поиск по файлу
  18. void name_view(void); // Вывод имени рабочего файла
  19. void name_check(int); // Проверка введенного имени
  20. void struct_output(int);
  21. void file_work();
  22.  
  23. const int elems = 100; // Кол-во студентов Не требуется
  24. int num_records = 0;
  25. FILE *f;
  26. char * filename = (char*)malloc(260);
  27. int choice;
  28.  
  29. struct book { // Структура для книги
  30.     unsigned short int ID;
  31.     char *fname =(char*) malloc(40);
  32.     char *lname= (char*)malloc(40);
  33.     char *birth_day= (char*)malloc(40);
  34.     char *birth_month= (char*)malloc(40);
  35.     char *birth_year= (char*)malloc(40);
  36.     char *phone_number= (char*)malloc(40);
  37.     char *email= (char*)malloc(40);
  38. } ad_book[elems];
  39.  
  40. using namespace std;
  41. int main()
  42. {
  43.     setlocale(LC_ALL, "Russian");
  44.  
  45.     cout << "=== Выберите нужную опцию: \n";
  46.     cout << "1. Создать новую Записную книгу \n";
  47.     cout << "2. Использовать существующую \n";
  48.     cout << "3. Выход \n";
  49.     cout << "Введите номер выбора: ";
  50.     int choice_one = 0;
  51.     cin >> choice_one;
  52.     switch (choice_one) {
  53.     case 1: { name_check(choice_one); break; }
  54.     case 2: { name_check(choice_one); break; }
  55.     case 3: { return 0; }
  56.     default: {
  57.         system("cls");
  58.         cout << "Нет такой опции. Сделай выбор заново \n";
  59.         main();
  60.     }
  61.     }
  62.     if (f != NULL) {
  63.         system("cls");
  64.         cout << "\n Файл успешно открыт/создан. Продолжаем работу.\n";
  65.         file_work();
  66.     }
  67.     else if (f == NULL) {
  68.         cout << "По какой-либо причине файл не может быть создан. Возможно, у вас нет прав на запись в этот каталог.";
  69.         system("pause");
  70.         exit(1);
  71.     }
  72.     system("pause");
  73.     return 0;
  74. }
  75.  
  76. /*rdy*/void file_work(void) {
  77.     name_view();
  78.     cout << "Выберите нужную опцию: \n";
  79.     cout << "1. Вывести записи из адресной книги \n";
  80.     cout << "2. Добавить запись \n";
  81.     cout << "3. Редактировать запись \n";
  82.     cout << "4. Удалить запись \n";
  83.     cout << "5. Поиск по записям в книге \n";
  84.     cout << "6. Удалить адресную книгу \n";
  85.     cout << "7. Выход \n\n";
  86.     cout << "DEBUG ZONE:\n" << num_records << "\n" << ad_book[0].fname << "\n";
  87.     cout << "Введите цифру: ";
  88.     cin >> choice;
  89.     switch (choice) {
  90.     case 1: { file_read(); break; }
  91.     case 2: { file_append(); break; }
  92.     case 3: { file_edit(); break; }
  93.     //case 4: { file_nremove(); break;}
  94.     case 5: { file_search(); break; }
  95.     case 6: { file_delete(); break; }
  96.     case 7: { exit(0); }
  97.     default: {
  98.         system("cls");
  99.         cout << "Нет такой опции. Сделай выбор заново \n";
  100.         main();
  101.     }
  102.     }
  103. }
  104. /*rdy*/void file_read(void)
  105. {
  106.     for (int i = 0;i < num_records;i++) {
  107.         cout << setw(3) << ad_book[i].ID << setw(10) << ad_book[i].fname << "\t" << setw(10) << ad_book[i].lname << "\t" << setw(10) << ad_book[i].birth_day << "." << ad_book[i].birth_month << "." << ad_book[i].birth_year << "\t" << setw(12) << ad_book[i].phone_number << "\t" << setw(30) << ad_book[i].email << "\n";
  108.     }
  109. }
  110. /*rdy*/void file_append(void) {
  111.     f = fopen(filename, "a+");
  112.     ad_book[num_records].ID = num_records;
  113.     cout << "\nВведите имя: ";
  114.     cin >> ad_book[num_records].fname;
  115.     cout << "\nВведите фамилию: ";
  116.     cin >> ad_book[num_records].lname;
  117.     cout << "\nКакого числа родился: ";
  118.     cin >> ad_book[num_records].birth_day;
  119.     cout << "\nВведите месяц рождения: ";
  120.     cin >> ad_book[num_records].birth_month;
  121.     cout << "\nВведите год рождения: ";
  122.     cin >> ad_book[num_records].birth_year;
  123.     cout << "\nВведите номер телефона: ";
  124.     cin >> ad_book[num_records].phone_number;
  125.     cout << "\nВведите email: ";
  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. /*rdy*/void file_edit(void)
  233. {
  234.     f = fopen(filename, "w+");
  235.     // Редактируем записи из файла. Выбор для редакторования по ID
  236.     file_read();
  237.     cout << "Выберите пункт для редактирования по ID: ";
  238.     unsigned short int edit_input;
  239.     cin >> edit_input;
  240.     edit_input--;
  241.     cout << "\n Для редактирования выбрана строка: \n";
  242.     cout << setw(10) << ad_book[edit_input].fname << "\t" << setw(10) << ad_book[edit_input].lname << "\t" << setw(10) << ad_book[edit_input].birth_day << "." << ad_book[edit_input].birth_month << "." << ad_book[edit_input].birth_year << "\t" << setw(12) << ad_book[edit_input].phone_number << "\t" << setw(30) << ad_book[edit_input].email << "\n";
  243.     cout << "\nВведите имя: ";
  244.     cin >> ad_book[edit_input].fname;
  245.     cout << "\nВведите фамилию: ";
  246.     cin >> ad_book[edit_input].lname;
  247.     cout << "\nКакого числа родился: ";
  248.     cin >> ad_book[edit_input].birth_day;
  249.     cout << "\nВведите месяц рождения: ";
  250.     cin >> ad_book[edit_input].birth_month;
  251.     cout << "\nВведите год рождения: ";
  252.     cin >> ad_book[edit_input].birth_year;
  253.     cout << "\nВведите номер телефона: ";
  254.     cin >> ad_book[edit_input].phone_number;
  255.     cout << "\nВведите email: ";
  256.     cin >> ad_book[edit_input].email;
  257.     fwrite(&ad_book[edit_input], sizeof(struct book), 1, f);
  258.     fclose(f);
  259. }
  260.  
  261. /*rdy*/void file_delete(void)
  262. {
  263.     system("cls");
  264.     if (remove(filename) != 0)
  265.     {
  266.         cout << "Ошибка удаления файла\n";
  267.         system("pause");
  268.         exit(1);
  269.     }
  270.     else {
  271.         cout << "Файл успешно удалён\n";
  272.         system("pause");
  273.         exit(0);
  274.     }
  275.  
  276. }
  277.  
  278. /*rdy*/void file_exist(void)
  279. {
  280.     ofstream outfile;
  281.     f = fopen(filename, "r");
  282.     if (f == NULL) outfile.open(filename);
  283.     else {
  284.         system("cls");
  285.         cout << "Файл уже существует. Выберите другую опцию или введите другое имя файла\n";
  286.         main();
  287.     }
  288. }
  289.  
  290. /*rdy*/void file_create(void)
  291. {
  292.     file_exist();
  293.     ofstream outfile;
  294.     f = fopen(filename, "r");
  295.     if (f == NULL) {
  296.         outfile.open(filename);
  297.     }
  298.     else {
  299.         fclose(f);
  300.     }
  301. }
  302. /*rdy*/void already_exist(void) {
  303.     ofstream outfile;
  304.     f = fopen(filename, "r");
  305.     int i = 0;
  306.     if (f != NULL) {
  307.         while (!feof(f)) {
  308.             if (fread(&ad_book[i], sizeof(struct book), 1, f) != ferror(f)) { i++; num_records++; }
  309.             else break;
  310.         }
  311.  
  312.         file_work();
  313.     }
  314.     else {
  315.         system("cls");
  316.         cout << "Файла не существует. Попытайтесь ещё раз.\n";
  317.         main();
  318.     }
  319. }
  320. /*rdy*/void name_view(void)
  321. {
  322.     system("cls");
  323.     cout << "Для работы выбран файл с именем: " << filename << "\n";
  324.     cout << "Количество записей в файле: " << num_records << "\n\n";
  325. }
  326.  
  327. /*rdy*/void name_check(int choice_one)
  328. {
  329.     cout << "Введите имя файла (БЕЗ РАСШИРЕНИЯ): ";
  330.     cin >> filename;
  331.     strcat(filename, file_ext);
  332.     // Для нового файла. Делаем вызов функции создания
  333.     if (choice_one == 1) {
  334.         file_create();
  335.     }
  336.     // Для существующего. Проверяем наличие
  337.     else if (choice_one == 2) {
  338.         already_exist();
  339.     }
  340. }
  341.  
  342. /*rdy*/void struct_output(int counter) {
  343.     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";
  344. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement