Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DZ_EXAMPLE_ukr.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
124.42 Кб
Скачать
  1. Створимо функцію запису даних з масиву структур в файл.

    1. Імя функції - WriteClient.

    2. Вхідні дані (формальні параметри) :

  • Адреси качану масиву структур;

  • кількість заповнених елементів масиву структур;

    1. Вихідні дані: функція не повертає нічого.

    2. Реалізація функції WriteClient. Додамо нову функцію в модуль з ім’ям db_orenda_02_interface.cpp.

void WriteClient(Сlient cl[], int num)

//==============================================================

// Оновлення файлу бази даних

//==============================================================

{

ofstream cl_out("client.txt");

cout<<setiosflags(ios::fixed);

cout<<setprecision(0);

for (int i=0; i<num; i++)

{

cl_out.setf(ios::left);

cl_out<<setw(L_CODE_CLIENT)<<cl[i].codeСlient;

cl_out<<setw(L_ORG_NAME)<<cl[i].orgName;

cl_out<<setw(L_IPN)<<cl[i].IPN;

cl_out<<setw(L_ADRESS)<<cl[i].adress;

cl_out<<setw(L_TELEPHONE)<<cl[i].telephone;

if(i!=num-1) cl_out<<'\n';

}

cl_out.close();

cout<<"Файл client.txt - оновлен"<<endl;

cout<<"Додано "<<num<<" записів"<<endl;

cout<<"Для продовження роботи натисніть любу клавішу ...";

system("pause");

return;

}

    1. Внесемо зміни до файлу orenda.h: додамо прототип функції WriteClient .

void WriteClient(Сlient cl[], int num);

    1. Внесемо зміни в функцію AddClient. Додамо виклик функції.

#include "orenda.h"

void main()

{

cout<<"\n\n";

} while (op);

WriteClient(cl, nz);

cout<<endl<<endl;

system ("pause");

return;

}

  1. Створимо функцію зчитування даних в файлу в масив структур.

    1. Імя функції - ReadClient.

    2. Входные данные (формальные параметры):

  • Адреса початку масиву структур;

    1. Выходные данные: кількість зчитаних елементів масиву структур (записів).

    2. Реалізація функції WriteClient. Додамо нову функцію в модуль з ім’ям db_orenda_02_interface.cpp.

int ReadClient(Сlient cl[])

/*==============================================================

// загрузка данных из файла в массив структур

//==============================================================*/

{

int numb;

char buf[L_ALL_CLIENT+1];

ifstream cl_in("client.txt");

if(cl_in.fail()) numb=0; // файл не существует

else

{

int i;

for( i=0; !cl_in.eof(); i++)

{

int poz=0; //номер позиции в buf

cl_in.getline(buf,L_ALL_CLIENT+10);

//cout<<L_ALL_CLIENT<<endl; //отладка

//cout<<buf<<endl<<endl; //отладка

// Код клієнта

cl[i].codeСlient=atoi(&buf[poz]);

cout<<cl[i].codeСlient<<endl;

// Назва організації

poz+=L_CODE_CLIENT;

strncpy(cl[i].orgName, &buf[poz],L_ORG_NAME);

cl[i].orgName[L_ORG_NAME]='\0';

//cout<<endl<<L_ORG_NAME<<endl; //отладка

//cout<<cl[i].orgName<<endl; //отладка

// //ІПН

poz+=L_ORG_NAME;

cl[i].IPN=atof(&buf[poz]);

//cout<<endl<<cl[i].IPN<<endl; //отладка

// Адреса

poz+=L_IPN;

strncpy(cl[i].adress, &buf[poz],L_ADRESS);

cl[i].adress[L_ADRESS]='\0';

//cout<<endl<<cl[i].adress<<endl; //отладка

poz+=L_ADRESS;

cl[i].telephone=atoi(&buf[poz]);

//cout<<endl<<cl[i].telephone<<endl; //отладка

//cout<<"..."; //отладка

//system("pause"); //отладка

}

numb=i;

}

cl_in.close();

cout<<numb<<endl;

return numb;

}

    1. Внесемо зміни до файлу orenda.h: додамо прототип функції WriteClient .

int ReadClient(Сlient cl[]);

    1. Внесемо зміни в функцію AddClient. Додамо виклик функції.

#include "orenda.h"

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

const int N=100;

int op; // для ввода кода операции

Сlient cl[N]; // объявление массива структур

int nz=0; //номер свободной записи

nz=ReadClient(cl); // виклик функії

do

{

Додаткова інформація.

Видалення запису із заданим номером.

Перш ніж видалити елемент структури потрібно вивести його на екран (для цього використовуватимемо допоміжну функцію, розташовану модулі 2) і поцікавитися, чи хоче оператор видалити цей запис. У разі позитивної відповіді - виконується цикл, в якому перебираються елементи масиву, починаючи із заданого. У кожній ітерації наступний елемент переписується на місце поточного. Таким чином, заданий елемент пропадає, а усі елементи, які розміщувалися нище від нього зрушуються на одне місце уперед. Функція в даному випадку повертає значення 0.

Послідовність дій:

  1. Для введення номера передбачимо функцію, яка розташовуватиметься в модулі 3. Вона запрошує у оператора номер і повертає його в зухвалу функцію. Введений оператором номер, повинен лежати в межах від 1 до деякого значення, що визначає реальну кількість записів в маассиве структур.

//----------------------------------- Модуль orenda_03_in_out.cpp

...

int InputNom(int numb)

{

int n;

do

{

cout<<"Введите номер: ";

cin>>n;

} while (n>numb);

return n;

}

  1. Створимо функцію видалення елементу масиву структур. Вона розташовуватиметься в модулі Модуль orenda_02.cpp

Формальні параметри:

Адреса початку масиву структур;

Номер елементу, що видаляється.

Повертане значене;

Запис видалений або ні. Якщо оператор відмовляється видалити запис - функція повертає значення рівне 1.

//------------------------------------------------- Модуль orenda_02.cpp

bool DelClient(client cl[], int numb, int n)

{

char s;

OutClient(cl,n,n+1);

cout<<"\nХотите удалить строку? (y/n)";

cin>>s;

if(!(s=='y'|| s=='Y'|| s=='н'||s=='Н')) return 1;

for (int i=n; i<numb; i++)

{

cl[i]=cl[i+1];

}

return 0;

}

Далі здійснюється повернення в програму-монітор, яка у разі успішного завершення зменшує на одиницю кількість елементів в масиві структур і на цьому закінчується гілка виконання.

11

7/1/2025

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]