Телефонный справочник: Сохранение и загрузка массива структур - C (СИ)
Формулировка задачи:
#include <stdio.h> #include <conio.h> #include <locale> #include "Functions.h" #define _CRT_SECURE_NO_WARNINGS #define COUNT 100 struct PhoneBook { int N; char Family; char Name; char Patronymic; struct Phone { int Home; int Work; int Mobile; }; struct Address { char Country; char City; char Street; int N_Home; int N_Apartment; }; char Email; } PB[COUNT]; const char header[] = "|---------------------------------------------------------------------------------------------------------------|\n" "| | | | | Phone | Address | |\n" "| № | Family | Name | Patronymic |---------------|----------------------| Email |\n" "| | | | | Home | Country | |\n" "| | | | | Work | City | |\n" "| | | | | Mobile | Street | |\n" "| | | | | | № Home | |\n" "| | | | | | № Apartament | |\n" "|---------------------------------------------------------------------------------------------------------------|\n"; void main() { setlocale(LC_ALL, "RUSSIAN"); getch(); }
#include <stdio.h> #include <conio.h> #include "Main.cpp" #define _CRT_SECURE_NO_WARNINGS void save(PhoneBook* PB[], COUNT) { FILE *fp; register int i; if((fp=fopen("PhoneBook.txt", "wb"))==NULL) { printf("Ошибка при открытии файла.\n"); return; } for(i=0; i<COUNT; i++) if(*PB[i].Name) if(fwrite(&PB[i], sizeof(struct PhoneBook), 1, fp)!=1) printf("Ошибка при записи файла.\n"); fclose(fp); } void load(PhoneBook* PB[], COUNT) { FILE *fp; register int i; if((fp=fopen("PhoneBook.txt", "rb"))==NULL) { printf("Ошибка при открытии файла.\n"); return; } //init_list(); for(i=0; i<COUNT; i++) if(fread(&PB[i], sizeof(struct PhoneBook), 1, fp)!=1) { if(feof(fp)) break; printf("Ошибка при чтении файла.\n"); } fclose(fp); }
Решение задачи: «Телефонный справочник: Сохранение и загрузка массива структур»
#define COUNT 1000 const char* FileName = "PhoneBook.txt"; struct PhoneBook { char N[100]; char Family[100]; char Name[100]; char Patronymic[100]; struct TPhone { char Home[100]; char Work[100]; char Mobile[100]; } Phone; struct TAddress { char Country[100]; char City[100]; char Street[100]; char N_Home[100]; char N_Apartment[100]; } Address; char Email[100]; } PB[COUNT]; void Save() { FILE *fp; int i; fp = fopen(FileName,"w"); for (i = 0; i < COUNT; i++) { fwrite(PB[i].N, sizeof(char), 1, fp); fwrite(PB[i].Family, sizeof(char), 1, fp); fwrite(PB[i].Name, sizeof(char), 1, fp); fwrite(PB[i].Patronymic, sizeof(char), 1, fp); fwrite(PB[i].Phone.Home, sizeof(char), 1, fp); fwrite(PB[i].Phone.Work, sizeof(char), 1, fp); fwrite(PB[i].Phone.Mobile, sizeof(char), 1, fp); fwrite(PB[i].Address.Country, sizeof(char), 1, fp); fwrite(PB[i].Address.City, sizeof(char), 1, fp); fwrite(PB[i].Address.Street, sizeof(char), 1, fp); fwrite(PB[i].Address.N_Home, sizeof(char), 1, fp); fwrite(PB[i].Address.N_Apartment, sizeof(char), 1, fp); fwrite(PB[i].Email, sizeof(char), 1, fp); } fclose(fp); } void Load() { FILE *fp; int i; fp = fopen(FileName,"r"); for (i = 0; i < COUNT; i++) { fread(PB[i].N, sizeof(char), 1, fp); fread(PB[i].Family, sizeof(char), 1, fp); fread(PB[i].Name, sizeof(char), 1, fp); fread(PB[i].Patronymic, sizeof(char), 1, fp); fread(PB[i].Phone.Home, sizeof(char), 1, fp); fread(PB[i].Phone.Work, sizeof(char), 1, fp); fread(PB[i].Phone.Mobile, sizeof(char), 1, fp); fread(PB[i].Address.Country, sizeof(char), 1, fp); fread(PB[i].Address.City, sizeof(char), 1, fp); fread(PB[i].Address.Street, sizeof(char), 1, fp); fread(PB[i].Address.N_Home, sizeof(char), 1, fp); fread(PB[i].Address.N_Apartment, sizeof(char), 1, fp); fread(PB[i].Email, sizeof(char), 1, fp); } fclose(fp); }
Объяснение кода листинга программы
В данном коде реализована работа с телефонным справочником, который включает в себя массив структур PhoneBook. Каждая структура содержит информацию о контакте, включая поля: имя, фамилия, отчество, домашний телефон, рабочий телефон, мобильный телефон, информация о месте жительства (страна, город, улица, номер дома, номер квартиры) и адрес электронной почты.
В функции Save() происходит запись данных из массива структур PhoneBook в файл PhoneBook.txt. Функция открывает файл для записи (режим w
), а затем в цикле записывает в файл каждый элемент массива, используя функцию fwrite().
Функция Load() выполняет обратную операцию - чтение данных из файла PhoneBook.txt в массив структур PhoneBook. Функция открывает файл для чтения (режим r
), а затем в цикле считывает из файла каждый элемент массива, используя функцию fread().
Обратите внимание, что код предполагает, что при чтении файла все данные будут успешно считаны. Если в процессе чтения возникнет ошибка (например, файл был поврежден или недостаточно памяти для считывания данных), код может работать некорректно.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д