Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <stdio.h>
- #include <iostream>
- #include <string.h>
- #include <conio.h>
- #include <cstdlib>
- #include <fstream>
- #define _CRT_SECURE_NO_WARNINGS
- #define file_ext ".txt"
- void file_read(); // Чтение из файла
- void file_edit(); // Редактирование файла
- void file_delete(); // Удаление файла
- void file_exist(); // Проверка на существование файла
- void file_create(); // Создание файла
- void file_append(); // Добавление записей в файл
- void file_search(); // Поиск по файлу
- void name_view(); // Вывод имени рабочего файла
- void name_check(int); // Проверка введенного имени
- void struct_output(int);
- void file_work();
- void sort_list();
- void delete_elem(int);
- const int elems = 100; // Кол-во студентов Не требуется
- int num_records = 0;
- FILE *f;
- char * filename = (char*)malloc(260);
- int choice;
- struct book { // Структура для книги
- unsigned short int ID;
- char *fname = (char*)malloc(40);
- char *lname = (char*)malloc(40);
- char *birth_day = (char*)malloc(40);
- char *birth_month = (char*)malloc(40);
- char *birth_year = (char*)malloc(40);
- char *phone_number = (char*)malloc(40);
- char *email = (char*)malloc(40);
- } ad_book[elems];
- int main()
- {
- setlocale(LC_ALL, "Russian");
- printf_s("=== Выберите нужную опцию: \n");
- printf_s("1. Создать новую Записную книгу \n");
- printf_s("2. Использовать существующую \n");
- printf_s("3. Выход \n");
- printf_s("Введите номер выбора: ");
- int choice_one = 0;
- scanf("%d", &choice_one);
- switch (choice_one) {
- case 1: { name_check(choice_one); break; }
- case 2: { name_check(choice_one); break; }
- case 3: { return 0; }
- default: {
- system("cls");
- printf_s("Нет такой опции. Сделай выбор заново \n");
- main();
- }
- }
- if (f != NULL) {
- system("cls");
- printf_s("\n Файл успешно открыт/создан. Продолжаем работу.\n");
- file_work();
- }
- else if (f == NULL) {
- printf_s("По какой-либо причине файл не может быть создан. Возможно, у вас нет прав на запись в этот каталог.");
- system("pause");
- exit(1);
- }
- system("pause");
- return 0;
- }
- /*rdy*/void file_work() {
- name_view();
- printf_s("Выберите нужную опцию: \n");
- printf_s("1. Вывести записи из адресной книги \n");
- printf_s("2. Добавить запись \n");
- printf_s("3. Редактировать запись \n");
- printf_s("4. Удалить запись \n");
- printf_s("5. Поиск по записям в книге \n");
- printf_s("6. Удалить адресную книгу \n");
- printf_s("7. Выход \n\n");
- printf_s("DEBUG ZONE:\n %d%s", num_records, "\n", ad_book[0].fname, "\n");
- printf_s("Введите цифру: ");
- scanf_s("%d", &choice);
- switch (choice) {
- case 1: { file_read(); break; }
- case 2: { file_append(); break; }
- case 3: { file_edit(); break; }
- case 4: { file_search(); break; }
- case 5: {sort_list(); break; }
- // case 6: {delete_elem(); break; }
- case 7: { file_delete(); break; }
- case 8: { exit(0); }
- default: {
- system("cls");
- printf_s("Нет такой опции. Сделай выбор заново \n");
- main();
- }
- }
- }
- /*rdy*/void file_read()
- {
- for (int i = 0; i < num_records; i++) {
- 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);
- }
- }
- /*rdy*/void file_append(void) {
- f = fopen(filename, "a+");
- ad_book[num_records].ID = num_records;
- printf_s("\nВведите имя: ");
- scanf_s(ad_book[num_records].fname);
- printf_s("\nВведите фамилию: ");
- scanf_s(ad_book[num_records].lname);
- printf_s("\nКакого числа родился: ");
- scanf_s(ad_book[num_records].birth_day);
- printf_s("\nВведите месяц рождения: ");
- scanf_s(ad_book[num_records].birth_month);
- printf_s("\nВведите год рождения: ");
- scanf_s(ad_book[num_records].birth_year);
- printf_s("\nВведите номер телефона: ");
- scanf_s(ad_book[num_records].phone_number);
- printf_s("\nВведите email: ");
- scanf_s(ad_book[num_records].email);
- fwrite(&ad_book[num_records], sizeof(struct book), 1, f);
- fclose(f);
- }
- /*rdy*/void file_search()
- {
- int counter = 0;
- char *search_string;
- system("cls");
- printf_s("По какой информации будет проводиться поиск? \n\n");
- printf_s("1. Имя\n");
- printf_s("2. Фамилия\n");
- printf_s("3. День рождения\n");
- printf_s("4. Месяц рождения\n");
- printf_s("5. Год рождения\n");
- printf_s("6. Мобильный телефон\n");
- printf_s("7. Адрес эл. почты\n\n");
- printf_s("Введите нужную цифру: ");
- scanf_s("%d", choice);
- printf_s("\n\n Введите искомую информацию: ");
- scanf_s("%s", search_string);
- printf_s("\n\n ====================== Искомая информация ======================");
- switch (choice) {
- case 1: {
- for (int i = 0; i < elems; i++) {
- if (strstr(ad_book[i].fname, search_string)) {
- struct_output(i);
- counter++;
- }
- }
- if (counter == 0) printf_s("Подобных записей не найдено! \n");
- }
- case 2: {
- for (int i = 0; i < elems; i++) {
- if (strstr(ad_book[i].lname, search_string)) {
- struct_output(i);
- counter++;
- }
- }
- if (counter == 0) printf_s("\nПо вашему запросу не найдено ни одной записи! \n");
- else if (counter != 0) printf_s("\nПо вашему запросу найдено %d записи(ей)", counter);
- }
- case 3: {
- for (int i = 0; i < elems; i++) {
- if (strstr(ad_book[i].birth_day, search_string)) {
- struct_output(i);
- counter++;
- }
- }
- if (counter == 0) printf_s("Подобных записей не найдено! \n");
- else if (counter != 0) printf_s("\nПо вашему запросу найдено %d записи(ей)", counter);
- }
- case 4: {
- for (int i = 0; i < elems; i++) {
- if (strstr(ad_book[i].birth_month, search_string)) {
- struct_output(i);
- counter++;
- }
- }
- if (counter == 0) printf_s("Подобных записей не найдено! \n");
- else if (counter != 0) printf_s("\nПо вашему запросу найдено %d записи(ей)", counter);
- }
- case 5: {
- for (int i = 0; i < elems; i++) {
- if (strstr(ad_book[i].birth_year, search_string)) {
- struct_output(i);
- counter++;
- }
- }
- if (counter == 0) printf_s("Подобных записей не найдено! \n");
- else if (counter != 0) printf_s("\nПо вашему запросу найдено %d записи(ей)", counter);
- }
- case 6: {
- for (int i = 0; i < elems; i++) {
- if (strstr(ad_book[i].phone_number, search_string)) {
- struct_output(i);
- counter++;
- }
- }
- if (counter == 0) printf_s("Подобных записей не найдено! \n");
- else if (counter != 0) printf_s("\nПо вашему запросу найдено %d записи(ей)", counter);
- }
- case 7: {
- for (int i = 0; i < elems; i++) {
- if (strstr(ad_book[i].email, search_string)) {
- struct_output(i);
- counter++;
- }
- }
- if (counter == 0) printf_s("Подобных записей не найдено! \n");
- else if (counter != 0) printf_s("\nПо вашему запросу найдено %d записи(ей)", counter);
- }
- case 8: {
- system("cls");
- main();
- }
- default: {
- system("cls");
- printf_s("\n Неверная команда! Попробуйте ещё раз!");
- file_search;
- }
- }
- }
- /*rdy*/void file_edit()
- {
- f = fopen(filename, "w+");
- // Редактируем записи из файла. Выбор для редакторования по ID
- file_read();
- printf_s("Выберите пункт для редактирования по ID: ");
- unsigned short int edit_input;
- scanf_s("%d", edit_input);
- edit_input--;
- printf_s("\n Для редактирования выбрана строка: \n");
- 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);
- printf_s("\nВведите имя: ");
- scanf_s("%s", ad_book[edit_input].fname);
- printf_s("\nВведите фамилию: ");
- scanf_s("%s", ad_book[edit_input].lname);
- printf_s("\nКакого числа родился: ");
- scanf_s("%s", ad_book[edit_input].birth_day);
- printf_s("\nВведите месяц рождения: ");
- scanf_s("%s", ad_book[edit_input].birth_month);
- printf_s("\nВведите год рождения: ");
- scanf_s("%s", ad_book[edit_input].birth_year);
- printf_s("\nВведите номер телефона: ");
- scanf_s("%s", ad_book[edit_input].phone_number);
- printf_s("\nВведите email: ");
- scanf_s("%s", ad_book[edit_input].email);
- fwrite(&ad_book[edit_input], sizeof(struct book), 1, f);
- fclose(f);
- }
- /*rdy*/void file_delete()
- {
- system("cls");
- if (remove(filename) != 0)
- {
- printf_s("Ошибка удаления файла\n");
- system("pause");
- exit(1);
- }
- else {
- printf_s("Файл успешно удалён\n");
- system("pause");
- exit(0);
- }
- }
- /*rdy*/void file_exist()
- {
- FILE *outfile;
- f = fopen(filename, "r");
- if (f == NULL) outfile = fopen(filename, "rt");
- else {
- system("cls");
- printf_s("Файл уже существует. Выберите другую опцию или введите другое имя файла\n");
- main();
- }
- }
- /*rdy*/void file_create()
- {
- file_exist();
- FILE *outfile;
- f = fopen(filename, "r");
- if (f == NULL) {
- outfile = fopen(filename, "wt");
- }
- else {
- fclose(f);
- }
- }
- /*rdy*/void already_exist() {
- FILE *f;
- f = fopen(filename, "r");
- int i = 0;
- if ((f = fopen(filename, "r")) != NULL) {
- while (!feof(f)) {
- if (fread(&ad_book[i], sizeof(struct book), 1, f) != ferror(f)) { i++; num_records++; }
- else break;
- }
- file_work();
- }
- else {
- system("cls");
- printf_s("Файла не существует. Попытайтесь ещё раз.\n");
- main();
- }
- }
- /*rdy*/void name_view()
- {
- system("cls");
- printf_s("Для работы выбран файл с именем: ", filename, "\n");
- printf_s("Количество записей в файле: ", num_records, "\n\n");
- }
- /*rdy*/void name_check(int choice_one)
- {
- printf_s("Введите имя файла (БЕЗ РАСШИРЕНИЯ): ");
- scanf_s("%s", filename);
- strcat(filename, file_ext);
- // Для нового файла. Делаем вызов функции создания
- if (choice_one == 1) {
- file_create();
- }
- // Для существующего. Проверяем наличие
- else if (choice_one == 2) {
- already_exist();
- }
- }
- /*rdy*/void struct_output(int counter) {
- 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);
- }
- void sort_list()
- {
- short int temp = 0;
- for (int counter = 0; counter < num_records - 1; counter++)
- {
- if (strcmp(ad_book[counter].fname, ad_book[counter + 1].fname) < 0)
- {
- ad_book[counter].ID = temp;
- ad_book[counter].ID = ad_book[counter + 1].ID;
- ad_book[counter + 1].ID = temp;
- }
- }
- }
- void delete_elem(int id)
- {
- for (int i = id; i < num_records - 1; i++)
- {
- ad_book[i].ID = ad_book[i + 1].ID;
- strcpy(ad_book[i].birth_day, ad_book[i + 1].birth_day);
- strcpy(ad_book[i].birth_month, ad_book[i + 1].birth_month);
- strcpy(ad_book[i].birth_year, ad_book[i + 1].birth_year);
- strcpy(ad_book[i].email, ad_book[i + 1].email);
- strcpy(ad_book[i].fname, ad_book[i + 1].fname);
- strcpy(ad_book[i].lname, ad_book[i + 1].lname);
- strcpy(ad_book[i].phone_number, ad_book[i + 1].phone_number);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement