Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РПЗ ПЯВУ.doc
Скачиваний:
2
Добавлен:
15.09.2019
Размер:
251.39 Кб
Скачать

Тестирование программы

Рисунок 3. Экранная формы сразу после запуска проекта

Рисунок 4. Экранная форма сразу после нажатия кнопки «Начать войну»

Рисунок 5. Экранная форма после удачного покушения

Рисунок 6. Экранная форма после нажатия кнопки «Атаковать СССР»

Рисунок 7. Экранная форма после нажатия кнопки «Капитуляция»

Корректные данные:

При вводе корректных данных программа работает корректно всегда

Некорректные данные:

При вводе некорректных данных программа сообщит, что введенные данные некорректны.

Граничные данные

Не обнаружены.

Заключение

В ходе выполнения расчетного задания была разработана объектная модель хода Второй Мировой Войны;

  • была выбрана среда программирования;

  • описана реализация программы;

  • модель была протестирована по методу «черного ящика» на наличие ошибок;

  • был смоделирован приблизительный ход военных действий, а именно военные действия между СССР и фашистской Германией

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

Список использованных источников

  • С/С++. Программирование на языке высокого уровня/ Т.А. Павловская. – СПб.: Питер, 2002

  • Плюсы и минусы обектно – ориентированного программирования/ Х. Мессенбок. – М.: Инфо Арт, 1998

  • Язык программирования С++. Справочное руководство/ Bj. Stroustrup. – New Jersey.: AT&T Bell Laboratories, 1882

  • http://www.hrono.ru

  • Лекции по С++/ Е.А. Панкратова. – Смоленск.:СФМЭИ, 2010

Приложение Текст программы

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

#include <vcl.h>

#pragma hdrstop

#include <stdio.h>

#include <conio.h>

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

class war //базовый класс "война"

{public:

int i;

int j;

int uslger;

int uslussr;

TStringGrid*StringGrid;

TMemo*Memo;

void statistic(TStringGrid*stat);

void beginwar();

void endwar(int uslger, int uslussr);

public:

war()

{

uslger=0;

uslussr=0;

}

};

void war::statistic(TStringGrid*stat) //статистика

{

int nachdivisger=214;

int nachbrigadger=7;

int nachdivisussr=303;

int nachbrigadussr=22;

stat->Cells[i][j];

{

stat->Cells[1][2]=IntToStr(nachdivisger);

stat->Cells[3][2]=IntToStr(nachbrigadger);

stat->Cells[1][1]=IntToStr(nachdivisussr);

stat->Cells[3][1]=IntToStr(nachbrigadussr);

}

stat->Visible=true;

};

void war::beginwar() //начать войну

{

ShowMessage("война между СССР и Германией началась");

uslger=uslger+1;

uslussr=uslussr+1;

};

void war::endwar(int uslger, int uslussr)

{

if (uslger>100) ShowMessage("капитуляция Германии");

if (uslussr>100000) ShowMessage("не надо менять программный код!!! СССР все равно победит!");

};

class country:public war //класс страна, но, парадоксально, относится к Германии относится

{public:

bool Hitler;

bool Himmler;

bool Gebbels;

bool Borman;

bool Iodl;

bool Keytel;

country()

{

Hitler=true; Himmler=true; Gebbels=true;

Iodl=true; Borman=true; Keytel=true;

}

void diversion();

};

void country::diversion()

{

if (this->Hitler==false) uslger=uslger+1000;

if (this->Himmler==false) uslger=uslger+10;

if (this->Gebbels==false) uslger=uslger+30;

if (this->Borman==false) uslger=uslger+5;

if (this->Iodl==false) uslger=uslger+20;

if (this->Keytel==false) uslger=uslger+50;

}

class army:public country //класс армия

{public:

int ussrdivis;

int ussrbrigad;

int gerdivis;

int gerbrigad;

int ussrposition;

int gerposition;

int partat;

int partprot;

TMemo*Memo;

TPanel*Panel;

army()

{

ussrdivis=303;

ussrbrigad=22;

gerdivis=214;

gerbrigad=7;

ussrposition=50;

gerposition=20;

}

void statist(TMemo*mem);

void attack (TPanel*Panel);

void protect (int partat, int partprot);

};

void army::statist(TMemo*mem) //вывод краткой статистики

{

mem->Lines;

mem->Clear();

{

mem->Lines->Add("дивизий СССР: "+IntToStr(ussrdivis));

mem->Lines->Add("бригад СССР: "+IntToStr(ussrbrigad));

mem->Lines->Add("стратегических точек СССР: "+IntToStr(ussrposition));

mem->Lines->Add("дивизий Германии: "+IntToStr(gerdivis));

mem->Lines->Add("бригад Германии: "+IntToStr(gerbrigad));

mem->Lines->Add("стратегических точек Германии: "+IntToStr(gerposition));

}

//mem->Visible=true;

};

void army::attack (TPanel*pan)

{

pan->Visible=true;

}

void army::protect (int partat, int partprot)

{if (partat>3*partprot)

{

this->partat=this->partprot;

} else

{

this->partprot=1;

}

};

TForm1 *Form1;

war*Twar;

country*Tcountry;

army*Tarmy;

bool whoattack=false;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

StringGrid1->Cells[1][0]=" число дивизий в нaчале войны";

StringGrid1->Cells[2][0]=" число дивизий в конце войны";

StringGrid1->Cells[3][0]=" число бригад в начале войны";

StringGrid1->Cells[4][0]=" число бригад в конце войны";

StringGrid1->Cells[5][0]=" исход";

StringGrid1->Cells[0][1]=" СССР";

StringGrid1->Cells[0][2]=" Германия";

Twar=new war;

Tcountry=new country;

Tarmy=new army;

}

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

void __fastcall TForm1::Button1Click(TObject *Sender) //начать войну

{

Twar=new war;

Tcountry=new country;

Tarmy=new army;

Twar->beginwar();

Button1->Visible=false; Button2->Visible=false;

if (Twar->uslger==1) GroupBox1->Visible=true;

if (Twar->uslussr==1) GroupBox2->Visible=true;

Tarmy->statist(Memo1);

Memo1->Visible=true;

}

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

void __fastcall TForm1::Button2Click(TObject *Sender) //не начинать войну

{

ShowMessage("Военные действия между СССР и Германией не велись.");

ShowMessage("Данному приложению нечего моделировать...");

Close();

}

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

void __fastcall TForm1::Button3Click(TObject *Sender) //капитуляция Германии

{

int a;

a=Twar->uslger+50;

Twar->endwar(a,0);

Twar->statistic(StringGrid1);

GroupBox1->Visible=false; GroupBox2->Visible=false; GroupBox3->Visible=false;

Panel1->Visible=false; Memo1->Visible=false;

StringGrid1->Cells[2][1]=IntToStr(Tarmy->ussrdivis);

StringGrid1->Cells[4][1]=IntToStr(Tarmy->ussrbrigad);

StringGrid1->Cells[2][2]=IntToStr(Tarmy->gerdivis);

StringGrid1->Cells[4][2]=IntToStr(Tarmy->gerbrigad);

StringGrid1->Cells[5][1]="Победа";

StringGrid1->Cells[5][2]="Добровольная капитуляция";

}

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

void __fastcall TForm1::Button4Click(TObject *Sender)

{

GroupBox3->Visible=true;

}

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

void __fastcall TForm1::Button7Click(TObject *Sender) //покушение на Гитлера

{

randomize;

int indic=random(100);

if ((indic==1) || (indic==100)) {Tcountry->Hitler=false; Tcountry->diversion();}

int x=Tcountry->uslger;

if (x>=100) {ShowMessage("Гитлер был убит в своей загородной резиденции.");

ShowMessage("Спустя сутки подписывается документ о безоговорчной капитуляции Германии.");

Twar->statistic(StringGrid1);

GroupBox1->Visible=false; GroupBox2->Visible=false; GroupBox3->Visible=false;

Panel1->Visible=false; Memo1->Visible=false;

StringGrid1->Cells[2][1]=IntToStr(Tarmy->ussrdivis);

StringGrid1->Cells[4][1]=IntToStr(Tarmy->ussrbrigad);

StringGrid1->Cells[2][2]=IntToStr(Tarmy->gerdivis);

StringGrid1->Cells[4][2]=IntToStr(Tarmy->gerbrigad);

StringGrid1->Cells[5][1]="Победа";

StringGrid1->Cells[5][2]="Поражение из-за диверсии";

}

}

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

void __fastcall TForm1::Button11Click(TObject *Sender) //покушение на Гиммлера

{

randomize;

int indic=random(100);

if (indic>90)

{Tcountry->Himmler=false; Tcountry->diversion();

ShowMessage("Гиммлер был застрелен в собственном кабинете.");

Button11->Visible=false;

}

int x=Tcountry->uslger;

if (x>=100)

{ShowMessage("Германия подписывает документ о безоговорочной капитуляции.");

Twar->statistic(StringGrid1);

GroupBox1->Visible=false; GroupBox2->Visible=false; GroupBox3->Visible=false;

Panel1->Visible=false; Memo1->Visible=false;

StringGrid1->Cells[2][1]=IntToStr(Tarmy->ussrdivis);

StringGrid1->Cells[4][1]=IntToStr(Tarmy->ussrbrigad);

StringGrid1->Cells[2][2]=IntToStr(Tarmy->gerdivis);

StringGrid1->Cells[4][2]=IntToStr(Tarmy->gerbrigad);

StringGrid1->Cells[5][1]="Победа";

StringGrid1->Cells[5][2]="Поражение из-за диверсии";

}

}

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

void __fastcall TForm1::Button13Click(TObject *Sender) //покушение на Геббельса

{

randomize;

int indic=random(100);

if ((indic>20) && (indic<=30))

{Tcountry->Gebbels=false; Tcountry->diversion();

ShowMessage("Во время выступления Геббельс был убит.");

Button13->Visible=false;

}

int x=Tcountry->uslger;

if (x>=100)

{ShowMessage("Германия подписывает документ о безоговорочной капитуляции.");

Twar->statistic(StringGrid1);

GroupBox1->Visible=false; GroupBox2->Visible=false; GroupBox3->Visible=false;

Panel1->Visible=false; Memo1->Visible=false;

StringGrid1->Cells[2][1]=IntToStr(Tarmy->ussrdivis);

StringGrid1->Cells[4][1]=IntToStr(Tarmy->ussrbrigad);

StringGrid1->Cells[2][2]=IntToStr(Tarmy->gerdivis);

StringGrid1->Cells[4][2]=IntToStr(Tarmy->gerbrigad);

StringGrid1->Cells[5][1]="Победа";

StringGrid1->Cells[5][2]="Поражение из-за диверсии";

}

}

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

void __fastcall TForm1::Button14Click(TObject *Sender)

{

randomize;

int indic=random(100);

if ((indic>10) && (indic<=20))

{Tcountry->Borman=false; Tcountry->diversion();

ShowMessage("Бесследно исчезает Мартин Борман.");

Button14->Visible=false;

}

int x=Tcountry->uslger;

if (x>=100)

{ShowMessage("Германия подписывает документ о безоговорочной капитуляции.");

Twar->statistic(StringGrid1);

GroupBox1->Visible=false; GroupBox2->Visible=false; GroupBox3->Visible=false;

Panel1->Visible=false; Memo1->Visible=false;

StringGrid1->Cells[2][1]=IntToStr(Tarmy->ussrdivis);

StringGrid1->Cells[4][1]=IntToStr(Tarmy->ussrbrigad);

StringGrid1->Cells[2][2]=IntToStr(Tarmy->gerdivis);

StringGrid1->Cells[4][2]=IntToStr(Tarmy->gerbrigad);

StringGrid1->Cells[5][1]="Победа";

StringGrid1->Cells[5][2]="Поражение из-за диверсии";

}

}

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

void __fastcall TForm1::Button15Click(TObject *Sender) //покушение на Кейтеля

{

randomize;

int indic=random(100);

if ((indic>40) && (indic<=45))

{Tcountry->Keytel=false; Tcountry->diversion();

ShowMessage("Во время парада неизвестный убивает фельдмаршала Кейтеля.");

Button15->Visible=false;

}

int x=Tcountry->uslger;

if (x>=100)

{ShowMessage("Германия подписывает документ о безоговорочной капитуляции.");

Twar->statistic(StringGrid1);

GroupBox1->Visible=false; GroupBox2->Visible=false; GroupBox3->Visible=false;

Panel1->Visible=false; Memo1->Visible=false;

StringGrid1->Cells[2][1]=IntToStr(Tarmy->ussrdivis);

StringGrid1->Cells[4][1]=IntToStr(Tarmy->ussrbrigad);

StringGrid1->Cells[2][2]=IntToStr(Tarmy->gerdivis);

StringGrid1->Cells[4][2]=IntToStr(Tarmy->gerbrigad);

StringGrid1->Cells[5][1]="Победа";

StringGrid1->Cells[5][2]="Поражение из-за диверсии";

}

}

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

void __fastcall TForm1::Button16Click(TObject *Sender) //Покушение на Йодля

{

randomize;

int indic=random(100);

if ((indic>20) && (indic<=30))

{Tcountry->Iodl; Tcountry->diversion();

ShowMessage("Был отравлен Альфред Йодль ");

Button16->Visible=false;

}

int x=Tcountry->uslger;

if (x>=50)

{ShowMessage("Германия подписывает документ о безоговорочной капитуляции.");

Twar->statistic(StringGrid1);

GroupBox1->Visible=false; GroupBox2->Visible=false; GroupBox3->Visible=false;

Panel1->Visible=false; Memo1->Visible=false;

StringGrid1->Cells[2][1]=IntToStr(Tarmy->ussrdivis);

StringGrid1->Cells[4][1]=IntToStr(Tarmy->ussrbrigad);

StringGrid1->Cells[2][2]=IntToStr(Tarmy->gerdivis);

StringGrid1->Cells[4][2]=IntToStr(Tarmy->gerbrigad);

StringGrid1->Cells[5][1]="Победа";

StringGrid1->Cells[5][2]="Поражение из-за диверсии";

}

}

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

void __fastcall TForm1::Button5Click(TObject *Sender) //Германия атакует

{

Tarmy->attack(Panel1);

whoattack=false;

GroupBox1->Visible=false; GroupBox2->Visible=false; GroupBox3->Visible=false;

Label3->Visible=true; Label4->Visible=false; CheckBox1->Visible=true;

if (Tarmy->ussrbrigad==0) {CheckBox1->Visible=false;}

}

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

void __fastcall TForm1::Button9Click(TObject *Sender) // атакует СССР

{

Tarmy->attack(Panel1);

whoattack=true;

GroupBox1->Visible=false; GroupBox2->Visible=false; GroupBox3->Visible=false;

Label3->Visible=false; Label4->Visible=true; CheckBox1->Visible=true;

if (Tarmy->gerbrigad==0) {CheckBox1->Visible=false;}

}

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

void __fastcall TForm1::Button8Click(TObject *Sender)

{

Tarmy->partat=StrToInt(Edit1->Text); Tarmy->partprot=StrToInt(Edit2->Text);

if ((StrToInt(Edit1->Text)<=0)||(StrToInt(Edit2->Text)<=0))

{ShowMessage("Ай-яй-яй, Андрей Павлович, от неположительного числа дивизий, я, наверно, защититься-то могу...");

ShowMessage("Пожалуйста, теперь задайте корректные значения, если кончено вам не надоело читать эти пресловутые ShowMessag-и...");

Edit1->Clear(); Edit2->Clear();

} else

{

if (whoattack==false) //атакует Германия

{

if ((Tarmy->partat>Tarmy->gerdivis)||(Tarmy->partprot>Tarmy->ussrdivis)||(Tarmy->partat>=12)||(Tarmy->partprot>=12))

{ShowMessage("Такое количество дивизий выделить нельзя");

exit;

} else

{

if ((CheckBox1->Checked==true)&&(Tarmy->ussrbrigad!=0))

{Tarmy->gerdivis=Tarmy->gerdivis-Tarmy->partat;

Tarmy->ussrbrigad=Tarmy->ussrbrigad-1;

ShowMessage("Атакующие войска Германии разбиты");

} else

{if (Tarmy->partat>=Tarmy->partprot*3)

{Tarmy->ussrposition=Tarmy->ussrposition-1;

Tarmy->gerposition=Tarmy->gerposition+1;

ShowMessage("Защитники разгромлены");

} else {ShowMessage("Атакующие войска Германии разбиты");}

Tarmy->protect(Tarmy->partat,Tarmy->partprot);

Tarmy->gerdivis=Tarmy->gerdivis-Tarmy->partat;

Tarmy->ussrdivis=Tarmy->ussrdivis-Tarmy->partprot;

}

}

} else //атакует СССР

{

if ((Tarmy->partat>Tarmy->ussrdivis)||(Tarmy->partprot>Tarmy->gerdivis)||(Tarmy->partat>=12)||(Tarmy->partprot>=12))

{ShowMessage("У вас нет такого количества дивизий");

exit;

} else

{

if ((CheckBox1->Checked==true)&&(Tarmy->gerbrigad!=0))

{Tarmy->ussrdivis=Tarmy->ussrdivis-Tarmy->partat;

Tarmy->gerbrigad=Tarmy->gerbrigad-1;

ShowMessage("Атакующие войска СССР разбиты");

} else

{if (Tarmy->partat>=Tarmy->partprot*3)

{Tarmy->gerposition=Tarmy->gerposition-1;

Tarmy->ussrposition=Tarmy->ussrposition+1;

ShowMessage("Советские войска заняли еще один город!");

} else {ShowMessage("Атакующие войска CCCP разбиты");}

Tarmy->protect(Tarmy->partat,Tarmy->partprot);

Tarmy->ussrdivis=Tarmy->ussrdivis-Tarmy->partat;

Tarmy->gerdivis=Tarmy->gerdivis-Tarmy->partprot;

}

}

}

Panel1->Visible=false; GroupBox1->Visible=true; GroupBox2->Visible=true;

if (Tarmy->gerposition==0)

{

Twar->statistic(StringGrid1);

GroupBox1->Visible=false; GroupBox2->Visible=false; GroupBox3->Visible=false;

Panel1->Visible=false; Memo1->Visible=false;

StringGrid1->Cells[2][1]=IntToStr(Tarmy->ussrdivis);

StringGrid1->Cells[4][1]=IntToStr(Tarmy->ussrbrigad);

StringGrid1->Cells[2][2]=IntToStr(Tarmy->gerdivis);

StringGrid1->Cells[4][2]=IntToStr(Tarmy->gerbrigad);

StringGrid1->Cells[5][1]="Победа";

StringGrid1->Cells[5][2]="Советские войска дошли до Берлина";

}

if((Tarmy->ussrposition==0)||(Tarmy->ussrdivis<=0))

{ShowMessage("Вы не любите свою страну...");

Close();

}

if (Tarmy->gerdivis<=0)

{ShowMessage("У Германии не осталось войск");

Twar->statistic(StringGrid1);

GroupBox1->Visible=false; GroupBox2->Visible=false; GroupBox3->Visible=false;

Panel1->Visible=false; Memo1->Visible=false;

StringGrid1->Cells[2][1]=IntToStr(Tarmy->ussrdivis);

StringGrid1->Cells[4][1]=IntToStr(Tarmy->ussrbrigad);

StringGrid1->Cells[2][2]=IntToStr(0);

StringGrid1->Cells[4][2]=IntToStr(Tarmy->gerbrigad);

StringGrid1->Cells[5][1]="Победа";

StringGrid1->Cells[5][2]="Все войска Германии были разбиты";

}

Tarmy->statist(Memo1);

}

}

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

void __fastcall TForm1::Button6Click(TObject *Sender)

{

if (whoattack==false) //Германия атакует

{

Tarmy->ussrposition=Tarmy->ussrposition-1;

Tarmy->gerposition=Tarmy->gerposition+1;

Tarmy->gerdivis=Tarmy->gerdivis-1;

ShowMessage("немецкие войска взяли город");

} else //СССР атакует

{

Tarmy->gerposition=Tarmy->gerposition-1;

Tarmy->ussrposition=Tarmy->ussrposition+1;

Tarmy->ussrdivis=Tarmy->ussrdivis-1;

ShowMessage("Советские войска заняли еще один город!");

}

Panel1->Visible=false; GroupBox1->Visible=true; GroupBox2->Visible=true;

if (Tarmy->gerposition==0)

{

Twar->statistic(StringGrid1);

GroupBox1->Visible=false; GroupBox2->Visible=false; GroupBox3->Visible=false;

Panel1->Visible=false; Memo1->Visible=false;

StringGrid1->Cells[2][1]=IntToStr(Tarmy->ussrdivis);

StringGrid1->Cells[4][1]=IntToStr(Tarmy->ussrbrigad);

StringGrid1->Cells[2][2]=IntToStr(Tarmy->gerdivis);

StringGrid1->Cells[4][2]=IntToStr(Tarmy->gerbrigad);

StringGrid1->Cells[5][1]="Победа";

StringGrid1->Cells[5][2]="Советские войска дошли до Берлина";

}

if((Tarmy->ussrposition==0)||(Tarmy->ussrdivis<=0))

{ShowMessage("Вы не любите свою страну...");

Close();

}

if (Tarmy->gerdivis<=0)

{ShowMessage("У Германии не осталось войск");

Twar->statistic(StringGrid1);

GroupBox1->Visible=false; GroupBox2->Visible=false; GroupBox3->Visible=false;

Panel1->Visible=false; Memo1->Visible=false;

StringGrid1->Cells[2][1]=IntToStr(Tarmy->ussrdivis);

StringGrid1->Cells[4][1]=IntToStr(Tarmy->ussrbrigad);

StringGrid1->Cells[2][2]=IntToStr(0);

StringGrid1->Cells[4][2]=IntToStr(Tarmy->gerbrigad);

StringGrid1->Cells[5][1]="Победа";

StringGrid1->Cells[5][2]="Все войска Германии были разбиты";

}

Tarmy->statist(Memo1);

}

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

26

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