Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Priklad_zvit.doc
Скачиваний:
0
Добавлен:
26.04.2019
Размер:
4.42 Mб
Скачать
  1. Структура інтерфейсу користувача

Поля вводу даних

Мал.3

  1. Інструкція користувача

Дана програма призначена для автоматичного пошуку найкоротшого шляху між населеними пунктами. Програма коректно працюватиме, коли будуть введені точки (назви населених пунктів), між якими необхідно знайти відстань. Якщо ж клацнути по кнопці “Пошук” не ввівши даних, то програма видасть повідомлення про необхідність введення даних.

Щоб запустити програму, необхідно двічі клацнути лівою кнопкою миші по файлу Page_Add.exe. Після завантаження програми на екрані зявиться головна форма програми. Після вводу початкової і кінцевої точок пошуку потрібно клацнути по кнопці “Пошук” або ж вибрати аналогічний пункт у меню “Файл”. Після цього на екран буде виведено всі маршрути та їхні довжини. Найкоротший маршрут буде виведений самим останнім.

Якщо вам потрібно ввести інші дані на карту доріг, то клацніть по кнопці “Очистка” або виберіть аналогічний пункт у меню “Файл” головного меню.

Щоб вийти з програми необхідно клацнути по кнопці “Вихід”, вибрати відповідний пункт у меню “Файл” головного меню або клацнути по хрестику у правому верхньому кутку форми.

Якщо дізнатись дещо про програму та ї призначення зазирніть до меню “Довідка” головного меню.

Для нормальної роботи програми необхідно дотримуватись таких вимог: операційна система Windows 95, об’єм оперативної пам’яті 8 Мбайт, вільного місця на диску 420 Кбайт.

  1. Контрольні приклади

Програма видасть повідомлення про помилку лише у тому випадку, коли не будуть введені початкова і кінцева точки при натисненні на кнопку “Пошук” (Мал.4).

Мал.4

При дотриманні всіх вимог програма працюватиме коректно (Мал.5).

Мал. 5

Додаток 1

Код програмних модулів

unit Additional1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons, ComCtrls, Grids, ExtCtrls, Mask, Menus;

type

TForm1 = class(TForm)

StaticText1: TStaticText;

StringGrid1: TStringGrid;

StaticText2: TStaticText;

StaticText3: TStaticText;

MaskEdit1: TMaskEdit;

MaskEdit2: TMaskEdit;

Poisk: TBitBtn;

Label1: TLabel;

Bevel1: TBevel;

Exit: TBitBtn;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

Clear: TBitBtn;

Bevel2: TBevel;

N10: TMenuItem;

procedure PoiskClick(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure MaskEdit1KeyPress(Sender: TObject; var Key: Char);

procedure MaskEdit2KeyPress(Sender: TObject; var Key: Char);

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

procedure N2Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure ClearClick(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure StringGrid1Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

const

N=15;//размерность массива

var

Form1: TForm1;

i,j:Integer;

implementation

uses Help, About;

{$R *.DFM}

procedure TForm1.PoiskClick(Sender: TObject);

var

map: array[1..N,1..N] of Integer;//Карта

road: array[1..N] of Integer;//Дорога

incl:array[1..N] of Boolean;//элемент массива равен true, если точка включена в маршрут

start, finish:Integer;//Начальная и конечная точки пути

found:Boolean;

len:Integer;//длина найденого мин маршрута

c_len:Integer;//длина текущего маршрута

//выбор очередной точки

procedure step(s,f,p:Integer);

var

c:Integer;//номер точки, в которую делаем очередной шаг

i:Integer;

begin

if s=f then

begin

//Точки совпали

found:=true;

len:=c_len;//сохриняем длину найденного маршрута

//вывод найденного маршрута

for i:=1 to p-1 do

Label1.Caption:=Label1.Caption+' '+IntToStr(road[i]);

Label1.Caption:=Label1.Caption+', довжина: '+IntToStr(len)+#13;

end

else

//выбор очередной точки

for c:=1 to N do

if (map[s,c]<>0) and (NOT incl[c])

and ((len=0) or (c_len+map[s,c]<len))

then begin

//точка соединена с текущей, но не включена в маршрут

road[p]:=c; //добавим вершину в путь

incl[c]:=true;

c_len:=c_len+map[s,c];

step(c,f,p+1);

incl[c]:=false;

road[p]:=0;

c_len:=c_len-map[s,c];

end;

end;

begin

if (MaskEdit1.Text='') or (MaskEdit2.Text='') then

ShowMessage('Введіть точки!')

else

begin

Label1.Caption:='';

//инициализация массивов

for i:=1 to N do road[i]:=0;

for i:=1 to N do incl[i]:=false;

//ввод описания карты из StringGrid.Cells

for i:=1 to N do

for j:=1 to N do

if StringGrid1.Cells[i,j]<>''

then map[i,j]:=StrToInt(StringGrid1.Cells[i,j])

else map[i,j]:=0;

len:=0;//длина найденного маршрута

c_len:=0;//длина текущего маршрута

start:=StrToInt(MaskEdit1.text);

finish:=StrToInt(MaskEdit2.text);

road[1]:=start;//внесём точку в маршрут

incl[start]:=true;//пометим её как включенную

step(start,finish,2);//ищем вторую точку маршрута

//проверим, найден ли хотя бы один путь

if not found then Label1.Caption:='Вказані точки не сполучені!';

end;

end;

//Процедура очистки

procedure TForm1.ClearClick(Sender: TObject);

begin

for i:=1 to N do

for j:=1 to N do

StringGrid1.Cells[i,j]:='';

Label1.Caption:='';

MaskEdit1.Text:='';

MaskEdit2.Text:='';

Poisk.Enabled:=false;

end;

//Автоматическое заполнение массива при запуске программы

procedure TForm1.FormActivate(Sender: TObject);

begin

for i:=1 to 14 do

StringGrid1.Cells[0,i]:=IntToStr(i);

for i:=1 to 14 do

StringGrid1.Cells[i,0]:=IntToStr(i);

StringGrid1.Cells[1,2]:='7';

StringGrid1.Cells[2,1]:='7';

StringGrid1.Cells[1,3]:='2';

StringGrid1.Cells[3,1]:='2';

StringGrid1.Cells[1,14]:='4';

StringGrid1.Cells[14,1]:='4';

StringGrid1.Cells[3,2]:='8';

StringGrid1.Cells[2,3]:='8';

StringGrid1.Cells[2,7]:='6';

StringGrid1.Cells[7,2]:='6';

StringGrid1.Cells[3,5]:='10';

StringGrid1.Cells[5,3]:='10';

StringGrid1.Cells[3,6]:='9';

StringGrid1.Cells[6,3]:='9';

StringGrid1.Cells[5,6]:='12';

StringGrid1.Cells[6,5]:='12';

StringGrid1.Cells[4,9]:='3';

StringGrid1.Cells[9,4]:='3';

StringGrid1.Cells[5,10]:='3';

StringGrid1.Cells[10,5]:='3';

StringGrid1.Cells[5,11]:='7';

StringGrid1.Cells[11,5]:='7';

StringGrid1.Cells[6,7]:='2';

StringGrid1.Cells[7,6]:='2';

StringGrid1.Cells[6,10]:='3';

StringGrid1.Cells[10,6]:='3';

StringGrid1.Cells[7,11]:='3';

StringGrid1.Cells[11,7]:='3';

StringGrid1.Cells[7,12]:='3';

StringGrid1.Cells[12,7]:='3';

StringGrid1.Cells[7,14]:='8';

StringGrid1.Cells[14,7]:='8';

StringGrid1.Cells[8,10]:='5';

StringGrid1.Cells[10,8]:='5';

StringGrid1.Cells[8,11]:='2';

StringGrid1.Cells[11,8]:='2';

StringGrid1.Cells[8,12]:='1';

StringGrid1.Cells[12,8]:='1';

StringGrid1.Cells[8,13]:='7';

StringGrid1.Cells[13,8]:='7';

StringGrid1.Cells[9,13]:='7';

StringGrid1.Cells[13,9]:='7';

StringGrid1.Cells[9,14]:='6';

StringGrid1.Cells[14,9]:='6';

StringGrid1.Cells[10,11]:='6';

StringGrid1.Cells[11,10]:='6';

StringGrid1.Cells[10,12]:='4';

StringGrid1.Cells[12,10]:='4';

StringGrid1.Cells[12,13]:='7';

StringGrid1.Cells[13,12]:='7';

StringGrid1.Cells[13,14]:='8';

StringGrid1.Cells[14,13]:='8';

end;

//Защита вводимых значений

procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);

begin

case Key of

'0'..'9',Chr(8):;{цифры и <BackSpace>}

else Key := Chr(0);{другие символы не отображать}

end;

end;

//Защита вводимых значений

procedure TForm1.MaskEdit2KeyPress(Sender: TObject; var Key: Char);

begin

case Key of

'0'..'9',Chr(8):;{цифры и <BackSpace>}

else Key := Chr(0);{другие символы не отображать}

end;

end;

//Защита вводимых значений

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);

begin

case Key of

'0'..'9',Chr(8):;{цифры и <BackSpace>}

else Key := Chr(0);{другие символы не отображать}

end;

end;

//Выход из программы

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

CanClose:=MessageDlg('Ви дійсно бажаєте вийти?',

mtConfirmation,

[mbYes, mbNo],0)=IDYES;

end;

procedure TForm1.N2Click(Sender: TObject);

begin

Poisk.Click();

end;

procedure TForm1.N6Click(Sender: TObject);

begin

Exit.Click();

end;

procedure TForm1.N4Click(Sender: TObject);

begin

Clear.Click();

end;

procedure TForm1.StringGrid1Click(Sender: TObject);

begin

Poisk.Enabled:=true;

end;

procedure TForm1.N8Click(Sender: TObject);

begin

Form2.show;

Form2.Memo1.Lines.LoadFromFile('Help.txt');

end;

procedure TForm1.N9Click(Sender: TObject);

begin

AboutBox.Show;

end;

end.

unit Help;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons;

type

TForm2 = class(TForm)

Memo1: TMemo;

BitBtn1: TBitBtn;

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

{$R *.DFM}

procedure TForm2.BitBtn1Click(Sender: TObject);

begin

Form2.Close;

end;

end.

unit About;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls;

type

TAboutBox = class(TForm)

Panel1: TPanel;

ProgramIcon: TImage;

ProductName: TLabel;

Version: TLabel;

Copyright: TLabel;

Comments: TLabel;

OKButton: TButton;

PoiskPyti: TLabel;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

procedure OKButtonClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

AboutBox: TAboutBox;

implementation

{$R *.DFM}

procedure TAboutBox.OKButtonClick(Sender: TObject);

begin

AboutBox.Close;

end;

end.

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