Разработка программы "Пассажирские перевозки по городу"
Использование теории графов для решения задач. Информационные структуры входных и выходных данных. Иерархическая схема программы. Руководство оператора: назначение и условия выполнения программы. Граф-схема 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