компьютерное моделирование на C#

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Программирование
  • 63 63 страницы
  • 12 + 12 источников
  • Добавлена 09.06.2024
1 496 руб.
  • Содержание
  • Часть работы
  • Список литературы
СОДЕРЖАНИЕ
ВВЕДЕНИЕ 6
1 Техническое задание 7
1.1 Основание для разработки 7
1.2 Назначение разработки 7
1.3 Требования к программе или программному изделию 7
1.3.1 Описание предметной области 7
1.3.2 Требования к функциональным характеристикам 7
1.3.3 Требования к входным и выходным данным 9
1.3.4 Требования пользователя к интерфейсу 9
1.3.5 Требования к надежности 10
1.3.6 Условия эксплуатации 10
1.3.7 Требования к составу и параметрам технических средств 10
1.3.8 Требования к информационной и программной совместимости 10
1.3.9 Требования к программной документации 11
1.4 Стадии и этапы разработки 11
1.5 Порядок контроля и приемки 12
2 Технический проект 13
2.1 Словарь предметной области программного изделия 13
2.1 Моделирование вариантов использования 15
2.2 Описание структур и форматов данных 19
2.3 Схемы алгоритмов 20
3 Рабочий проект 21
3.1 Спецификация компонентов и классов программ 21
3.1.1 Модули и объекты интерфейса пользователя 21
3.1.2 Описание объектов интерфейса программы 21
3.1.3 Описание разработанных классов 23
3.2 Тестирование программной системы 29
3.2.1 Тестовые наборы для отладки работы программы. 37
ЗАКЛЮЧЕНИЕ 44
CПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 45
ПРИЛОЖЕНИЕ A 47
ПРИЛОЖЕНИЕ Б 66

Фрагмент для ознакомления

Руденков, Н. А. Основы сетевых технологий : учебник / Н. А. Руденков, Л. И. Долинер. – Екатеринбург :УрФУ, 2011. – 300 с. – Текст : непосредственный.Фаулер, М. UML. Основы / М. Фаулер ; пер. с англ. А. Петухова. – 3-е изд. – Санкт-Петербург : Символ-Плюс, 2004. – 192 с. ISBN 5-93286-060-Х. – Текст : непосредственный.Шкляр, М. Ф. Основы научных исследований : учебное пособие / М. Ф. Шкляр. – 7-е изд. – Москва : Дашков и К° , 2019. – 208 с. – ISBN 978-5-394-03375-9. – URL: https://znanium.com/catalog/product/1093533 (дата обращения: 17.09.2020). – Текст : электронный.ПРИЛОЖЕНИЕAИсходный код программы управления перемещением робота-луноходаusing System;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;using System.IO;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;using static System.Net.Mime.MediaTypeNames;namespace Robot{public partial class Form1 : Form {public const int NX = 20; // Размеркартыпо Xpublic const int NY = 14; // Размеркартыпо Y // Стартоваяпозицияpublic const intstartX = 1;public const intstartY = 12; // Позицияракетыpublic const introcketX = 5;public const introcketY = 12; // Позиция B1public const int b1X = 4;public const int b1Y = 12; // Допустимыекомманды private String[] validCommands = new string[] { "Старт", "Вперед", "Вперёд", "Назад", "Вправо","Влево", "Исследовать", "Доставить", "Конец" }; // Текущая программа (команды)private String[] Commands = new string[] { };// Номер текущей командыprivateintCommandNum = 0; // Масса собранных образцовprivate double Collected = 0.0; // Индексыизображений в ImageList1privateenumimgIndexes { imA1 = 0, imB1, imCrater, imBrick, imRocket, imEmpty, imRover};// Горизонтальные координаты кратеровint[] craterX = newint[] { 3, 4, 7, 7, 11, 13, 13, 15, 18 }; // Вертикальные координаты кратеровint[] craterY = newint[] { 2, 8, 5, 10, 11, 2, 8, 12, 7 }; // Горизонтальные координаты камнейint[] brickX = newint[] { 1, 2, 5, 5, 10, 10, 11, 15, 15 }; // Вертикальные координаты камнейint[] brickY = newint[] { 8, 5, 2, 5, 2, 8, 5, 7, 10 }; // Позиции блоков 3*2 из клеток A1int[] a1X = newint[] { 14, 16 };int[] a1Y = newint[] { 2, 3 };// Текущая позиция луноходаpublicintroverX = startX;publicintroverY = startY; // ПризнаксломанностилуноходаpublicboolroverBroken = false;private Brush RedBrush = new SolidBrush(Color.Red); // Кистькрасногоцвета // Класс -- клеткаполяpublic class cell{privateImageListimages; // Ссылка на коллекцию изображенийprivateintimgIndex; // Индексизображенияpublic cell(ImageListimg, intimgIdx) // Конструктор{images = img;imgIndex = imgIdx; } // Отобразить на графическом поле g, начиная с точки (x,y)public virtual void draw(Graphics g, float size, float x, float y) {g.DrawImage(images.Images[imgIndex], x, y, size, size); } } // Класс -- пустаяклеткаполяpublic class empty : cell { // Конструкторpublic empty(ImageListimg) : base(img, (int) imgIndexes.imEmpty) { } } // Класс - препятствиеpublic class box : cell { // Конструкторpublic box(ImageListimg, intimgIdx) : base(img, imgIdx) { } } // Класс -- кратерpublic class crater : box { // Конструкторpublic crater(ImageListimg) : base(img, (int)imgIndexes.imCrater) { } } // Класс -- каменьpublic class brick : box { // Конструкторpublic brick(ImageListimg) : base(img, (int)imgIndexes.imBrick) { } } // Класс -- ракетаpublic class rocket : cell { // Конструкторpublic rocket(ImageListimg) : base(img, (int)imgIndexes.imRocket) { } } // Класс -- A1public class a1 : cell {private double weight; // Весобразца // Конструкторpublic a1(ImageListimg) : base(img, (int)imgIndexes.imA1) {// Вес задаем случайным образомRandomrnd = newRandom();weight = 0.1 + 0.1*((int)(10*rnd.NextDouble())); }public double get_weight() // Возвращаетвесобразца {return weight; } } // Класс -- B1public class b1 : cell { // Конструкторpublic b1(ImageListimg) : base(img, (int)imgIndexes.imB1) { } }cell[,] moon = new cell[NY, NX]; // ПолеЛуныpublic Form1() {InitializeComponent();reinitBoard(); } // Сбросполя в исходноесостояниеpublic void reinitBoard() {for (inti = 0; i < NY; i++)for (int j = 0; j < NX; j++)moon[i, j] = new empty(imageList1); // Расставляемкратерыfor (inti = 0; i < craterX.Length; i++)moon[craterY[i], craterX[i]] = new crater(imageList1); // Расставляемкамниfor (inti = 0; i < brickX.Length; i++)moon[brickY[i], brickX[i]] = new brick(imageList1);moon[rocketY, rocketX] = new rocket(imageList1); // Ракетаmoon[b1Y, b1X] = new b1(imageList1); // B1 // Расставляем A1for (inti = 0; i < a1X.Length; i++)for (int j = 0; j < 3; j++)for (int k = 0; k < 2; k++)moon[a1Y[i] + j, a1X[i] + k] = new a1(imageList1);roverX = startX;roverY = startY;pictureBox1.Invalidate();} // Вызывается при перерисовке компонента с полемprivate void pictureBox1_Paint(object sender, PaintEventArgs e) {floatcellSizeX = 1.0f*pictureBox1.Width / NX; // Размероднойклеткипо XfloatcellSizeY = 1.0f*pictureBox1.Height / NY; // Размероднойклеткипо YfloatcellSize = Math.Min(cellSizeX, cellSizeY); // Размероднойклетки // Рисуемполеfor (inti = 0; i < NY; i++)for (int j = 0; j < NX; j++)moon[i, j].draw(e.Graphics, cellSize - 1, 1 + j * cellSize, 1 + i * cellSize);if (roverBroken){ // Еслилуноходсломанe.Graphics.FillEllipse(RedBrush, 1 + (roverX + 0.3f) * cellSize, 1 + (roverY + 0.3f) * cellSize, 0.4f * cellSize, 0.4f * cellSize); } else // Рисуемлуноходif (roverX >= 0 && roverX < NX && roverY >= 0 && roverY < NY)e.Graphics.DrawImage(imageList1.Images[(int)imgIndexes.imRover], 1 + roverX * cellSize, 1 + roverY * cellSize, cellSize - 1, cellSize - 1); } // Выбранпунктменю "Выход"private void выходToolStripMenuItem_Click(object sender, EventArgs e){Close(); } // Выьран пункт меню "Начальная позиция"private void начпозToolStripMenuItem_Click(object sender, EventArgs e) {roverX = startX;roverY = startY;pictureBox1.Invalidate();} // Выбран пункт меню "Открыть команды"private void загрузитьToolStripMenuItem_Click(object sender, EventArgs e) {if (openFileDialog1.ShowDialog() == DialogResult.OK){ // Еслифайлбылвыбранif (!openFileDialog1.FileName.EndsWith(".moon")) // Еслинеправильноерасширение label1.Text = "Ошибказагрузки";else {String[] _commands = File.ReadAllLines(openFileDialog1.FileName); // Читаемвсестрокифайлаif (_commands.Length == 0) // Еслифайлпуст label1.Text = "Ошибказагрузки";else { textBox1.Text = String.Join(Environment.NewLine, _commands);стартToolStripMenuItem.Enabled = true;стопToolStripMenuItem.Enabled = false;возобновитToolStripMenuItem.Enabled = false;перезапускToolStripMenuItem.Enabled = false; label1.Text = "Нетошибок"; } } } } // Выбранпунктменю "Сохранитькоманды"private void сохранитьКомандыToolStripMenuItem_Click(object sender, EventArgs e) {if (saveFileDialog1.ShowDialog() == DialogResult.OK){ // Еслифайлбылвыбранif (!saveFileDialog1.FileName.EndsWith(".moon")) // Еслинеправильноерасширение label1.Text = "Ошибка сохранения";else {File.WriteAllText(saveFileDialog1.FileName, textBox1.Text); // Сохраняем label1.Text = "Нет ошибок"; } } } // Рестарт миссииpublic void restart() {стартToolStripMenuItem.Enabled = false;стопToolStripMenuItem.Enabled = true;загрузитьToolStripMenuItem.Enabled = false;сохранитьКомандыToolStripMenuItem.Enabled = false;возобновитToolStripMenuItem.Enabled = false;перезапускToolStripMenuItem.Enabled = false;roverBroken = false;reinitBoard(); Collected = 0.0;richTextBox1.Clear(); label2.Text = "Массаобразцов: 0 грамм"; label1.Text = "Нетошибок";CommandNum = 0;timer1.Start(); } // ВЫборпунктаменю"Старт"private void стартToolStripMenuItem_Click(object sender, EventArgs e) {стопToolStripMenuItem.Enabled = false;возобновитToolStripMenuItem.Enabled = false;перезапускToolStripMenuItem.Enabled = false;if (textBox1.Text.Length == 0) { label1.Text = "Введитекоманды";return; } // Проверка программыCommands = textBox1.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.None);boolvalid = true; // Признак корректности программыforeach (String line in Commands) {if (line.Length > 0 && !validCommands.Contains(line)) // Если команда не найдена в списке допустимых{valid = false;break; } }if (!valid || valid && !Commands[0].Equals("Старт")) { label1.Text = "Проверьтекоманды!";return; }стартToolStripMenuItem.Enabled = false;стопToolStripMenuItem.Enabled = true;restart(); } // Перемещение в направлении (dx, dy)privatebool move(intdx, intdy) {roverX += dx;roverY += dy;if (roverX < 0 || roverY < 0 || roverX >= NX || roverY >= NY) { label1.Text = "Потерясвязи!";return false; }if (moon[roverY, roverX] is box) {roverBroken = true; label1.Text = "Столкновение!";return false; }return true; } // Выбранпункт "Стоп"private void стопToolStripMenuItem_Click(object sender, EventArgs e) {timer1.Stop();стартToolStripMenuItem.Enabled = true;загрузитьToolStripMenuItem.Enabled = true;сохранитьКомандыToolStripMenuItem.Enabled = true;стопToolStripMenuItem.Enabled = false;возобновитToolStripMenuItem.Enabled = true;перезапускToolStripMenuItem.Enabled = true; } // Выбранпуннктменю "Возобновить"private void возобновитToolStripMenuItem_Click(object sender, EventArgs e) {timer1.Start();стартToolStripMenuItem.Enabled = false;стопToolStripMenuItem.Enabled = true;загрузитьToolStripMenuItem.Enabled = false;сохранитьКомандыToolStripMenuItem.Enabled = false;возобновитToolStripMenuItem.Enabled = false;перезапускToolStripMenuItem.Enabled = false; } // Выбранпунктменю "Перезапустить"private void перезапускToolStripMenuItem_Click(object sender, EventArgs e){timer1.Stop();restart(); } // Вызывается при очередном тике таймераprivate void timer1_Tick(object sender, EventArgs e) {if (CommandNum == Commands.Length ) { label1.Text = "Командыкончились";timer1.Stop();стартToolStripMenuItem.Enabled = true;стопToolStripMenuItem.Enabled = false;загрузитьToolStripMenuItem.Enabled = true;сохранитьКомандыToolStripMenuItem.Enabled = true;возобновитToolStripMenuItem.Enabled = false;перезапускToolStripMenuItem.Enabled = true; }else { String curCommand = Commands[CommandNum]; // Текущаякомандаif (curCommand == "Старт") { richTextBox1.Text += "Началоработы" + Environment.NewLine; }else if (curCommand == "Конец") {timer1.Stop();стартToolStripMenuItem.Enabled = true;стопToolStripMenuItem.Enabled = false;загрузитьToolStripMenuItem.Enabled = true;сохранитьКомандыToolStripMenuItem.Enabled = true;возобновитToolStripMenuItem.Enabled = false;перезапускToolStripMenuItem.Enabled = true; richTextBox1.Text += "Конецработы" + Environment.NewLine;return; } else if (curCommand == "Вперед" || curCommand == "Вперёд") { richTextBox1.Text += "Переходвперед" + Environment.NewLine;if (!move(0, -1))timer1.Stop(); }else if (curCommand == "Назад") { richTextBox1.Text += "Переходназад" + Environment.NewLine;if (!move(0, +1))timer1.Stop(); }else if (curCommand == "Влево") { richTextBox1.Text += "Переходвлево" + Environment.NewLine;if (!move(-1, 0))timer1.Stop(); }else if (curCommand == "Вправо") { richTextBox1.Text += "Переходвправо" + Environment.NewLine;if (!move(+1, 0))timer1.Stop(); }else if (curCommand == "Исследовать") { richTextBox1.Text += "Исследование" + Environment.NewLine;explore(); }else if (curCommand == "Доставить") { richTextBox1.Text += "Доставка" + Environment.NewLine;put(); }pictureBox1.Invalidate();if (!timer1.Enabled) {стартToolStripMenuItem.Enabled = true;стопToolStripMenuItem.Enabled = false;загрузитьToolStripMenuItem.Enabled = true;сохранитьКомандыToolStripMenuItem.Enabled = true;возобновитToolStripMenuItem.Enabled = false;перезапускToolStripMenuItem.Enabled = true; } elseCommandNum++; } } // Иссследованиеprivate void explore() {if (roverX < 0 || roverY < 0 || roverX >= NX || roverY >= NY) { label1.Text = "Потерясвязи";return; }if (moon[roverY, roverX] is a1) { richTextBox1.Text += "Найденобразецвесом " + (moon[roverY, roverX] as a1).get_weight().ToString("F2") + " грамм" +Environment.NewLine; Collected += (moon[roverY, roverX] as a1).get_weight(); label2.Text = "Массаобразцов: " + Collected.ToString("F4") + " грамм";moon[roverY, roverX] = new empty(imageList1); } else { richTextBox1.Text += "Невозможноисследовать" + Environment.NewLine; label1.Text = "Невозможно исследовать!"; } } // Доставкаprivatevoidput(){if (roverX < 0 || roverY < 0 || roverX >= NX || roverY >= NY) { label1.Text = "Потерясвязи";return; }if (moon[roverY, roverX] is b1) { richTextBox1.Text += "Доставкаобразцоввесом " + Collected.ToString("F4") + " грамм" +Environment.NewLine;moon[roverY, roverX] = new empty(imageList1);moon[rocketY, rocketX] = new empty(imageList1); }else { richTextBox1.Text += "Невозможнодоставить" + Environment.NewLine; label1.Text = "Невозможно доставить!"; } } }} ПРИЛОЖЕНИЕБСхемыалгоритмоввыполненияфункцийreinitBoard, стартToolStripMenuItem_Clickиtimer1_tickРисунокБ.1 – СхемаалгоритмафункцииreinitBoardРисунокБ.2 – СхемаалгоритмафункциистартToolStripMenuItem_ClickРисунок Б.3 – Схема алгоритма функции timer1_tick

CПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Белик, А. Г. Проектирование и архитектура программных систем : учебное пособие / А. Г. Белик, В. Н. Цыганенко. – Омск :ОмГТУ, 2016. – 96 с. – ISBN 978-5-8149-2258-8. – Текст : непосредственный.
2. Вигерс, К. Разработка требований к программному обеспечению : [практические приёмы сбора требований и управления ими при разработке программных продуктов : пер. с англ.] / К. Вигерс, Д. Битти. – 3-е изд., доп. – Санкт-Петербург : BHV, 2020. – 736 с. – ISBN 978-5-9775-3348-5. – Текст : непосредственный.
3. Гвоздева, Т. В. Проектирование информационных систем. Стандартизация : учебное пособие / Т. В. Гвоздева, Б. А. Баллод. – Санкт-Петербург : Лань, 2019. – 252 с. – ISBN 978-5-8114-3517-3. – Текст : непосредственный.
4. Космин, В. В. Основы научных исследований : учебное пособие / В. В. Космин. – 4-е изд., перераб. и доп. – Москва : РИОР: ИНФРА-М, 2020. – 238 с. – ISBN 978-5-369-01753-1. – URL: https://znanium.com/ catalog/product/1088366 (дата обращения: 17.09.2020). – Текст : электронный.
5. Кузин, Ф. А. Диссертация: методика написания, правила оформления, порядок защиты : практическое пособие для докторан-тов, аспирантов и магистров / Ф. А. Кузин ; под ред. В. А. Абрамова. – 3-е изд., доп. – Москва : Ось-89, 2008. – 447 с. – ISBN 978-5-98534-869-9. – Текст : непосредственный.
6. Кузин, Ф. А. Магистерская диссертация. Методика написа-ния, правила оформления и процедура защиты : практическое посо-бие для студентов-магистрантов / Ф. А. Кузин. – 2-е изд., перераб. и доп. – Москва : Ось-89, 1999. – 304 с. – ISBN 5-86894-164-0. – Текст : непосредственный.
7. Мартин, Р. Чистая архитектура. Искусство разработки про-граммного обеспечения / Р. Мартин ; пер. с англ. А. Кисилева. – Санкт-Петербург : Питер, 2018. – 351 с. – ISBN 978-5-4461-0772-8. – Текст : непосредственный.
8. Программная инженерия : теоретический и прикладной научно-технический журнал / учредитель и издатель Издательство "Новые технологии" ; главный редактор Васенин В. А. – Москва, 2010 – . – ISSN 2220-3397. – Текст : непосредственный.
9. Программные продукты и системы : международный научно-практический журнал / учредитель Куприянов В. П. ; издатель Научно-исследовательский институт «Центрпрограммсистем» ; главный редактор издания Г. И. Савин. – Тверь, 2014 – . – ISSN 2311-2735. – URL: http://www.swsys.ru (дата обращения: 17.09.2020). – Текст : электронный.
10. Руденков, Н. А. Основы сетевых технологий : учебник / Н. А. Руденков, Л. И. Долинер. – Екатеринбург :УрФУ, 2011. – 300 с. – Текст : непосредственный.
11. Фаулер, М. UML. Основы / М. Фаулер ; пер. с англ. А. Петухова. – 3-е изд. – Санкт-Петербург : Символ-Плюс, 2004. – 192 с. ISBN 5-93286-060-Х. – Текст : непосредственный.
12. Шкляр, М. Ф. Основы научных исследований : учебное пособие / М. Ф. Шкляр. – 7-е изд. – Москва : Дашков и К° , 2019. – 208 с. – ISBN 978-5-394-03375-9. – URL: https://znanium.com/catalog/product/1093533 (дата обращения: 17.09.2020). – Текст : электронный.