Разработка программного пакета, моделирующего работу лифта

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    280,51 Кб
  • Опубликовано:
    2016-05-01
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка программного пакета, моделирующего работу лифта

Введение

Дано пятиэтажное здание с одним лифтом. Этаж с номером ноль - первый этаж, с номером один - второй, с номером два - третий, с номером три - четвертый и с номером четыре - пятый. Будем считать, что этажи пронумерованы числами от нуля до четырех.

1. Разработка технического задания

.1 Постановка задачи

Целью данной курсовой работы является разработка программного пакета, моделирующего работу лифта.

.2 Требования к системе в целом

Разрабатываемая система должна соответствовать следующим требованиям, для определения которых опишем действия по шагам:

Построить модель движения лифта

Организовать движение сверху-вниз и снизу-вверх

Создать объект «человек», который будет подниматься/спускаться с лифта

.3 Анализ технического задания

.3.1 Способы реализации

Проектируемая система состоит из 2-х частей отвечающий за отображение модели лифта на экран пользователя, и расчетная часть отвечающий за движения лифта. Для создания exe-файла используется среда VisualC# 2015. Для написания графической части используется приложение WindowsForm.

.3.2 Выбор языка программирования и средств реализации поставленной задачи

В связи с тем, что сегодня уровень сложности программного обеспечения очень высок, разработка приложений MS Windows с использованием только какого-либо языка программирования (например, языка C#) значительно затрудняется. Программист должен затратить массу времени на решение стандартных задач по созданию многооконного интерфейса.

Чтобы облегчить работу программиста практически все современные компиляторы с языка C# содержат специальные библиотеки классов. Такие библиотеки включают в себя практически весь программный интерфейс MS Windows и позволяют пользоваться при программировании средствами более высокого уровня, чем обычные вызовы функций. За счет этого значительно упрощается разработка приложений, имеющих сложный интерфейс пользователя.

2. Диаграмма прецедентов использования лифта

Для того чтобы понять механизм взаимодействия пользователя с разрабатываемой системой, необходимо построить диаграмму прецедентов использования, которая будет служить наглядным представлением функций системы.

Рис.1 «Диаграмма прецедентов для пользователей»

Рис.2«Диаграмма прецедентов работы лифта»

2.1 Текстовое описание прецедентов использования

На рисунке 1 изображена действия со стороны пользователь к программе:

«Генерация человека» - это отдельный класс, который в себе хранит информацию о том с какого этажа человек и в какой этот человек этаж хочет попасть

Была введена ограничения при наборе данных в «генерацию человека» так как в данном проекте этажей всего пять то можно ввести с [1;5]

С помощью кнопки запуск, лифт начинает двигаться по вызываемому пассажиру (человек)

На рисунке 2 изображена работа лифта

Лифт ожидает вызова со стороны пассажира

Лифт поднимается или опускается в зависимости где находится пассажир.

Лифт на каждом этаже проверяет нажата ли кнопка вызова и в зависимости от этого открывает и закрывает двери лифта

Общим требованием к программе является создание интерфейса, с помощью которого пользователь мог бы легко понять моделирование лифта.

Входными данными для системы являются: Люди с параметрами этажей.

.2 Построение основной диаграммы классов

программный моделирование лифт

Для того чтобы определиться с моделью, разрабатываемой системы необходимо составить главную диаграмму классов.

Рис.4«Основная диаграмма Классов Лифта »

.2.1 Описание классов моделиКласс построенный по шаблону контроллер, который осуществляет функции координации и моторики лифта.- основной класс отвечающий за визуализацию и запуск проекта- Класс хранящий входные параметры-диалоговое окно для ввода параметров в класс Human

Класс Human- стек параметров пассажиров.

3. Реализация классов

Опишем основные классы:

Рис.5«Модель класса Human»

.1 классHuman

staticclassHuman

{

publicstaticboolOnLift;target{ get; set; }[] CallLev = newbool[5];Current { get; set; }

}

Рис.6«Модель класса Form2»

классForm2

publicpartialclassForm2 : Form

{_lft=newLift();Form2()

{();

}_Click(object sender, EventArgs e)

{

{((int.Parse(CurTxBx.Text) <= 5 &&int.Parse(CurTxBx.Text) >= 0) &&

(int.Parse(TrgTxBx.Text) <= 5 &&int.Parse(TrgTxBx.Text) >= 0))

{.Current = int.Parse(CurTxBx.Text);.target = int.Parse(TrgTxBx.Text);();

}

{.Show(Resources.Form2_button1_Click_набрали_несушествующий_этаж);

}

}(Exception)

{.Show(Resources.Form2_button1_Click_не_заполнены_поля);

}

}Generation(PictureBox[] pict)

{(Human.Current == 1)

{[16].Visible = true;.CallLev[0] = true;

}(Human.Current == 2)

}(Human.Current == 3)

{[4].Visible = true;.CallLev[2] = true;

}(Human.Current == 4)

{[8].Visible = true;.CallLev[3] = true;

}(Human.Current == 5)

{[12].Visible = true;.CallLev[4] = true;

}

}minus(PictureBox[] pict)

{(pict[16].Visible|| pict[4].Visible|| pict[8].Visible|| pict[12].Visible)

{ (Human.Current == 1)

{[16].Visible = false;.OnLift=true;.CallLev[0] = false;

}(Human.Current == 2)

{[0].Visible = false;.OnLift = true;.CallLev[1] = false;

}(Human.Current == 3)

{[4].Visible = false;.OnLift = true;.CallLev[2] = false;

}(Human.Current == 4)

{[8].Visible = false;.OnLift = true;.CallLev[3] = false;

}(Human.Current == 5)

{[12].Visible = false;.OnLift = true;.CallLev[4] = false;

}

}

}

}

Рис.6«Модель класса Form1»

.4 КлассForm1

using System;.Windows.Forms;

{: Form

{[] pict = newPictureBox[20];_lft=newLift();count;Form1()

{();[0] = pictureBox1;[1] = pictureBox2;[2] = pictureBox3;[3] = pictureBox4;[4] = pictureBox5;[5] = pictureBox6;[6] = pictureBox7;[7] = pictureBox8;[8] = pictureBox9;[9] = pictureBox10;[10] = pictureBox11;[11] = pictureBox12;[12] = pictureBox13;[13] = pictureBox14;[14] = pictureBox15;[15] = pictureBox16;[16] = pictureBox17;[17] = pictureBox18;[18] = pictureBox19;[19] = pictureBox20;.Text = count.ToString();

}(object sender, EventArgs e)

{[] ls = newLabel[] { Floor1, Floor2, Floor3, Floor4, Floor5 };[] k = newint[] { 340, 240, 158, 90, 9 };(panel1.Location.Y >= 327 && panel1.Location.Y <= 343) _lft.OpenDoor(ls[0].Size.Height, ls[0]);(panel1.Location.Y >= 235 && panel1.Location.Y <= 241) _lft.OpenDoor(ls[1].Size.Height, ls[1]);(panel1.Location.Y >= 155 && panel1.Location.Y <= 160) _lft.OpenDoor(ls[2].Size.Height, ls[2]);(panel1.Location.Y >= 85 && panel1.Location.Y <= 91) _lft.OpenDoor(ls[3].Size.Height, ls[3]);(panel1.Location.Y >= 7 && panel1.Location.Y <= 11) _lft.OpenDoor(ls[4].Size.Height, ls[4]);(_lft.DoorIsOpen) { ((Timer)sender).Stop(); OD1(); };

}(object sender, EventArgs e)

{[] ls = newLabel[] { Floor1, Floor2, Floor3, Floor4, Floor5 };[] k = newint[] { 340, 240, 158, 90, 9 };(panel1.Location.Y >= 327 && panel1.Location.Y <= 342) _lft.CloseDoor(ls[0].Size.Height, ls[0]);(panel1.Location.Y >= 235 && panel1.Location.Y <= 241) _lft.CloseDoor(ls[1].Size.Height, ls[1]);(panel1.Location.Y >= 155 && panel1.Location.Y <= 160) _lft.CloseDoor(ls[2].Size.Height, ls[2]);(panel1.Location.Y >= 85 && panel1.Location.Y <= 91) _lft.CloseDoor(ls[3].Size.Height, ls[3]);(panel1.Location.Y >= 7 && panel1.Location.Y <= 11) _lft.CloseDoor(ls[4].Size.Height, ls[4]);(_lft.DoorIsOpen == false) { ((Timer)sender).Stop(); Zero(); };

}(object sender, EventArgs e)

{

_lft.Callup(panel1.Location.Y,panel1);(Lift.Floor == Lift.TrgFloor) { ((Timer)sender).Stop(); OD(); }

}_Click(object sender, EventArgs e)

{().ShowDialog();().Generation(pict);

}C1_Tick(object sender, EventArgs e)

{

//Lift.Floor = 1;

//_lft.CallDown(panel1.Location.Y, panel1);

}

_lift_tick(object sender, EventArgs e)

{(pict[0].Visible==true|| pict[4].Visible == true|| pict[8].Visible == true|| pict[16].Visible == true||pict[12].Visible==true) newForm2().minus(pict);(Human.target == Lift.TrgFloor)

{ Human.OnLift = false; if (count >= 0) { count--; } Human.target = 0; OD2(); ((Timer)sender).Stop(); }(Human.OnLift) { if (count < 1) { count++; } C1.Stop(); OD2(); }{ OD2(); ((Timer)sender).Stop(); }

}_Click(object sender, EventArgs e)

{(Lift.TrgFloor == Human.Current&&(Human.CallLev[1]|| Human.CallLev[2] || Human.CallLev[3]|| Human.CallLev[4])) OD();Zero();

}

Zero()

{.Interval = 50;.Tick += newEventHandler(LiftCall);.Start();

}

OD()

{(Lift.Floor == Lift.TrgFloor&& _lft.DoorCanOpen)

{.Interval = 20;.Tick += newEventHandler(OpenDoors);.Start();

}(pict[0].Visible || pict[16].Visible || pict[4].Visible || pict[8].Visible || pict[12].Visible) { _lft.DoorCanOpen = true; OD(); }

}OD1()

{(_lft.DoorIsOpen )

{.Interval = 40;.Tick += newEventHandler(In_lift_tick);.Start();

}

}OD2()

{.Interval = 20;.Tick += newEventHandler(CloseDoors);.Start();

}

СчетчикЛифта_Tick(object sender, EventArgs e)

{.Text = count.ToString();

}

}

}


.5 КлассLift

using System;.Collections.Generic;.Diagnostics.Eventing.Reader;.Drawing;.Linq;.Security.Cryptography;.Text;.Windows.Forms;

{

{;Floor=1;Сapacity;{ up = 0, down = 1, neutral = 2 }status;Status

{

{.NotImplementedException();

}

{(TrgFloor< Floor)

{= statusvalue.up;

}(TrgFloor> Floor)

{= statusvalue.down;

}

{= statusvalue.neutral;

}

}

}= false;= true;determinate()

{(Human.CallLev[0] == true) TrgFloor = 1;(Human.CallLev[1] == true) TrgFloor = 2;(Human.CallLev[2] == true) TrgFloor = 3;(Human.CallLev[3] == true) TrgFloor = 4;(Human.CallLev[4] == true) TrgFloor = 5;

}(int q, PanelpnPanel)

{();[] k = newint[] { 340, 240, 158, 90, 9 };(status == statusvalue.down || status == statusvalue.neutral) return;(Floor <TrgFloor)

{(q<=0)return;-;up = newPoint(pnPanel.Location.X, q);.Location = up;(k[1] == q || k[2] == q || k[3] == q || k[4] == q) Floor++;

}(q, pnPanel);

}(int q, PanelpnPanel)

{[] k = newint[] { 340, 240, 158, 90, 9 };( status == statusvalue.neutral) return;(Floor != TrgFloor)

{(q >=345) return;++;up = newPoint(pnPanel.Location.X, q);.Location = up;(q>329 && q<342 || k[1] == q || k[2] == q || k[3] == q || k[4] == q) Floor--;

}

}(int q, LabelpnLabel)

{k = pnLabel.Size.Height;(DoorIsOpen)(k <= 52)

{++;min2 = newSize(pnLabel.Width, k);.Size = min2;(k == 52) { obnul(); DoorIsOpen = false; }

}

}(int q, LabelpnLabel)

{k = pnLabel.Size.Height;(k >= 0)

{-;min2 = newSize(pnLabel.Width, k);.Size = min2;

(k == 0)

{= false; DoorIsOpen = true;}

}

}()

{(Human.OnLift)

{= Human.Current;= Human.target;= true;

}

}

}

}

4.Диаграмма последовательностей взаимодействия

Далее представлена диаграмма последовательностей взаимодействия пользователя с программой, моделирующей работу лифта.

Рис. 6 «Диаграмма обращения пользователя к программе, моделирующей работу лифта»

5. Запуск и тестирование программы

Запуск программы осуществляется с помощью компилированного файлаlift.exe.Данная программа тестировалась в операционной системе MicrosoftWindows. Для запуска программы необходима библиотекаNetFrameWorkv4.5.

Протестированы были все задачи, изложенные в техническом задании. Все тесты пройдены успешно.

Рис.7«Внешний вид основной формы программы»


Вывод проделанных работ по проектированию и программированию программной модели

В данной курсовой работе при помощи объектно-ориентированного языка проектирования UML была разработана модель лифта, построены диаграммы классов, диаграммы последовательностей и реализован программный продукт при помощи языка программирования C#. В целом задание выполнено в полном объеме. Проект полностью соответствует техническому заданию.

Список литературы

Ларман, К. Применение UML и шаблонов проектирования.  К. Ларман . - 2-е изд-е. Пер. с англ. Уч. Пособ.- М.: «Издательский дом Вильямс», 2002. - 624 с.

Программирование на платформе MS.NET 4.5 на языке C# 2013г. (Джефри Рихтер)

Кнут Д. Искусство программирования. Т. 1: Основные алгоритмы. М.: Вильямс, 2001. - 712 с.

Корн Г., Корн Т. Справочник по математике для научных работников и инженеров. М.: Наука, 1978. - 820 с.

Похожие работы на - Разработка программного пакета, моделирующего работу лифта

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!