
- •Створимо новий проект.
- •Створимо заголовний файл.
- •Створимо головну функцію.
- •Створимо функцію введення даних з клавіатури даних в масив структур.
- •Створимо функцію виведення даних з масиву структур на екран.
- •Створимо функцію виведення шапки таблиці.
- •Створимо функцію запису даних з масиву структур в файл.
- •Створимо функцію зчитування даних в файлу в масив структур.
C++: Лекція 34.
Курсовий проект.
Приклад.
Приклад. Написати функції запису даних типа структура в файл і зчитування даних з файлу.
-
Код клієнта
Назва організації
Індивідуальний податковий номер
Адреса
Телефон
1
Аренда сервис
26005588771234
Адреса 1
4585278
int
char[]
double
char[]
int
3
30
14
20
7
Уточнимо постановку завдання :
В цілому, база даних "Оренда торгівельних площ" повинна:
забезпечувати можливість пошуку, зміни і систематизування інформації БД :
додавання нових рядків в БД;
видалення рядка із заданим номером з БД;
виведення на екран інформації, яка зберігається в рядку із заданим номером;
виведення на екран усієї рядків всієї БД.
мати зручний призначений для користувача інтерфейс для роботи з базою даних користувача, котрий не є фахівцем в області обробки даних;
Почнемо усе з початку.
Створимо новий проект.
Створимо заголовний файл.
Це необхідно для того, щоб програма була універсальною. В ньому розмістимо опис шаблону структури даних, оголосимо деякі константи.
//=======================================================================
// Заголовний файл orenda.h.
//=======================================================================
#include <iostream> // для організації в/в
#include <windows.h> // для SetConsoleCP
#include <iomanip> // для форматування выводу
using namespace std;
//======================================================================
//Формат файлу таблиці "Кліенти" - довжина кожного з полів запису
//----------------------------------------------------------------------
const int L_CODE_CLIENT=2, L_ORG_NAME=30, L_IPN=14;
const int L_ADRESS=20, L_TELEPHONE=7;
const int L_ALL_CLIENT=L_CODE_CLIENT+L_ORG_NAME+L_IPN+L_ADRESS+L_TELEPHONE;
//======================================================================
// Опис структури таблиці "Клїєнти"
//----------------------------------------------------------------------
struct Сlient
{
int codeСlient; //Код клиента
char orgName[L_ORG_NAME+1]; //Название организации
double IPN; //Індивідуальнй налоговый номер
char adress[L_ADRESS+1]; //Адрес
int telephone; //Телефон
};
Створимо головну функцію.
Створимо новий модуль з імям db_Orenda_01_main.cpp
Створимо функцію з ім’ям main, у якій оголосимо масив типу структура, шаблон якої описан у заголовному файлі.
Виведемо на екран меню:
1 - додавання запису
0 - вихід
Введіть код операції:
Для введення коду операції оголосимо змінну op.
В залежності від коду операції викаємо необхідні дії. Цей пункт реалізуємо за допомогою оператора switch.
Для реалізації меню створимо цикл. Умова виконання циклу – код операції не дорівнює 0.
Реалізація головної функції
//-------------------------------------------------- db_Orenda_01_main.cpp
#include "orenda.h"
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
const int N=100;
int op; // для ввода кода операции
Сlient cl[N]; // объявление массива структур
do
{
system("cls"); // очистка экрана
cout<<"\nОренда торгівельних площ\n\n";
cout<<"\t1 - добавление записи;"<<"\n";
cout<<"\t0 - выход;"<<"\n\n";
cout<<"Укажите код операции: ";
cin>>op;
switch (op)
{
case 0: break;
case 1: break; // 0-додавання запису
default: cout<<"Неверно задан код операции\n\n";
}
cout<<"\n\n";
} while (op);
cout<<endl<<endl;
system ("pause");
return;
}
Створимо функцію введення даних з клавіатури даних в масив структур.
Імя функції - AddClient. Функція пвинна додавати запис у вільний елемент масиву структур. Тому, в заголовок функції повинно додати в якості параметра номер вільного запису (numb).
Алгоритм роботи функції:
Необхідно ввести з клавіатури значення складових частин нового елементу і записати їх в пам'ять - в перший вільний елемент масиву структур. Можна відмовитися від введення або виконати його з помилками. Тому, після введення елементу масиву структур необхідно вивести його на екран, а також меню :
зберегти запис;
повторити вступ;
вийти без збереження.
Вхідні дані:
Масив структур;
Номер вільного елементу масиву структур, в який додаватимемо дані про чергового клієнта.
Вихідні дані:
Значення типу bool на наявність помилки при запису даних:
true (1) - немає помилки: зберегти запис;
false (0) - є помилка: вийти без збереження.
Реалізація функції введення даних. Створимо новий модуль з ім’ям db_orenda_02_function.cpp.
#include "orenda.h"
/*===========================================================Функція AddClient
Функція додає рядки в масив структур
Вхідні параметри:
Номер вільного запису
Адреса першого елементу масива структур
Повертає: код стану
0 - зберегти запис
1 - вийти без збереження
===========================================================================*/
bool AddClient(Сlient cl[],int n)
{
enum {SAVE=1, NOT_SAVE};
cout.setf(ios::left); //вирівнювання по лівому краю
int otv; // тимчасова змінна
while (1)
{ // нескінчений цикл
system ("cls"); //очистка екрану
cout<<endl<<endl;
//---------------------------------------------------------введення данних
cout<<"Введіть дані:\n\n";
// Код клієнта (лічильник)
cl[n].codeСlient=n+1;
if (cin.peek()==10) cin.ignore(); // 10- код символа \n
cout<<setw(5)<<' '<<setw(30)<<"Назва організації"<<": ";
cin.getline(cl[n].orgName,L_ORG_NAME);
//
cout<<setw(5)<<' '<<setw(30)<<"Індивідуальнй податковий номер"<<": ";
cin>>cl[n].IPN;
cout<<setw(5)<<' '<<setw(30)<<"Адреса "<<": ";
cin.ignore();
cin.getline(cl[n].adress,L_ADRESS);
cout<<setw(5)<<' '<<setw(30)<<"Телефон "<<": ";
cin>>cl[n].telephone;
//--------------------------------------------------виведення данних на екран
cout<<"\n\n"<<"Ви ввели наступні дані :\n\n";
cout<<setw(L_CODE_CLIENT)<<cl[n].codeСlient;
cout<<setw(L_ORG_NAME)<<cl[n].orgName;
cout<<setiosflags(ios::fixed);
cout<<setprecision(0);
cout<<setw(L_IPN)<<cl[n].IPN;
cout<<setw(L_ADRESS)<<cl[n].adress;
cout<<setw(L_TELEPHONE)<<cl[n].telephone;
cout<<"\n\n";
cout<<setw(5)<<" "<<"1- зберегти запис\n";
cout<<setw(5)<<" "<<"2- вийти без збереження \n";
cout<<setw(5)<<" "<<"3- повторити введення \n";
cin>>otv;
if(otv==SAVE) return 0;
if(otv==NOT_SAVE) return 1;
if(otv!=3) //Для обработки ошибочной ситуации
{ //вследствии некорректного ввода данных
cout<<"\n\nОшибка ввода - длина строки превышает заданный диапазон!\n";
return 1;
} // if(otv!=3)
} // кінець нескінченого циклу
} // кінець функції
Внесемо зміни до головної функції:
введемо змінну nz - номер вільного елементу масиву структур. При запуску програми масив структур порожній, тому nz=0.
оголосимо змінну errAdd, в яку поміщатимемо значення, повертане функцією (зберегти запис або вийти без збереження).
додамо виклик функції AddClient. Якщо функція повертає 0 (зберегти запис), то значення змінної nz збільшуємо на 1.
…
int nz=0; //номер свободной записи
…
switch (op)
{
case 0: break;
case 1: // 0-додавання запису
char errAdd;
errAdd=AddClient(cl,nz);
if(errAdd==0)nz++;
break;
default: cout<<"Неверно задан код операции\n\n";
}
…
Тепер внесемо зміни до файлу orenda.h: додамо прототип функції AddClient.
bool AddClient(client [], int); //введенняз клавіатури