№
|
Тест
|
Результат
|
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
{: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++)
{[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++)
}
}=
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. Окно программы
После запуска программы программа
автоматически подгрузит для каждого вида транспорта свой текстовый файл. После
этого информации обо всех загруженных объектах сразу отобразится на панели
справа.
По загруженной информации можно
производить поиск, для чего необходимо заполнить требуемые поля нужными
значениями и нажать кнопку «Поиск». На панели справа отобразится информация о
том автомобильном транспорте который соответствует запросу, для удобства
техника разделена на отдельные виды.
Для создания объекта для начала
необходимо выбрать соответствующий вид техники, после чего заполнить
информационные поля. При нажатии на кнопку «Добавить», если информация будет
введена правильно, появится соответствующее сообщение и в правой части
обновится список объектов.
Для удаления информации для начала
необходимо найти данный объект, через условие поиска, затем нажать кнопку
«Удалить».
Для сохранения всех изменений
необходимо нажать на клавишу «Сохранить». Все изменения с объектами будут
сохранены в соответствующий файл.
При некорректном использовании
программы пользователю будут выводиться соответствующие информационные
сообщения. При неправильном ручном редактировании информационных файлов, работа
программы может быть не правильной или невозможной!