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

бесплатно 0
4.5 110
Выбор языка программирования и средств реализации поставленной задачи. Диаграмма прецедентов использования лифта. Построение основной диаграммы классов. Создание интерфейса, с помощью которого пользователь мог бы легко понять моделирование лифта.


Аннотация к работе
На рисунке 1 изображена действия со стороны пользователь к программе: «Генерация человека» - это отдельный класс, который в себе хранит информацию о том с какого этажа человек и в какой этот человек этаж хочет попасть Лифт на каждом этаже проверяет нажата ли кнопка вызова и в зависимости от этого открывает и закрывает двери лифта Human - Класс хранящий входные параметры Human.Current = int.Parse(CURTXBX.Text); {Human.ONLIFT = false; if (count >= 0) {count-; } Human.target = 0; OD2(); ((Timer)sender).Stop(); } else if (Human.ONLIFT) {if (count <1) {count ; } C1.Stop(); OD2(); } else {OD2(); ((Timer)sender).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.2.1 Описание классов модели

Lift- Класс построенный по шаблону контроллер, который осуществляет функции координации и моторики лифта.

Form1 - основной класс отвечающий за визуализацию и запуск проекта

Human - Класс хранящий входные параметры

Form2 -диалоговое окно для ввода параметров в класс Human

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

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

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

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

3.1 КЛАССHUMAN

STATICCLASSHUMAN

{

PUBLICSTATICBOOLONLIFT;

publicstaticint target{ get; set; } publicstaticbool[] CALLLEV = newbool[5];

publicstaticint Current { get; set; }

}

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

КЛАССFORM2

PUBLICPARTIALCLASSFORM2 : Form

{

Lift _lft=NEWLIFT();

public Form2()

{

INITIALIZECOMPONENT();

}

PRIVATEVOIDADD_Click(object sender, EVENTARGS e)

{ try

{ if ((int.Parse(CURTXBX.Text) = 0) && (int.Parse(TRGTXBX.Text) = 0))

{

Human.Current = int.Parse(CURTXBX.Text);

Human.target = int.Parse(TRGTXBX.Text);

Hide();

} else

{

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

}

} catch (Exception)

{

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

}

} publicvoid Generation(PICTUREBOX[] pict)

{ if (Human.Current == 1)

{ pict[16].Visible = true;

Human.CALLLEV[0] = true;

} if (Human.Current == 2)

{ pict[0].Visible = true;

Human.CALLLEV[1] = true;

} if (Human.Current == 3)

{ pict[4].Visible = true;

Human.CALLLEV[2] = true;

} if (Human.Current == 4)

{ pict[8].Visible = true;

Human.CALLLEV[3] = true;

} if (Human.Current == 5)

{ pict[12].Visible = true;

Human.CALLLEV[4] = true;

}

} publicvoid minus(PICTUREBOX[] pict)

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

{ if (Human.Current == 1)

{ pict[16].Visible = false;

Human.ONLIFT=true;

Human.CALLLEV[0] = false;

} if (Human.Current == 2)

{ pict[0].Visible = false;

Human.ONLIFT = true;

Human.CALLLEV[1] = false;

} if (Human.Current == 3)

{ pict[4].Visible = false;

Human.ONLIFT = true;

Human.CALLLEV[2] = false;

} if (Human.Current == 4)

{ pict[8].Visible = false;

Human.ONLIFT = true;

Human.CALLLEV[3] = false;

} if (Human.Current == 5)

{ pict[12].Visible = false;

Human.ONLIFT = true;

Human.CALLLEV[4] = false;

}

}

}

}

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

3.4 КЛАССFORM1 using System;

USINGSYSTEM.Windows.Forms;

NAMESPACELIFTKURSACH

{

PUBLICPARTIALCLASSFORM1 : Form

{

PUBLICPICTUREBOX[] pict = NEWPICTUREBOX[20];

Lift _lft=NEWLIFT();

publicint count;

public Form1()

{

INITIALIZECOMPONENT();

pict[0] = PICTUREBOX1;

pict[1] = PICTUREBOX2;

pict[2] = PICTUREBOX3;

pict[3] = PICTUREBOX4;

pict[4] = PICTUREBOX5;

pict[5] = PICTUREBOX6;

pict[6] = PICTUREBOX7;

pict[7] = PICTUREBOX8;

pict[8] = PICTUREBOX9;

pict[9] = PICTUREBOX10;

pict[10] = PICTUREBOX11;

pict[11] = PICTUREBOX12;

pict[12] = PICTUREBOX13;

pict[13] = PICTUREBOX14;

pict[14] = PICTUREBOX15;

pict[15] = PICTUREBOX16;

pict[16] = PICTUREBOX17;

pict[17] = PICTUREBOX18;

pict[18] = PICTUREBOX19;

pict[19] = PICTUREBOX20;

trigger.Text = count.TOSTRING();

}

PUBLICVOIDOPENDOORS(object sender, EVENTARGS e)

{

Label[] ls = NEWLABEL[] { Floor1, Floor2, Floor3, Floor4, Floor5 };

int[] k = newint[] { 340, 240, 158, 90, 9 };

if (panel1.Location.Y >= 327 && panel1.Location.Y <= 343) _lft.OPENDOOR(ls[0].Size.Height, ls[0]);

elseif (panel1.Location.Y >= 235 && panel1.Location.Y <= 241) _lft.OPENDOOR(ls[1].Size.Height, ls[1]);

elseif (panel1.Location.Y >= 155 && panel1.Location.Y <= 160) _lft.OPENDOOR(ls[2].Size.Height, ls[2]);

elseif (panel1.Location.Y >= 85 && panel1.Location.Y <= 91) _lft.OPENDOOR(ls[3].Size.Height, ls[3]);

elseif (panel1.Location.Y >= 7 && panel1.Location.Y <= 11) _lft.OPENDOOR(ls[4].Size.Height, ls[4]);

if (_lft.DOORISOPEN) { ((Timer)sender).Stop(); OD1(); } elsereturn;

}

PUBLICVOIDCLOSEDOORS(object sender, EVENTARGS e)

{

Label[] ls = NEWLABEL[] { Floor1, Floor2, Floor3, Floor4, Floor5 };

int[] k = newint[] { 340, 240, 158, 90, 9 };

if (panel1.Location.Y >= 327 && panel1.Location.Y <= 342) _lft.CLOSEDOOR(ls[0].Size.Height, ls[0]);

elseif (panel1.Location.Y >= 235 && panel1.Location.Y <= 241) _lft.CLOSEDOOR(ls[1].Size.Height, ls[1]);

elseif (panel1.Location.Y >= 155 && panel1.Location.Y <= 160) _lft.CLOSEDOOR(ls[2].Size.Height, ls[2]);

elseif (panel1.Location.Y >= 85 && panel1.Location.Y <= 91) _lft.CLOSEDOOR(ls[3].Size.Height, ls[3]);

elseif (panel1.Location.Y >= 7 && panel1.Location.Y <= 11) _lft.CLOSEDOOR(ls[4].Size.Height, ls[4]);

if (_lft.DOORISOPEN == false) { ((Timer)sender).Stop(); Zero(); } elsereturn;

}

PRIVATEVOIDLIFTCALL(object sender, EVENTARGS e)

{

_lft.Callup(panel1.Location.Y,panel1);

if (Lift.Floor == Lift.TRGFLOOR) { ((Timer)sender).Stop(); OD(); }

}

PRIVATEVOIDPASS_Click(object sender, EVENTARGS e)

{

NEWFORM2().SHOWDIALOG();

NEWFORM2().Generation(pict);

} privatevoid C1_Tick(object sender, EVENTARGS e)

{

//Lift.Floor = 1;

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

}

PRIVATEVOIDIN_lift_tick(object sender, EVENTARGS e)

{ if(pict[0].Visible==true|| pict[4].Visible == true|| pict[8].Visible == true|| pict[16].Visible == true||pict[12].Visible==true) NEWFORM2().minus(pict);

if (Human.target == Lift.TRGFLOOR)

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

}

PRIVATEVOIDAUTO_Click(object sender, EVENTARGS e)

{ if (Lift.TRGFLOOR == Human.Current&&(Human.CALLLEV[1]|| Human.CALLLEV[2] || Human.CALLLEV[3]|| Human.CALLLEV[4])) OD();

else Zero();

} void Zero()

{

C3.Interval = 50;

C3.Tick = NEWEVENTHANDLER(LIFTCALL);

C3.Start();

} void OD()

{ if (Lift.Floor == Lift.TRGFLOOR&& _lft.DOORCANOPEN)

{

C2.Interval = 20;

C2.Tick = NEWEVENTHANDLER(OPENDOORS);

C2.Start();

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

} void OD1()

{ if (_lft.DOORISOPEN )

{

C1.Interval = 40;

C1.Tick = NEWEVENTHANDLER(In_lift_tick);

C1.Start();

}

} void OD2()

{

C4.Interval = 20;

C4.Tick = NEWEVENTHANDLER(CLOSEDOORS);

C4.Start();

}

PRIVATEVOIDСЧЕТЧИКЛИФТА_Tick(object sender, EVENTARGS e)

{ trigger.Text = count.TOSTRING();

}

}

}

Рис. 6 «МОДЕЛЬКЛАССАFORM1»

3.5 КЛАССLIFT using System;

USINGSYSTEM.Collections.Generic;

USINGSYSTEM.Diagnostics.Eventing.Reader;

USINGSYSTEM.Drawing;

USINGSYSTEM.Linq;

USINGSYSTEM.Security.Cryptography;

USINGSYSTEM.Text;

USINGSYSTEM.Windows.Forms;

NAMESPACELIFTKURSACH

{

PUBLICCLASSLIFT

{

PUBLICSTATICINTTRGFLOOR;

publicstaticint Floor=1;

PUBLICINTCAPACITY;

privateenumstatusvalue { up = 0, down = 1, neutral = 2 } privatestatusvalue status;

publicint Status

{ get

{

THROWNEWSYSTEM.NOTIMPLEMENTEDEXCEPTION();

} set

{ if (TRGFLOOR< Floor)

{ status = statusvalue.up;

} elseif (TRGFLOOR> Floor)

{ status = statusvalue.down;

} else

{ status = statusvalue.neutral;

}

}

}

PUBLICBOOLDOORISOPEN = false;

PUBLICBOOLDOORCANOPEN = true;

publicvoid determinate()

{ if (Human.CALLLEV[0] == true) TRGFLOOR = 1;

if (Human.CALLLEV[1] == true) TRGFLOOR = 2;

if (Human.CALLLEV[2] == true) TRGFLOOR = 3;

if (Human.CALLLEV[3] == true) TRGFLOOR = 4;

if (Human.CALLLEV[4] == true) TRGFLOOR = 5;

}

PUBLICVOIDCALLUP(int q, PANELPNPANEL)

{ determinate();

int[] k = newint[] { 340, 240, 158, 90, 9 };

if (status == statusvalue.down || status == statusvalue.neutral) return;

else if (Floor <TRGFLOOR)

{ if (q<=0)return;

q-;

var up = NEWPOINT(PNPANEL.Location.X, q);

PNPANEL.Location = up;

if (k[1] == q || k[2] == q || k[3] == q || k[4] == q) Floor ;

}

ELSECALLDOWN(q, PNPANEL);

}

PUBLICVOIDCALLDOWN(int q, PANELPNPANEL)

{ int[] k = newint[] { 340, 240, 158, 90, 9 };

if ( status == statusvalue.neutral) return;

elseif (Floor != TRGFLOOR)

{ if (q >=345) return;

q ;

var up = NEWPOINT(PNPANEL.Location.X, q);

PNPANEL.Location = up;

if (q>329 && q<342 || k[1] == q || k[2] == q || k[3] == q || k[4] == q) Floor-;

}

}

PUBLICVOIDCLOSEDOOR(int q, LABELPNLABEL)

{ int k = PNLABEL.Size.Height;

if (DOORISOPEN) if (k <= 52)

{ k ;

Size min2 = NEWSIZE(PNLABEL.Width, k);

PNLABEL.Size = min2;

if (k == 52) { obnul(); DOORISOPEN = false; }

}

}

PUBLICVOIDOPENDOOR(int q, LABELPNLABEL)

{ var k = PNLABEL.Size.Height;

if (k >= 0)

{ k-;

Size min2 = NEWSIZE(PNLABEL.Width, k);

PNLABEL.Size = min2;

if (k == 0)

{

DOORCANOPEN = false; DOORISOPEN = true;}

}

} voidobnul()

{ if (Human.ONLIFT)

{

Floor = Human.Current;

TRGFLOOR = Human.target;

DOORCANOPEN = 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 с.

Размещено на
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?