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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 01.05.2016
Размер файла 477,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

Введение

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

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) <= 5 &&int.Parse(CurTxBx.Text) >= 0) &&

(int.Parse(TrgTxBx.Text) <= 5 &&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;

publicintСapacity;

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

Размещено на Allbest.ru


Подобные документы

  • Разработка алгоритма и программы управления поворотной платформой лифта при помощи языка программирования Java Script. Проектирование приложения к браузеру в среде Adobe Dreamweaver CS5. Схема алгоритма, текст программы для двухмерной модели лифта.

    курсовая работа [353,1 K], добавлен 18.05.2013

  • Разработка модели лифта, алгоритма и программы на языке JavaScript. Возможность использования модели при проектировании промышленных лифтов и отладки управляющих программ. Основные принципы построения модели лифта, выполнение вычислительного эксперимента.

    курсовая работа [495,8 K], добавлен 09.06.2013

  • Процесс проектирования программы, состоящий из следующих шагов: описание прецедентов, построение диаграммы прецедентов, диаграммы взаимодействий, создание модели программных классов. Тестирование программы входными тестовыми вариантами, ее листинг.

    курсовая работа [1,9 M], добавлен 25.10.2012

  • Общая характеристика склада как объекта хозяйственной деятельности. Создание диаграммы прецедентов и последовательности. Построение корпоративной диаграммы сотрудничества. Предназначение диаграммы классов и компонентов. Генерация программного кода C++.

    курсовая работа [222,0 K], добавлен 23.06.2011

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

    курсовая работа [308,5 K], добавлен 14.10.2011

  • Разработка программного продукта и описание использования банкомата с помощью диаграммы прецедентов, с помощью IDEF0 диаграмм. Разработка информационной системы банкомата. Создание базы данных, форм, бизнес-правил. Возможные пути развития и реинжиниринга.

    курсовая работа [1,6 M], добавлен 25.03.2015

  • Визуальное моделирование в UML. Построение модели в форме диаграммы вариантов использования (use case diagram), которая описывает функциональное назначение системы. Документация для взаимодействия разработчиков системы с ее заказчиками и пользователями.

    лабораторная работа [672,2 K], добавлен 10.03.2014

  • Особенности объектно-ориентированного проектирования. Основные понятия объектно-ориентированного подхода. Основы языка UML, варианты его использования. Диаграммы классов и взаимодействия. Разработка диаграммы прецедентов (вариантов использования).

    курсовая работа [1,1 M], добавлен 13.05.2014

  • Выбор, обоснование и особенности языка программирования. Вербальное и графическое описание функционального назначения системы. Разработка диаграммы классов, описывающей логическую модель системы. Проектирование физической структуры программного средства.

    курсовая работа [2,4 M], добавлен 26.05.2014

  • Построение модели прецедентов, модели пригодности для прецедента. Описание атрибутов и операций классов системы. Проектирование с применением методологии ICONIX. Построение диаграммы пригодности, диаграммы последовательностей и диаграмма классов.

    курсовая работа [949,5 K], добавлен 25.05.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.