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

C++: Лекція 34.

Курсовий проект.

Приклад.

Приклад. Написати функції запису даних типа структура в файл і зчитування даних з файлу.

Код клієнта

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

Індивідуальний податковий номер

Адреса

Телефон

1

Аренда сервис

26005588771234

Адреса 1

4585278

int

char[]

double

char[]

int

3

30

14

20

7

Уточнимо постановку завдання :

В цілому, база даних "Оренда торгівельних площ" повинна:

  1. забезпечувати можливість пошуку, зміни і систематизування інформації БД :

    1. додавання нових рядків в БД;

    2. видалення рядка із заданим номером з БД;

    3. виведення на екран інформації, яка зберігається в рядку із заданим номером;

    4. виведення на екран усієї рядків всієї БД.

  2. мати зручний призначений для користувача інтерфейс для роботи з базою даних користувача, котрий не є фахівцем в області обробки даних;

Почнемо усе з початку.

  1. Створимо новий проект.

  2. Створимо заголовний файл.

Це необхідно для того, щоб програма була універсальною. В ньому розмістимо опис шаблону структури даних, оголосимо деякі константи.

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

// Заголовний файл 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; //Телефон

};

  1. Створимо головну функцію.

    1. Створимо новий модуль з імям db_Orenda_01_main.cpp

    2. Створимо функцію з ім’ям main, у якій оголосимо масив типу структура, шаблон якої описан у заголовному файлі.

    3. Виведемо на екран меню:

1 - додавання запису

0 - вихід

Введіть код операції:

    1. Для введення коду операції оголосимо змінну op.

    2. В залежності від коду операції викаємо необхідні дії. Цей пункт реалізуємо за допомогою оператора switch.

    3. Для реалізації меню створимо цикл. Умова виконання циклу – код операції не дорівнює 0.

    4. Реалізація головної функції

//-------------------------------------------------- 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;

}

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

    1. Імя функції - AddClient. Функція пвинна додавати запис у вільний елемент масиву структур. Тому, в заголовок функції повинно додати в якості параметра номер вільного запису (numb).

    2. Алгоритм роботи функції:

Необхідно ввести з клавіатури значення складових частин нового елементу і записати їх в пам'ять - в перший вільний елемент масиву структур. Можна відмовитися від введення або виконати його з помилками. Тому, після введення елементу масиву структур необхідно вивести його на екран, а також меню :

  1. зберегти запис;

  2. повторити вступ;

  3. вийти без збереження.

    1. Вхідні дані:

  • Масив структур;

  • Номер вільного елементу масиву структур, в який додаватимемо дані про чергового клієнта.

    1. Вихідні дані:

Значення типу bool на наявність помилки при запису даних:

true (1) - немає помилки: зберегти запис;

false (0) - є помилка: вийти без збереження.

    1. Реалізація функції введення даних. Створимо новий модуль з ім’ям 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)

} // кінець нескінченого циклу

} // кінець функції

    1. Внесемо зміни до головної функції:

      1. введемо змінну nz - номер вільного елементу масиву структур. При запуску програми масив структур порожній, тому nz=0.

      2. оголосимо змінну errAdd, в яку поміщатимемо значення, повертане функцією (зберегти запис або вийти без збереження).

      3. додамо виклик функції 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";

}

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

bool AddClient(client [], int); //введенняз клавіатури

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