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>
- #include <iomanip>
- #define file_ext ".txt"
- void file_read(void); // Чтение из файла
- void file_edit(void); // Редактирование файла
- void file_delete(void); // Удаление файла
- void file_exist(void); // Проверка на существование файла
- void file_create(void); // Создание файла
- void file_append(void); // Добавление записей в файл
- void file_search(void); // Поиск по файлу
- void name_view(void); // Вывод имени рабочего файла
- void name_check(int); // Проверка введенного имени
- void struct_output(int);
- void file_work();
- 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];
- using namespace std;
- int main()
- {
- setlocale(LC_ALL, "Russian");
- cout << "=== Выберите нужную опцию: \n";
- cout << "1. Создать новую Записную книгу \n";
- cout << "2. Использовать существующую \n";
- cout << "3. Выход \n";
- cout << "Введите номер выбора: ";
- int choice_one = 0;
- cin >> 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");
- cout << "Нет такой опции. Сделай выбор заново \n";
- main();
- }
- }
- if (f != NULL) {
- system("cls");
- cout << "\n Файл успешно открыт/создан. Продолжаем работу.\n";
- file_work();
- }
- else if (f == NULL) {
- cout << "По какой-либо причине файл не может быть создан. Возможно, у вас нет прав на запись в этот каталог.";
- system("pause");
- exit(1);
- }
- system("pause");
- return 0;
- }
- /*rdy*/void file_work(void) {
- name_view();
- cout << "Выберите нужную опцию: \n";
- cout << "1. Вывести записи из адресной книги \n";
- cout << "2. Добавить запись \n";
- cout << "3. Редактировать запись \n";
- cout << "4. Удалить запись \n";
- cout << "5. Поиск по записям в книге \n";
- cout << "6. Удалить адресную книгу \n";
- cout << "7. Выход \n\n";
- cout << "DEBUG ZONE:\n" << num_records << "\n" << ad_book[0].fname << "\n";
- cout << "Введите цифру: ";
- cin >> choice;
- switch (choice) {
- case 1: { file_read(); break; }
- case 2: { file_append(); break; }
- case 3: { file_edit(); break; }
- //case 4: { file_nremove(); break;}
- case 5: { file_search(); break; }
- case 6: { file_delete(); break; }
- case 7: { exit(0); }
- default: {
- system("cls");
- cout << "Нет такой опции. Сделай выбор заново \n";
- main();
- }
- }
- }
- /*rdy*/void file_read(void)
- {
- for (int i = 0;i < num_records;i++) {
- 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";
- }
- }
- /*rdy*/void file_append(void) {
- f = fopen(filename, "a+");
- ad_book[num_records].ID = num_records;
- cout << "\nВведите имя: ";
- cin >> ad_book[num_records].fname;
- cout << "\nВведите фамилию: ";
- cin >> ad_book[num_records].lname;
- cout << "\nКакого числа родился: ";
- cin >> ad_book[num_records].birth_day;
- cout << "\nВведите месяц рождения: ";
- cin >> ad_book[num_records].birth_month;
- cout << "\nВведите год рождения: ";
- cin >> ad_book[num_records].birth_year;
- cout << "\nВведите номер телефона: ";
- cin >> ad_book[num_records].phone_number;
- cout << "\nВведите email: ";
- cin >> ad_book[num_records].email;
- fwrite(&ad_book[num_records], sizeof(struct book), 1, f);
- fclose(f);
- }
- /*rdy*/void file_search(void)
- {
- int counter = 0;
- char *search_string;
- system("cls");
- cout << "По какой информации будет проводиться поиск? \n\n";
- cout << "1. Имя\n";
- cout << "2. Фамилия\n";
- cout << "3. День рождения\n";
- cout << "4. Месяц рождения\n";
- cout << "5. Год рождения\n";
- cout << "6. Мобильный телефон\n";
- cout << "7. Адрес эл. почты\n\n";
- cout << "Введите нужную цифру: ";
- cin >> choice;
- cout << "\n\n Введите искомую информацию: ";
- cin >> search_string;
- cout << "\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) cout << "Подобных записей не найдено! \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) cout << "\nПо вашему запросу не найдено ни одной записи! \n";
- else if (counter != 0) cout << "\nПо вашему запросу найдено " << 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) cout << "Подобных записей не найдено! \n";
- else if (counter != 0) cout << "\nПо вашему запросу найдено " << 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) cout << "Подобных записей не найдено! \n";
- else if (counter != 0) cout << "\nПо вашему запросу найдено " << 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) cout << "Подобных записей не найдено! \n";
- else if (counter != 0) cout << "\nПо вашему запросу найдено " << 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) cout << "Подобных записей не найдено! \n";
- else if (counter != 0) cout << "\nПо вашему запросу найдено " << 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) cout << "Подобных записей не найдено! \n";
- else if (counter != 0) cout << "\nПо вашему запросу найдено " << counter << " записи(ей)";
- }
- case 8: {
- system("cls");
- main();
- }
- default: {
- system("cls");
- cout << "\n Неверная команда! Попробуйте ещё раз!";
- file_search;
- }
- }
- }
- /*rdy*/void file_edit(void)
- {
- f = fopen(filename, "w+");
- // Редактируем записи из файла. Выбор для редакторования по ID
- file_read();
- cout << "Выберите пункт для редактирования по ID: ";
- unsigned short int edit_input;
- cin >> edit_input;
- edit_input--;
- cout << "\n Для редактирования выбрана строка: \n";
- 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";
- cout << "\nВведите имя: ";
- cin >> ad_book[edit_input].fname;
- cout << "\nВведите фамилию: ";
- cin >> ad_book[edit_input].lname;
- cout << "\nКакого числа родился: ";
- cin >> ad_book[edit_input].birth_day;
- cout << "\nВведите месяц рождения: ";
- cin >> ad_book[edit_input].birth_month;
- cout << "\nВведите год рождения: ";
- cin >> ad_book[edit_input].birth_year;
- cout << "\nВведите номер телефона: ";
- cin >> ad_book[edit_input].phone_number;
- cout << "\nВведите email: ";
- cin >> ad_book[edit_input].email;
- fwrite(&ad_book[edit_input], sizeof(struct book), 1, f);
- fclose(f);
- }
- /*rdy*/void file_delete(void)
- {
- system("cls");
- if (remove(filename) != 0)
- {
- cout << "Ошибка удаления файла\n";
- system("pause");
- exit(1);
- }
- else {
- cout << "Файл успешно удалён\n";
- system("pause");
- exit(0);
- }
- }
- /*rdy*/void file_exist(void)
- {
- ofstream outfile;
- f = fopen(filename, "r");
- if (f == NULL) outfile.open(filename);
- else {
- system("cls");
- cout << "Файл уже существует. Выберите другую опцию или введите другое имя файла\n";
- main();
- }
- }
- /*rdy*/void file_create(void)
- {
- file_exist();
- ofstream outfile;
- f = fopen(filename, "r");
- if (f == NULL) {
- outfile.open(filename);
- }
- else {
- fclose(f);
- }
- }
- /*rdy*/void already_exist(void) {
- ofstream outfile;
- f = fopen(filename, "r");
- int i = 0;
- if (f != 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");
- cout << "Файла не существует. Попытайтесь ещё раз.\n";
- main();
- }
- }
- /*rdy*/void name_view(void)
- {
- system("cls");
- cout << "Для работы выбран файл с именем: " << filename << "\n";
- cout << "Количество записей в файле: " << num_records << "\n\n";
- }
- /*rdy*/void name_check(int choice_one)
- {
- cout << "Введите имя файла (БЕЗ РАСШИРЕНИЯ): ";
- cin >> filename;
- strcat(filename, file_ext);
- // Для нового файла. Делаем вызов функции создания
- if (choice_one == 1) {
- file_create();
- }
- // Для существующего. Проверяем наличие
- else if (choice_one == 2) {
- already_exist();
- }
- }
- /*rdy*/void struct_output(int counter) {
- 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";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement