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

Задание 5. Объектно-ориентированная реализация информационной системы Задание 5.1 Представление структуры данных записи (Record), в виде класса с конструкторами и деструкторами

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

#pragma once

#include "io.h"

#include "compare.h"

class Record

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

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

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

int price; // цена

int day,month,year;

public:

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

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

Record(char*a,char*t,int n,int p,int d,int m,int y);

Record(const Record&);

~Record();

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

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

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

intequal(constRecord&); // функция, проверяющая равенство значений полей записей

//Используется при поиске

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

friend int CmpField(Record* a,Record* b,char*s);

int finput(File f);

int input(File fp) ;

int input() ;

int output(File f);

void output();

void copyto(String* m[], int first=0);

int input (TextBox* m[], int first=0) ;

void output(TextBox* m[], int first=0);

void output(ListView*list);

};

Задание 5. 2 Разработка класса таблица для хранения объектов классаRecord.

Выполняется аналогично заданию 4.2

Файл item.h

#pragma once

#include "record.h"

typedef Record* T;

typedef T* Iterator;

Файл Tabl.h

#include “item.h”

class Tabl{

vec v;

Iterator cur;

T buf;

public:

Tabl( int sz=100,T buffer=0);

~Tabl( );

void resize(int n);

void clear();

void dispose ();

Iterator begin();

Iterator end() ;

int length();

T get_item(int i);

Iterator insert(const T& item);

Iterator erase(Iterator pos);

int remove (const Iterator& first,const Iterator& last,const T& item);

int remove (const Iterator& first,const Iterator& last t,const Predicate& pred);

Tabl* Query(Predicat& pred);

void sort(Compare &Comp );

void output();

int input();

int input(File f);

void output(File f);

void foutput(char* FileName);

int finput(char* FileName);

void output(ListView*list);

};

С помощью typedefдляT* вводится новое названиеIterator, для того чтобы подчеркнуть, что к элементам таблицы осуществляется последовательный доступ, независящий от ее внутреннего устройства.

Функции, зависящие от конкретной реализации таблицы (например , вставка и удаление) реализованы в виде функций-элементов класса.

Функции, которые используют только последовательный доступ к элементам таблицы с помощью итераторов, реализованы в виде глобальных функций. Такие функции далее будем называть алгоритмами. Параметрами алгоритмов являются итераторы, которые могут указывать на элементы произвольной таблицы.

Файл "algo.h"

Iterator find (const Iterator& first,const Iterator& last,const T& item);

Iterator find (const Iterator& first,const Iterator& last, const Predicate& pred);

int replace (const Iterator& first,const Iterator& last,const T&Old,const T&New);

void sort (const Iterator& first, const Iterator& last,const Compare& comp);

void for_each(const Iterator& first,const Iterator& last,const Function& Funct);

Пример реализации

Iterator find(const Iterator& first,const Iterator& last, Predicate& pred)

{Iterator i;

for(i=first; i!=last; i++)

if(pred.fun(*i)) return i;

returnlast;

}