Автор работы: Пользователь скрыл имя, 18 Июня 2013 в 15:49, курсовая работа
Целью работы является - создание программы для учета городского транспорта, которая будет хранить введенную информацию в базах данных.
Для достижения поставленной цели необходимо решить ряд задач:
• подробно изучить базу данных программы;
• исследовать средства, которые нам понадобятся для создания программы;
• описать интерфейс полученной программы.
ВВЕДЕНИЕ 5
1 ОБЗОР 7
1.1 Информация, характеризующая городской транспорт 7
1.2 Преимущества ООП для программной реализации базы данных, хранящей информацию о городском транспорте 7
1.3 Постановка задачи 7
2 АЛГОРИТМИЧЕСКОЕ КОНСТРУИРОВАНИЕ 9
2.1 Общая блок-схема работы программы 9
2.2 Алгоритм поиска по заранее заданному критерию 11
3 ПРОГРАММНОЕ КОНСТРУИРОВАНИЕ 12
3.1 Обоснование выбора языка программирования 12
3.2 Описание основных классов 12
4 РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММНОГО СРЕДСТВА 15
ЗАКЛЮЧЕНИЕ 26
5 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 27
ПРИЛОЖЕНИЕ А. ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА ПРОГРАММНОЕ СРЕДСТВО 28
ПРИЛОЖЕНИЕ Б. ЛИСТИНГ ПРОГРАММЫ 32
ПРИЛОЖЕНИЕ В. 59
else // если список был пуст
tail := head;
end;
function GetHead():node;
begin
Result:=head;
end;
procedure addNodeFirst(n:node);
begin
n.next:=head;
n.prev:=nil;
head := n;
if head.next <> nil then
head.next.prev := head
else // если список был пуст
tail := head;
end;
procedure delNodeFirst();
begin
if (head <> nil) then
begin
head := head.next;
if head = nil then
tail := nil
else
head.prev := nil;
end;
end;
procedure delNodeLast();
begin
if (tail <> nil) then
begin
tail := tail.prev;
if tail = nil then
head := nil
else
tail.next := nil;
end;
end;
procedure delNodeCurr(cur:node);
begin
if cur = head then
delNodeFirst() // удаление из начала
else
if cur = tail then
delNodeLast() // удаление из конца
else
begin
cur.prev.next := cur.next;
cur.next.prev := cur.prev;
cur := cur.next;
end;
end;
function count():integer; //возвращает кол-во элементов
begin
Result:=0;
var temp:node := head;
while (temp <> nil) do
begin
Result+=1;
temp:=temp.next;
end;
end;
procedure sort(); //делает сортировку(по сидячим местам)
begin
var arr:array of transport;
arr:=nil;
var n:integer := count();
SetLength(arr,n);
var temp:node := head;
var i:integer := 0;
while( temp <> nil) do
begin
arr[i]:=temp.data;
temp:=temp.next;
i+=1;
end;
var th:transport;
for var k:=0 to n-1 do
for var m:=0 to n-2 do
if ( (mt(arr[m])).getSitmest() > (mt(arr[m+1])).getSitMest()) then
begin
th:=arr[m];
arr[m]:=arr[m+1];
arr[m+1]:=th;
end;
head:=nil;
tail:=nil;
for var j:=i-1 downto 0 do
addNodeFirst(arr[j]);
end;
procedure writeDB(); //запись бд в файл
begin
var fi:file of integer;
Assign(fi, 'index.dat');
Rewrite(fi);
write(fi, index);
close(fi);
var t1,t2,t3:text;
Assign(t1,'mt.txt');
Assign(t2,'autobus.txt');
Assign(t3,'tramway.txt');
Rewrite(t1);
Rewrite(t2);
Rewrite(t3);
var h:node := head;
while( h<>nil ) do
begin
if (h.data.getTip() = mk) then
begin
writeln(t1,IntToSTR((mt(h.
writeln(t1,IntToSTR((mt(h.
writeln(t1,IntToSTR((mt(h.
writeln(t1,IntToSTR((mt(h.
writeln(t1,IntToSTR((mt(h.
writeln(t1,IntToSTR((mt(h.
writeln(t1,(mt(h.data)).
writeln(t1,(mt(h.data)).
writeln(t1,(mt(h.data)).
end else
if (h.data.getTip() = ak) then
begin
writeln(t2,IntToSTR((autobus(
writeln(t2,IntToSTR((autobus(
writeln(t2,IntToSTR((autobus(
writeln(t2,IntToSTR((autobus(
writeln(t2,IntToSTR((autobus(
writeln(t2,IntToSTR((autobus(
writeln(t2,(autobus(h.data)).
writeln(t2,(autobus(h.data)).
writeln(t2,(autobus(h.data)).
end
else begin
writeln(t3,IntToSTR((tramway(
writeln(t3,IntToSTR((tramway(
writeln(t3,IntToSTR((tramway(
writeln(t3,IntToSTR((tramway(
writeln(t3,IntToSTR((tramway(
writeln(t3,IntToSTR((tramway(
writeln(t3,IntToSTR((tramway(
writeln(t3,(tramway(h.data)).
writeln(t3,(tramway(h.data)).
writeln(t3,(tramway(h.data)).
end;
h:=h.next;
end;
close(t1);
close(t2);
close(t3);
end;
function getIndex():integer;
begin
index+=1;
Result:=index;
end;
procedure readDB(); //чтение из файла в бд
begin
var fi:file of integer;
Assign(fi, 'index.dat');
Reset(fi);
read(fi, index);
close(fi);
var t1,t2,t3:text;
var k,t,nr,mm,sm,l,r,cw:integer;
var m,n,y,tstr:string;
Assign(t1,'mt.txt');
Reset(t1);
t:=mk;
while (not eof(t1)) do
begin
readln(t1,tstr);
k := StrToInt(tstr);
readln(t1,tstr);
nr := StrToInt(tstr);
readln(t1,tstr);
mm := StrToInt(tstr);
readln(t1,tstr);
sm := StrToInt(tstr);
readln(t1,tstr);
l := StrToInt(tstr);
readln(t1,tstr);
r := StrToInt(tstr);
readln(t1,m);
readln(t1,n);
readln(t1,y);
var newmt:mt:= new mt(k,t,nr,mm,sm,l,r,m,n,y);
addNodeFirst(newmt);
end;
close(t1);
Assign(t2,'autobus.txt');
Reset(t2);
t:=ak;
while (not eof(t2)) do
begin
readln(t2,tstr);
k := StrToInt(tstr);
readln(t2,tstr);
nr := StrToInt(tstr);
readln(t2,tstr);
mm := StrToInt(tstr);
readln(t2,tstr);
sm := StrToInt(tstr);
readln(t2,tstr);
l := StrToInt(tstr);
readln(t2,tstr);
r := StrToInt(tstr);
readln(t2,m);
readln(t2,n);
readln(t2,y);
var newautobus:autobus
:= new autobus(k,t,nr,mm,sm,l,r,m,n,
addNodeFirst(newautobus);
end;
close(t2);
Assign(t3,'tramway.txt');
Reset(t3);
t:=tk;
while (not eof(t3)) do
begin
readln(t3,tstr);
k := StrToInt(tstr);
readln(t3,tstr);
nr := StrToInt(tstr);
readln(t3,tstr);
mm := StrToInt(tstr);
readln(t3,tstr);
sm := StrToInt(tstr);
readln(t3,tstr);
l := StrToInt(tstr);
readln(t3,tstr);
r := StrToInt(tstr);
readln(t3,tstr);
cw := StrToInt(tstr);
readln(t3,m);
readln(t3,n);
readln(t3,y);
var newtramway:tramway:= new tramway(k,t,nr,mm,sm,l,r,cw,m,
addNodeFirst(newtramway);
end;
close(t3);
end;
end;
MTInputForm = class(Form) //форма для маршрутного такси
protected
mark_f:TextBox;
name_f:TextBox;
year_f:TextBox;
route_f:TextBox;
maxmest_f: TextBox;
sitmest_f:TextBox;
long_f:TextBox;
rashod_f:TextBox;
write_bt:Button;
tr:mt;
temptip:integer;
lbl_1:System.Windows.Forms.Lab
lbl_2:System.Windows.Forms.Lab
lbl_3:System.Windows.Forms.Lab
lbl_4:System.Windows.Forms.Lab
lbl_5:System.Windows.Forms.Lab
lbl_6:System.Windows.Forms.Lab
lbl_7:System.Windows.Forms.Lab
lbl_8:System.Windows.Forms.Lab
public
constructor Create(title:string; t:transport; tt:integer);
begin
temptip:=tt;
tr := MT(t);
self.text:=title;
self.Width:=250;
self.Height:=380;
lbl_1:= new System.Windows.Forms.Label();
lbl_1.Width:=150;
lbl_1.Text := 'Введите марку';
self.controls.add(lbl_1);
mark_f:=new TextBox();
mark_f.Top:=20;
mark_f.Width:=150;
self.Controls.Add(mark_f);
mark_f.text := tr.getMark();
lbl_2:= new System.Windows.Forms.Label();
lbl_2.Top:=40;
lbl_2.Width:=200;
lbl_2.Text := 'Введите название';
self.controls.add(lbl_2);
name_f:=new TextBox();
name_f.top := 60;
name_f.Width:=150;
self.Controls.Add(name_f);
name_f.text := tr.getName();
lbl_3:= new System.Windows.Forms.Label();
lbl_3.Top:=80;
lbl_3.Width:=200;
lbl_3.Text := 'Введите год выпуска';
self.controls.add(lbl_3);
year_f:=new TextBox();
year_f.top := 100;
year_f.Width:=150;
self.Controls.Add(year_f);
year_f.text := tr.getyear();
lbl_4:= new System.Windows.Forms.Label();
lbl_4.Top:=120;
lbl_4.Width:=160;
lbl_4.Text := 'Введите номер маршрута';
self.controls.add(lbl_4);
route_f:=new TextBox();
route_f.top := 140;
route_f.Width:=150;
self.Controls.Add(route_f);
route_f.text := IntTostr(tr.getRoute());
lbl_5:= new System.Windows.Forms.Label();
lbl_5.Top:=160;
lbl_5.Width:=250;
lbl_5.Text := 'Введите максимальное количество мест';
self.controls.add(lbl_5);
maxmest_f:=new TextBox();
maxmest_f.top := 180;
maxmest_f.Width:=150;
self.Controls.Add(maxmest_f);
maxmest_f.text:=IntTOStr(tr.
lbl_6:= new System.Windows.Forms.Label();
lbl_6.Top:=200;
lbl_6.Width:=250;
lbl_6.Text := 'Введите количество сидячих мест';
self.controls.add(lbl_6);
sitmest_f:=new TextBox();
sitmest_f.top := 220;
sitmest_f.Width:=150;
self.Controls.Add(sitmest_f);
sitmest_f.text:=IntTOStr(tr.
lbl_7:= new System.Windows.Forms.Label();
lbl_7.Top:=240;
lbl_7.Width:=150;
lbl_7.Text := 'Введите длину';
self.controls.add(lbl_7);
long_f:=new TextBox();
long_f.top := 260;
long_f.Width:=150;
self.Controls.Add(long_f);
long_f.text:=IntToStr(tr.
lbl_8:= new System.Windows.Forms.Label();
lbl_8.Top:=280;
lbl_8.Width:=200;
lbl_8.Text := 'Введите расход топлива';
self.controls.add(lbl_8);
rashod_f:=new TextBox();
rashod_f.top := 300;
rashod_f.Width:=150;
self.Controls.Add(rashod_f);
rashod_f.text:=IntToStr(tr.
write_bt:=new Button();
write_bt.Text:='Записать';
write_bt.Top:=320;
write_bt.Width:=150;
write_bt.Click+=MyButtonClick;
self.Controls.Add(write_bt);
end;
procedure MyButtonClick(sender: Object; e: System.EventArgs);
begin
tr.setTransport(tr.getKod(),
tr.SetMT(StrToInt(maxmest_f.
self.Close;
end;
end;
AutobusInputForm = class(MTInputForm) //форма для автобуса, наследуется от MTInputForm
protected
tr:autobus;
public
constructor Create(title:string; t:transport; gk:integer);
begin
inherited Create(title,t,gk);
tr := autobus(t);
end;
end;
TramwayInputForm = class(MTInputForm) //форма для трамвая
protected
countw_f:TextBox;
tr:tramway;
lbl_9:System.Windows.Forms.Lab
public
constructor Create(title:string; t:transport; gk:integer);
begin
inherited Create(title,t,gk);
tr := tramway(t);
lbl_9:= new System.Windows.Forms.Label();
lbl_9.Top:=320;
lbl_9.Width:=200;
lbl_9.Text := 'Введите количестdо вагонов';
lbl_8.Text := 'Введите расход электроэнергии';
self.controls.add(lbl_9);
countw_f:=new TextBox();
countw_f.top := 340;
countw_f.Width:=150;
self.Controls.Add(countw_f);
countw_f.text:=IntToStr(tr.
write_bt.Top:=360;
write_bt.Click+=MyButtonClick;
self.Height:=450;
end;
procedure MyButtonClick(sender: Object; e: System.EventArgs);
begin
tr.setTransport(tr.getKod(),
tr.SetMT(StrToInt(maxmest_f.
tr.setTramway(StrToInt(countw_
self.Close;
end;
end;
MainForm=class(Form)
protected
MTForm:MTInputForm;
AutobusForm:AutobusInputForm;
TramwayForm:TramwayInputForm;
manager:BD;
bd_l:listBox;
addMT_b:button;
addAutobus_b:button;
addTramway_b:button;
change_b:button;
sort_b:button;
lbl_1:System.Windows.Forms.Lab
lbl_2:System.Windows.Forms.Lab
lbl_3:System.Windows.Forms.Lab
BD2_l:listBox;
find_f:textbox;
find_b:button;
delete_b:button;
deleteFind_b:button;
MTF_b:button;
AutobusF_b:button;
TramwayF_b:button;
public
constructor Create();
begin
manager := new BD();
manager.readDB();
self.text := 'Система учета городского транспорта ' + chr(169);
lbl_1:= new System.Windows.Forms.Label();
lbl_1.Width:=200;
lbl_1.left:=200;
lbl_1.Text := 'окно содержимого БД';
self.controls.add(lbl_1);
bd_l:=new ListBox();
bd_l.Top:=20;
bd_l.Width:=700;
bd_l.Height:=250;
self.Controls.Add(bd_l);
addMT_b:=new Button();
addMT_b.Text:='Добавить маршрутное такси';
addMT_b.Top:=270;
addMT_b.Width:=200;
addMT_b.Click+=addMT;
self.Controls.Add(addMT_b);
addAutobus_b:=new Button();
addAutobus_b.Text:='Добавить автобус';
addAutobus_b.Top:=300;
addAutobus_b.Width:=200;
addAutobus_b.Click+=
self.Controls.Add(addAutobus_
addTramway_b:=new Button();
addTramway_b.Text:='Добавить Трамвай';
addTramway_b.Top:=330;
addTramway_b.Width:=200;
addTramway_b.Click+=
self.Controls.Add(addTramway_
delete_b:=new Button();
delete_b.Text:='Удалить';
delete_b.Top:=270;
delete_b.Width:=120;
delete_b.left:=230;
delete_b.Click+=delete;
self.Controls.Add(delete_b);
change_b:=new Button();
change_b.Text:='Изменить';
change_b.Top:=300;
change_b.Width:=120;
change_b.Left:=230;
change_b.Click+=change;
self.Controls.Add(change_b);