Моделирование работы автовокзала
Оглавление
Введение
. Постановка задачи
. Разработка приложения
.1 Класс “Моделирование”
.2 Процесс моделирования
.3 Обработка и печать
результатов моделирования
.4 Работа программы
моделирования
Литература
Приложения
Введение
Основным методом исследования систем является метод моделирования, т.е.
способ теоретического анализа и практического действия, направленный на
разработку и использование моделей. Суть моделирования заключается в описании
социально-экономических систем и процессов в виде экономико-математических
моделей.
В данном курсовом проекте будет смоделирована работа автовокзала.
Цель данного курсового проекта - овладеть практическими навыками
построения моделей, для анализа взаимодействующих факторов и оценки последствий
их измерения на развитие моделируемого объекта.
1. Постановка
задачи
Разрабатывается программа, которая моделирует работу автовокзала. Клиенты
приходят на автовокзал, встают в очередь к одному из кассиров, в зависимости от
пункта назначения, обслуживаются и уходят, также производится отправка рейсов
согласно расписанию. Программа на абстрактном уровне воспроизводит происходящие
события в темпе искусственного времени, имитирующего реальное время. После
имитации заданного интервала времени работы автовокзала программа печатает
общее количество обслуженных клиентов, среднее время обслуживания клиентов, а
также количество обслуженных клиентов, среднее время обслуживания клиентов по
каждому направлению. Модельное время продвигается с постоянным шагом. Времена
прихода и обслуживания клиентов формируются при помощи генераторов случайных
чисел. При запуске программы пользователем вводятся значения параметров
моделируемой системы (время моделирования, частота прихода клиентов).
2. Разработка
приложения
.1 Класс
“Моделирование”
В ходе работы программы для клиента генерируется время появления
следующего клиента, которое представляется как объект класса Time и является
объектом класса Simulation. В цикле моделирования идет проверка на совпадение
текущего времени и времени появления следующего клиента, если совпадение есть,
генерируется время появления следующего клиента, а в журнал событий
записывается время появления клиента и его номер.
Для генерирования времени появления используется генератор случайных
чисел, реализованный в программе как функция-элемент класса Simulation.
Функция-элемент Client_arrival(curr, num) этого класса генерирует случайное
целое число Х из интервала [0, num] с помощью объекта класса Random,
после чего число минут (Х + 1) прибавляется к текущему времени curr. Тем самым
получается время появления следующего клиента.
Клиент представлется как объект класса client, который содержит следующие
закрытые данные-элементы:
аrrive - время появления клиента_time - время обслуживания на кассе_time-
время отправки рейсаномер клиента- место назначения
После появления клиента в цикле моделирования идет его инициализация с
помощью функции-элемента класса client, которая устанавливает время появления,
номер, время обслуживания на кассе и место назначения генерируются с помощью объекта
класса Random. Время отправки устанавливается при продаже билета. После
инициализации клиент помещается в нужную кассу в зависимости от места
назначения. В классехранится список касс, каждая из которых представлена
объектом класса ticket_office, в котором содержится очередь для клиентов, а
также направление, представленное классом direction, который содержит список
городов (класс city), в каждом городе имеется список рейсов(класс Run). Тем
самым реализован один из
двух доступных в ООП способов повторного использования программного кода -
композиция.
После помещения клиента в очередь проверяются все очереди на наличие
клиентов, которые должны обслуживаться. Если такие имеются, ведется поиск
билета на самый ранний по отношению к текущему времени рейс. Количество билетов
на каждый рейс ограничено 40 шт. Если билет продан, то в журнал событий
записывается время продажи, номер клиента, место назначения, если нет - время
обслуживания клиента и его номер.
В конце каждой итерации цикла моделирования уменьшается время ожидания
всех клиентов в очередях на 1 минуту.
В начале каждой итерации цикла моделирования проверяется наличие отправки
рейса с помощью функции RunDeparture(curr_time, textWritter), если рейс
отправляется, то в журнал событий производится запись времени, направления
рейса и количества пассажиров.
2.2 Процесс
моделирования
Процесс моделирования запускается при нажатии на соответствующую кнопку в
диалоговом окне путем вызова функции StartSimulation(Time b, Time sim, int num,
ProgressBar bar) через объект класса Simulation, где b - время начала
моделирования, sim - время завершения моделирования, num - частота появления
клиентов. Все эти параметры задаются в диалоговом окне. При этом открывается
файл "test" для регистрации событий -
журнал событий. Он позволяет детально исследовать поведение моделируемой
системы.
Таким образом, функция
StartSimulation(Time b, Time sim, int num, ProgressBar bar) имеет следующий
вид:
public void StartSimulation(Time b, Time sim, int num, ProgressBar bar)
{textWritter = new StreamWriter("test.txt");//создаем журнал
событийf = new Time();_time.CopyTime(b);_time.CopyTime(sim);= simul_time -
base_time;fbar = (double)(f.getHour() * 60 +
f.getMin())/100;//значениеcurr_time = new Time();//текущее времяadd = new Time();_office
tmp_off;//ссылка на кассуtmp_client = new client();cl_service;<client>
tmp_list_client;//ссылка на очередь клиентовt = 0;_Service();//инициализация
касс по направлениям, создание городов, рейсов
//-------------цикл моделирования------------//_arrival(base_time,
num);//устанавливаем время прибытия следующего
клиента_time.CopyTime(base_time);//устанавливаем начальный момент времени(;
curr_time < simul_time; curr_time++)
{(curr_time, textWritter);//отправка рейса,если он //есть(next_arrival ==
curr_time)//если прибыл клиент
{_arrival(curr_time, num);//устанавливаем время //прибытия следующего
клиента++;
//устанавливаем время прибытия и номер клиента_client.setAll(CountClient,
curr_time);
//запись в файл.WriteLine(curr_time.printTime() + ": прибыл клиент №
"
+ Convert.ToString(tmp_client.getClientId()));.WriteLine("");(tmp_client);//добавление
клиента в очередь
}(int i = 0; i < service.Count; i++ )//проверяем очереди //клиетнов в
каждой кассе
{_off = (ticket_office)service.ToArray().GetValue(i);_list_client =
tmp_off.getLineClient();(tmp_list_client.Count() != 0)//если очередь не пуста
{_service =
(client)tmp_list_client.ToArray().GetValue(0);(cl_service.getServiceTime().getHour()
== 0 &&_service.getServiceTime().getMin() == 0)//если очередь клиента,
//обслуживаем
{(tmp_off, cl_service,
curr_time);(cl_service.getDepartureTime().getHour() != 0
|| cl_service.getDepartureTime().getHour() != 0)//если билет //продан
{.WriteLine(curr_time.printTime() + ": Клиенту №" +
Convert.ToString(cl_service.getClientId()));.WriteLine("продан билет на
" +_service.getDestination());.WriteLine("время отправки: "
+_service.getDepartureTime().printTime());.WriteLine("");
}
{.WriteLine("Клиенту №" +.ToString(cl_service.getClientId()) +
" билет не продан");.WriteLine("");
}_list_client.RemoveAt(0);//удаляем клиента из очереди
}
}
}();//уменьшаем время ожидания всех клиентов
//--для полосы прогресса моделирования--//++;(t == (int)fbar+1)
{.Value += 1;= 0;
}
//-------------------------------------//
}.Value = 100;.Close();
}
2.3 Обработка
и печать результатов моделирования
Результаты моделирования обрабатываются и печатаются в программе функцией
Statistic(TextBox text) класса Simulation. Вывод информации осуществляется в элемент TextBox диалогового окна. В
начале вычисляются суммарное количество обслуженных клиентов и количество
обслуженных клиентов по всем кассам и количество проданных билетов. Далее
печатается среднее время ожидания клиентов.
Таким образом, функция Statistic(TextBox text) имеет вид:
public void Statistic(TextBox text)
{.Lines = new string[] { "Всего обслужено клиентов: " +
Convert.ToString(CountClient) };_office t;();//вычисление среднего времени
ожидания по всем кассам.AppendText(Environment.NewLine + "Среднее время
ожидания: " + Average_time.printTime());(int i = 0; i < service.Count;
i++)//печать статистики по кассам
{=
(ticket_office)service.ToArray().GetValue(i);.AppendText(Environment.NewLine +
t.getDirectionName());.AppendText(Environment.NewLine + "обслужено
клиентов: "
+ Convert.ToString(t.getCountClient()));.AppendText(Environment.NewLine +
"билетов продано: "
+ Convert.ToString(t.getCountTicket()));.AppendText(Environment.NewLine +
"Среднее время ожидания: "
+ t.GetAverageTime().printTime());
}
}
моделирование имитация
время
2.4 Работа
программы моделирования
Результат работы программы на экране:
Результат работы программы в журнале событий:
:30 отправка рейса в Омск
Количество пассажиров: 0
:35: прибыл клиент № 1
:36: Клиенту №1 продан билет на Камень-на-Оби
время отправки: 11:30
:40: прибыл клиент № 2
…
:42: Клиенту №261 продан билет на Камень-на-Оби
время отправки: 20:30
Клиенту №260 билет не продан
:45: прибыл клиент № 262
Клиенту №262 билет не продан
:47: прибыл клиент № 263
Литература
1. Методические указания к курсовой работе для студентов 2
курса дневного отделения факультета автоматики и вычислительной техники
направления 230100 "Информатика и вычислительная техника"
Приложение 1
Файл
«Program.cs»
using
System;System.IO;System.Collections.Generic;System.Linq;System.Windows.Forms;System.Threading;_1
{
//-----Время-----//class Time
{int hour;int min;
//конструктор без параметровTime()
{= min = 0;
}
//конструктор с параметрамиTime(int h, int m)
{= (h >= 0 && h < 24) ? h : 0;= (m >= 0
&& m < 60) ? m : 0;
}
//копирование объектаvoid CopyTime(Time t)
{= t.hour;= t.min;
}
//установка времениvoid setTime(int h, int m)
{= (h >= 0 && h < 24) ? h : 0;= (m >= 0
&& m < 60) ? m : 0;
}
//печать времениstring printTime()
{(min < 10) return hour + ":0" + min;return hour
+ ":" + min;
}
//------перегруженниые операторы-----//
//инкрементstatic Time operator ++(Time t1)
{.min++;(t1.min >= 60)
{.min -= 60;.hour++;
}t1;
}
//декрементstatic Time operator --(Time t1)
{.min--;(t1.min < 0)
{.min += 60;.hour--;
}t1;
}
//сложениеstatic Time operator +(Time t1, Time t2)
{h = t1.hour + t2.hour, m = t1.min + t2.min;(m >= 60)
{-= 60;++;
}(h > 23)
{-= 24;
}new Time(h, m);
}
//вычитаниеstatic Time operator -(Time t1, Time t2)
{h = t1.hour - t2.hour, m = t1.min - t2.min;(m < 0)
{+= 60;-;
}new Time(h, m);
}
//деление на целое числоstatic Time operator /(Time t1, int
num)
{m, h;= (t1.hour * 60 + t1.min) / num;= m / 60;-= h * 60;new
Time(h, m);
}
//сравнениеstatic bool operator ==(Time t1, Time t2)
{(t1.hour == t2.hour && t1.min == t2.min) return
true;return false;
}static bool operator !=(Time t1, Time t2)
{(t1.hour != t2.hour && t1.min != t2.min) return
true;return false;
}static bool operator >(Time t1, Time t2)
{(t1.hour > t2.hour) return true;if (t1.hour < t2.hour)
return false;if (t1.min > t2.min) return true;if (t1.min < t2.min) return
false;return false;
}static bool operator >=(Time t1, Time t2)
{((t1.hour > t2.hour) || (t1.hour == t2.hour &&
t1.min >= t2.min)) return true;return false;
}static bool operator <(Time t1, Time t2)
{(t1.hour < t2.hour) return true;if (t1.hour > t2.hour)
return false;if (t1.min < t2.min) return true;if (t1.min > t2.min) return
false;return false;
}static bool operator <=(Time t1, Time t2)
{((t1.hour < t2.hour) || ((t1.hour == t2.hour) &&
(t1.min <= t2.min))) return true;return false;
}
//----------------------------------------------------
//добавление нескольких минут, для генерации времени
появления клиентаvoid PlusMin(int m)
{+= m;(min >= 60)
{-= 60;++;
}int getMin()
{min;
}int getHour()
{hour;
}
}
//-----------------------------------
//-----Клиент-----//client
{Time arrive;//время появления клиентаTime
service_time;//время обслуживания на кассеTime departure_time;//время отправки
рейсаint clientID;//номер клиентаstring destination;//место назначения
//конструкторclient()
{= new Time();_time = new Time();_time = new Time();= 0;=
"\0";
}
//копирование объектаvoid CopyClient(client t)
{.CopyTime(t.arrive);_time.CopyTime(t.service_time);_time.CopyTime(t.departure_time);=
t.clientID;= t.destination;
}
//время обслуживанияTime getServiceTime()
{service_time;
}
//"идентификация" клиентаvoid setAll(int id, Time
arr)
{.CopyTime(arr);= id;rnd = new Random();x = new Random();m =
0;.Sleep(15);n = rnd.Next(8) + 1;(n)
{1: destination = "Томск"; break;2: destination =
"Асино"; break;3: destination = "Стрежевой"; break;4:
destination = "Омск"; break;5: destination = "Калачинск";
break;6: destination = "Тара"; break;7: destination =
"Барнаул"; break;8: destination = "Камень-на-Оби"; break;9:
destination = "Бийск"; break;
}= rnd.Next(4) + 1;_time.setTime(0, m);
}
//установка времени обслуживанияvoid setServiceTime(Time t)
{_time.CopyTime(t);
}
//уменьшение времени ожиданияvoid NewServiceTime()
{_time--;
}
//номер клиентаint getClientId()
{clientID;
}
//место назначенияstring getDestination()
{destination;
}
// время отправкиTime getDepartureTime()
{departure_time;
}
// время отправкиvoid setDepartureTime(Time dt)
{_time.CopyTime(dt);
}
}
//------------------------------------------
//-----Рейс-----//Run
{int count_ticket;//количество оставшихся билетовTime
departure;//время отправки
//конструктор без параметровRun()
{_ticket = 0;= new Time();
}
//конструктор с параметрамиRun(int count, Time dep)
{_ticket = count;= new Time();.CopyTime(dep);
}
//копирование объектаvoid CopyRun(Run t)
{_ticket = t.count_ticket;.CopyTime(t.departure);
}
//инициализация напрвленияvoid setRun (int count, Time dep)
{_ticket = count;.CopyTime(dep);
}
//возврат времени отправки рейсаTime getDepartureTime()
{departure;
}
//количество оставшихся билетовint getCountTicket()
{count_ticket;
}
//количество проданных билетовint getNumClients()
{(40 - count_ticket);
}
//билет проданvoid setCountTicket()
{_ticket--;
}
}
//-----Город-----//city
{string city_name;int count_ticket;//количество проданных
билетовList<Run> list_Run;
//конструктор без параметровcity()
{_ticket = 0;_name = "\0";_Run = new
List<Run>();
}
//конструктор с параметрамиcity(string name)
{_name = name;_Run = new List<Run>();
}
//копирование объектаvoid CopyCity(city t)
{tmp = new Run();_name = t.city_name;_ticket =
t.count_ticket;
//копирование списка(int i = 0; i < t.list_Run.Count();
i++)
{.CopyRun((Run)t.list_Run.ToArray().GetValue(i));_Run.Add(tmp);
}
}
//добавление рейса в городvoid AddRun(Run r)
{rr = new Run();.CopyRun(r);_Run.Add(rr);
}
//возврат ссылки на список рейсовList<Run> getListRun()
{list_Run;
}
//возврат количества проданных билетовstring getNameCity()
{city_name;
}
//установка количества проданных билетовvoid setCountTicket()
{_ticket++;
}
//возврат количества проданных билетовint getCountTicket()
{count_ticket;
}
}
//------------------------------------------------
//-----Направление-----//direction
{string direction_name;List<city> list_city;//список
городов
//конструктор с параметрамиdirection(string name)
{_name = name;_city = new List<city>();
}
//конструктор без параметровdirection()
{_name = "\0";_city = new List<city>();
}
//добавление городаvoid AddCity(city c)
{n = new city();.CopyCity(c);_city.Add(c);
}
//возврат ссылки на список городовList<city>
getListCity()
{<city> ptr = list_city;ptr;
}
//возврат названия направленияstring getNameDirection()
{direction_name;
}
//установка названия направленияvoid setNameDirection(string
name)
{_name = name;
}
}
//------------------------------------------------
//-----Касса-----//ticket_office
{Time waiting_time;//время ожидания очередиTime
average_time;//среднее время ожиданияdirection one;//направлениеint
count_client;//количество обслуженных клиентовint count_ticket;//количество
проданных билетовList<client> line;//очередь клиентов
//конструкторticket_office(string name)
{_ticket = 0;_client = 0;_time = new Time(0, 0);_time = new
Time(0, 0);= new direction(name);= new List<client>();
}Time GetAverageTime()
{average_time;
}
//уменьшение времени ожидания на 1 минутуvoid SetTime()
{(waiting_time.getHour() != 0 || waiting_time.getMin() != 0)
{_time--;n = line.Count()-1;t;(n != -1)
{= (client)line.ToArray().GetValue(n);.NewServiceTime();-;
}
}
}
//увеличение количества обслуженных клиентовvoid
setCountClient()
{_client++;
}
{count_client;
}
//увеличение количества проданных билетовvoid
setCountTicket()
{_ticket++;
}
//возврат количества проданных билетовint getCountTicket()
{count_ticket;
}
//возврат указателя на очередь клиентовList<client>
getLineClient()
{line;
}
//добавление в очередь клиетаvoid AddToLine(client a)
{t = new client();.CopyClient(a);_time.CopyTime(waiting_time
+ t.getServiceTime());.setServiceTime(waiting_time);(t.getClientId() < 1)
{_time.CopyTime(average_time + waiting_time);
}
{_time.CopyTime((average_time + waiting_time) / 2);
}.Add(t);
}
//добавление города в направлениеvoid InsertCity(city c)
{.AddCity(c);
}
//возврат названия направленияstring getDirectionName()
{one.getNameDirection();
}
//возврат ссылки на направлениеdirection getDirection()
{one;
}
}
//----------------------------------------------------Simulation
{Time base_time;//начальное времяTime simul_time;//время
симуляцииTime next_arrival;//время прибытия следующего клиентаint
CountClient;//количество клиентовTime Average_time;//среднее время ожиданияList<ticket_office>
service;// список касс
//конструкторSimulation()
{_time = new Time();_arrival = new Time();_time = new
Time();_time = new Time();= 0;= new List<ticket_office>();
}
//печать статистики в диалоговом окнеvoid Statistic(TextBox
text)
{.Lines = new string[] { "Всего обслужено клиентов:
" + Convert.ToString(CountClient) };_office t;();//вычисление среднего
времени ожидания по всем кассам.AppendText(Environment.NewLine + "Среднее
время ожидания: " + Average_time.printTime());(int i = 0; i <
service.Count; i++)//печать статистики по кассам
{=
(ticket_office)service.ToArray().GetValue(i);.AppendText(Environment.NewLine +
t.getDirectionName());.AppendText(Environment.NewLine + "обслужено
клиентов: "
+ Convert.ToString(t.getCountClient()));.AppendText(Environment.NewLine
+ "билетов продано: "
+
Convert.ToString(t.getCountTicket()));.AppendText(Environment.NewLine +
"Среднее время ожидания: "
+ t.GetAverageTime().printTime());
}
}
//подсчет среднего времени одиданияvoid AverTime()
{temp = new Time(0,0);_office t;(int i = 0; i <
service.Count; i++)
{= (ticket_office)service.ToArray().GetValue(i);= temp +
t.GetAverageTime();
}_time = temp / (service.Count);
}
//возврат начального времениTime getBaseTime()
{base_time;
}
//возврат конечного времениTime getSimulTime()
{simul_time;
}
//устанока конечного времениvoid setSimulTime(Time sim)
{_time = sim;
}
//возврат количества обслуженных клиентовint getCountClient()
{CountClient;
}
//добавление кассы с уже заданным направлениемvoid
AddTicketOffice(string name_direction)
{_office t = new ticket_office(name_direction);.Add(t);
}
//добавление города по направлениюvoid AddCity(string
name_direct, string name_city)
{c = new city(name_city);tmp =
SearchDirection(name_direct);.AddCity(c);
}
//поиск направления по названию, возвращается ссылкаdirection
SearchDirection(string name_direct)
{_office tmp;n = service.Count() - 1;=
(ticket_office)service.ToArray().GetValue(n);(tmp.getDirectionName() !=
name_direct)
{= (ticket_office)service.ToArray().GetValue(n);-;
}tmp.getDirection();
}
//поиск города по названию, возвращается ссылка на город
{c;t;_office tmp;n = service.Count() - 1;k =
0;(true)//проверяем все кассы, пока не найдем нужный город
{= (ticket_office)service.ToArray().GetValue(n);=
tmp.getDirection();= t.getListCity().Count() - 1;=
(city)t.getListCity().ToArray().GetValue(k);(c.getNameCity() != name_city)
{(k == -1) break;=
(city)t.getListCity().ToArray().GetValue(k);-;
}(c.getNameCity() == name_city) break;-;
}c;
}
//добавление рейса в городvoid AddRun(string name_city, Run
r)
{c = SearchCity(name_city);.AddRun(r);
}
//добавление клиента в очередь в нужную кассуvoid
AddClientToLine(client add)
{c;t;_office tmp_off;tmp = add;n = service.Count() - 1;k =
0;(true)
{_off = (ticket_office)service.ToArray().GetValue(n);=
tmp_off.getDirection();= t.getListCity().Count() - 1;=
(city)t.getListCity().ToArray().GetValue(k);((c.getNameCity() !=
tmp.getDestination()) && k != -1)
{= (city)t.getListCity().ToArray().GetValue(k);-;
}(c.getNameCity() == tmp.getDestination()) break;-;
}_off.AddToLine(tmp);
}
//функция выяснения появления клиента
//в качестве параметра передается среднее время между
появлением клиентов(в минутах)Client_arrival(Time curr, int num)
{rnd = new Random();t = rnd.Next(num) +
1;_arrival.CopyTime(curr);_arrival.PlusMin(t);
}
//обслуживание клиентаvoid Service(ticket_office off, client
_client, Time curr)
{t = SearchCity(_client.getDestination());//ищем нужный
городyes = false;//продажа билетаtmp_r, ttmp_r;tmp_time = new
Time();<Run> r = t.getListRun();_r =
(Run)r.ToArray().GetValue(0);tmp2;_time.CopyTime(ttmp_r.getDepartureTime());(int
i = 0; i < r.Count; i++)//поиск билета
{_r = (Run)r.ToArray().GetValue(i);= tmp_r.getDepartureTime();(!yes)_time.CopyTime(tmp2);((curr
< tmp_time) && (tmp_time >= tmp2) && (tmp2 >= curr)
&& (tmp_r.getCountTicket() != 0))
{_time.CopyTime(tmp2);_r = (Run)r.ToArray().GetValue(i);=
true;
}
}(!yes || tmp_time == curr)//если нет билетов или рейсов
{.setCountClient();//увеличиваем количество обслуженных
клиентов
}
{.setCountClient();//увеличиваем количество обслуженных
клиентов.setCountTicket();//увеличиваем количество проданных на кассе
билетов.setCountTicket();////увеличиваем количество проданных билетов на
определенный город_r.setCountTicket();//уменьшаем количество оставшихся билетов
на определенный рейс
_client.setDepartureTime(tmp_time);//устанавливаем время
отправления клиента
}
}
//функция уменьшает время ожидания всех клиетнов на 1 минуту
//используется в цикле моделированияvoid SetTimeAll()
{_office t;(int i = 0; i < service.Count; i++)
{= (ticket_office)service.ToArray().GetValue(i);.SetTime();
}
}
//инициализация касс по направлениям, создание городов,
рейсовvoid Init_Service()
{run_time = new Time();//время отправки рейсаrun = new
Run();("Томская область");("Томская область",
"Томск");_time.setTime(10, 0);.setRun(40,
run_time);("Томск", run);_time.setTime(12, 30);.setRun(40,
run_time);("Томск", run);_time.setTime(16, 50);.setRun(40, run_time);("Томск",
run);("Томская область", "Асино");_time.setTime(9,
30);.setRun(40, run_time);("Асино", run);_time.setTime(16,
10);.setRun(40, run_time);("Асино", run);_time.setTime(18,
50);.setRun(40, run_time);("Асино", run);("Томская
область", "Стрежевой");_time.setTime(7, 30);.setRun(40,
run_time);("Стрежевой", run);_time.setTime(12, 0);.setRun(40,
run_time);("Стрежевой", run);_time.setTime(17, 20);.setRun(40,
run_time);("Стрежевой", run);("Омская область");("Омская
область", "Омск");_time.setTime(6, 30);.setRun(40,
run_time);("Омск", run);_time.setTime(11, 40);.setRun(40,
run_time);("Омск", run);_time.setTime(16, 50);.setRun(40,
run_time);("Омск", run);("Омская область",
"Калачинск");_time.setTime(9, 10);.setRun(40,
run_time);("Калачинск", run);_time.setTime(10, 50);.setRun(40,
run_time);("Калачинск", run);_time.setTime(18, 10);.setRun(40,
run_time);("Калачинск", run);("Омская область",
"Тара");_time.setTime(8, 00);.setRun(40, run_time);("Тара",
run);_time.setTime(12, 00);.setRun(40, run_time);("Тара", run);_time.setTime(16,
00);.setRun(40, run_time);("Тара", run);("Алтайский
край");("Алтайский край", "Барнаул");_time.setTime(10,
30);.setRun(40, run_time);("Барнаул", run);_time.setTime(13,
40);.setRun(40, run_time);("Барнаул", run);_time.setTime(17, 30);.setRun(40,
run_time);("Барнаул", run);("Алтайский край",
"Камень-на-Оби");_time.setTime(11, 30);.setRun(40,
run_time);("Камень-на-Оби", run);_time.setTime(15, 40);.setRun(40,
run_time);("Камень-на-Оби", run);_time.setTime(20, 30);.setRun(40,
run_time);("Камень-на-Оби", run);("Алтайский край",
"Бийск");_time.setTime(8, 30);.setRun(40,
run_time);("Бийск", run);_time.setTime(17, 00);.setRun(40,
run_time);("Бийск", run);_time.setTime(21, 50);.setRun(40,
run_time);("Бийск", run);
}
//моделирование отправления рейсаvoid RunDeparture(Time dep,
TextWriter text)
{_office tmp_off;<city>
tmp_list_city;tmp_city;<Run> tmp_list_run;tmp_run;(int i = 0; i <
service.Count; i++)
{_off =
(ticket_office)service.ToArray().GetValue(i);_list_city =
tmp_off.getDirection().getListCity();(int j = 0; j < tmp_list_city.Count;
j++)
{_city = (city)tmp_list_city.ToArray().GetValue(j);_list_run
= tmp_city.getListRun();(int k = 0; k < tmp_list_run.Count; k++)
{_run =
(Run)tmp_list_run.ToArray().GetValue(k);(tmp_run.getDepartureTime() == dep)//если
в текущее время отправляется рейс
{.WriteLine(tmp_run.getDepartureTime().printTime()
+ " отправка рейса в " +
tmp_city.getNameCity());.WriteLine("Количество пассажиров: "
+.ToString(tmp_run.getNumClients()));.WriteLine("");
}
}
}
}
}
//---- МОДЕЛИРОВАНИЕ ----//void StartSimulation(Time b, Time
sim, int num, ProgressBar bar)
{textWritter = new
StreamWriter("test.txt");//создаем журнал событийf = new
Time();_time.CopyTime(b);_time.CopyTime(sim);= simul_time - base_time;fbar =
(double)(f.getHour() * 60 + f.getMin())/100;//значениеcurr_time = new
Time();//текущее времяadd = new Time();_office tmp_off;//ссылка на
кассуtmp_client = new client();cl_service;<client>
tmp_list_client;//ссылка на очередь клиентовt = 0;_Service();//инициализация
касс по направлениям, создание городов, рейсов
//-------------цикл
моделирования------------//_arrival(base_time, num);//устанавливаем время
прибытия следующего клиента_time.CopyTime(base_time);//устанавливаем начальный
момент времени(; curr_time < simul_time; curr_time++)
{(curr_time, textWritter);//отправка рейса, если он
есть(next_arrival == curr_time)//если прибыл клиент
{_arrival(curr_time, num);//устанавливаем время прибытия
следующего клиента++;
//устанавливаем время прибытия и номер
клиента_client.setAll(CountClient, curr_time);
//запись в файл.WriteLine(curr_time.printTime() + ":
прибыл клиент № "
+
Convert.ToString(tmp_client.getClientId()));.WriteLine("");(tmp_client);//добавление
в очередь
}(int i = 0; i < service.Count; i++ )//проверяем очереди
клиетнов в каждой кассе
{_off =
(ticket_office)service.ToArray().GetValue(i);_list_client =
tmp_off.getLineClient();(tmp_list_client.Count() != 0)//если очередь не пуста
{_service =
(client)tmp_list_client.ToArray().GetValue(0);(cl_service.getServiceTime().getHour()
== 0 &&_service.getServiceTime().getMin() == 0)//если очередь клиента,
обслуживаем
{(tmp_off, cl_service,
curr_time);(cl_service.getDepartureTime().getHour() != 0
|| cl_service.getDepartureTime().getHour() != 0)//если билет
продан
{.WriteLine(curr_time.printTime() + ": Клиенту №"
+.ToString(cl_service.getClientId()));.WriteLine("продан билет на "
+_service.getDestination());.WriteLine("время отправки: "
+_service.getDepartureTime().printTime());.WriteLine("");
}
{.WriteLine("Клиенту №"
+.ToString(cl_service.getClientId()) + " билет не
продан");.WriteLine("");
}_list_client.RemoveAt(0);//удаляем клиента из очереди
}
}();//уменьшаем время ожидания всех клиентов
//--для полосы прогресса моделирования--//++;(t ==
(int)fbar+1)
{.Value += 1;= 0;
}
//-------------------------------------//
}.Value = 100;.Close();
}
}class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]void Main()
{.EnableVisualStyles();.SetCompatibleTextRenderingDefault(false);.Run(new
Form1());
}
}
}
Приложение 2
Файл «
Form1.cs»
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;System.Diagnostics;_1
{partial class Form1 : Form
{A;start;end;Form1()
{();
}void Form1_Load(object sender, EventArgs e)
{
}void textBox1_TextChanged(object sender, EventArgs e)
{
}void button1_Click(object sender, EventArgs e)
{= new Simulation();= new
Time(Convert.ToInt32(StartTimeHours.Value),
Convert.ToInt32(StartTimeMin.Value));= new Time(Convert.ToInt32(EndTimeHours.Value),
Convert.ToInt32(EndTimeMin.Value));n = Convert.ToInt32(num.Value);.Value =
0;(start >= end) MessageBox.Show("Неверный ввод");
{.StartSimulation(start, end, n,
progressBar1);.Statistic(textBox1);
}
}void button2_Click(object sender, EventArgs e)
{();
}void button3_Click(object sender, EventArgs e)
{p1 = new Process();.StartInfo.UseShellExecute =
true;.StartInfo.RedirectStandardOutput = false;.StartInfo.FileName =
"test.txt";.Start();.WaitForExit();
}
}