Курсовая работа: Программирование в Бейсике
1.Просмотр
маршрутов и управление движением автобусов.
-
Считывание из файла " Маршруты.txt" названия
всех существующих маршрутов и запись их в Combo_Box
-
При выборе определенного маршрута из списка представленных - считывание
из файла выбранного маршрута " < Имя маршрута >.txt" данных :
номера автобусов, имена их водителей и кондукторов, названия всех остановок и
их координаты. Отображение в Picture_Box схемы самого маршрута с помощью линий, остановок и
автобусов – Image_Box
-
Осуществление с помощью Timer движения
автобусов путем расчета новых координат промежуточного положения автобусов,
учитывая изменения по координатным осям, и перерисовкой автобусов на новом
месте
-
При выборе автобуса – щелчок по нему – отображение основных данных по
нему: имена водителя и кондуктора, номер, скорость с учетом времени суток и
уровень оставшегося топлива
-
При щелчке по остановкам перемещать активный в данный момент автобус(
выделенный) на эти остановки
-
При выборе пунктов меню: переместить на остановку вперед и назад -
перемещать активный в данный момент автобус( выделенный) соответственно на эти
остановки
-
При выборе пунктов: Режимы передвижения или просмотра автобусов –
соответственно разрешать или запрещать ручное (Drag_and_Drop)
перетаскивание автобусов
2.Просмотр
свободных автобусов
-
открывает файл свободных автобусов
3.Редактор
маршрутов
-
Считывание из файла " Маршруты.txt" названия
всех существующих маршрутов и запись их в Combo_Box
-
При выборе определенного маршрута из списка представленных - считывание
из файла выбранного маршрута " < Имя маршрута >.txt" данных :
номера автобусов, имена их водителей и кондукторов, названия всех остановок и
их координаты. Отображение в Picture_Box схемы самого маршрута с помощью линий и остановки – Image_Box
-
При нажатии кнопки Новый считывание из файла " Маршруты.txt" названия
всех существующих маршрутов и запись их в Combo_Box
-
При выборе кнопок Добавление/Изменение или Удаление соответственно
добавление, изменение или удаление в зависимости от определенных параметров
-
При нажатии соответствующих после выбора режима изменения маршрутов
кнопок переименование, удаление, перемещение выбранной остановки или добавление
новой
-
Перенаправление маршрута и запоминание соответственно уже измененного
маршрута
-
При нажатие соответствующей кнопки запись изменений в файл открытого
маршрута
4.Создание
нового маршрута
-
Запись в файл маршрутов названия нового и создание файла самого
маршрута
4. Программная
часть
Самыми сложными
на мой взгляд и наиболее требующими внимания являются следующие части кода
программы:
1.Визуализация
движения автобусов
For i = 0 To (AllBuses - 1)
Fuel(i)
= Fuel(i) - 1 / (10000 * Me.Timer1.Interval)
If i
= Misk Then Me.Label13.Caption = Str$(Fuel(Misk))
If
Fuel(i) = 0 Then Fuel(i) = 100
Next
i
For
z = 0 To (Combo1.ListCount - 1)
For
i = 0 To (arBusCount(z) - 1)
If z
<> 0 Then
a =
i
For
j = 0 To (z - 1)
i =
i + arBusCount(j)
Next
j
End
If
If
arStayPast(z, i) = (arStayCount(z) - 1) Then arStayEdit(z, i)= -1
If
arStayPast(z, i) = 0 Then arStayEdit(z, i) = 1
If
Val(arStayAbsciss(z, arStayPast(z, i))) > Val(arStayAbsciss(z, arStayPast(z,
i) + arStayEdit(z, i))) _
Then
arCoordEdit(z, i) = -1
If
Val(arStayAbsciss(z, arStayPast(z, i))) < Val(arStayAbsciss(z, arStayPast(z,
i) + arStayEdit(z, i))) _
Then
arCoordEdit(z, i) = 1
If
Val(arStayAbsciss(z, arStayPast(z, i))) = Val(arStayAbsciss(z, arStayPast(z, i)
+ arStayEdit(z, i))) _
Then
arCoordEdit(z, i) = 0
k(z,
i) = (Val(arStayOrdinata(z, arStayPast(z, i))) - Val(arStayOrdinata(z,
arStayPast(z, i) + arStayEdit(z, i)))) / _
(Val(arStayAbsciss(z,
arStayPast(z, i))) - Val(arStayAbsciss(z, arStayPast(z, i) + arStayEdit(z,
i))))
b(z,
i) = Val(arStayOrdinata(z, arStayPast(z, i))) - k(z, i) * Val(arStayAbsciss(z,
arStayPast(z, i)))
Dim
c As Single
c =
Cos(Atn(k(z, i)))
x0(z,
i) = x0(z, i) + c * 2 * arCoordEdit(z, i)
y0(z,
i) = k(z, i) * x0(z, i) + b(z, i)
Image1(i).Move
x0(z, i) - Image1(i).Width / 2, y0(z, i) - Me.Image1(i).Height / 2
If
arCoordEdit(z, i) = 1 Then
If
x0(z, i) >= Val(arStayAbsciss(z, arStayPast(z, i) + arStayEdit(z, i))) _
Then
arStayPast(z, i) = arStayPast(z, i) + arStayEdit(z, i)
End
If
If
arCoordEdit(z, i) = -1 Then
If
x0(z, i) <= Val(arStayAbsciss(z, arStayPast(z, i) + arStayEdit(z, i)))_
Then
arStayPast(z, i) = arStayPast(z, i) + arStayEdit(z, i)
End
If
If z
<> 0 Then i = a
Next
i
Next
z
End
Sub
где k(z, i) –
угловой коэффициент уравнения движения автобуса " i " по маршруту "
z "; b(z, i) – свободный член того же уравнения; arCoordEdit(z, i) – в какую
сторону изменять координату автобуса; arStayPast(z, i), arStayEdit(z, i) –
соответственно последняя остановка, которую прошел автобус, и величина,
показывающая в какую сторону будут изменяться остановки; с – изменение
координаты автобуса по X; x0(z, i), y0(z, i) – промежуточные координаты автобуса. В данной процедуре
программа сама проверяет в какую сторону должен двигаться определенный автобус,
как должна изменяться его координата и где следующий момент времени он будет
находиться.
2.Работа с
текстовыми файлами при считывании информации об определенном маршруте
Public
Static Sub Work_With_Files()
arBusCount(Mis)
= 0
arStayCount(Mis)
= 0
Open
"c:\Курсовая моя\" + Combo1.List(Mis) + ".txt" For Input As 2
Do
While Not EOF(2)
Input
#2, a$
Select
Case a$
Case
"автобус": Input #2, arBusNumber(Mis, arBusCount(Mis))
Case
"водитель": Input #2, arDriveName(Mis, arBusCount(Mis))
Case
"кондуктор": Input #2, arConductorName(Mis, arBusCount(Mis))
arBusCount(Mis)
= arBusCount(Mis) + 1
Case
"остановка": Input #2, arStayName(Mis, arStayCount(Mis))
Input
#2, arStayAbsciss(Mis, arStayCount(Mis))
Input
#2, arStayOrdinata(Mis, arStayCount(Mis))
arStayCount(Mis)
= arStayCount(Mis) + 1
End
Select
Loop
Close 2
End Sub
где Mis – номер
текущего маршрута, файл которого читается.
Полный код программы
смотрите в Приложении.
Вывод
В данной
программе удалось полностью реализовать поставленную задачу.
С помощью Visual Basic получили:
Программу -
модель работы оператора по управлению автобусами
Обеспечили возможность
управления движением автобусов по каждому из предложенных, созданных или уже
существующих маршрутов.
Предоставили
возможность изменения данных по маршруту: непосредственно имени самого
маршрута, возможность добавить или удалить автобус, а также изменить данные по
автобусам: имена водителя и кондуктора; удалить, добавить, переместить,
переименовать остановки или вообще изменить направление движения по маршруту,
поменять порядок прохождения остановок автобусами данного маршрута, плюс
удаление самого маршрута при необходимости.
Обеспечили возможности
создания своего маршрута, а также корректировки данных (бортовой номер) по
свободным автобусам (которые могут быть задействованы, если это необходимо).
Плюс ко всему,
смоделировали (визуализировать) наглядное движение автобусов с учетом зависимости
скорости автобусов от времени суток.
Список
использованной литературы
1.Visual Basic 6.0 – Мастер –
Разработка приложений. Санкт – Петербург, " БХВ - Петербург", 2000
2.Самоучитель
по Visual Basic 6.0
Приложение
Form1
Public
EditBus As Boolean
Public
EditLine As Boolean
Dim
DooM As Boolean, Doomy As Boolean, Do_Do As Boolean
Dim
Mis As Integer, Mi As Integer
Dim
Misk As Integer, disk As Integer
Dim
w As Single
Dim
arLinesName(0 To 30) As String, LinesCount As Integer '30 - max маршрутов
Dim
arBusNumber(0 To 30, 0 To 25) As String, arBusCount(0 To 30) As Integer
Dim
AllBuses As Integer '25 - max автобусов
Dim
arDriveName(0 To 30, 0 To 25) As String
Dim
arConductorName(0 To 30, 0 To 25) As String
Dim
arStayName(0 To 30, 0 To 35) As String ' 35 max остановок на одном маршруте
Dim
arStayAbsciss(0 To 30, 0 To 35) As String
Dim
arStayOrdinata(0 To 30, 0 To 35) As String
Dim
arStayCount(0 To 30) As Integer
Dim
arName(0 To 30, 0 To 35) As String ' 35 - max остановок на одном маршруте
Dim
arAbsciss(0 To 30, 0 To 35) As String
Dim
arOrdinata(0 To 30, 0 To 35) As String
Dim
arFreeBuses(0 To 100) As String
Dim
q As Integer, food As Boolean, Boom As Boolean
Dim
e As Integer, mx As Single, my As Single
Dim
zzz As Integer, zxz As Integer
Dim
aa As Integer, x0 As Single, y0 As Single, nama(0 To 30, 0 To 35) As String
Private
Sub Combo1_Click()
Mi =
0
Misk
= 0
Boom
= True
disk
= 999
Do_Do
= False
Doomy
= False
Command4.Enabled
= False
Command5.Enabled
= False
Command6.Enabled
= False
Combo2.Clear
Combo3.Clear
Combo4.Clear
Text1.Text
= "": Text2.Text = "": Text3.Text = "":
Text4.Text = ""
Me.Picture1.Visible
= True
Combo2.Enabled
= True: Combo4.Enabled = True
Страницы: 1, 2, 3, 4, 5, 6 |