Объектно-ориентированное программирование на языке С++
Описание логической и модульной структуры разрабатываемой программы, используемые в данном процессе основные технические средства. Организация хранения данных в программе, проектирование интерфейса. Тестирование и отладка, листинг готовой программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 20.06.2012 |
Размер файла | 494,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++
Введение
Мы живем в мире объектов. Стол, автомобиль, ручка, классная доска - все это объекты. Объекты характеризуются атрибутами. Так атрибутами автомобиля являются максимальная скорость, мощность двигателя, цвет кузова и т.д.
Помимо атрибутов объекты обладают некоторыми функциональными возможностями, которые в объектно-ориентированном программировании (ООП) называют операциями или методами. Так автомобиль может ездить, корабль - плавать.
Таким образом, объект инкапсулирует атрибуты и методы, скрывая от других объектов взаимодействующих с ним и использующих его функциональность, свою реализацию. Объект - это экземпляр некоторого класса объектов или просто класса. Так автомобиль Audi 6 является экземпляром класса автомобилей данной модели, приемник Sony SW-7600G так же будет представителем класса одноименных приемников.
Классы могут быть связаны друг с другом различными отношениями. Одним из основных таких отношений является отношение класс - подкласс, известный в объектно-ориентированном программировании как наследование. Например, класс автомобилей Audi 6 является подклассом легковых автомобилей, который в свою очередь входит в более крупный класс автомобилей, а последний является подклассом класса транспортных средств, который помимо автомобилей включает в себя самолеты, корабли поезда и т.д. Примером подобных отношений, являются системы классификации в ботанике и зоологии. Отношением, обратным наследованию, является обобщение или генерализация. Она указывает, что некий класс, является более общим (обобщенным) классом другого класса. Класс транспортных средств, к примеру, является генерализацией классов автомобилей, самолетов и кораблей.
При наследовании все атрибуты и методы родительского класса наследуются классом-потомком. Наследование может быть многоуровневым, и тогда классы, находящиеся на нижних уровнях иерархии, унаследуют все свойства (атрибуты и методы) всех классов, прямыми или косвенными потомками которых они являются.
Помимо одиночного, существует и множественное наследование, когда класс наследует сразу нескольким классам. При этом он унаследует свойства всех классов, потомком которых он является. При использовании множественного наследования необходимо быть особенно внимательным, так как возможны коллизии, когда класс-потомок может унаследовать одноименные свойства, с различным содержанием.
При наследовании одни методы класса могут замещаться другими. Так, класс транспортных средств будет обладать обобщенным методом движения. В классах-потомках этот метод будет конкретизирован: автомобиль будет ездить, самолет - летать, корабль - плавать. Такое изменение семантики метода называется полиморфизмом. Полиморфизм - это выполнение методом с одним и тем же именем различных действий в зависимости от контекста, в частности, от принадлежности тому или другому классу. В разных языках программирования полиморфизм реализуется различными способами. Например, в C++ он реализован с помощью механизма виртуальных функций.
1. Общие сведения
Разрабатываемое приложение курсовой работы носит название «OOP».
Данная программа позволяет продемонстрировать основные концепции ООП и возможности среды визуальной разработки приложений Borland C++ Builder 6 для работы с классами. Пользователь имеет возможности:
· Добавление объектов;
· Удаление объектов;
· Загрузка данных из файла;
· Сохранение данных в файл;
· Поиск данных по основным полям.
Данное приложение написано в среде Borland C++ Builder 6 на языке С++. Дополнительная установка программного обеспечения не требуется.
2. Теоретические сведения
Объектно-ориентированное программирование представляет собой метод программирования, который весьма близко напоминает наше поведение, является более структурным, более модульным и более абстрактным, чем предыдущие попытки абстрагирования данных и переноса деталей программирования на внутренний уровень.
Основные определения:
Класс - это тип, описывающий устройство объектов. Понятие «класс» подразумевает некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что обладает определённым поведением и способом представления. Говорят, что объект - это экземпляр класса. [1]
Объект - сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса. [3]
Прототип - это объект-образец, по образу и подобию которого создаются другие объекты.
Объектно-ориентированный язык программирования характеризуется тремя основными свойствами:
1. Инкапсуляция. Комбинирование записей с процедурами и функциями, манипулирующими полями этих записей, формирует новый тип данных - объект.
2. Наследование. Определение объекта и его дальнейшее использование для построения иерархии порожденных объектовс возможностью для каждого порожденного объекта, относящегося к иерархии, доступа к коду и данным всех порождающих объектов.
3. Полиморфизм. Присваивание действию одного имени, которое затем совместно используется вниз и вверх по иерархии объектов, причем каждый объект иерархии выполняет это действие способом, именно ему подходящим.
3. Описание логической структуры
Для описания предметной области «Автомобильный транспорт» была создана иерархия классов, базовым классом которой является абстрактный базовый класс. Иерархия имеет следующий вид (рис. 1.):
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Рис. 1 Иерархия классов
логический программа интерфейс листинг
Класс «Автомобильный транспорт» является абстрактным базовым классом. Он содержит поля, которые отражают общие характеристики всего авто транспорта. Кроме этого, класс «Автомобильный транспорт» имеет набор функций: виртуальные функции для сохранения и вывода данных, инициализирующий конструктор
class AVTO
{public: AVTO (String _marka, String _model, int _year, int _power);
virtual void PRINT (TStringList *lines) {…};
virtual void GET (TStringList *lines) {…};
protected:
String 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);
virtual void PRINT (TStringList *lines) {…};
virtual void GET (TStringList *lines) {…};
protected:
int gruz; String kuzovg;
};
Класс «Пассажирские»:
class PASS: public AVTO
{public: PASS (String _marka, String _model, int _year, int _power, int _mesta);
virtual void PRINT (TStringList *lines) {…}
virtual void GET (TStringList *lines) {…};
protected:
int mesta;
};
Класс «Автомобили»
class CAR: public PASS
{public: CAR (String _marka, String _model, int _year, int _power, int _mesta, String _kuzovl, String _klass);
virtual void PRINT (TStringList *lines) {…}
virtual void GET (TStringList *lines) {.}
protected:
String kuzovl; String klass;
};
Класс «Автобусы»
class BUS: public PASS
{public: BUS (String _marka, String _model, int _year, int _power, int _mesta, String _type, int _dlina);
virtual void PRINT (TStringList *lines) {…}
virtual void GET (TStringList *lines) {…}
protected:
String type; int dlina;
};
Для удобства работы с этими классами и обращения их к общей информации, такой как структура хранения указателей, счетчики записей и т.д., создан отдельный класс. В данном классе описаны структуры хранения информации и методы работы с этими структурами.
class BAZA
{public:
/// массивы указателей конечных классов
TRACK *TRACKArray[100];
BUS *BUSArray[100];
CAR *CARArray[100];
/// массивы указателей для поиска и удаления
TRACK *TFArray[100];
BUS *BFArray[100];
CAR *CFArray[100];
int Tcount; int Bcount; int Ccount; int CFcount; int BFcount; int TFcount;
/// чтение данных в массив из файла
virtual void ReadFileBase () {…}
/// Создание объекта из файла
virtual void Create (TStringList *INFO, int clas) {…}
virtual 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. Организация хранения данных в программе
Работа со всеми объектами в программе происходит при помощи указателей. В программе используются три массива указателей для каждого класса Так же созданы несколько вспомогательных массива для временного хранения указателей.
При закрытии приложения все объекты, указатели на которые хранятся в этом массиве, уничтожаются.
9. Проектирование интерфейса программы
Интерфейс программы имеет однооконную структуру. Основное окно программы представлено на рисунке 2.
Рис. 2 Основное окно
Слева в программе расположены панели ввода информации об объектах. В правой части экрана происходит отражение информации.
10. Тестирование и отладка
В ходе разработки приложения необходимо тестирование и отладка на каждом этапе. Соответственно, после реализации иерархии классов, реализации методов этих классов, реализации дополнительного функционала проводились тесты, чтобы выявить недочеты и устранить их (результату промежуточного тестирования не приведены). Результат комплексного тестирования представлен в таблице3.
Таблица 3. Результат тестирования программы
№ |
Тест |
Результат |
|
1 |
Реализация иерархии классов: создание объектов (модули реализации классов) |
Успешно |
|
2 |
Реализация иерархии классов: работа с полями (модули реализации классов) |
Отладка функций GET для доступа к полям объектов классов. Успешно |
|
3 |
Вод из файла (модуль работы с объектами классов и модуль реализации классов) |
Откладка функции ReadFileBase для извлечения данных из файла. Успешно. |
|
4 |
Сохранение в файл (модуль работы с объектами классов и модуль реализации классов) |
Успешно |
|
5 |
Просмотр данных (модуль самого приложения и модуль реализации классов) |
Успешно |
|
6 |
Добавление (модуль самого приложения и модуль реализации классов) |
Отладка процедуры добавления, добавление обработчиков ошибок. Успешно |
|
7 |
Поиск (использование дополнительного класса) |
Успешно |
|
8 |
Удаление (использование дополнительного класса) |
Успешно |
Таким образом, функционал приложения и его реализация соответствуют требованиям, предъявленным в техническом задании.
Заключение
В ходе выполнения курсовой работы были закреплены теоретические знания в области объектно-ориентированного программирования на зыке С++. Была разработана иерархия классов предметной области «Автомобильный транспорт», закреплены знания о создании и использовании динамических структур данных.
Также научился работать с объектами иерархии классов.
Применение объектно-ориентированного подхода к программированию и широкие возможности языка С++ в среде визуального программирования С++ Builder является мощным и гибким средством при создании программ имитирующих поведение объектов реального мира.
Список литературы
Википедия - свободная энциклопедия (www.wikipedia.org)
Айра Пол ООП на С++ - СПб.: «Бином», «Невский диалект», 2001 - 461 с.
Р. Лафоре ООП в С++ - М.: «Питер», 2004 - 923 с.
Ахо А., Хопкрофт Д., Ульман Д. Структуры данных и алгоритмы - М.: Издательский дом «Вильямс», 2001 - 384 с.
Приложение 1
Текст программы
// -
#include <vcl.h>
#pragma hdrstop
#include <fstream.h>
#include «first_u.h»
// -
#pragma package (smart_init)
#pragma resource «*.dfm»
TFirst *First;
///////////////////////////////////////////////// Базовый класс АВТО ///////////////////////////////////////////////////////////////
class AVTO
{public: AVTO (String _marka, String _model, int _year, int _power);
virtual void PRINT (TStringList *lines)
{
lines->Add («Марка:» + marka);
lines->Add («Модель:» + model);
lines->Add («Год выпуска: «+ IntToStr(year));
lines->Add («Мощность:» + IntToStr(power));
};
virtual void GET (TStringList *lines)
{
lines->Add(marka);
lines->Add(model);
lines->Add (IntToStr(year));
lines->Add (IntToStr(power));
};
protected:
String marka;
String model;
int year;
int power;
};
AVTO:AVTO (String _marka, String _model, int _year, int _power): marka(_marka), model(_model), year(_year), power (_power) {};
////////////////////////////////////// Подкласс ГРУЗОВИКИ класса АВТО ///////////////////////////////////////////////////////////////
class TRACK: public AVTO
{public: TRACK (String _marka, String _model, int _year, int _power, int _gruz, String _kuzovg);
virtual void PRINT (TStringList *lines)
{
AVTO:PRINT(lines);
lines->Add («Грузоподъемность:» + IntToStr(gruz));
lines->Add («Тип грузовика:» + kuzovg);
}
virtual void GET (TStringList *lines)
{
AVTO:GET(lines);
lines->Add (IntToStr(gruz));
lines->Add(kuzovg);
};
protected:
int gruz;
String kuzovg;
};
TRACK:TRACK (String _marka, String _model, int _year, int _power, int _gruz, String_kuzovg): AVTO (_marka,_model,_year,_power), gruz(_gruz), kuzovg(_kuzovg) {};
///////////////////////////////////// Подкласс ПАССАЖИРСКИЕ класса АВТО ///////////////////////////////////////////////////////////////
class PASS: public AVTO
{public: PASS (String _marka, String _model, int _year, int _power, int _mesta);
virtual void PRINT (TStringList *lines)
{
AVTO:PRINT(lines);
lines->Add («Вместимость:» + IntToStr(mesta));
}
virtual void GET (TStringList *lines)
{
AVTO:GET(lines);
lines->Add (IntToStr(mesta));
};
protected:
int mesta;
};
PASS:PASS (String _marka, String _model, int _year, int _power, int _mesta):AVTO (_marka, _model, _year, _power), mesta(_mesta)
{};
///////////////////////////////////// Подкласс АВТОМОБИЛИ класса ПАССАЖИРСКИЕ ///////////////////////////////////////////////////////////////
class CAR: public PASS
{public: CAR (String _marka, String _model, int _year, int _power, int _mesta, String _kuzovl, String _klass);
virtual void PRINT (TStringList *lines)
{
PASS:PRINT(lines);
lines->Add («Кузов:» + kuzovl);
lines->Add («Класс авто:» + klass);
}
virtual void GET (TStringList *lines)
{
PASS:GET(lines);
lines->Add(kuzovl);
lines->Add(klass);
}
protected:
String kuzovl;
String klass;
};
CAR: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) {};
////////////////////////////////////// Подкласс АВТОБУСЫ класса ПАССАЖИРСКИЕ ///////////////////////////////////////////////////////////////
class BUS: public PASS
{public: BUS (String _marka, String _model, int _year, int _power, int _mesta, String _type, int _dlina);
virtual void PRINT (TStringList *lines)
{
PASS:PRINT(lines);
lines->Add («Назначение:» + type);
lines->Add («Габаритная длинна:» + IntToStr(dlina));
}
virtual void GET (TStringList *lines)
{
PASS:GET(lines);
lines->Add(type);
lines->Add (IntToStr(dlina));
}
protected:
String type;
int dlina;
};
BUS: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];
CAR *CARArray[100];
/// массивы указателей для поиска и удаления
TRACK *TFArray[100];
BUS *BFArray[100];
CAR *CFArray[100];
int Tcount;
int Bcount;
int Ccount;
int CFcount;
int BFcount;
int TFcount;
/// чтение данных в массив из файла
virtual void ReadFileBase ()
{
TStringList *TRACKbase = new TStringList();
TStringList *BUSbase = new TStringList();
TStringList *CARbase = new TStringList();
TStringList *INFO = new TStringList();
TRACKbase -> LoadFromFile («track_info.txt»);
BUSbase -> LoadFromFile («bus_info.txt»);
CARbase -> LoadFromFile («car_info.txt»);
int lenCar = 7;
INFO->Clear();
for (int j = 0; j <= (CARbase->Count/lenCar-1); j++)
{
for (int i = 0; i <= lenCar-1; i++)
{
INFO->Add (CARbase->Strings [j*lenCar+i]);
}
Create (INFO, 1);
INFO->Clear();
}
int lenBus = 7;
INFO->Clear();
for (int j = 0; j <= (BUSbase->Count/lenBus-1); j++)
{
for (int i = 0; i <= lenBus-1; i++)
{
INFO->Add (BUSbase->Strings [j*lenBus+i]);
}
Create (INFO, 2);
INFO->Clear();
}
int lenTrack = 6;
INFO->Clear();
for (int j = 0; j <= (TRACKbase->Count/lenTrack-1); j++)
{
for (int i = 0; i <= lenTrack-1; i++)
{
INFO->Add (TRACKbase->Strings [j*lenTrack+i]);
}
Create (INFO, 3);
INFO->Clear();
}
}
/// Создание объекта из файла
virtual void Create (TStringList *INFO, int clas)
{
switch (clas)
{
case 1:
CARArray[Ccount] = new CAR
(INFO->Strings[0].c_str(),
INFO->Strings[1].c_str(),
StrToInt (INFO->Strings[2]),
StrToInt (INFO->Strings[3]),
StrToInt (INFO->Strings[4]),
INFO->Strings[5].c_str(),
INFO->Strings[6].c_str());
++Ccount;
break;
case 2:
BUSArray[Bcount] = new BUS
(INFO->Strings[0].c_str(),
INFO->Strings[1].c_str(),
StrToInt (INFO->Strings[2]),
StrToInt (INFO->Strings[3]),
StrToInt (INFO->Strings[4]),
INFO->Strings[5].c_str(),
StrToInt (INFO->Strings[6]));
++Bcount;
break;
case 3:
TRACKArray[Tcount] = new TRACK
(INFO->Strings[0].c_str(),
INFO->Strings[1].c_str(),
StrToInt (INFO->Strings[2]),
StrToInt (INFO->Strings[3]),
StrToInt (INFO->Strings[4]),
INFO->Strings[5].c_str());
++Tcount;
}
}
virtual void FIND (String value, int pole)
{
TStringList *INFO = new TStringList();
CFcount=0;
BFcount=0;
TFcount=0;
/// поиск значения по массиву автомобилей
for (int i = 0; i <Ccount; i++)
{
CARArray[i]->GET(INFO);
if (value == INFO->Strings[pole])
{
CFArray[CFcount]= CARArray[i];
CFcount++;
}
INFO->Clear();
}
/// поиск значения по массиву автобусы
for (int i = 0; i <Bcount; i++)
{
BUSArray[i]->GET(INFO);
if (value == INFO->Strings[pole])
{
BFArray[BFcount]= BUSArray[i];
BFcount++;
}
INFO->Clear();
}
/// поиск значения по массиву автобусы
for (int i = 0; i <Tcount; i++)
{
TRACKArray[i]->GET(INFO);
if (value == INFO->Strings[pole])
{
TFArray[TFcount]= TRACKArray[i];
TFcount++;
}
INFO->Clear();
}
}
};
BAZA baza;
void __fastcall TFirst: FormActivate (TObject *Sender)
{
try
{
dat1->Clear();
dat1->Lines->Add («Автомобили»);
dat1->Lines->Add(«============»);
dat2->Clear();
dat2->Lines->Add («Автобусы»);
dat2->Lines->Add(«===========»);
dat3->Clear();
dat3->Lines->Add («Грузовики»);
dat3->Lines->Add(«===========»);
AVTO *avto;
TStringList *INFO = new TStringList();
baza. ReadFileBase();
//// вывод информации о машинах
for (int i = 0; i <=baza. Ccount-1; i++)
{
avto = baza.CARArray[i];
avto ->PRINT(INFO);
dat1->Lines->AddStrings(INFO);
INFO->Clear();
dat1->Lines->Add(«**************»);
}
//// вывод информации об автобусах
for (int i = 0; i <=baza. Bcount-1; i++)
{
avto = baza.BUSArray[i];
avto ->PRINT(INFO);
dat2->Lines->AddStrings(INFO);
INFO->Clear();
dat2->Lines->Add(«**************»);
}
//// вывод информации о грузовиках
for (int i = 0; i <=baza. Tcount-1; i++)
{
avto = baza.TRACKArray[i];
avto ->PRINT(INFO);
dat3->Lines->AddStrings(INFO);
INFO->Clear();
dat3->Lines->Add(«****************»);
}
}
catch (EConvertError*)
{
MessageBoxA (0, «Чтение файла!», «Ошибка!», MB_ICONERROR);
}
}
// -
void __fastcall TFirst: BitBtn1Click (TObject *Sender)
{
try
{ /// Добавление и вывод нового объекта
if (transport->Text == «Автомобили»)
{
if ((marka->Text==»»)||(model->Text==»»)||
(god_vipuska->Text==»»)||(power->Text==»»)||
(vmestimost->Text==»»)||(tip_kuzova->Text==»»)||
(class_avto->Text==»»))
MessageBoxA (0, «Заполните все поля!!!», «Ошибка!!!», MB_ICONWARNING); else
{
baza.CARArray [baza. Ccount] = new CAR
(marka->Text.c_str(),
model->Text.c_str(),
StrToInt (god_vipuska->Text),
StrToInt (power->Text),
StrToInt (vmestimost->Text),
tip_kuzova->Text.c_str(),
class_avto->Text.c_str());
++ baza. Ccount;
MessageBoxA (0, «Выполнено успешно!», «Добавление данных!», mbYes);
AVTO *avto;
TStringList *INFO = new TStringList();
avto = baza.CARArray [baza. Ccount-1];
avto ->PRINT(INFO);
dat1->Lines->AddStrings(INFO);
INFO->Clear();
dat1->Lines->Add(«**************************************************************************»);
}
};
}
catch (EConvertError*)
{
MessageBoxA (0, «Проверьте правильность введенных данных!», «Ошибка!», MB_ICONERROR);
}
try
{ /// Добавление и вывод нового объекта
if (transport->Text == «Автобусы»)
{
if ((marka->Text==»»)||(model->Text==»»)||
(god_vipuska->Text==»»)||(power->Text==»»)||
(vmestimost->Text==»»)||(naznachenie->Text==»»)||
(gab_dlinna->Text==»»))
MessageBoxA (0, «Заполните все поля!!!», «Ошибка!!!», MB_ICONWARNING); else
{
baza.BUSArray [baza. Bcount] = new BUS
(marka->Text.c_str(),
model->Text.c_str(),
StrToInt (god_vipuska->Text),
StrToInt (power->Text),
StrToInt (vmestimost->Text),
naznachenie->Text.c_str(),
StrToInt (gab_dlinna->Text));
++ baza. Bcount;
MessageBoxA (0, «Выполнено успешно!», «Добавление данных!», mbYes);
AVTO *avto;
TStringList *INFO = new TStringList();
avto = baza.BUSArray [baza. Bcount-1];
avto ->PRINT(INFO);
dat2->Lines->AddStrings(INFO);
INFO->Clear();
dat2->Lines->Add(«**************************************************************************»);
}
};
}
catch (EConvertError*)
{
MessageBoxA (0, «Проверьте правильность введенных числовых данных!», «Ошибка!», MB_ICONERROR);
}
try
{ /// Добавление и вывод нового объекта
if (transport->Text == «Грузовики»)
{
if ((marka->Text==»»)||(model->Text==»»)||
(god_vipuska->Text==»»)||(power->Text==»»)||
(gruzopodemnost->Text==»»)||(tip_gruzovika->Text==»»))
MessageBoxA (0, «Заполните все поля!!!», «Ошибка!!!», MB_ICONWARNING); else
{
baza.TRACKArray [baza. Tcount] = new TRACK
(marka->Text.c_str(),
model->Text.c_str(),
StrToInt (god_vipuska->Text),
StrToInt (power->Text),
StrToInt (gruzopodemnost->Text),
tip_gruzovika->Text.c_str());
++ baza. Tcount;
MessageBoxA (0, «Выполнено успешно!», «Добавление данных!», mbYes);
AVTO *avto;
TStringList *INFO = new TStringList();
avto = baza.BUSArray [baza. Tcount-1];
avto ->PRINT(INFO);
dat3->Lines->AddStrings(INFO);
INFO->Clear();
dat3->Lines->Add(«**************************************************************************»);
}
};
}
catch (EConvertError*)
{
MessageBoxA (0, «Проверьте правильность введенных числовых данных!», «Ошибка!», MB_ICONERROR);
}
}
// -
void __fastcall TFirst:transportChange (TObject *Sender)
{
if (transport->Text == «Автомобили»)
{
GroupBox2->Caption = transport->Text;
vmestimost->Visible = true;
tip_kuzova->Visible = true;
class_avto->Visible = true;
dat1->Visible = true;
naznachenie->Visible = false;
gab_dlinna->Visible = false;
tip_gruzovika->Visible = false;
gruzopodemnost->Visible = false;
dat2->Visible = false;
dat3->Visible = false;
}
if (transport->Text == «Автобусы»)
{
GroupBox2->Caption = transport->Text;
vmestimost->Visible = true;
naznachenie->Visible = true;
gab_dlinna->Visible = true;
dat2->Visible = true;
tip_kuzova->Visible = false;
class_avto->Visible = false;
tip_gruzovika->Visible = false;
gruzopodemnost->Visible = false;
dat1->Visible = false;
dat3->Visible = false;
}
if (transport->Text == «Грузовики»)
{
GroupBox2->Caption = transport->Text;
tip_gruzovika->Visible = true;
gruzopodemnost->Visible = true;
dat3->Visible = true;
vmestimost->Visible = false;
naznachenie->Visible = false;
gab_dlinna->Visible = false;
tip_kuzova->Visible = false;
class_avto->Visible = false;
dat2->Visible = false;
dat1->Visible = false;
}
}
// -
__fastcall TFirst:TFirst (TComponent* Owner)
: TForm(Owner)
{
}
// -
void __fastcall TFirst:N5Click (TObject *Sender)
{
First->Close();
}
// -
void __fastcall TFirst: BitBtn5Click (TObject *Sender)
{
try
{
AVTO *avto;
TStringList *INFO = new TStringList();
/// Добавление и вывод нового объекта
if (transport->Text == «Автомобили»)
{
for (int i = 0; i <= baza. Ccount-1; i++)
{
avto = baza.CARArray[i];
avto->GET(INFO);
}
INFO->SaveToFile («car_info.txt»);
INFO->Clear();
}
/// Добавление и вывод нового объекта
if (transport->Text == «Автобусы»)
{
for (int i = 0; i <= baza. Bcount-1; i++)
{
avto = baza.BUSArray[i];
avto->GET(INFO);
}
INFO->SaveToFile («bus_info.txt»);
INFO->Clear();
}
/// Добавление и вывод нового объекта
if (transport->Text == «Грузовики»)
{
for (int i = 0; i <= baza. Tcount-1; i++)
{
avto = baza.TRACKArray[i];
avto->GET(INFO);
}
INFO->SaveToFile («track_info.txt»);
INFO->Clear();
}
}
catch (EConvertError*)
{
MessageBoxA (0, «Сохранение данных!», «Ошибка!», MB_ICONERROR);
}
}
// -
void __fastcall TFirst: BitBtn4Click (TObject *Sender)
{
f_z1->Clear();
f_z2->Clear();
f_z3->Clear();
}
// -
void __fastcall TFirst: BitBtn3Click (TObject *Sender)
{
try
{
AVTO *avto;
TStringList *INFO= new TStringList();
int par;
f_z1->Clear();
f_z2->Clear();
f_z3->Clear();
if (poick_pole->Text== «Марка») par=0;
if (poick_pole->Text== «Модель») par=1;
if (poick_pole->Text== «Год выпуска») par=2;
baza.FIND (znachenie->Text, par);
for (int i = 0; i < baza.CFcount; i++)
{
avto = baza.CFArray[i];
avto->PRINT(INFO);
f_z1->Lines->AddStrings(INFO);
INFO->Clear();
f_z1->Lines->Add(«***********»);
}
for (int i = 0; i < baza.BFcount; i++)
{
avto = baza.BFArray[i];
avto->PRINT(INFO);
f_z2->Lines->AddStrings(INFO);
INFO->Clear();
f_z2->Lines->Add(«**********»);
}
for (int i = 0; i < baza.TFcount; i++)
{
avto = baza.TFArray[i];
avto->PRINT(INFO);
f_z3->Lines->AddStrings(INFO);
INFO->Clear();
f_z3->Lines->Add(«****************»);
}
}
catch (EConvertError*)
{
MessageBoxA (0, «Проверьте правильность введенных числовых данных!», «Ошибка!», MB_ICONERROR);
}
}
// -
void __fastcall TFirst: BitBtn2Click (TObject *Sender)
{
try
{
AVTO *avto;
avto = baza.CFArray[0];
if (PageControl1->ActivePage->PageIndex==0)
{
for (int i = 0; i <= baza. Ccount-1; i++)
{
if (avto == baza.CARArray[i]) {delete baza.CARArray[i]; baza. Ccount - ;}
}
}
avto = baza.BFArray[0];
if (PageControl1->ActivePage->PageIndex==1)
{
for (int i = 0; i <= baza. Bcount-1; i++)
{
if (avto == baza.BUSArray[i]) {delete baza.BUSArray[i]; baza. Bcount - ;}
}
}
avto = baza.TFArray[0];
if (PageControl1->ActivePage->PageIndex==2)
{
for (int i = 0; i <= baza. Tcount-1; i++)
{
if (avto == baza.TRACKArray[i]) {delete baza.TRACKArray[i]; baza. Tcount - ;}
}
}
f_z1->Clear();
f_z2->Clear();
f_z3->Clear();
BitBtn6->Click();
}
catch (EConvertError*)
{
MessageBoxA (0, «Данная операция не может быть выполнена!», «Ошибка!», MB_ICONERROR);
}
}
// -
void __fastcall TFirst: BitBtn6Click (TObject *Sender)
{
try
{
dat1->Clear();
dat1->Lines->Add («Автомобили»);
dat1->Lines->Add(«====================»);
dat2->Clear();
dat2->Lines->Add («Автобусы»);
dat2->Lines->Add(«=====================»);
dat3->Clear();
dat3->Lines->Add («Грузовики»);
dat3->Lines->Add(«====================»);
AVTO *avto;
TStringList *INFO = new TStringList();
//// вывод информации о машинах
for (int i = 0; i <=baza. Ccount-1; i++)
{
avto = baza.CARArray[i];
avto ->PRINT(INFO);
dat1->Lines->AddStrings(INFO);
INFO->Clear();
dat1->Lines->Add(«*********************»);
}
//// вывод информации об автобусах
for (int i = 0; i <=baza. Bcount-1; i++)
{
avto = baza.BUSArray[i];
avto ->PRINT(INFO);
dat2->Lines->AddStrings(INFO);
INFO->Clear();
dat2->Lines->Add(«*********************»);
}
//// вывод информации о грузовиках
for (int i = 0; i <=baza. Tcount-1; i++)
{
avto = baza.TRACKArray[i];
avto ->PRINT(INFO);
dat3->Lines->AddStrings(INFO);
INFO->Clear();
dat3->Lines->Add(«********************»);
}
}
catch (EConvertError*)
{
MessageBoxA (0, «Выполенине операции не может быть осуществленно!», «Ошибка!», MB_ICONERROR);
}
}
// -
Приложение 2
Руководство пользователя
Общие сведения о программном продукте
Программа предназначена для хранения и обработки информации о автомобильном транспорте.
Функциональные возможности программы:
· Добавление элементов в очередь;
· Удаление элементов из очереди;
· Поиск данных по конкретному значению и по диапазону допустимых значений;
· Загрузка данных из файла;
· Сохранение данных в файл;
· Ввод данных с клавиатуры.
Описание установки
Данная программа не требует установки. Для запуска необходимо запустить OOP.exe, так же для правильной работы программы необходимо присутствие 3 файлов car_info, bus_info, track_into.
Информация по работе
После запуска программы запустится окно изображенное на рис. П3.1
Рис. П 2.1. Окно программы
После запуска программы программа автоматически подгрузит для каждого вида транспорта свой текстовый файл. После этого информации обо всех загруженных объектах сразу отобразится на панели справа.
По загруженной информации можно производить поиск, для чего необходимо заполнить требуемые поля нужными значениями и нажать кнопку «Поиск». На панели справа отобразится информация о том автомобильном транспорте который соответствует запросу, для удобства техника разделена на отдельные виды.
Для создания объекта для начала необходимо выбрать соответствующий вид техники, после чего заполнить информационные поля. При нажатии на кнопку «Добавить», если информация будет введена правильно, появится соответствующее сообщение и в правой части обновится список объектов.
Для удаления информации для начала необходимо найти данный объект, через условие поиска, затем нажать кнопку «Удалить».
Для сохранения всех изменений необходимо нажать на клавишу «Сохранить». Все изменения с объектами будут сохранены в соответствующий файл.
При некорректном использовании программы пользователю будут выводиться соответствующие информационные сообщения. При неправильном ручном редактировании информационных файлов, работа программы может быть не правильной или невозможной!
Размещено на Allbest.ru
Подобные документы
Создание программы для обработки информации об объектах предметной области "Бытовая техника" в среде визуального программирования C++. Иерархия родственных классов. Описание логической структуры программы. Реализация файлового ввода/вывода данных.
курсовая работа [711,4 K], добавлен 27.07.2014Объектно-ориентированное программирование: понятие и содержание, история зарождения и развития, особенности и принципы реализации. Структура и назначение разрабатываемой программы, используемые технические и программные средства, формирование инструкции.
курсовая работа [1,2 M], добавлен 17.04.2013Введение в объектно-ориентированное программирование. Постановка задачи. Описание алгоритма решения в псевдокоде (команды в виде текста на русском языке). Исходный текст программы на С. Тестирование программы. Модификация программы. Полиморфизм.
курсовая работа [294,0 K], добавлен 08.09.2008Разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Класс программы, инструкция по использованию программы.
курсовая работа [1,0 M], добавлен 26.12.2013Разработка программы на языке Pascal. Описание переменных. Действия, которые должна выполнить программа согласно выбранного алгоритма. Детализация графической части программы. Листинг и тестирование программы. Вывод массива данных на экран монитора.
контрольная работа [360,4 K], добавлен 13.06.2012Проектирование пользовательского интерфейса. Выбор формата представления данных, используемые переменные. Список процедур и макросов, их назначение. Используемые в программе функции. Тестирование и отладка правильной работы программы, схема листинга.
курсовая работа [28,6 K], добавлен 17.05.2013Глoбальныe фyнкции AFX и API. Сoзданиe пpилoжeния с пoмoщью Visual C++. Фyнкциoнальнoe назначeниe, описание логической структуры разрабатываемой программы "Десятичные дроби". Тpeбoвания к тexничeскoмy oбeспeчeнию, листинг и тестирование данной программы.
курсовая работа [2,7 M], добавлен 21.06.2011Проектирование модульной структуры программы сетевого мессенджера, назначение модуля "frmMsg". Разработка главной формы и интерфейса пользователя программы. Проектирование модуля формы "About". Разработка методики тестирования и отладка программы.
курсовая работа [606,7 K], добавлен 19.01.2012Разработка учебного приложения, играющего роль клавиатурного тренажёра. Установка различных опций. Использование средств Borland C++Builder 6.0. Объектно-ориентированное проектирование и программирование системы. Тестирование и отладка программы.
курсовая работа [730,4 K], добавлен 23.07.2013Назначение и область применения, технические характеристики, постановка задачи, описание алгоритма и организация входных и выходных данных для программы. Разработка, описание логической структуры, используемые технические средства и условия выполнения.
курсовая работа [969,3 K], добавлен 26.03.2009