Разработка программы "Пассажирские перевозки по городу"

Использование теории графов для решения задач. Информационные структуры входных и выходных данных. Иерархическая схема программы. Руководство оператора: назначение и условия выполнения программы. Граф-схема FormCreate, Found, RassUpdate и Search.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 07.08.2013
Размер файла 2,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

[Введите текст]

ВВЕДЕНИЕ

Данная программа позволяет находить маршруты между двумя точками города для перевозки пассажиров такси. Найденные маршруты выводятся для просмотра в текстовом поле с возможностью сохранения в отдельный файл. Для нахождения маршрутов используется граф.

Граф - это совокупность непустого множества вершин и множества пар вершин.

Объекты представляются как узлы графа, а связи - как рёбра. В данной программе используется взвешенный, ориентированный граф.

Программа написана на языке программирования Delphi.

1. ПОСТАНОВКА ЗАДАЧИ

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

Заданы пункт отправления, пункт назначения и количество человек. В случае если пропускная способность какого-либо маршрута не позволяет транспортировать такое количество пассажиров, он транспортируется по частям.

Результат следует вывести в текстовое поле, а при нажатии соответствующей кнопки сохранить в отдельный текстовый файл.

2. МАТЕМАТИЧЕСКАЯ МОДЕЛЬ РЕШАЕМОЙ ЗАДАЧИ

Для решения данной задачи применяется теория графов.

В строгом определении графом называется пара множеств (формула (2.1)).

(2.1)

где

G - граф;

V - множество вершин графа (каждая вершина соответствует одному пункту);

E - множество рёбер графа (каждое ребро соответствует одному маршруту).

Множество вершин графа представлено в формуле (2.2):

V={V1:Авангардная 1:, V2:Буммашевская 3, V3:Ворошилова 14, V4:Гагарина 1, V5:М.Горького 2, V6: Орженикидзе 17, V7:Пушкинская 1, V8:Удмуртская 255, V9:Холмогорова 5,…, Vn} (2.2)

где

V- множество вершин графа;

Vi - вершина графа с индексом i.

Множество рёбер графа представлено в формуле (2.3):

E = {E12, E1 3, E15,E2 1, E2 3, E2 4, E3 1, E3 6, E3 7, E4 1,..,En k} (2.3)

где

E - множество рёбер графа;

Ei j - ребро графа, соединяющее i-ую и j-ую вершины.

Пусть каждый пункт - это вершина графа, а каждый маршрут - его ребро. У каждого ребра есть вес, который задается количеством пассажиров, которых можно перевезти за раз, стоимостью маршрута и названием пункта, который соединяет дуга с исходной вершиной. Количество вершин графа - n, Ei - количество дуг i-ой вершины.

Для нахождения маршрута между вершинами i и j используется формула (2.4).

(2.4)

i,j изменяются от 1 до n (кол-ва пунктов)

i - индекс исходной вершины;

j - индекс конечной вершины;

k - индекс вершины графа, отличной от Vi и Vj и смежной с Vi;

n - индекс произвольной вершины графа;

Path[i, j] - путь от вершины Vi до вершины Vj;

E[i, j] - ребро графа, соединяющее вершины Vi и Vj.

E[i, k] - ребро графа, соединяющее вершины Vi и Vk;

Path[k, j] - путь от вершины Vk до вершины Vj;

E[n, k] - ребро графа, соединяющее произвольную вершину Vn и вершину Vk.

Таким образом, формула для нахождения пути является итерационной. Если нет прямого пути от вершины Vi до вершины Vj, то происходит переход на вершину Vk, смежную с вершиной Vi и ещё не содержащуюся в пути, и ищется путь от вершины Vk до вершины Vj. Если на каком-либо шаге поиска для вершины Vi нет смежных и непосещённых вершин Vk, то поиск возвращается на предыдущий шаг и выбирает новую вершину Vk.

Общий вид пути представлен в формуле (2.5).

(2.5)

где

Path[i, j] - путь от вершины Vi да вершины Vj;

E[i, k1] - ребро графа, соединяющее вершины Vi и Vk1;

E[k1, k2] - ребро графа, соединяющее вершины Vk1 и Vk2;

E[kn, j] - ребро графа, соединяющее вершины Vkn и j.

Пример:

V7 (Пушкинская 1) - пункт отправления, V6 (Орженикидзе 17) - пункт назначения

Найденные маршруты: v7 - v8 - v6, v7 - v6

По найденным маршрутам подсчитывается их стоимость.

G = <V,E>, где V = { v1, v2, v3, v4, v5, v6, v7, v8, v9} и

E = {e1 2, e1 3, e5 3, e7 5, e7 4, e1 9, e1 6, e9 8, e6 8, e6 2, e2 5}

Граф G является ориентированным, взвешенным графом (рис. 2.1)

Граф G

Рис. 2.1

3. ИНФОРМАЦИОННЫЕ СТРУКТУРЫ ДАННЫХ

Используемые в программе данные делятся на: входные, внутренние и выходные. Схема данных представлена на рис. 3.1.

Схема данных

Рис. 3.1

3.1 Структура входных данных

Текстовый файл punkt.dat - список пунктов.

Пример:

Пушкинская 1.

Гагарина 1.

М. Горького 2.

Буммашевская 3.

Холмогорова 5.

Удмуртская 255.

Ворошилова 14.

Орженикидзе 17.

Авангардная 1.

Типизированный файл puti.dat - список маршрутов, по каждому из маршрутов указывается наименования пунктов, которые соединяет этот маршрут, стоимость перевозки и максимальный пассажиропоток маршрута.

Формат данных, вводимых пользователем, описан в приложении 1.

Пользовательские данные содержат наименование пункта отправления и пункта прибытия, а так же максимальное количество пассажиров. Эти данные вводятся пользователем вручную во время работы программы. Пример ввода данных представлен на рис. 3.2.

Ввод данных пользователем

Рис. 3.2

Подробнее ввод данных пользователем описан в разделе приложении 1.3 «Выполнение программы».

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

Типы:

TPath - маршрут (record).

t1,t2 - название пунктов, которые соединяют маршрут.

p1, p2 - порядковые номера пунктов, которые соединяет этот маршрут (byte).

cost - стоимость маршрута (word).

traf - количество пассажиров (word).

Переменные:

f1 - входной текстовый файл со списком пунктов (textfile).

f2 - входной типизированный файл со списком маршрутов (file of tpath).

colp - количество маршрутов (byte).

colt - количество пунктов (byte).

colw - количество найденных маршрутов (word).

towns - массив пунктов (array of string).

paths - массив доступных маршрутов (array of tpath).

rel - динамический двумерный массив сопоставлений пунктов соседним пунктам (array of array of byte).

3.3 Структура выходных данных

Выходные данные

Содержат последовательность строк, содержащих сам маршрут, включая промежуточные пункты, и общую стоимость перевозки. Пример выходных данных представлен на рис. 3.3.

Рис. 3.3

4. СХЕМА ПРОГРАММЫ

4.1 Иерархическая схема программы

Иерархическая схема программы представлена на рис. 4.1.

Иерархическая схема программы

Рис. 4.1

Спецификация:

1) Search - Проверяются все соседние пункты (рекурсивно), игнорируются пункты, которые уже встречались,при нахождении конечного пункта вызывается процедура Found.

2) Found - добавляется маршрут в таблицу,рассчитывается стоимость маршрута,увеличивается счетчик найденных маршрутов на единицу.

3) RassUpdate - Комбобоксы заполняются доступными городами. Заносятся в массивы доступные маршруты.

4) Button1Click - Открывается редактор пунктов,в котором можно добавить или удалить пункт.

5) Button2Click - Открывается редактор маршрутов, в котором можно добавить или удалить маршрут.

6) Button3Click - производится расчет и открывается новая форма с результатами.

7) ComboBox1Change - проверяет выбранные пункт отправления и пункт прибытия, если они совпадают то делает кнопку «Рассчитать» не доступной, иначе делает активной

8) FormClose - записывает пункты и маршруты в исходные файлы, при закрытие программы.

ЗАКЛЮЧЕНИЕ

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

В дальнейшем полученная программа может быть модифицирована с добавлением функции поиска самого быстрого или дешевого маршрута.

При выполнении работы частично была изучена теория графов, алгоритм поиска в глубину и язык программирования Delphi.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Силкин К.Ю. «Геоинформационная система Golden Software Surfer 8: Учебно-методическое пособие для вузов» - Воронеж, 2008. - 66 с.

2. Капралов Е.Г., Кошкарев А.В., Тикунов В.С. и др. «Геоинформатика: Учеб. для студ. Вузов» / Под ред. Тикунова В.С. - М: Издательский центр «Академия», 2005. - 480 с.

3. С.И. Бобровский. Delphi 7. Учебный курс. Издательcкий дом "Питер", 2004.

4. http://ru.wikipedia.org/wiki/Delphi_(язык_программирования)

5. http://ru.wikipedia.org/wiki/Поиск_в_глубину

6. http://cs.istu.ru/moodle/

7. Оре О. «Теория графов» - Москва: Либроком, 2010

ПРИЛОЖЕНИЕ 1

Руководство оператора

П.1.1. Назначение программы

Программа предназначена для поиска всех возможных маршрутов из одного пункта города в другой. Поиск происходит на основе существующих путей между двумя соседними пунктами.

Выбор исходного и конечного пунктов происходит одним из следующих способов:

1) выбор пунктов из предложенного программой списка.

2) добавление нового пункта с помощью редактора пунктов;

После этого программа проверяет возможно ли совершить выбранный маршрут. Если это возможно, то в текстовом поле выводятся все возможные варианты, иначе выводится сообщение об ошибке.

П.1.2. Условия выполнения программы

Программа разработана для операционных систем семейства Windows версии не ниже чем XP.

Минимальные аппаратные требования:

1) процессор с тактовой частотой 233 МГц;

2) 32 мегабайта оперативной памяти;

3) 2 МБ свободного дискового пространства.

Рекомендуемые аппаратные требования:

1) процессор с тактовой частотой 1 ГГц;

2) 512 мегабайт оперативной памяти;

3) монитор с разрешающей способностью более 1024 Ч 768 пикселей;

4) более 10 МБ свободного дискового пространства.

П.1.3. Выполнение программы

Для запуска программы необходимо запустить исполняемый файл «Taxi.exe» из каталога программы. После запуска программы открывается форма с главным меню программы (рис. 1).

Главное меню

Рис. 1

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

Выбор городов

Рис. 2

После выбора количества человек и корректных пунктов отправления и прибытия пользователь должен нажать на кнопку «Рассчитать». Откроется новая форма с текстовым полем в которой будут записаны найденные маршруты (рис. 3). Есть возможность сохранить полученный результат в отдельный файл, нажав кнопку «Сохранить»

Маршруты, удовлетворяющие заданному времени

Рис. 3

Если не найден ни один маршрут, удовлетворяющий заданным значениям, то выводится сообщение «Маршрута между этими точками не существует» (рис. 4).

Маршруты, не удовлетворяющие заданным параметрам

Рис. 4

Пользователь может самостоятельно добавить новый пункт или задать новый маршрут. Для этого нужно нажать кнопку «Редактор пунктов» (рис. 5) или соответственно «Редактор маршрутов» (рис. 6)

Редактор городов

Рис. 5

Редактор маршрутов

Рис. 6

В каждом из редакторов можно добавить или удалить пункты или маршруты, нажав соответствующие клавиши.

Приложение 2

Схема программы

Граф-схема проц-ры FormCreate

Граф-схема проц-ры Found

Граф-схема процедуры RassUpdate

Граф-схема процедуры ComboBox1Change

Граф-схема проц-ры Search

Граф-схема проц-ры Button4Click Граф-схема проц-ры Button2Click

Граф-схема проц-ры Button3Click

Граф-схема проц-ры Button1Click

Граф-схема проц-ры TForm6.Button2Click

ПРИЛОЖЕНИЕ 3

Исходный код программы

Программа Project1:

program Taxi;

{Выполнил: студент гр. Б2-191-2 Нуруллин Р.М.

}

uses

Forms,

Unit1 in 'Unit1.pas' {Form1},

Unit2 in 'Unit2.pas' {Form2},

Unit3 in 'Unit3.pas' {Form3},

Unit4 in 'Unit4.pas' {Form4},

Unit5 in 'Unit5.pas' {Form5};

{$R *.res}

begin

Application.Initialize;

Application.Title := 'Перевозки пассажиров по городу';

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TForm2, Form2);

Application.CreateForm(TForm3, Form3);

Application.CreateForm(TForm4, Form4);

Application.CreateForm(TForm5, Form5);

Application.Run;

end.

Модуль Unit1:

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, Buttons, XPMan, ComCtrls, jpeg, ExtCtrls;

type

tpath=record

t1,t2:string[30];

p1,p2:byte;

cost:word;

traf:word;

end;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Image1: TImage;

Bevel1: TBevel;

Label1: TLabel;

Label2: TLabel;

ComboBox1: TComboBox;

ComboBox2: TComboBox;

Edit1: TEdit;

UpDown1: TUpDown;

Button3: TButton;

Label3: TLabel;

Button4: TButton;

procedure FormCreate(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure ComboBox1Change(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

f1:textfile;

f2:file of tpath;

colp,colt:byte;

colw:word;

towns:array [1..60] of string;

paths:array [1..30] of tpath;

rel:array of array of byte;

procedure RassUpdate;

procedure Search(fin:byte;way:string);

procedure Found(way:string);

end;

var

Form1: TForm1;

implementation

uses Unit2, Unit3, Unit4, Unit5;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

var st:string;

t:tpath;

begin

If not FileExists('punkt.dat') then begin

AssignFile(f1,'punkt.dat');

ReWrite(f1);

CloseFile(f1)

end;

AssignFile(f1,'punkt.dat');

Reset(f1);

colt:=0;

While not eof(f1) do begin

ReadLn(f1,st);

inc(colt);

towns[colt]:=st

end;

CloseFile(f1);

If not FileExists('puti.dat') then begin

AssignFile(f2,'puti.dat');

ReWrite(f2);

CloseFile(f2)

end;

AssignFile(f2,'puti.dat');

Reset(f2);

colp:=0;

While not eof(f2) do begin

Read(f2,t);

inc(colp);

paths[colp]:=t

end;

CloseFile(f2);

RassUpdate

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

var i:byte;

begin

AssignFile(f1,'punkt.dat');

ReWrite(f1);

For i:=1 to colt do

WriteLn(f1,towns[i]);

CloseFile(f1);

AssignFile(f2,'puti.dat');

ReWrite(f2);

For i:=1 to colp do

Write(f2,paths[i]);

CloseFile(f2);

end;

procedure TForm1.RassUpdate;

var i,k,cpn:byte;

t:array [1..30] of tpath;

f1,f2:boolean;

begin

cpn:=0;

For i:=1 to colp do begin

f1:=false;

f2:=false;

For k:=1 to colt do begin

If paths[i].t1=towns[k] then f1:=true;

If paths[i].t2=towns[k] then f2:=true

end;

If f1 and f2 then begin

inc(cpn);

t[cpn]:=paths[i]

end

end;

For i:=1 to cpn do begin

paths[i]:=t[i];

k:=1;

While (towns[k]<>paths[i].t1) do inc(k);

paths[i].p1:=k;

k:=1;

While (towns[k]<>paths[i].t2) do inc(k);

paths[i].p2:=k

end;

colp:=cpn;

ComboBox1.Clear;

ComboBox2.Clear;

For i:=1 to colt do begin

ComboBox1.Items.Add(towns[i]);

ComboBox2.Items.Add(towns[i])

end;

ComboBox1.ItemIndex:=0;

ComboBox2.ItemIndex:=0;

ComboBox1Change(Self);

end;

procedure TForm1.ComboBox1Change(Sender: TObject);

begin

If ComboBox1.ItemIndex=ComboBox2.ItemIndex then Button3.Enabled:=false else Button3.Enabled:=true

end;

procedure TForm1.Search(fin:byte;way:string);

var i,k:shortint;

t:byte;

f:boolean;

begin

t:=Ord(way[length(way)]);

For i:=0 to length(rel[t])-1 do begin

f:=true;

For k:=1 to length(way) do

If Ord(way[k])=rel[t,i] then f:=false;

If f then

If rel[t,i]=fin then

Found(way+Chr(rel[t,i]))

else

Search(fin,way+Chr(rel[t,i]))

end

end;

procedure TForm1.Found(way:string);

var i,k:byte;

sum:integer;

st:string;

begin

inc(colw);

st:=towns[Ord(way[1])+1];

For i:=2 to length(way) do st:=st+' - '+towns[Ord(way[i])+1];

sum:=0;

For i:=1 to length(way)-1 do

For k:=1 to colp do

If ((paths[k].p1=Ord(way[i])+1) and (paths[k].p2=Ord(way[i+1])+1)) or ((paths[k].p2=Ord(way[i])+1) and (paths[k].p1=Ord(way[i+1])+1)) then

sum:=sum+paths[k].cost*(((UpDown1.Position-1) div paths[k].traf)+1);

Form4.Memo1.Lines.Add(IntToStr(colw)+')'+st+': '+IntToStr(sum));

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Form2.ShowModal

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Form5.ShowModal;

end;

procedure TForm1.Button3Click(Sender: TObject);

var i,k:shortint;

begin

Form4.Memo1.Clear;

SetLength(rel,colt);

For i:=1 to colt do begin

SetLength(rel[i-1],0);

For k:=1 to colp do

If paths[k].p1=i then begin

SetLength(rel[i-1],length(rel[i-1])+1);

rel[i-1,length(rel[i-1])-1]:=paths[k].p2-1

end

else

If paths[k].p2=i then begin

SetLength(rel[i-1],length(rel[i-1])+1);

rel[i-1,length(rel[i-1])-1]:=paths[k].p1-1

end

end;

colw:=0;

Search(ComboBox2.ItemIndex,Chr(ComboBox1.ItemIndex));

If colw=0 then MessageBox(Handle,'Маршрута между этими точками не существует','Ошибка',MB_OK+MB_DEFBUTTON1+MB_ICONERROR+MB_APPLMODAL) else Form4.ShowModal

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

Close;

end;

end.

Модуль Unit2:

unit Unit2;

interface

uses

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

Dialogs, StdCtrls, Buttons;

type

TForm2 = class(TForm)

Label1: TLabel;

ListBox1: TListBox;

AddButton: TButton;

DelButton: TButton;

CancelButton: TButton;

SaveButton: TButton;

procedure AddButtonClick(Sender: TObject);

procedure DelButtonClick(Sender: TObject);

procedure SaveButtonClick(Sender: TObject);

procedure CancelButtonClick(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

f:text;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.AddButtonClick(Sender: TObject);

var t:string;

begin

SaveButton.Enabled:=true;

t:=InputBox('Добавление пункта','Название пункта','');

if t<>'' then

Form2.ListBox1.Items.Add(t);

end;

procedure TForm2.DelButtonClick(Sender: TObject);

var i:integer;

begin

SaveButton.Enabled:=true;

for i:=ListBox1.Count-1 downto 0 do

if ListBox1.Selected[i] then ListBox1.Items.Delete(i);

end;

procedure TForm2.SaveButtonClick(Sender: TObject);

var i:integer;

t:string;

begin

assignfile(f,'punkt.dat');

Rewrite(f);

for i:=0 to ListBox1.Count-1 do

begin

t:=ListBox1.Items[i];

Writeln(f,t);

Form1.towns[i+1]:=t;

end;

CloseFile(f);

Form1.colt:=ListBox1.Count;

Form1.RassUpdate;

Close;

end;

procedure TForm2.CancelButtonClick(Sender: TObject);

begin

Close;

end;

procedure TForm2.FormShow(Sender: TObject);

var t:string;

i:integer;

begin

ListBox1.Clear;

{AssignFile(f,'punkt.dat');

if not FileExists('goroda.dat') then Rewrite(f);

begin

reset(f);

while not eof(f) do

begin

readln(f,t);

ListBox1.Items.Add(t);

end;

CloseFile(f);

end;

end; }

for i:=1 to Form1.colt do

ListBox1.Items.Add(Form1.towns[i]);

end;

procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if key=vk_escape then Close;

end;

end.

Модуль Unit3:

unit Unit3;

interface

uses

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

Dialogs, Buttons, StdCtrls, ComCtrls;

type

TForm3 = class(TForm)

Label11: TLabel;

ComboBox1: TComboBox;

Label12: TLabel;

ComboBox2: TComboBox;

Edit1: TEdit;

UpDown1: TUpDown;

Label1: TLabel;

Label2: TLabel;

Edit2: TEdit;

UpDown2: TUpDown;

Button1: TButton;

Button2: TButton;

procedure SpeedButton2Click(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure ComboBox1Change(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

uses Unit1, Unit5;

{$R *.dfm}

procedure TForm3.SpeedButton2Click(Sender: TObject);

begin

Close

end;

procedure TForm3.FormShow(Sender: TObject);

var i:byte;

begin

ComboBox1.Clear;

ComboBox2.Clear;

For i:=1 to Form1.colt do begin

ComboBox1.Items.Add(Form1.towns[i]);

ComboBox2.Items.Add(Form1.towns[i])

end;

ComboBox1.ItemIndex:=0;

ComboBox2.ItemIndex:=0;

Edit1.Text:='100';

Edit2.Text:='100';

Form1.RassUpdate;

end;

procedure TForm3.ComboBox1Change(Sender: TObject);

begin

If ComboBox1.ItemIndex=ComboBox2.ItemIndex then Button1.Enabled:=false else Button1.Enabled:=true

end;

procedure TForm3.Button2Click(Sender: TObject);

begin

Close;

end;

procedure TForm3.Button1Click(Sender: TObject);

begin

inc(Form1.colp);

Form1.paths[Form1.colp].p1:=ComboBox1.ItemIndex+1;

Form1.paths[Form1.colp].p2:=ComboBox2.ItemIndex+1;

Form1.paths[Form1.colp].t1:=Form1.towns[ComboBox1.ItemIndex+1];

Form1.paths[Form1.colp].t2:=Form1.towns[ComboBox2.ItemIndex+1];

Form1.paths[Form1.colp].cost:=UpDown1.Position;

Form1.paths[Form1.colp].traf:=UpDown2.Position;

Form5.ListBox2.Items.Add(Form1.towns[ComboBox1.ItemIndex+1]+' - '+Form1.towns[ComboBox2.ItemIndex+1]);

Close

end;

procedure TForm3.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if key=vk_escape then Close;

end;

end.

Модуль Unit4:

unit Unit4;

interface

uses

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

Dialogs, StdCtrls, Grids;

type

TForm4 = class(TForm)

Label1: TLabel;

Memo1: TMemo;

Button1: TButton;

Button2: TButton;

SaveDialog1: TSaveDialog;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);

begin

SaveDialog1.InitialDir:=GetCurrentDir;

if SaveDialog1.Execute then

Memo1.Lines.SaveToFile(SaveDialog1.FileName);

end;

procedure TForm4.Button2Click(Sender: TObject);

begin

Close;

end;

end.

Модуль Unit5:

unit Unit5;

interface

uses

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

Dialogs, StdCtrls;

type

TForm5 = class(TForm)

ListBox2: TListBox;

GroupBox1: TGroupBox;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label2: TLabel;

NewButton: TButton;

CancelButton: TButton;

DelButton: TButton;

procedure ListBox2Click(Sender: TObject);

procedure NewButtonClick(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure CancelButtonClick(Sender: TObject);

procedure DelButtonClick(Sender: TObject);

procedure FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form5: TForm5;

implementation

uses Unit3,Unit1;

{$R *.dfm}

procedure TForm5.ListBox2Click(Sender: TObject);

begin

If ListBox2.ItemIndex>=0 then begin

Label7.Caption:=Form1.towns[Form1.paths[ListBox2.ItemIndex+1].p1];

Label8.Caption:=Form1.towns[Form1.paths[ListBox2.ItemIndex+1].p2];

Label9.Caption:=IntToStr(Form1.paths[ListBox2.ItemIndex+1].cost);

Label10.Caption:=IntToStr(Form1.paths[ListBox2.ItemIndex+1].traf)

end

end;

procedure TForm5.NewButtonClick(Sender: TObject);

begin

Form3.ComboBox1Change(Self);

Form3.ShowModal

end;

procedure TForm5.FormShow(Sender: TObject);

var i:integer;

begin

ListBox2.Clear;

for i:=1 to Form1.colp do

ListBox2.Items.Add(Form1.towns[form1.paths[i].p1]+' - '+Form1.towns[Form1.paths[i].p2]);

If ListBox2.Items.Count>0 then begin

ListBox2.ItemIndex:=0;

ListBox2Click(Self)

end

end;

procedure TForm5.CancelButtonClick(Sender: TObject);

begin

Close;

end;

procedure TForm5.DelButtonClick(Sender: TObject);

var i,k:byte;

t: array [1..30] of tpath;

begin

k:=0;

for i:=1 to Form1.colp do

if not ListBox2.Selected[i-1] then

begin

k:=k+1;

t[k]:=Form1.paths[i];

end;

Form1.colp:=k;

for i:=1 to Form1.colp do Form1.paths[i]:=t[i];

ListBox2.DeleteSelected;

end;

procedure TForm5.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if key=vk_escape then Close;

end;

end.

Размещено на Allbest.ru


Подобные документы

  • Разработка эскизного и технического проектов программы, моделирующей игру "Кости". Постановка задачи, описание алгоритма; написание программы, организация входных и выходных данных; выбор программных средств; спецификация, текст, условия выполнения.

    курсовая работа [93,8 K], добавлен 11.02.2012

  • Разработана программа решения двух задач на языке программирования Turbo Pascal. Спецификация задания. Описание входных и выходных данных. Математическая постановка задачи. Алгоритм ее решения. Описание и блок-схема программы. Результаты тестирования.

    курсовая работа [275,8 K], добавлен 28.06.2008

  • Разработка эскизного и технического проектов программы, ее назначение и область применения, описание алгоритма, организация входных и выходных данных. Выбор состава технических и программных средств, разработка рабочего проекта, спецификация программы.

    курсовая работа [159,8 K], добавлен 26.01.2010

  • Разработка эскизного и технического проектов программы, ее назначение и область применения, технические характеристики. Организация входных и выходных данных, выбор состава технических и программных средств. Текст программы, ее описание и тестирование.

    курсовая работа [1,3 M], добавлен 15.11.2009

  • Комбинированный тип данных для хранения входных данных о студентах и информация, содержащаяся в полях. Пример структуры входных и выходных данных. Алгоритм работы и программный код программы по успеваемости студентов, описание используемых функций.

    курсовая работа [135,9 K], добавлен 28.12.2012

  • Графическая схема алгоритма выполнения программы определения запасов сырья. Решение задачи с помощью программы MS Excel. Разработка макроса для построения диаграммы. Использование интерфейса программы для работы с таблицей. Разработка базы данных.

    курсовая работа [1,2 M], добавлен 24.04.2014

  • Разработка программы на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит на экран заданную информацию. Типы блок-схем и их использование при написании программы. Описание входных данных и результат вычислений, листинг программы.

    курсовая работа [680,3 K], добавлен 03.08.2009

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

    курсовая работа [969,3 K], добавлен 26.03.2009

  • Разработка программы обработки изображений, позволяющей прорисовывать типовые геометрические фигуры. Выбор аппаратных и технических средств для реализации программного продукта. Организация входных и выходных данных. Блок-схема и листинг программы.

    курсовая работа [2,4 M], добавлен 18.06.2014

  • Основы проверки и расчета входных данных и вывода выходных данных программы, их блок-схемы. Реализация функции считывания числовых данных из файла, управление (создание, уничтожение и редактирование) визуальными компонентами во время выполнения программы.

    контрольная работа [1,3 M], добавлен 12.06.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.