Объектно-ориентированное программирование на языке С++

 















ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++


Введение


Мы живем в мире объектов. Стол, автомобиль, ручка, классная доска - все это объекты. Объекты характеризуются атрибутами. Так атрибутами автомобиля являются максимальная скорость, мощность двигателя, цвет кузова и т.д.

Помимо атрибутов объекты обладают некоторыми функциональными возможностями, которые в объектно-ориентированном программировании (ООП) называют операциями или методами. Так автомобиль может ездить, корабль - плавать.

Таким образом, объект инкапсулирует атрибуты и методы, скрывая от других объектов взаимодействующих с ним и использующих его функциональность, свою реализацию. Объект - это экземпляр некоторого класса объектов или просто класса. Так автомобиль Audi 6 является экземпляром класса автомобилей данной модели, приемник Sony SW-7600G так же будет представителем класса одноименных приемников.

Классы могут быть связаны друг с другом различными отношениями. Одним из основных таких отношений является отношение класс - подкласс, известный в объектно-ориентированном программировании как наследование. Например, класс автомобилей Audi 6 является подклассом легковых автомобилей, который в свою очередь входит в более крупный класс автомобилей, а последний является подклассом класса транспортных средств, который помимо автомобилей включает в себя самолеты, корабли поезда и т.д. Примером подобных отношений, являются системы классификации в ботанике и зоологии. Отношением, обратным наследованию, является обобщение или генерализация. Она указывает, что некий класс, является более общим (обобщенным) классом другого класса. Класс транспортных средств, к примеру, является генерализацией классов автомобилей, самолетов и кораблей.

При наследовании все атрибуты и методы родительского класса наследуются классом-потомком. Наследование может быть многоуровневым, и тогда классы, находящиеся на нижних уровнях иерархии, унаследуют все свойства (атрибуты и методы) всех классов, прямыми или косвенными потомками которых они являются.

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

При наследовании одни методы класса могут замещаться другими. Так, класс транспортных средств будет обладать обобщенным методом движения. В классах-потомках этот метод будет конкретизирован: автомобиль будет ездить, самолет - летать, корабль - плавать. Такое изменение семантики метода называется полиморфизмом. Полиморфизм - это выполнение методом с одним и тем же именем различных действий в зависимости от контекста, в частности, от принадлежности тому или другому классу. В разных языках программирования полиморфизм реализуется различными способами. Например, в C++ он реализован с помощью механизма виртуальных функций.


1. Общие сведения


Разрабатываемое приложение курсовой работы носит название «OOP».

Данная программа позволяет продемонстрировать основные концепции ООП и возможности среды визуальной разработки приложений Borland C++ Builder 6 для работы с классами. Пользователь имеет возможности:

·Добавление объектов;

·Удаление объектов;

·Загрузка данных из файла;

·Сохранение данных в файл;

·Поиск данных по основным полям.

Данное приложение написано в среде Borland C++ Builder 6 на языке С++. Дополнительная установка программного обеспечения не требуется.


2. Теоретические сведения


Объектно-ориентированное программирование представляет собой метод программирования, который весьма близко напоминает наше поведение, является более структурным, более модульным и более абстрактным, чем предыдущие попытки абстрагирования данных и переноса деталей программирования на внутренний уровень.

Основные определения:

Класс - это тип, описывающий устройство объектов. Понятие «класс» подразумевает некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что обладает определённым поведением и способом представления. Говорят, что объект - это экземпляр класса. [1]

Объект - сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса. [3]

Прототип - это объект-образец, по образу и подобию которого создаются другие объекты.

Объектно-ориентированный язык программирования характеризуется тремя основными свойствами:

. Инкапсуляция. Комбинирование записей с процедурами и функциями, манипулирующими полями этих записей, формирует новый тип данных - объект.

. Наследование. Определение объекта и его дальнейшее использование для построения иерархии порожденных объектовс возможностью для каждого порожденного объекта, относящегося к иерархии, доступа к коду и данным всех порождающих объектов.

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


3. Описание логической структуры


Для описания предметной области «Автомобильный транспорт» была создана иерархия классов, базовым классом которой является абстрактный базовый класс. Иерархия имеет следующий вид (рис. 1.):


Рис. 1 Иерархия классов

логический программа интерфейс листинг

Класс «Автомобильный транспорт» является абстрактным базовым классом. Он содержит поля, которые отражают общие характеристики всего авто транспорта. Кроме этого, класс «Автомобильный транспорт» имеет набор функций: виртуальные функции для сохранения и вывода данных, инициализирующий конструктор


class AVTO

{public: AVTO (String _marka, String _model, int _year, int _power);void PRINT (TStringList *lines) {…};void GET (TStringList *lines) {…};:marka; String model; int year; int power;

};


Остальные классы иерархии будут производными от класса «Автомобильный транспорт». При этом используется открытое наследование.

Класс «Грузовики»:


class TRACK: public AVTO

{public: TRACK (String _marka, String _model, int _year, int _power, int _gruz, String _kuzovg);void PRINT (TStringList *lines) {…};void GET (TStringList *lines) {…};:gruz; String kuzovg;

};


Класс «Пассажирские»:


class PASS: public AVTO

{public: PASS (String _marka, String _model, int _year, int _power, int _mesta);void PRINT (TStringList *lines) {…}void GET (TStringList *lines) {…};:mesta;

};


Класс «Автомобили»


class CAR: public PASS

{public: CAR (String _marka, String _model, int _year, int _power, int _mesta, String _kuzovl, String _klass);void PRINT (TStringList *lines) {…}void GET (TStringList *lines) {.}:kuzovl; String klass;

};


Класс «Автобусы»


class BUS: public PASS

{public: BUS (String _marka, String _model, int _year, int _power, int _mesta, String _type, int _dlina);void PRINT (TStringList *lines) {…}void GET (TStringList *lines) {…}:type; int dlina;

};


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

BAZA

{public:

/// массивы указателей конечных классов

TRACK *TRACKArray[100];

BUS *BUSArray[100];

CAR *CARArray[100];

/// массивы указателей для поиска и удаления

TRACK *TFArray[100];*BFArray[100];*CFArray[100];

int Tcount; int Bcount; int Ccount; int CFcount; int BFcount; int TFcount;

/// чтение данных в массив из файла

virtual void ReadFileBase () {…}

/// Создание объекта из файла

virtual void Create (TStringList *INFO, int clas) {…}void FIND (String value, int pole) {…}

};


Каждый класс имеет определенный набор компонентных функций. Они реализуют:

·Создание нового объекта (инициализирующий конструктор);

·Функции вывода на экран;

·Функции получения данных.


4. Описание модульной структуры


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

·Обработчики работы с компонентами формы;

·Список классов с параметрами и методам.

Иерархия классов представлена на рис. 1.


5. Используемые технические средства


Для работы программы требуется ПК на базе микропроцессора не ниже 1GHz, 256 Mb RAM с установленной на него операционной системой Microsoft Windows XP и 20 Мb свободного места на жестком диске. Мышь, клавиатура.


6. Входные данные


Ввод данных осуществляется пользователем с клавиатуры или загрузкой текстового файла.


Таблица 1. Автомобили

Наименование поляТип данныхМаркаСтрокаМодельСтрокаГод выпускаЦелое числоМощностьЦелое числоВмещаемостьцелое числоТип кузоваСтрокаКлассСтрока

Таблица 2. Автобусы

Наименование поляТип данныхМаркаСтрокаМодельСтрокаГод выпускаЦелое числоМощностьЦелое числоМаркаСтрокаВмещаемостьцелое числоНазначениеСтрокаГабаритная длиннаЦелое число

Таблица 3. Грузовики

Наименование поляТип данныхМаркаСтрокаМодельСтрокаГод выпускаЦелое числоМощностьЦелое числоМаркаСтрокаГрузоподъемностьЦелое числоТип грузовикаСтрокаЗагрузка данных происходит автоматически при запуске приложения, каждый файл соответствует определенному классу.

Данные в файле расположенный построчно, изменение порядка строк может привести к неправильной работе программы.


7. Выходные данные


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

Кроме этого, выходные данные в программе выводятся на форму приложения в компонент Memo.

логический программа интерфейс листинг

8. Организация хранения данных в программе


Работа со всеми объектами в программе происходит при помощи указателей. В программе используются три массива указателей для каждого класса Так же созданы несколько вспомогательных массива для временного хранения указателей.

При закрытии приложения все объекты, указатели на которые хранятся в этом массиве, уничтожаются.


. Проектирование интерфейса программы


Интерфейс программы имеет однооконную структуру. Основное окно программы представлено на рисунке 2.


Рис. 2 Основное окно


Слева в программе расположены панели ввода информации об объектах. В правой части экрана происходит отражение информации.


. Тестирование и отладка


В ходе разработки приложения необходимо тестирование и отладка на каждом этапе. Соответственно, после реализации иерархии классов, реализации методов этих классов, реализации дополнительного функционала проводились тесты, чтобы выявить недочеты и устранить их (результату промежуточного тестирования не приведены). Результат комплексного тестирования представлен в таблице3.


Таблица 3. Результат тестирования программы

№ТестРезультат1Реализация иерархии классов: создание объектов (модули реализации классов)Успешно2Реализация иерархии классов: работа с полями (модули реализации классов)Отладка функций GET для доступа к полям объектов классов. Успешно3Вод из файла (модуль работы с объектами классов и модуль реализации классов)Откладка функции ReadFileBase для извлечения данных из файла. Успешно.4Сохранение в файл (модуль работы с объектами классов и модуль реализации классов)Успешно5Просмотр данных (модуль самого приложения и модуль реализации классов)Успешно6Добавление (модуль самого приложения и модуль реализации классов)Отладка процедуры добавления, добавление обработчиков ошибок. Успешно7Поиск (использование дополнительного класса)Успешно8Удаление (использование дополнительного класса)Успешно

Таким образом, функционал приложения и его реализация соответствуют требованиям, предъявленным в техническом задании.


Заключение


В ходе выполнения курсовой работы были закреплены теоретические знания в области объектно-ориентированного программирования на зыке С++. Была разработана иерархия классов предметной области «Автомобильный транспорт», закреплены знания о создании и использовании динамических структур данных.

Также научился работать с объектами иерархии классов.

Применение объектно-ориентированного подхода к программированию и широкие возможности языка С++ в среде визуального программирования С++ Builder является мощным и гибким средством при создании программ имитирующих поведение объектов реального мира.


Список литературы


  1. Википедия - свободная энциклопедия (www.wikipedia.org)
  2. Айра Пол ООП на С++ - СПб.: «Бином», «Невский диалект», 2001 - 461 с.
  3. Р. Лафоре ООП в С++ - М.: «Питер», 2004 - 923 с.
  4. Ахо А., Хопкрофт Д., Ульман Д. Структуры данных и алгоритмы - М.: Издательский дом «Вильямс», 2001 - 384 с.

Приложение 1


Текст программы


// -

#include <vcl.h>

#pragma hdrstop

#include <fstream.h>

#include «first_u.h»

// -

#pragma package (smart_init)

#pragma resource «*.dfm»*First;

///////////////////////////////////////////////// Базовый класс АВТО /////////////////////////////////////////////////////////////// AVTO

{public: AVTO (String _marka, String _model, int _year, int _power);void PRINT (TStringList *lines)

{>Add («Марка:» + marka);>Add («Модель:» + model);>Add («Год выпуска: «+ IntToStr(year));>Add («Мощность:» + IntToStr(power));

};void GET (TStringList *lines)

{>Add(marka);>Add(model);>Add (IntToStr(year));>Add (IntToStr(power));

};:marka;model;year;power;

};:AVTO (String _marka, String _model, int _year, int _power): marka(_marka), model(_model), year(_year), power (_power) {};

////////////////////////////////////// Подкласс ГРУЗОВИКИ класса АВТО /////////////////////////////////////////////////////////////// TRACK: public AVTO

{public: TRACK (String _marka, String _model, int _year, int _power, int _gruz, String _kuzovg);void PRINT (TStringList *lines)

{:PRINT(lines);>Add («Грузоподъемность:» + IntToStr(gruz));>Add («Тип грузовика:» + kuzovg);

}void GET (TStringList *lines)

{:GET(lines);>Add (IntToStr(gruz));>Add(kuzovg);

};:gruz;kuzovg;

};:TRACK (String _marka, String _model, int _year, int _power, int _gruz, String_kuzovg): AVTO (_marka,_model,_year,_power), gruz(_gruz), kuzovg(_kuzovg) {};

///////////////////////////////////// Подкласс ПАССАЖИРСКИЕ класса АВТО /////////////////////////////////////////////////////////////// PASS: public AVTO

{public: PASS (String _marka, String _model, int _year, int _power, int _mesta);void PRINT (TStringList *lines)

{:PRINT(lines);>Add («Вместимость:» + IntToStr(mesta));

}void GET (TStringList *lines)

{:GET(lines);>Add (IntToStr(mesta));

};:mesta;

};:PASS (String _marka, String _model, int _year, int _power, int _mesta):AVTO (_marka, _model, _year, _power), mesta(_mesta)

{};


///////////////////////////////////// Подкласс АВТОМОБИЛИ класса ПАССАЖИРСКИЕ /////////////////////////////////////////////////////////////// CAR: public PASS

{public: CAR (String _marka, String _model, int _year, int _power, int _mesta, String _kuzovl, String _klass);void PRINT (TStringList *lines)

{:PRINT(lines);>Add («Кузов:» + kuzovl);>Add («Класс авто:» + klass);

}void GET (TStringList *lines)

{:GET(lines);>Add(kuzovl);>Add(klass);

}:kuzovl;klass;

};:CAR (String _marka, String _model, int _year, int _power, int _mesta, String _kuzovl, String _klass):PASS (_marka, _model, _year, _power,_mesta), kuzovl(_kuzovl), klass(_klass) {};

////////////////////////////////////// Подкласс АВТОБУСЫ класса ПАССАЖИРСКИЕ /////////////////////////////////////////////////////////////// BUS: public PASS

{public: BUS (String _marka, String _model, int _year, int _power, int _mesta, String _type, int _dlina);void PRINT (TStringList *lines)

{:PRINT(lines);>Add («Назначение:» + type);>Add («Габаритная длинна:» + IntToStr(dlina));

}void GET (TStringList *lines)

{:GET(lines);>Add(type);>Add (IntToStr(dlina));

}:type;dlina;

};:BUS (String _marka, String _model, int _year, int _power, int _mesta, String _type, int _dlina):PASS (_marka, _model,_year, _power, _mesta), type(_type), dlina(_dlina) {};

class BAZA

{public: /// массивы указателей конечных классов

TRACK *TRACKArray[100];

BUS *BUSArray[100];*CARArray[100];

/// массивы указателей для поиска и удаления

TRACK *TFArray[100];*BFArray[100];*CFArray[100];Tcount;Bcount;Ccount;CFcount;BFcount;TFcount;

/// чтение данных в массив из файла

virtual void ReadFileBase ()

{*TRACKbase = new TStringList();*BUSbase = new TStringList();*CARbase = new TStringList();*INFO = new TStringList();-> LoadFromFile («track_info.txt»);-> LoadFromFile («bus_info.txt»);-> LoadFromFile («car_info.txt»);lenCar = 7;>Clear();(int j = 0; j <= (CARbase->Count/lenCar-1); j++)

{(int i = 0; i <= lenCar-1; i++)

{>Add (CARbase->Strings [j*lenCar+i]);

}(INFO, 1);>Clear();

}lenBus = 7;>Clear();(int j = 0; j <= (BUSbase->Count/lenBus-1); j++)

{(int i = 0; i <= lenBus-1; i++)

{>Add (BUSbase->Strings [j*lenBus+i]);

}(INFO, 2);>Clear();

}lenTrack = 6;>Clear();(int j = 0; j <= (TRACKbase->Count/lenTrack-1); j++)

{(int i = 0; i <= lenTrack-1; i++)

{>Add (TRACKbase->Strings [j*lenTrack+i]);

}(INFO, 3);>Clear();

}

}

/// Создание объекта из файла

virtual void Create (TStringList *INFO, int clas)

{(clas)

{1:[Ccount] = new CAR

(INFO->Strings[0].c_str(),>Strings[1].c_str(),(INFO->Strings[2]),(INFO->Strings[3]),(INFO->Strings[4]),>Strings[5].c_str(),>Strings[6].c_str());

++Ccount;;2:[Bcount] = new BUS

(INFO->Strings[0].c_str(),>Strings[1].c_str(),(INFO->Strings[2]),(INFO->Strings[3]),(INFO->Strings[4]),>Strings[5].c_str(),(INFO->Strings[6]));

++Bcount;;3:[Tcount] = new TRACK

(INFO->Strings[0].c_str(),>Strings[1].c_str(),(INFO->Strings[2]),(INFO->Strings[3]),(INFO->Strings[4]),>Strings[5].c_str());

++Tcount;

}

}void FIND (String value, int pole)

{*INFO = new TStringList();=0;

BFcount=0;=0;

/// поиск значения по массиву автомобилей

for (int i = 0; i <Ccount; i++)

{[i]->GET(INFO);(value == INFO->Strings[pole])

{[CFcount]= CARArray[i];++;

}>Clear();

}

/// поиск значения по массиву автобусы

for (int i = 0; i <Bcount; i++)

{[i]->GET(INFO);(value == INFO->Strings[pole])

{[BFcount]= BUSArray[i];++;

}>Clear();

}

/// поиск значения по массиву автобусы

for (int i = 0; i <Tcount; i++)

{[i]->GET(INFO);(value == INFO->Strings[pole])

{[TFcount]= TRACKArray[i];++;

}>Clear();

}

}

};baza;__fastcall TFirst: FormActivate (TObject *Sender)

{

{->Clear();->Lines->Add («Автомобили»);->Lines->Add(«============»);->Clear();->Lines->Add («Автобусы»);->Lines->Add(«===========»);->Clear();->Lines->Add («Грузовики»);->Lines->Add(«===========»);*avto;*INFO = new TStringList();. ReadFileBase();

//// вывод информации о машинах(int i = 0; i <=baza. Ccount-1; i++)

{= baza.CARArray[i];->PRINT(INFO);->Lines->AddStrings(INFO);>Clear();1->Lines->Add(«**************»);

}

//// вывод информации об автобусах

for (int i = 0; i <=baza. Bcount-1; i++)

{= baza.BUSArray[i];->PRINT(INFO);->Lines->AddStrings(INFO);>Clear();->Lines->Add(«**************»);

}

//// вывод информации о грузовиках

for (int i = 0; i <=baza. Tcount-1; i++)

{= baza.TRACKArray[i];->PRINT(INFO);->Lines->AddStrings(INFO);>Clear();->Lines->Add(«****************»);

}

}(EConvertError*)

{(0, «Чтение файла!», «Ошибка!», MB_ICONERROR);

}

}

// -

__fastcall TFirst: BitBtn1Click (TObject *Sender)

{

try

{ /// Добавление и вывод нового объекта

if (transport->Text == «Автомобили»)

{((marka->Text==»»)||(model->Text==»»)||

(god_vipuska->Text==»»)||(power->Text==»»)||

(vmestimost->Text==»»)||(tip_kuzova->Text==»»)||

(class_avto->Text==»»))(0, «Заполните все поля!!!», «Ошибка!!!», MB_ICONWARNING); else

{.CARArray [baza. Ccount] = new CAR

(marka->Text.c_str(),>Text.c_str(),(god_vipuska->Text),(power->Text),(vmestimost->Text),_kuzova->Text.c_str(),_avto->Text.c_str());

++ baza. Ccount;

MessageBoxA (0, «Выполнено успешно!», «Добавление данных!», mbYes);

AVTO *avto;*INFO = new TStringList();= baza.CARArray [baza. Ccount-1];->PRINT(INFO);->Lines->AddStrings(INFO);>Clear();->Lines->Add(«**************************************************************************»);

}

};

}(EConvertError*)

{(0, «Проверьте правильность введенных данных!», «Ошибка!», MB_ICONERROR);

}

try

{ /// Добавление и вывод нового объекта

if (transport->Text == «Автобусы»)

{((marka->Text==»»)||(model->Text==»»)||

(god_vipuska->Text==»»)||(power->Text==»»)||

(vmestimost->Text==»»)||(naznachenie->Text==»»)||

(gab_dlinna->Text==»»))(0, «Заполните все поля!!!», «Ошибка!!!», MB_ICONWARNING); else

{.BUSArray [baza. Bcount] = new BUS

(marka->Text.c_str(),>Text.c_str(),(god_vipuska->Text),(power->Text),(vmestimost->Text),>Text.c_str(),(gab_dlinna->Text));

++ baza. Bcount;

MessageBoxA (0, «Выполнено успешно!», «Добавление данных!», mbYes);

AVTO *avto;*INFO = new TStringList();= baza.BUSArray [baza. Bcount-1];->PRINT(INFO);->Lines->AddStrings(INFO);>Clear();->Lines->Add(«**************************************************************************»);

}

};

}(EConvertError*)

{(0, «Проверьте правильность введенных числовых данных!», «Ошибка!», MB_ICONERROR);

}

try

{ /// Добавление и вывод нового объекта

if (transport->Text == «Грузовики»)

{((marka->Text==»»)||(model->Text==»»)||

(god_vipuska->Text==»»)||(power->Text==»»)||

(gruzopodemnost->Text==»»)||(tip_gruzovika->Text==»»))(0, «Заполните все поля!!!», «Ошибка!!!», MB_ICONWARNING); else

{.TRACKArray [baza. Tcount] = new TRACK

(marka->Text.c_str(),>Text.c_str(),(god_vipuska->Text),(power->Text),(gruzopodemnost->Text),_gruzovika->Text.c_str());

++ baza. Tcount;

MessageBoxA (0, «Выполнено успешно!», «Добавление данных!», mbYes);

AVTO *avto;*INFO = new TStringList();= baza.BUSArray [baza. Tcount-1];->PRINT(INFO);->Lines->AddStrings(INFO);>Clear();->Lines->Add(«**************************************************************************»);

}

};

}(EConvertError*)

{(0, «Проверьте правильность введенных числовых данных!», «Ошибка!», MB_ICONERROR);

}

}

// -__fastcall TFirst:transportChange (TObject *Sender)

{(transport->Text == «Автомобили»)

{->Caption = transport->Text;>Visible = true;_kuzova->Visible = true;_avto->Visible = true;->Visible = true;>Visible = false;_dlinna->Visible = false;_gruzovika->Visible = false;>Visible = false;->Visible = false;->Visible = false;

}(transport->Text == «Автобусы»)

{->Caption = transport->Text;>Visible = true;>Visible = true;_dlinna->Visible = true;->Visible = true;_kuzova->Visible = false;_avto->Visible = false;_gruzovika->Visible = false;>Visible = false;->Visible = false;->Visible = false;

}(transport->Text == «Грузовики»)

{->Caption = transport->Text;_gruzovika->Visible = true;>Visible = true;

dat3->Visible = true;

vmestimost->Visible = false;>Visible = false;_dlinna->Visible = false;_kuzova->Visible = false;_avto->Visible = false;->Visible = false;->Visible = false;

}

}

// -

__fastcall TFirst:TFirst (TComponent* Owner)

: TForm(Owner)

{

}

// -__fastcall TFirst:N5Click (TObject *Sender)

{>Close();

}

// -__fastcall TFirst: BitBtn5Click (TObject *Sender)

{

{*avto;*INFO = new TStringList();

/// Добавление и вывод нового объекта(transport->Text == «Автомобили»)

{(int i = 0; i <= baza. Ccount-1; i++)

{= baza.CARArray[i];>GET(INFO);

}>SaveToFile («car_info.txt»);

INFO->Clear();

}

/// Добавление и вывод нового объекта

if (transport->Text == «Автобусы»)

{(int i = 0; i <= baza. Bcount-1; i++)

{= baza.BUSArray[i];>GET(INFO);

}>SaveToFile («bus_info.txt»);

INFO->Clear();

}

/// Добавление и вывод нового объекта

if (transport->Text == «Грузовики»)

{(int i = 0; i <= baza. Tcount-1; i++)

{= baza.TRACKArray[i];>GET(INFO);

}>SaveToFile («track_info.txt»);>Clear();

}

}(EConvertError*)

{(0, «Сохранение данных!», «Ошибка!», MB_ICONERROR);

}

}

// -__fastcall TFirst: BitBtn4Click (TObject *Sender)

{_z1->Clear();_z2->Clear();_z3->Clear();

}

// -__fastcall TFirst: BitBtn3Click (TObject *Sender)

{


{*avto;*INFO= new TStringList();par;_z1->Clear();_z2->Clear();_z3->Clear();(poick_pole->Text== «Марка») par=0;(poick_pole->Text== «Модель») par=1;(poick_pole->Text== «Год выпуска») par=2;.FIND (znachenie->Text, par);(int i = 0; i < baza.CFcount; i++)

{= baza.CFArray[i];>PRINT(INFO);_z1->Lines->AddStrings(INFO);>Clear();_z1->Lines->Add(«***********»);

}(int i = 0; i < baza.BFcount; i++)

{= baza.BFArray[i];>PRINT(INFO);_z2->Lines->AddStrings(INFO);>Clear();_z2->Lines->Add(«**********»);

}(int i = 0; i < baza.TFcount; i++)

{= baza.TFArray[i];>PRINT(INFO);_z3->Lines->AddStrings(INFO);>Clear();_z3->Lines->Add(«****************»);

}

}(EConvertError*)

{(0, «Проверьте правильность введенных числовых данных!», «Ошибка!», MB_ICONERROR);

}

}

// -__fastcall TFirst: BitBtn2Click (TObject *Sender)

{

{*avto;= baza.CFArray[0];(PageControl1->ActivePage->PageIndex==0)

{(int i = 0; i <= baza. Ccount-1; i++)

{(avto == baza.CARArray[i]) {delete baza.CARArray[i]; baza. Ccount - ;}

}

}= baza.BFArray[0];(PageControl1->ActivePage->PageIndex==1)

{(int i = 0; i <= baza. Bcount-1; i++)

{(avto == baza.BUSArray[i]) {delete baza.BUSArray[i]; baza. Bcount - ;}

}

}= baza.TFArray[0];(PageControl1->ActivePage->PageIndex==2)

{(int i = 0; i <= baza. Tcount-1; i++)

{

if (avto == baza.TRACKArray[i]) {delete baza.TRACKArray[i]; baza. Tcount - ;}

}

}_z1->Clear();_z2->Clear();_z3->Clear();->Click();

}(EConvertError*)

{(0, «Данная операция не может быть выполнена!», «Ошибка!», MB_ICONERROR);

}

}

// -__fastcall TFirst: BitBtn6Click (TObject *Sender)

{

{->Clear();->Lines->Add («Автомобили»);->Lines->Add(«====================»);->Clear();->Lines->Add («Автобусы»);->Lines->Add(«=====================»);->Clear();->Lines->Add («Грузовики»);->Lines->Add(«====================»);*avto;*INFO = new TStringList();

//// вывод информации о машинах(int i = 0; i <=baza. Ccount-1; i++)

{= baza.CARArray[i];->PRINT(INFO);->Lines->AddStrings(INFO);>Clear();->Lines->Add(«*********************»);

}

//// вывод информации об автобусах

for (int i = 0; i <=baza. Bcount-1; i++)

{= baza.BUSArray[i];->PRINT(INFO);->Lines->AddStrings(INFO);>Clear();->Lines->Add(«*********************»);

}

//// вывод информации о грузовиках

for (int i = 0; i <=baza. Tcount-1; i++)

{= baza.TRACKArray[i];->PRINT(INFO);->Lines->AddStrings(INFO);>Clear();->Lines->Add(«********************»);

}

}(EConvertError*)

{(0, «Выполенине операции не может быть осуществленно!», «Ошибка!», MB_ICONERROR);

}

}

// -


Приложение 2


Руководство пользователя


Общие сведения о программном продукте

Программа предназначена для хранения и обработки информации о автомобильном транспорте.

Функциональные возможности программы:

·Добавление элементов в очередь;

·Удаление элементов из очереди;

·Поиск данных по конкретному значению и по диапазону допустимых значений;

·Загрузка данных из файла;

·Сохранение данных в файл;

·Ввод данных с клавиатуры.


Описание установки

Данная программа не требует установки. Для запуска необходимо запустить OOP.exe, так же для правильной работы программы необходимо присутствие 3 файлов car_info, bus_info, track_into.


Информация по работе

После запуска программы запустится окно изображенное на рис. П3.1


Рис. П 2.1. Окно программы


После запуска программы программа автоматически подгрузит для каждого вида транспорта свой текстовый файл. После этого информации обо всех загруженных объектах сразу отобразится на панели справа.

По загруженной информации можно производить поиск, для чего необходимо заполнить требуемые поля нужными значениями и нажать кнопку «Поиск». На панели справа отобразится информация о том автомобильном транспорте который соответствует запросу, для удобства техника разделена на отдельные виды.

Для создания объекта для начала необходимо выбрать соответствующий вид техники, после чего заполнить информационные поля. При нажатии на кнопку «Добавить», если информация будет введена правильно, появится соответствующее сообщение и в правой части обновится список объектов.

Для удаления информации для начала необходимо найти данный объект, через условие поиска, затем нажать кнопку «Удалить».

Для сохранения всех изменений необходимо нажать на клавишу «Сохранить». Все изменения с объектами будут сохранены в соответствующий файл.

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


ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++ Введение Мы живем в мире объектов.

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ