Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КП_ООПСЗ_ТКАЧУК.doc
Скачиваний:
11
Добавлен:
27.10.2018
Размер:
739.84 Кб
Скачать

7.Выводы

В проведенной курсовой работе была создана объектно-ориентированная программная система автопилота самолета, который отслеживает высоту, скорость и направление полета. Для моделирования полета была введена трехмерная система координат отображающая направление и высоту полета. Учитывается скорость полета, расстояние до объекта при бытия. Указан статус самолета(не земле, в полете).Возможно пополнение топливом на земле.

Был использован унифицированный язык моделирования (UML) для визуализации и документации модели объектно-ориентированной программы, которой является данная работа.

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

Листинг Unit1.срр

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

//---------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

CKarta karta;

CSamolet samolet;

CMonitor monitor;

//-----------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//-----------------------

void __fastcall TForm1::Timer2Timer(TObject *Sender)

{

StatusBar1->Panels->Items[0]->Text="Время: "+Time();

if (!samolet.get_fly()) StatusBar1->Panels->Items[3]->Text="Самолет стоит";

else if ((monitor.dx<0) && (monitor.dy<0)) StatusBar1->Panels->Items[3]->Text="Напрвалени: Северо-Запад";

else if ((monitor.dx>0) && (monitor.dy<0)) StatusBar1->Panels->Items[3]->Text="Напрвалени: Северо-Восток";

else if ((monitor.dx>0) && (monitor.dy>0)) StatusBar1->Panels->Items[3]->Text="Напрвалени: Юго-Восток";

else if ((monitor.dx<0) && (monitor.dy>0)) StatusBar1->Panels->Items[3]->Text="Напрвалени: Юго-Запад";

}

//-------------------------------------------

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,

int X, int Y)

{

StatusBar1->Panels->Items[1]->Text="X: "+IntToStr(X);

StatusBar1->Panels->Items[2]->Text="Y: "+IntToStr(Y);

}

//-----------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

monitor<<samolet;

monitor<<karta;

karta<<Image1;

monitor.set_im1(Image1);

monitor.set_im2(Image2);

monitor.cbox1=ComboBox1;

monitor.cbox2=ComboBox2;

monitor.l1=Label1;

monitor.l2=Label3;

monitor.l3=Label4;

monitor.l4=Label5;

monitor.l5=Label8;

monitor.l_S=Label2;

monitor.lx=Label10;

monitor.ly=Label11;

monitor.ed1=Edit1;

monitor.ed2=Edit2;

monitor.ed3=Edit3;

monitor.ed4=Edit4;

randomize();

int r=random(karta.get_kol());

int x,y;

x=karta.mas[r].get_x();

y=karta.mas[r].get_y();

samolet.set_xy(x,y);

ComboBox1->Text=karta.mas[r].get_str();

samolet.set_xy(x,y);

ComboBox1->OnChange(0);

r=random(karta.get_kol());

x=karta.mas[r].get_x();

y=karta.mas[r].get_y();

ComboBox2->Text=karta.mas[r].get_str();

ComboBox2->OnChange(0);

monitor.show_pynktu();

monitor.show();

}

//-----------------------------------------------

void __fastcall TForm1::ComboBox1Change(TObject *Sender)

{

monitor.set_punkt(ComboBox1->Text,0);

monitor.show();

}

//-----------------------------------------------

void __fastcall TForm1::ComboBox2Change(TObject *Sender)

{

monitor.set_punkt(ComboBox2->Text,1);

monitor.show();

}

//-----------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

if ( !strcmp(ComboBox1->Text.c_str(),ComboBox2->Text.c_str())) {

ShowMessage("Выберите разные пункты!!!");

return;

}

if (monitor.s*1.5 > samolet.get_v() ) {

ShowMessage("У вас не хватит топлива!!!");

return;

}

monitor.calculate();

karta.set_state(2);

karta.mas[monitor.punkt[0]].state=1;

karta.mas[monitor.punkt[1]].state=1;

Timer1->Enabled=true;

ComboBox1->Enabled=false;

ComboBox2->Enabled=false;

Button1->Enabled=false;

}

//-----------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

samolet.change(50);

monitor.show();

}

//-----------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

if (!monitor.move()) {

Button1->Enabled=true;

Timer1->Enabled=false;

}

monitor.show();

}

Листинг Unit2.срр

#pragma hdrstop

#include "Unit2.h"

#include "math.h"

CFuel::CFuel(){

v=500;

}

CFuel::CFuel(double v1){

v=v1;

}

CFuel::~CFuel(){

}

void CFuel::set_v(double v1){

v=v1;

}

double CFuel::get_v(){

return v;

}

bool CFuel::change(double d){

if ((v+d)>=0) {

v+=d;

return true;

}

else return false;

}

//-----------------------------------------------

int CKarta::get_kol(){

return kol;

}

CKarta::CKarta(){

kol=32;

mas=new CPlace[kol];

mas[0].set("spain",66,337);

mas[1].set("france",142,296);

mas[2].set("germany",216,231);

mas[3].set("italy",274,366);

mas[4].set("uk",119,175);

mas[5].set("ireland",71,169);

mas[6].set("ukraine",419,215);

mas[7].set("iceland",85,15);

mas[8].set("portugal",13,357);

mas[9].set("turkey",453,343);

mas[10].set("poland",298,184);

mas[11].set("poland",468,115);

mas[12].set("norway",215,80);

mas[13].set("sweden",254,101);

mas[14].set("finland",326,55);

mas[15].set("romania",365,281);

mas[16].set("belorussia",370,170);

mas[17].set("austria",262,264);

mas[18].set("hungary",303,271);

mas[19].set("slovakia",308,245);

mas[20].set("czech",263,231);

mas[21].set("latvia",343,123);

mas[22].set("serbia",326,309);

mas[23].set("kazakhstan",564,157);

mas[24].set("georgia",536,278);

mas[25].set("greece",343,376);

mas[26].set("morocco",30,430);

mas[27].set("algeria",131,428);

mas[28].set("tunesia",202,429);

mas[29].set("syria",522,388);

mas[30].set("irag",566,369);

mas[31].set("iran",574,319);

}

CKarta::~CKarta(){

delete[] mas;

}

void CKarta::show(){

int x,y;

int d;

im1->Canvas->Brush->Color=clWhite;

im1->Canvas->Pen->Color=clLime;

im1->Canvas->Pen->Width=1;

d=7;

for(int i=0;i<kol;i++) {

x=mas[i].get_x();

y=mas[i].get_y();

im1->Canvas->Ellipse(x-d,y-d,x+d+1,y+d+1);

}

d=3;

// im1->Canvas->Pen->Color=clRed;

im1->Canvas->Pen->Width=3;

for(int i=0;i<kol;i++) {

x=mas[i].get_x();

y=mas[i].get_y();

if (mas[i].state==0) im1->Canvas->Pen->Color=clLime;

else if (mas[i].state==1) im1->Canvas->Pen->Color=clRed;

else im1->Canvas->Pen->Color=clYellow;

im1->Canvas->MoveTo(x,y-d);

im1->Canvas->LineTo(x,y+d);

im1->Canvas->MoveTo(x-d,y);

im1->Canvas->LineTo(x+d,y);

}

}

void CKarta::set_state(int i1){

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

mas[i].state=i1;

}

void CKarta::operator<<(TImage *im){

im1=im;

}

//-----------------------------------------------

CPlace::CPlace(){

name="noname";

x=y=0;

state=0;

}

CPlace::CPlace(AnsiString str,int x1,int y1){

name=str;

x=x1;

y=y1;

state=0;

}

CPlace::~CPlace(){

}

AnsiString CPlace::get_str(){

return name;

}

void CPlace::set(AnsiString str,int x1,int y1){

name=str;

x=x1;

y=y1;

}

void CPlace::set_xy(int x1,int y1){

x=x1;

y=y1;

}

void CPlace::set_x(int x1){

x=x1;

}

void CPlace::set_y(int y1){

y=y1;

}

int CPlace::get_x(){

return x;

}

int CPlace::get_y(){

return y;

}

//-----------------------------------------------

CSamolet::CSamolet(){

x=419;

y=215;

}

CSamolet::CSamolet(double x1,double y1){

x=x1;

y=y1;

}

CSamolet::~CSamolet(){

}

void CSamolet::set_x(double x1){

x=x1;

}

void CSamolet::set_y(double y1){

y=y1;

}

void CSamolet::set_xy(double x1,double y1){

x=x1;

y=y1;

}

double CSamolet::get_x(){

return x;

}

double CSamolet::get_y(){

return y;

}

void CSamolet::set_fly(bool b){

fly=b;

}

bool CSamolet::get_fly(){

return fly;

}

void CSamolet::start(){

fly=true;

}

void CSamolet::stop(){

fly=false;

}

void CSamolet::set_skorost(double s1) {

skorost=s1;

}

double CSamolet::get_skorost(){

return skorost;

}

void CSamolet::set_h(int h1){

h=h1;

}

int CSamolet::get_h(){

return h;

}

//-----------------------------------------------

CMonitor::CMonitor(){

}

CMonitor::~CMonitor(){

}

void CMonitor::set_im1(TImage *m){

im1=m;

}

void CMonitor::set_im2(TImage *m){

im2=m;

}

void CMonitor::operator<<(CSamolet &sam){

samolet=&sam;

}

void CMonitor::operator<<(CKarta &kar){

karta=&kar;

}

void CMonitor::set_samolet(CSamolet * sam){

}

void CMonitor::show(){

im1->Picture=im2->Picture;

show_pyt();

karta->show();

im1->Canvas->Pen->Width=1;

im1->Canvas->Pen->Color=clBlack;

if (samolet->get_fly()) im1->Canvas->Brush->Color=clRed;

else im1->Canvas->Brush->Color=clBlue;

im1->Canvas->Ellipse(samolet->get_x()-5,samolet->get_y()-5,samolet->get_x()+5,samolet->get_y()+5);

ed1->Text=FloatToStrF(samolet->get_v(),ffFixed,3,00);

if (samolet->get_fly()) ed2->Text=" в полете";

else ed2->Text=" на земле";

lx->Caption="X= "+FloatToStrF(samolet->get_x(),ffFixed,3,2);

ly->Caption="Y= "+FloatToStrF(samolet->get_y(),ffFixed,3,2);

ed4->Text=IntToStr(samolet->get_h());

ed3->Text=FloatToStrF( samolet->get_skorost() ,ffFixed,3,2);

int x1,x2,y1,y2;

x1=karta->mas[punkt[0]].get_x();

y1=karta->mas[punkt[0]].get_y();

x2=karta->mas[punkt[1]].get_x();

y2=karta->mas[punkt[1]].get_y();

if (x1==x2)

if (y1==y2)

{

l_S->Caption="Растояние от точки до себя = 0 !!!";

l5->Caption="Требуемое кол-во топлива V= 0";

return;

}

s= pow(pow(x1-x2,2)+pow(y1-y2,2),0.5);

l_S->Caption="Растояние полета S= "+FloatToStrF(s,ffFixed,3,2);

l5->Caption="Требуемое кол-во топлива V= "+FloatToStrF( s*1.5,ffFixed,3,2);

}

void CMonitor::show_pynktu(){

cbox1->Items->Clear();

cbox2->Items->Clear();

for(int i=0;i<karta->get_kol();i++) {

cbox1->Items->Add(karta->mas[i].get_str());

cbox2->Items->Add(karta->mas[i].get_str());

}

}

void CMonitor::set_punkt(AnsiString str,int index){

for(int i=0;i<karta->get_kol();i++) {

if( !strcmp(str.c_str(),karta->mas[i].get_str().c_str())) {

punkt[index]=i;

break;

}

}

if (index==0) {

int x=karta->mas[punkt[index]].get_x();

int y=karta->mas[punkt[index]].get_y();

samolet->set_xy(x,y);

l1->Caption="X= "+IntToStr(karta->mas[punkt[index]].get_x());

l2->Caption="Y= "+IntToStr(karta->mas[punkt[index]].get_y());

} else {

l3->Caption="X= "+IntToStr(karta->mas[punkt[index]].get_x());

l4->Caption="Y= "+IntToStr(karta->mas[punkt[index]].get_y());

}

karta->set_state(0);

karta->mas[punkt[0]].state=1;

karta->mas[punkt[1]].state=1;

}

void CMonitor::show_pyt(){

im1->Canvas->MoveTo(karta->mas[punkt[0]].get_x(),karta->mas[punkt[0]].get_y());

im1->Canvas->LineTo(karta->mas[punkt[1]].get_x(),karta->mas[punkt[1]].get_y());

}

void CMonitor::calculate(){

int x1,x2,y1,y2;

x1=karta->mas[punkt[0]].get_x();

y1=karta->mas[punkt[0]].get_y();

x2=karta->mas[punkt[1]].get_x();

y2=karta->mas[punkt[1]].get_y();

double deltaX,deltaY;

deltaX=x2-x1;

deltaY=y2-y1;

if ( abs(deltaX)> abs(deltaY)) {

if (x2>x1) dx=1;

else if(x2==x1) dx=0;

else dx=-1;

dy=deltaY/abs(deltaX);

} else {

if (y2>y1) dy=1;

else if(y2==y1) dy=0;

else dy=-1;

dx=deltaX/abs(deltaY);

}

}

bool CMonitor::move(){

if ( abs(samolet->get_x() - karta->mas[punkt[1]].get_x()) <2)

if ( abs(samolet->get_y() - karta->mas[punkt[1]].get_y()) <2)

{

samolet->stop();

cbox1->Text=cbox2->Text;

cbox1->OnChange(0);

samolet->set_h(0);

cbox2->Enabled=true;

return false;

}

samolet->set_xy(samolet->get_x()+dx,samolet->get_y()+dy);

{

samolet->start();

samolet->set_skorost(250+random(20));

if (s<50) samolet->set_h(20+random(10));

else if (s<100) samolet->set_h(40+random(20));

else samolet->set_h(70+random(20));

samolet->change(-1.5);

return true;

}

}

//-----------------------------------------------

#pragma package(smart_init)

Листинг Unit2.h

#ifndef Unit2H

#define Unit2H

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

//-----------------------------------------------

class CPlace {

private:

int x,y;

AnsiString name;

public:

int state;

CPlace();

CPlace(AnsiString str,int x1,int y1);

~CPlace();

void set(AnsiString str,int x1,int y1);

void set_xy(int x1,int y1);

void set_x(int x1);

void set_y(int y1);

AnsiString get_str();

int get_x();

int get_y();

};

class CKarta {

private :

int kol;

TImage *im1;

public:

CPlace *mas;

CKarta();

~CKarta();

int get_kol();

void show();

void operator<<(TImage *im);

void set_state(int i1);

};

class CFuel {

private:

double v;

public:

CFuel();

CFuel(double v1);

~CFuel();

void set_v(double v1);

double get_v();

bool change(double d);

};

class CSamolet:public CFuel {

private:

double x,y;

bool fly;

double skorost;

int h;

public:

CSamolet();

CSamolet(double x1,double y1);

~CSamolet();

void set_h(int h1);

int get_h();

void set_skorost(double s1);

double get_skorost();

void set_x(double x1);

void set_y(double y1);

void set_xy(double x1,double y1);

double get_x();

double get_y();

void set_fly(bool b);

bool get_fly();

void start();

void stop();

bool move();

};

class CMonitor {

public:

CSamolet *samolet;

CKarta *karta;

TImage *im1,*im2;

TComboBox *cbox1,*cbox2;

TLabel *l1,*l2,*l3,*l4,*l_S,*l5,*lx,*ly;

TEdit *ed1,*ed2,*ed3,*ed4;

double dx,dy;

double s;

int punkt[2];

CMonitor();

~CMonitor();

void set_im1(TImage *m);

void set_im2(TImage *m);

void operator<<(CSamolet &sam);

void operator<<(CKarta &kar);

void set_samolet(CSamolet * sam);

void show();

void show_pynktu();

void show_pyt();

void set_punkt(AnsiString str,int index);

bool move();

void calculate();

};

#endif

Листинг Unit1.h

#ifndef Unit1H

#define Unit1H

//-----------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

#include <Graphics.hpp>

#include <ComCtrls.hpp>

//-----------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TImage *Image2;

TGroupBox *GroupBox1;

TImage *Image1;

TTimer *Timer1;

TStatusBar *StatusBar1;

TTimer *Timer2;

TGroupBox *GroupBox2;

TGroupBox *GroupBox3;

TGroupBox *GroupBox4;

TComboBox *ComboBox1;

TLabel *Label1;

TLabel *Label3;

TGroupBox *GroupBox5;

TLabel *Label4;

TLabel *Label5;

TComboBox *ComboBox2;

TButton *Button1;

TLabel *Label2;

TLabel *Label6;

TEdit *Edit1;

TLabel *Label7;

TEdit *Edit2;

TLabel *Label8;

TLabel *Label9;

TEdit *Edit3;

TGroupBox *GroupBox6;

TLabel *Label10;

TLabel *Label11;

TButton *Button2;

TLabel *Label12;

TEdit *Edit4;

void __fastcall Timer2Timer(TObject *Sender);

void __fastcall Image1MouseMove(TObject *Sender, TShiftState Shift,

int X, int Y);

void __fastcall FormCreate(TObject *Sender);

void __fastcall ComboBox1Change(TObject *Sender);

void __fastcall ComboBox2Change(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Timer1Timer(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//-----------------------------------------------

extern PACKAGE TForm1 *Form1;

//-----------------------------------------------

#endif

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]