Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание С++ 07_10_08_.doc
Скачиваний:
25
Добавлен:
11.03.2016
Размер:
1.15 Mб
Скачать

Задание 3.1 Модульное программирование

На первом шаге производится разработка структуры данных и проектирование программы с учетом модульного стиля программирования. Разбиение программы на независимые друг от друга модули делает ее структуру более гибкой и легко модифицируемой. Например, это позволит быстро заменить используемую для хранения совокупности записей структуру данных Tablна другую, а также перейти с консольного варианта программы на программу с оконным графическим интерфейсом.

В отдельный заголовочный файл с именем Record.hпомещается описание структуры данных, содержащей учетную информацию некоторой предметной области, и декларации функций для работы со структурой.

Описание структуры данных, которая используется для хранения всех записей, помещается в другой файл Tabl.h. При необходимости использования другого типа контейнера для хранения записей изменения в коде затронут только эту часть программы.

Реализация функций полностью аналогична коду функций в таблице строк

В начале заголовочного файла Tabl.h следует с помощью директивы #include подключить заголовочный файл item.h.

#pragma once

#include "record.h"

typedef Record* T;

//#include "chars.h"

//typedef char* T;

Изменяя этот заголовочный файл можно работать как с таблицей строк, так и с таблицей структур.

В качестве примера рассматривается предметная область библиотека.

Файл Record.h

class Record (Запись)

{public:

char* title; // название

char autor[10]; // автор

long number; // инвентарный номер

int price; // цена

charname[10]; //имя читателя

longnumber; // номер читательского билета

charaddress[40];//адрес читателя

longtelephone; // телефон читателя

charbname[10]; //имя библиотекаря

intday,month,year; // дата выдачи читателю

};

Record*init(Record*); // выделяет память под структурRecord

//и инициализирует ее значениями по умолчанию

Record*copy(Record*); //coздает копию структурыRecordв динамической памяти

voiddispose(Record*); // Освобождает выделенную память под структурRecord

intvalidate(Record*); // проверяет корректность данных

intequal(Record*,Record*); // функция, проверяющая равенство значений полей записей. Используется при поиске

intcmp(Record*,Record*); // функция, сравнивающая записи Используется при сортировке

int input(File fp,Record* r) ;

int input(Record* r) ;

int output(File f,Record* r);

void output(Record* r);

В файл Record.cpp помещаются реализации функций

#include"Record.h"

Задание 3.2 Работа с и динамической памятью

На втором шаге реализуются функции, работающие с динамической памятью.

Record*init(Record*r) // выделяет память под структурRecord

//и инициализирует ее значениями по умолчанию

{ r=new Record;

r->autor[0]='\0';

r->title=0;

r-> number=0;

r->price=0;

r->day=0;r->month=0;r->year=0;

return r;

}

Record* copy(Record* t)//coздает копию структуры Record в динамической памяти

{Record* r=init(t);

strcpy(r->autor,t->autor);

r->title=new char[strlen (t->title)+1] ;

strcpy(r->title, t->title);

r-> number=t-> number;

r->price=t->price;

r->day= t->day;r->month=t->month; r->year=t->year;

return r;}

void dispose (Record* t) // Освобождает выделенную память под структур Record

{if(t)

delete [] t->title;

deletet;}