Моделирование работы автовокзала
Оглавление
Введение
. Постановка задачи
. Разработка приложения
.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
…
:40: прибыл клиент № 261
: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++;
}
//возврат количества обслуженных клиентовint getCountClient()
{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();
}
//поиск города по названию, возвращается ссылка на город
//функция используется для добавления рейсаcity SearchCity(string name_city)
{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();
}
}
Больше работ по теме:
Предмет: Информационное обеспечение, программирование
Тип работы: Курсовая работа (т)
Новости образования
КОНТАКТНЫЙ EMAIL: [email protected]
Скачать реферат © 2017 | Пользовательское соглашение
ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ