Эффективность множественного наследования
Реализация множественного наследования в области учета транспортных средств. Принцип работы приложения в текстовой форме, его структура. Таблица свойств объектов и идентификаторов. UML-диаграмма. Описание программы на примере с представлением экранных.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 05.11.2016 |
Размер файла | 557,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://allbest.ru
Эффективность множественного наследования
Введение
программа множественный наследование
1.Задание на курсовую работу: реализовать множественное наследование на выбранной предметной области (учет транспортных средств).
2. Постановка задачи:
- Круг пользователей приложения: данное приложение создано в соответствии с заданием учебного плана, пользователями являются только исполнитель и заказчик. Тема рассматривается только в учебных целях, поэтому приложение на данном этапе демонстрирует только принцип наследования
- Информация, вводимая пользователем приложения: Информация о транспортном средстве (далее - ТС):
- название ТС
- выбор типа ТС
- регистрационный знак ТС
- ФИО водителя ТС
- технические характеристики наземных ТС:
- масса
-расход топлива
- грузоподъемность
-количество пассажиров
-максимальная скорость)
- технические характеристики водных ТС
- допустимый размер волн для работы
-максимальная скорость по воде
- Результаты, которые необходимо получить с помощью приложения: реализация принципа множественного наследования эффективно
1. Описание принципа работы приложения в текстовой форме поэтапно
- Запуск приложения
- Добавление, изменение или удаление транспортных средств
- При добавлении указание всех необходимых данных о транспортном средстве для последующего его учета
- После добавления или изменения сохранение информации в файл базы данных
- Просмотр имеющихся ТС из базы данных, их изменение и удаление
*последовательность этапов может нарушаться
Структура приложения
2.Таблица свойств объектов
Таблица 1. ListForm.h
Объект |
Название |
Другиесвойства |
|
Button |
BtnAdd |
Text:Добавить |
|
BtnChange |
Text:Изменить |
||
BtnDelete |
Text:Удалить |
||
ToolStripMenuItem |
База данныхToolStripMenuItem |
Text:База данных |
|
СправкаToolStripMenuItem |
Text:Справка |
||
Очистить ToolStripMenuItem |
Text:Очистить |
||
СохранитьToolStripMenuItem |
Text:Сохранить |
||
ЗагрузитьToolStripMenuItem |
Text:Загрузить |
||
ListView |
VehiclesListView |
Columns: Название ТС Тип ТС Рег.знак Используется |
Таблица 2. HelpForm.h
Объект |
Название |
Другиесвойства |
|
TextBox |
HelpTextBox |
- |
|
Button |
BtnCancel |
Text:Закрыть |
Таблица 3. EditForm.h
Объект |
Название |
Другиесвойства |
|
Button |
BtnOk |
Text:Ок |
|
BtnCancel |
Text:Отменить |
||
TextBox |
NameBox |
- |
|
MassBox |
- |
||
EngineCapasityBox |
- |
||
LoadCapasityBox |
- |
||
PassengerCapacityBox |
- |
||
MaximumSpeedBox |
- |
||
ClearanceBox |
- |
||
WaterDisplacementBox |
- |
||
WaveSizeBox |
- |
||
WaterMaxSpeedBox |
- |
||
Label |
NumberLabel |
Text:Рег. знак: |
|
NameLabel |
Text:Название ТС: |
||
YearLabel |
Text:Год выпуска: |
||
DriverLabel |
Text:Водитель: |
||
label1 |
Text:Тип ТС |
||
MassLabel |
Text:Масса: |
||
EngineCapacityLabel |
Text:Расход топлива: |
||
LoadCapacityLabel |
Text:Грузоподъемность: |
||
PassengerCapacityLabel |
Text:Кол-во пассажиров: |
||
MaximumSpeedLabel |
Text:Максимальная скорость: |
||
ClearanceLabel |
Text:Клиренс: |
||
WaterDisplacementLabel |
Text:Водоизмещение: |
||
WaveSizeLabel |
Text:Допустимый размер волн: |
||
WaterMaxSpeedLabel |
Text:Макс. скорость в воде: |
||
ComboBox |
TypeComboBox |
DropDownStyle: DropDownList |
|
GroupBox |
groupBox1 |
- |
|
groupBox2 |
- |
3.Таблица идентификаторов
Таблица 4.
Областьвидимости |
Назначение |
Идентификатор |
Тип |
|
EditForm.h |
Переменная номера |
Number |
char |
|
Переменная авто |
Driver |
char |
||
Переменная имени |
Name |
String |
||
Переменная года |
y |
int |
||
Переменная расхода топлива |
Ec |
int |
||
Переменная |
Lc |
int |
||
Переменная массы ТС |
M |
int |
||
Переменная max скорости |
Mc |
int |
||
Переменная кол-ва пассажиров |
Pc |
int |
||
Переменная водоизмещения |
Wd |
int |
||
Переменная размера волн |
Wa |
int |
||
Переменная max скорости на воде |
mws |
int |
3. UML диаграмма
4. Функциональное описание
1. Основной практический смысл приложения несет наследование, которое реализовано в классе Vehicleclasses.h. В классе рассмотрены наземные и водные транспортные средства и их характеристики. (см. приложение).
2. UpdateVehicleListView - функция обновления данных в списке, после добавления, изменения или удаления данных.
3. EditButton_Click - функция нажатия кнопки изменить. При изменении программно ищется запись, которая выбрана для изменения, и в цикле проверяются условия на валидность введенных вновь значений, если все хорошо - запись изменяется и список обновляется.
4. VoidсохранитьToolStripMenuItem_Click-функция сохранения данных в базу данных.
Если выходных данных нет - то производится уведомление об ошибке записи.
5. загрузитьToolStripMenuItem_Click - функция загрузки информации из файла базы данных. В цикле просматриваются записи базы данных и выводятся в список приложения. Если данных нет, то выполняется условие проверки данных в базе и данные не загружаются, это сопровождается уведомлением пользователя.
5.Описание работы программы на примере (примерах) с представлением экранных форм
Рисунок 1.Вид приложения при запуске
Имеется возможность добавить транспортное средство, измененить существующие или удалить старые.
Рисунок 2. Добавление ТС (после нажатия на «добавить»)
Ввод параметров транспортного средства и имя владельца.
Рисунок 3. Запись данных в форму добавления ТС
Рисунок 4. Главная форма после добавления
Данные можно вновь добавить, удалить или изменить.
Форма изменения данных выглядит точно также как и форма добавления.
Рисунок 5. Добавление водного ТС происходит в аналогичном режиме.
Название столбца в таблице «используется» буквально подтверждает его название. Отсюда можно узнать, в работе сейчас ТС или нет.
Заключение
В данной курсовой работе мы рассмотрели тему «множественное наследование эффективно» и реализовали в среде MicrosoftVisualStudio 2010 на языке С++ с использованием экранных форм (winforms). В качестве предметной области была выбрана транспортная компания, ТС которой учитываются в написанном нами приложении.
Множественное наследование является способностью порожденного класса наследовать характеристики нескольких базовых классов. Для порождения класса из нескольких базовых после имени нового класса и двоеточия вы указываете имена базовых классов, разделяя их запятыми, например class cabbit: public cat, public rabbit. При определении конструктора производного класса вы должны вызвать конструкторы всех базовых классов, передавая им необходимые параметры. При порождении классов может случиться так, что используемый вами базовый класс реально порожден из других базовых классов. Если так, то ваша программа создает иерархию классов. Если вызывается конструктор вашего производного класса, то вызываются также и конструкторы наследуемых классов (последовательно).
Программа в дальнейшем может быть дополнена и обновлена и в перспективе допускается использовать её в практическом применении.
Список использованной литературы
1. Журнал для профессионалов. Программирование на С/С++, 2008, №1, 2008, №2
2. Базы данных. Вводный курс. 11.2.3 Связи - обобщения и механизмы наследования классов. http://citforum.ru/database/advanced_intro/31.shtml
3. Правило 40: Продумывайте подход к использованию множественного наследования. http://www.e-reading-lib.org/chapter.php/1002058/101/Mayers_-_Effektivnoe_ispolzovanie_CPP.html
Приложение
исходный код программы с комментариями
ListForm.h
voidUpdateVehicleListView()
{
VehicleListView->Items->Clear();
VehicleList *obj = vehicles;
while (obj != NULL)
{
VehicleListView->Items->Add(CharToSysString(obj->v->name));
System::String ^vType;
if (obj->v->CLASS_ID == LAND_VEHICLE_ID) vType = LAND_VEHICLE_NAME;
if (obj->v->CLASS_ID == WATER_VEHICLE_ID) vType = WATER_VEHICLE_NAME;
if (obj->v->CLASS_ID == AMPHIBIAN_VEHICLE_ID) vType = AMPHIBIAN_VEHICLE_NAME;
VehicleListView->Items[VehicleListView->Items->Count-1]->SubItems->Add(vType);
VehicleListView->Items[VehicleListView->Items->Count-1]->SubItems->Add(CharToSysString(obj->v->number));
VehicleListView->Items[VehicleListView->Items->Count-1]->SubItems->Add(CharToSysString(obj->v->driver));
if (obj->v->in_use) vType = "Да";
elsevType = "Нет";
VehicleListView->Items[VehicleListView->Items->Count-1]->SubItems->Add(vType);
obj = obj->next;
}
}
private: System::Void AdButton_Click(System::Object^ sender, System::EventArgs^ e)
{
edit_form->EditMode = false;
edit_form->DisableFormComponents();
edit_form->SetFormComponents();
edit_form->ShowDialog();
UpdateVehicleListView();
}
private: System::Void справкаToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
{
help_form->ShowDialog();}
private: System::Void EditButton_Click(System::Object^ sender, System::EventArgs^ e)
{
if ( VehicleListView->SelectedItems->Count == 0 ) return;
VehicleList *vl = vehicles;
vehicle *v = NULL;
while(vl != NULL )
{
if (strcmp(vl->v->name,SysStringToChar(VehicleListView->Items[VehicleListView->SelectedIndices[0]]->Text)) == 0)
{
v = vl->v;
}
vl = vl->next;
}
if (v == NULL) return;
edit_form->DisableFormComponents();
edit_form->DataFromVehicle(v);
edit_form->EditMode = true;
edit_form->EditVehicle = VehicleListView->Items[VehicleListView->SelectedIndices[0]]->Text;
edit_form->SetFormComponents();
edit_form->ShowDialog();
UpdateVehicleListView(); }
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
if ( VehicleListView->SelectedItems->Count == 0 ) return;
vehicles = DeleteVehicle(vehicles,SysStringToChar(VehicleListView->Items[VehicleListView->SelectedIndices[0]]->Text));
UpdateVehicleListView();
}
private: System::Void ListForm_FormClosed(System::Object^ sender, System::Windows::Forms::FormClosedEventArgs^ e)
{
vehicles = DeleteVehicles(vehicles);
}
private: System::Void очиститьToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
{
vehicles = DeleteVehicles(vehicles);
UpdateVehicleListView();
}
private: System::Void сохранитьToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
{
if ((this->saveFileDialog->ShowDialog() == System::Windows::Forms::DialogResult::OK) && (this->saveFileDialog->FileName->Length > 0 ))
{
char *path = SysStringToChar(this->saveFileDialog->FileName);
ofstream out(path,ios::binary);
if (out == NULL)
{
MessageBox::Show("Невозможно открыть файл для записи!.","Ошибка!.");this->Close();
}
intcount = VehicleListView->Items->Count;out.write((char*)&count,sizeof(int));
VehicleList *vl = vehicles;
while ( vl != NULL)
{
vl->v->WriteToStream( out );
vl = vl->next;
}
out.close();
}
}
private: System::Void загрузиьToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
{
if ((this->openFileDialog->ShowDialog() == System::Windows::Forms::DialogResult::OK) && (this->openFileDialog->FileName->Length > 0 ))
{
vehicles = DeleteVehicles(vehicles);
UpdateVehicleListView();
char *path = SysStringToChar(this->openFileDialog->FileName);
ifstream in(path,ios::binary);
if (in == NULL)
{
MessageBox::Show("Невозможно открыть файл для чтения!.","Ошибка!.");
this->Close();
}
intVehicleCount=0;
in.read((char*)&VehicleCount,sizeof(int));
for (int i=0;i<VehicleCount;i++)
{
int CLASS_ID;
in.read((char*)&CLASS_ID,sizeof(int));
if (CLASS_ID == LAND_VEHICLE_ID)
{
land_vehicle *v = newland_vehicle("");
v->ReadFromStream( in );
vehicles = AddVehicle(vehicles,v);
}
if (CLASS_ID == WATER_VEHICLE_ID)
{
water_vehicle *v = newwater_vehicle("");
v->ReadFromStream( in );
vehicles = AddVehicle(vehicles,v);
}
if (CLASS_ID == AMPHIBIAN_VEHICLE_ID)
{
amphibian_vehicle *v = newamphibian_vehicle("");
v->ReadFromStream( in );
vehicles = AddVehicle(vehicles,v);
}
}
in.close();
UpdateVehicleListView();
}
}
};
EditForm.h
voidDisableFormComponents()
{
this->groupBox1->Enabled = false;
this->groupBox2->Enabled = false;
this->AddButton->Enabled = false;
this->WaterMaxSpeedBox->Enabled = false;
this->WaterMaxSpeedLabel->Enabled = false;
this->ClearanceLabel->Enabled = false;
this->ClearanceBox->Enabled = false;
this->TypeComboBox->Enabled = true;
this->NameBox->Clear();
this->EngineCapacityBox->Text = "0";
this->LoadCapacityBox->Text = "0";
this->MassBox->Text = "0";
this->MaximumSpeedBox->Text = "0";
this->PassengerCapacityBox->Text = "0";
this->ClearanceBox->Text = "0";
this->WaterDisplacementBox->Text = "0";
this->WaveSizeBox->Text = "0";
this->WaterMaxSpeedBox->Text = "0";
this->NumberBox->Clear();
this->DriverBox->Clear();
this->YearBox->Clear();
this->UseCheckBox->Checked = false;
}
voidSetFormComponents()
{
if (this->EditMode)
this->TypeComboBox->Enabled = false;
if (this->TypeComboBox->SelectedIndex == LAND_VEHICLE_ID)
{
this->groupBox1->Enabled = true;
this->groupBox2->Enabled = false;
this->WaterMaxSpeedBox->Enabled = false;
this->WaterMaxSpeedLabel->Enabled = false;
this->ClearanceLabel->Enabled = true;
this->ClearanceBox->Enabled = true;
}
if (this->TypeComboBox->SelectedIndex == WATER_VEHICLE_ID)
{
this->groupBox1->Enabled = true;
this->groupBox2->Enabled = true;
this->WaterMaxSpeedBox->Enabled = false;
this->WaterMaxSpeedLabel->Enabled = false;
this->ClearanceLabel->Enabled = false;
this->ClearanceBox->Enabled = false;
}
if (this->TypeComboBox->SelectedIndex == AMPHIBIAN_VEHICLE_ID)
{
this->groupBox1->Enabled = true;
this->groupBox2->Enabled = true;
this->WaterMaxSpeedBox->Enabled = true;
this->WaterMaxSpeedLabel->Enabled = true;
this->ClearanceLabel->Enabled = true;
this->ClearanceBox->Enabled = true;
}
this->AddButton->Enabled = true;
}
boolDataToVehicle( vehicle *v )
{
System::String ^number,^driver,^name;
inty,ec,lc,m,ms,pc,rc,wd,wa,mws;
try
{
number = this->NumberBox->Text;
driver = this->DriverBox->Text;
name = this->NameBox->Text;
y = System::Convert::ToInt32(this->YearBox->Text);
ec = System::Convert::ToInt32(this->EngineCapacityBox->Text);
lc = System::Convert::ToInt32(this->LoadCapacityBox->Text);
m = System::Convert::ToInt32(this->MassBox->Text);
ms = System::Convert::ToInt32(this->MaximumSpeedBox->Text);
pc = System::Convert::ToInt32(this->PassengerCapacityBox->Text);
if (v->CLASS_ID == LAND_VEHICLE_ID)
{
rc = System::Convert::ToInt32(this->ClearanceBox->Text);
}
if (v->CLASS_ID == WATER_VEHICLE_ID)
{
wd = System::Convert::ToInt32(this->WaterDisplacementBox->Text);
wa = System::Convert::ToInt32(this->WaveSizeBox->Text);
}
if (v->CLASS_ID == AMPHIBIAN_VEHICLE_ID)
{
rc = System::Convert::ToInt32(this->ClearanceBox->Text);
wd = System::Convert::ToInt32(this->WaterDisplacementBox->Text);
wa = System::Convert::ToInt32(this->WaveSizeBox->Text);
mws = System::Convert::ToInt32(this->WaterMaxSpeedBox->Text);
}
}
catch (...)
{
MessageBox::Show("Введите корректные значения во все поля!","Ошибка.");
returnfalse;
}
if ( name == "")
{
MessageBox::Show("ВведитеназваниеТС!","Ошибка.");
returnfalse;
}
VehicleList *vl = vehicles;
while (vl != NULL)
{
if (vl->v != v)
if (strcmp(vl->v->name,SysStringToChar(name))== 0)
{
MessageBox::Show("ТС с таким именем уже существует!","Ошибка.");
returnfalse;
}
vl = vl->next;
}
v->driver = SysStringToChar(driver);
v->number = SysStringToChar(number);
v->year = y;
v->in_use = this->UseCheckBox->Checked;
v->engine_capacity = ec;
v->load_capacity = lc;
v->mass = m;
v->max_speed = ms;
v->name = SysStringToChar(name);
v->passenger_capacity = pc;
if (v->CLASS_ID == LAND_VEHICLE_ID)
{
land_vehicle *vl = (land_vehicle*) v;
vl->road_clearance = rc;
}
if (v->CLASS_ID == WATER_VEHICLE_ID)
{
water_vehicle *vw = (water_vehicle*) v;
vw->water_displacement = wd;
vw->waves_allowable_size = wa;
}
if (v->CLASS_ID == AMPHIBIAN_VEHICLE_ID)
{
amphibian_vehicle *va = (amphibian_vehicle*) v;
va->road_clearance = rc;
va->water_displacement = wd;
va->waves_allowable_size = wa;
va->max_water_speed = mws;
}
returntrue;
}
voidDataFromVehicle( vehicle *v )
{
this->NumberBox->Text = CharToSysString(v->number);
this->DriverBox->Text = CharToSysString(v->driver);
this->YearBox->Text = v->year.ToString();
this->UseCheckBox->Checked = v->in_use;
this->NameBox->Text = CharToSysString(v->name);
this->TypeComboBox->SelectedIndex = v->CLASS_ID;
this->EngineCapacityBox->Text = v->engine_capacity.ToString();
this->LoadCapacityBox->Text = v->load_capacity.ToString();
this->MassBox->Text = v->mass.ToString();
MaximumSpeedBox->Text = v->max_speed.ToString();
this->PassengerCapacityBox->Text = v->passenger_capacity.ToString();
if (v->CLASS_ID == LAND_VEHICLE_ID)
{
land_vehicle *vl = (land_vehicle*) v;
this->ClearanceBox->Text = vl->road_clearance.ToString();
}
if (v->CLASS_ID == WATER_VEHICLE_ID)
{
water_vehicle *vw = (water_vehicle*) v;
this->WaterDisplacementBox->Text = vw->water_displacement.ToString();
this->WaveSizeBox->Text = vw->waves_allowable_size.ToString();
}
if (v->CLASS_ID == AMPHIBIAN_VEHICLE_ID)
{
amphibian_vehicle *va = (amphibian_vehicle*) v;
this->ClearanceBox->Text = va->road_clearance.ToString();
this->WaterDisplacementBox->Text = va->water_displacement.ToString();
this->WaveSizeBox->Text = va->waves_allowable_size.ToString();
this->WaterMaxSpeedBox->Text = va->max_water_speed.ToString();
}
}
private: System::Void EditForm_Shown(System::Object^ sender, System::EventArgs^ e)
{
}
private: System::Void TypeComboBox_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e)
{
SetFormComponents();
}
private: System::Void AddButton_Click(System::Object^ sender, System::EventArgs^ e)
{
if (this->EditMode)
{
VehicleList *vl = vehicles;
vehicle *v;
while (vl != NULL)
{
if (strcmp(vl->v->name,SysStringToChar(this->EditVehicle))== 0)
v = vl->v;
vl = vl->next;
}
if (DataToVehicle(v) == false) return;
this->Close();
}
else
{
char *name = SysStringToChar(this->NameBox->Text);
vehicle *v;
if (this->TypeComboBox->SelectedIndex == LAND_VEHICLE_ID)
{
v = newland_vehicle(name);
}
if (this->TypeComboBox->SelectedIndex == WATER_VEHICLE_ID)
{
v = newwater_vehicle(name);
}
if (this->TypeComboBox->SelectedIndex == AMPHIBIAN_VEHICLE_ID)
{
v = newamphibian_vehicle(name);
}
if (DataToVehicle(v) == false)
{
delete v;
return;
}
vehicles = AddVehicle(vehicles,v);
this->Close();
}
}
private: System::Void CancelButton_Click(System::Object^ sender, System::EventArgs^ e)
{
this->Close();
}
private: System::Void label4_Click(System::Object^ sender, System::EventArgs^ e) {
}
};
}
Class Vehicle
classvehicle
{
public:
char *number, *driver;
int year;
boolin_use;
char *name;
int mass;
intload_capacity;
intengine_capacity;
intpassenger_capacity;
intmax_speed;
int CLASS_ID;
virtual ~vehicle()=0;
virtualvoidWriteToStream( ofstream&stream );
voidReadFromStream( ifstream&stream );
};
classland_params
{
public:
introad_clearance;
virtual ~land_params();
voidWriteToStream( ofstream&stream );
voidReadFromStream( ifstream&stream );
};
classwater_params
{
public:
intwater_displacement;
intwaves_allowable_size;
virtual ~water_params() = 0;
voidWriteToStream( ofstream&stream );
voidReadFromStream( ifstream&stream );
};
classland_vehicle: public vehicle, publicland_params
{
public:
land_vehicle(char *_name );
~land_vehicle();
voidWriteToStream( ofstream&stream );
voidReadFromStream( ifstream&stream );
};
classwater_vehicle: public vehicle, publicwater_params
{
public:
water_vehicle(char *_name );
~water_vehicle();
voidWriteToStream( ofstream&stream );
voidReadFromStream( ifstream&stream );
};
classamphibian_vehicle: public vehicle, publicland_params, publicwater_params
{
public:
intmax_water_speed;
amphibian_vehicle(char *_name );
~amphibian_vehicle();
voidWriteToStream( ofstream&stream );
voidReadFromStream( ifstream&stream );
};
structVehicleList
{
vehicle *v;
VehicleList*next;
};
externVehicleList *vehicles;
VehicleList* AddVehicle(VehicleList *first, vehicle *_v);
VehicleList* DeleteVehicle(VehicleList *first, char *_name);
VehicleList* DeleteVehicles(VehicleList *first );
voidwrite_string( ofstream&stream, char *str);
char* read_string( ifstream&stream);
char* SysStringToChar(System::String^ string);
System::String^ CharToSysString(char* ch);
VehicleClasses.cpp
#include "stdafx.h"
#include "VehicleClasses.h"
using namespace std;
VehicleList *vehicles = 0;
vehicle::~vehicle() {}
void vehicle::WriteToStream( ofstream &stream )
{
write_string( stream, name );
write_string( stream, driver );
write_string( stream, number );
stream.write((char*)&year,sizeof(int));
stream.write((char*)&in_use,sizeof(bool));
stream.write((char*)&mass,sizeof(int));
stream.write((char*)&passenger_capacity,sizeof(int));
stream.write((char*)&load_capacity,sizeof(int));
stream.write((char*)&engine_capacity,sizeof(int));
stream.write((char*)&max_speed,sizeof(int));
}
void vehicle::ReadFromStream( ifstream &stream )
{
name = read_string( stream );
driver = read_string( stream );
number = read_string( stream );
stream.read((char*)&year,sizeof(int));
stream.read((char*)&in_use,sizeof(bool));
stream.read((char*)&mass,sizeof(int));
stream.read((char*)&passenger_capacity,sizeof(int));
stream.read((char*)&load_capacity,sizeof(int));
stream.read((char*)&engine_capacity,sizeof(int));
stream.read((char*)&max_speed,sizeof(int));
}
land_params::~land_params() {}
void land_params::WriteToStream( ofstream &stream )
{
stream.write((char*)&road_clearance,sizeof(int));
}
void land_params::ReadFromStream( ifstream &stream )
{
stream.read((char*)&road_clearance,sizeof(int));
}
water_params::~water_params() {}
void water_params::WriteToStream( ofstream &stream )
{
stream.write((char*)&water_displacement,sizeof(int));
stream.write((char*)&waves_allowable_size,sizeof(int));
}
void water_params::ReadFromStream( ifstream &stream )
{
stream.read((char*)&water_displacement,sizeof(int));
stream.read((char*)&waves_allowable_size,sizeof(int));
}
land_vehicle::land_vehicle( char *_name )
{
name = _name;
CLASS_ID = LAND_VEHICLE_ID;
}
land_vehicle::~land_vehicle() {}
void land_vehicle::WriteToStream( ofstream &stream )
{
stream.write((char*)&CLASS_ID,sizeof(int));
vehicle::WriteToStream( stream );
land_params::WriteToStream( stream );
}
void land_vehicle::ReadFromStream( ifstream &stream )
{
vehicle::ReadFromStream( stream );
land_params::ReadFromStream( stream );
}
water_vehicle::water_vehicle( char *_name )
{
vehicle::name = _name;
CLASS_ID = WATER_VEHICLE_ID;
}
water_vehicle::~water_vehicle() {}
void water_vehicle::WriteToStream( ofstream &stream )
{
stream.write((char*)&CLASS_ID,sizeof(int));
vehicle::WriteToStream( stream );
water_params::WriteToStream( stream );
}
void water_vehicle::ReadFromStream( ifstream &stream )
{
vehicle::ReadFromStream( stream );
water_params::ReadFromStream( stream );
}
amphibian_vehicle::amphibian_vehicle( char *_name )
{
name = _name;
CLASS_ID = AMPHIBIAN_VEHICLE_ID;
}
amphibian_vehicle::~amphibian_vehicle(){}
void amphibian_vehicle::WriteToStream( ofstream &stream )
{
stream.write((char*)&CLASS_ID,sizeof(int));
vehicle::WriteToStream( stream );
land_params::WriteToStream( stream );
water_params::WriteToStream( stream );
stream.write((char*)&max_water_speed,sizeof(int));
}
void amphibian_vehicle::ReadFromStream( ifstream &stream )
{
vehicle::ReadFromStream( stream );
land_params::ReadFromStream( stream );
water_params::ReadFromStream( stream );
stream.read((char*)&max_water_speed,sizeof(int));
}
VehicleList* AddVehicle(VehicleList *first, vehicle *_v)
{
VehicleList *Obj = new VehicleList();
Obj->next = NULL;
Obj->v= _v;
if (first != NULL)
{
VehicleList *tmp = first;
while (tmp->next != NULL)
tmp = tmp->next;
tmp->next = Obj;
}
if (first != NULL) return first;
else return Obj;
}
VehicleList* DeleteVehicle(VehicleList *first, char *_name)
{
if ( strcmp(first->v->name,_name) == 0 )
{
VehicleList *newFirst = first->next;
delete first->v;
delete first;
return newFirst;
}
VehicleList *Prev = first;
VehicleList *Current = first->next;
while (Current != NULL)
{
if ( strcmp(Current->v->name,_name) == 0 )
{
delete Current->v;
if (Current->next != NULL)
Prev->next = Current->next;
else
Prev->next = NULL;
delete Current;
return first;
}
Prev = Prev->next;
Current = Current ->next;
}
return first;
}
VehicleList* DeleteVehicles( VehicleList *first )
{
VehicleList *del = first;
while (del != NULL)
{
del = DeleteVehicle(del,del->v->name);
}
return NULL;
}
using namespace System::Runtime::InteropServices;
void write_string( ofstream &stream, char *str)
{
int size = strlen(str);
stream.write((char*)&size,sizeof(int));
stream.write(str, sizeof(char)*size);
}
char* read_string( ifstream &stream)
{
int size = 0;
stream.read((char*)&size,sizeof(int));
char *str = new char[size+1];
stream.read(str, sizeof(char)*size);
str[size] = '\0';
return str;
}
char* SysStringToChar(System::String^ string)
{
return (char*)(void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(string);
}
System::String^ CharToSysString(char* ch)
{
System::String ^s = gcnew System::String( ch );
return s;
}
Размещено на Allbest.ru
Подобные документы
Описание предметной области. Компоненты и палитра компонентов. Выбор архитектуры приложения. Структурные и функциональные схемы. Описание разрабатываемых процедур и функций, таблица идентификаторов. Выбор стратегии тестирования и разработка тестов.
дипломная работа [8,2 M], добавлен 18.06.2014Разработка программы для автоматизации складского учета. Описание предметной области и технологии функционирования информационной системы. Физическое проектирование базы данных. Создание экранных форм ввода-вывода, отчетов, модулей для прикладных решений.
курсовая работа [3,6 M], добавлен 08.12.2013Создание приложения для вычисления значений функций и определение суммы этих функций: эскиз формы, таблица свойств объекта, список идентификаторов и непосредственные коды процедур. Результаты вычислений и выводы, проверка работы данной программы.
лабораторная работа [19,9 K], добавлен 20.10.2009Разработка и реализация демонстрационного многопоточного приложения. Выбор основных средств реализации. Описание логики работы приложения и разработка программного обеспечения. Описание пользовательского интерфейса. Реализация потоков в Delphi.
курсовая работа [462,5 K], добавлен 10.08.2014Сущность понятия "комплексное число". Умножение, деление и сложение. Класс Number и два последующих Rational Number Operation и Complex Number. Схема наследования классов исключений. Тестирование программы. Схема работы приложения. Интерфейс программы.
курсовая работа [607,3 K], добавлен 17.05.2015Принцип работы регулятора громкости в ОС Windows. Требования к интерфейсу программного продукта, программному и техническому обеспечению. Выбор ядра для разработки приложения. Инсталляция и выполнение программы. Контекстная диаграмма и листинг приложения.
курсовая работа [978,4 K], добавлен 18.06.2015Структура программы в среде Delphi в процессе проектирования приложения, ее модульный принцип. Объявление списка используемых модулей и нескольких операторов. Размещение на форме компонентов и изменение их свойств. Создание кода - обработчика события.
лабораторная работа [19,1 K], добавлен 15.07.2009Разработка программы, реализующей метод принятия решения на основе паутинной диаграммы, исходя из количества объектов исследования, их весов и критериев оценки. Листинг программного кода и пример работы программы: расчет площади многоугольников-объектов.
контрольная работа [1,1 M], добавлен 10.06.2011Система гиперболических дифференциальных уравнений в частных производных. Таблица идентификаторов для программы. Реализация программы на языке С++. Исходный код программы для вывода в среде MATLAB. Тестовые примеры для программы, реализующей явную схему.
курсовая работа [1,2 M], добавлен 19.03.2012Основные приемы работы с классами и объектами. Перегрузка функций и операторов. Массивы объектов. Реализация одиночного наследования. Множественное наследование. Виртуальные функции. Шаблоны: понятие и функциональные особенности, свойства и применение.
методичка [1,1 M], добавлен 16.04.2012