Телефонный справочник: Сохранение и загрузка массива структур - C (СИ)

Узнай цену своей работы

Формулировка задачи:

курсовая по теме бд "Телефонный справочник" основная проблема с сохранением и загрузкой массива структур, нашел 2 функции в интернете (был почти аналогичный пример), но все равно ошибок куча main.cpp
#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();
}
Save-Load.cpp
#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);
}

Решение задачи: «Телефонный справочник: Сохранение и загрузка массива структур»

textual
Листинг программы
#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(). Обратите внимание, что код предполагает, что при чтении файла все данные будут успешно считаны. Если в процессе чтения возникнет ошибка (например, файл был поврежден или недостаточно памяти для считывания данных), код может работать некорректно.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы