
- •Створимо новий проект.
- •Створимо заголовний файл.
- •Створимо головну функцію.
- •Створимо функцію введення даних з клавіатури даних в масив структур.
- •Створимо функцію виведення даних з масиву структур на екран.
- •Створимо функцію виведення шапки таблиці.
- •Створимо функцію запису даних з масиву структур в файл.
- •Створимо функцію зчитування даних в файлу в масив структур.
Створимо функцію запису даних з масиву структур в файл.
Імя функції - WriteClient.
Вхідні дані (формальні параметри) :
Адреси качану масиву структур;
кількість заповнених елементів масиву структур;
Вихідні дані: функція не повертає нічого.
Реалізація функції 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;
}
Внесемо зміни до файлу orenda.h: додамо прототип функції WriteClient .
void WriteClient(Сlient cl[], int num);
Внесемо зміни в функцію AddClient. Додамо виклик функції.
#include "orenda.h"
void main()
{
…
cout<<"\n\n";
} while (op);
WriteClient(cl, nz);
cout<<endl<<endl;
system ("pause");
return;
}
Створимо функцію зчитування даних в файлу в масив структур.
Імя функції - ReadClient.
Входные данные (формальные параметры):
Адреса початку масиву структур;
Выходные данные: кількість зчитаних елементів масиву структур (записів).
Реалізація функції 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;
}
Внесемо зміни до файлу orenda.h: додамо прототип функції WriteClient .
int ReadClient(Сlient cl[]);
Внесемо зміни в функцію 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.
Послідовність дій:
Для введення номера передбачимо функцію, яка розташовуватиметься в модулі 3. Вона запрошує у оператора номер і повертає його в зухвалу функцію. Введений оператором номер, повинен лежати в межах від 1 до деякого значення, що визначає реальну кількість записів в маассиве структур.
//----------------------------------- Модуль orenda_03_in_out.cpp
...
int InputNom(int numb)
{
int n;
do
{
cout<<"Введите номер: ";
cin>>n;
} while (n>numb);
return n;
}
Створимо функцію видалення елементу масиву структур. Вона розташовуватиметься в модулі Модуль 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;
}
Далі здійснюється повернення в програму-монітор, яка у разі успішного завершення зменшує на одиницю кількість елементів в масиві структур і на цьому закінчується гілка виконання.