p align="left">- При выборе определенного маршрута из списка представленных - считывание из файла выбранного маршрута " < Имя маршрута >.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 Command1.Enabled = True: Command2.Enabled = True: Command3.Enabled = True: Command7.Enabled = True Command5.Enabled = True Mis = Combo1.ListIndex If Len(Dir("c:\Курсовая моя\" + Combo1.List(Mis) + ".txt")) = 0 Then MsgBox "Файл маршрута не найден" + vbCrLf + _ "Проверьте его наличие: 'c:\Курсовая моя\" + Combo1.List(Mis) + ".txt'" Exit Sub Else Files End If For i = 0 To arBusCount(Mis) - 1 Combo2.AddItem arBusNumber(Mis, i) Next i For i = 0 To 35 Image1(i).Picture = LoadPicture("c:\Курсовая моя\Иконки\Icon2.ico") Next i Picture1.Cls For i = 1 To 35 Me.Image1(i).Visible = False Me.Label14(i).Visible = False Next i Me.Picture1.PSet (arStayAbsciss(Mis, 0), arStayOrdinata(Mis, 0)) w = Me.Image1(0).Width / 2 Me.Image1(0).Move arStayAbsciss(Mis, 0) - w, arStayOrdinata(Mis, 0) - w Me.Label14(0).Move Image1(0).Left + 2 * w, Image1(0).Top Me.Label14(0).Caption = arStayName(Mis, 0) For i = 0 To (arStayCount(Mis) - 1) Me.Picture1.Line -(arStayAbsciss(Mis, i), arStayOrdinata(Mis, i)) Me.Image1(i).Move arStayAbsciss(Mis, i) - w, arStayOrdinata(Mis, i) - w Me.Image1(i).Visible = True Me.Label14(i).Visible = True Me.Label14(i).Move Image1(i).Left + 2 * w, Image1(i).Top Me.Label14(i).Caption = arStayName(Mis, i) Me.Combo4.AddItem arStayName(Mis, i) Next i End Sub Private Sub Combo2_Click() DooM = False Text2.Enabled = True: Text3.Enabled = True Me.Command8.Enabled = True Misk = Combo2.ListIndex Text1.Text = arBusNumber(Mis, Misk) Text2.Text = arDriveName(Mis, Misk) Text3.Text = arConductorName(Mis, Misk) End Sub Private Sub Combo3_Click() DooM = True Text2.Enabled = True: Text3.Enabled = True Mi = Combo3.ListIndex Text1.Text = Combo3.List(Mi) Text2.Text = "" Text3.Text = "" End Sub Private Sub Combo4_Click() disk = Combo4.ListIndex Text4.Enabled = True Text4.Text = Combo4.List(disk) For i = 0 To 35 If Label14(i).Caption = Combo4.List(disk) Then Image1(i).Picture = LoadPicture("c:\Курсовая моя\Иконки\!conMania.cur") Else Image1(i).Picture = LoadPicture("c:\ Курсовая моя\Иконки \Icon2.ico")
Страницы: 1, 2, 3, 4, 5
|