объектно-ориентированное программирование

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: C#
  • 35 35 страниц
  • 12 + 12 источников
  • Добавлена 08.04.2022
1 496 руб.
  • Содержание
  • Часть работы
  • Список литературы
Содержание

1. Анализ задания 4
1.1 Описание предметной области 4
1.2 Диаграмма вариантов использования UML 5
2. Разработка библиотеки классов 7
2.1. Диаграмма классов UML 7
2.2. Выбор языка программирования 8
2.3. Реализация классов 9
2.4 Диаграмма компонентов UML 12
3. Разработка тестового приложения 13
3.1. Разработка интерфейса приложения 13
3.2. Структура тестового приложения 14
4. Результаты тестирования 15
Список использованных источников 19
Приложение А. Программный код тестового приложения 20

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

cs
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*
Класс Вершина. Кроме имени и координат не имеет ничего
*/
namespace Traffic
{
class Vertex
{
public static Font font = new Font("Courier new", 8);
public string Name = "";
public float X = 0;
public float Y = 0;
public bool mark; //пометка, для поиска маршрута в глубину (см. NeedTrafic)

public void Paint(Graphics g)
{
Color color = Color.Blue;
float R = 4;
g.FillEllipse(new SolidBrush(color), X - R, Y - R, 2 * R, 2 * R);
g.DrawEllipse(Pens.Black, X - R, Y - R, 2 * R, 2 * R);
g.DrawString(Name, font, Brushes.Black, X - R + 1, Y);
}

public override string ToString()
{
return Name;
}

public void Save(StreamWriter stream)
{
stream.WriteLine(Name);
stream.WriteLine(X);
stream.WriteLine(Y);
}

public void Load(StreamReader stream)
{
Name = stream.ReadLine();
X = int.Parse(stream.ReadLine());
Y = int.Parse(stream.ReadLine());
}
}
}

Модуль Edge.cs
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*
Класс ребро. Соединяет две вершины. Вес - величина трафика
*/
namespace Traffic
{
class Edge
{
public Vertex From;
public Vertex To;
protected int traffic;
private float x, y;
public float X {
get { return x; }
}
public float Y
{
get { return y; }
}
//цвет линии
protected Color color = Color.Green;
protected Color brushcolor = Color.Black;
//стиль линии
protected System.Drawing.Drawing2D.DashStyle dashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
protected float d = 0.1f; //отклонение "центра"
protected bool mustshow = true; //Рисовать, даже если нагрузка 0

virtual public void Paint(Graphics g)
{
if (!mustshow && Traffic == 0) return;
Pen pen = new Pen(color, (mustshow?3:1));
pen.DashStyle = dashStyle;
//g.DrawLine(pen, From.X, From.Y, To.X, To.Y);

//Вычислить положение "середины" ребра.
//Середина определяется как
x = (From.X + To.X) / 2;
y = (From.Y + To.Y) / 2;
//сдвинутая на долю d в направлении, перепендикулярном направлению ребра
double dx = To.X - From.X;
double dy = To.Y - From.Y;
double R = Math.Sqrt(dx * dx + dy * dy); if (R == 0) R = 10;
R *= d;
double A = Math.Atan2(dy, dx) + Math.PI/2;
x += (float)(R * Math.Cos(A));
y += (float)(R * Math.Sin(A));

//Линия
g.DrawBezier(pen,
From.X, From.Y,
x, y,
x, y,
To.X, To.Y);

//Подпись
if (traffic != 0)
{
Brush brush = new SolidBrush(brushcolor);
g.DrawString(From.ToString() + "->" + To.ToString() + "=" + Traffic.ToString(), Vertex.font, brush, X, Y);
}
}
virtual public int Traffic
{
get { return traffic; }
set { traffic = value; }
}
public void Save(StreamWriter stream)
{
stream.WriteLine(From.Name);
stream.WriteLine(To.Name);
stream.WriteLine(Traffic);
}

public void Load(StreamReader stream, List V)
{
string Name1 = stream.ReadLine();
string Name2 = stream.ReadLine();
traffic = int.Parse(stream.ReadLine());
for (int k=0; k {
if (Name1 == V[k].Name) From = V[k];
if (Name2 == V[k].Name) To = V[k];
}
}

}
}

Модуль Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Traffic
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void pictureBox_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(Color.White);
g.Paint(e.Graphics);

//Выбранная точка
if (HasSelect)
{
e.Graphics.DrawLine(Pens.Red, SelectedX - 10, SelectedY, SelectedX + 10, SelectedY);
e.Graphics.DrawLine(Pens.Red, SelectedX, SelectedY-10, SelectedX, SelectedY + 10);
}

}

int SelectedX = 0;
int SelectedY = 0;
bool HasSelect = false;


private void pictureBox_MouseClick(object sender, MouseEventArgs e)
{
SelectedX = e.X;
SelectedY = e.Y;
HasSelect = true;
pictureBox.Refresh();
}


/*
Интерфейс для редактирования:
Клик мышкой - определяет "выбранную точку"

Вершина добавить: поместить в выбранную точку новую вершину

Вершина, ребро, трафик удалить : ближайшая к выбранной точке вершина удаляется

*/

Graph g = new Graph();

//Добавить вершину
private void addToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!HasSelect) return;
//В выбранном месте
g.AddVertex(new Vertex() { X = SelectedX, Y = SelectedY });
g.Enumerate();
HasSelect = false;
pictureBox.Refresh();

}

//Удалить вершину
private void removeToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!HasSelect) return;
//В выбранном месте
g.RemoveVertex(SelectedX, SelectedY);
g.Enumerate();
HasSelect = false;
pictureBox.Refresh();
}

//Добавить ребро
private void addToolStripMenuItem1_Click(object sender, EventArgs e)
{
if (g.V.Count < 2) return; //Бессмысленное
FormDialog F = new FormDialog();
F.Text = "Новое ребро";
//Заполнить списки вершин
foreach (Vertex v in g.V)
{
F.comboBoxFrom.Items.Add(v);
F.comboBoxTo.Items.Add(v);
}
F.comboBoxFrom.SelectedIndex = 0;
F.comboBoxTo.SelectedIndex = 1;

//Запретить ввод веса
F.numericUpDown.Enabled = false;

if (F.ShowDialog() != DialogResult.OK) return; //Отказался
g.AddEdge((Vertex)F.comboBoxFrom.SelectedItem, (Vertex)F.comboBoxTo.SelectedItem);
pictureBox.Refresh();
}

//Добавить трафик
private void addToolStripMenuItem2_Click(object sender, EventArgs e)
{
if (g.V.Count < 2) return; //Бессмысленное
FormDialog F = new FormDialog();
F.Text = "Новый трафик";

//Заполнить списки вершин
foreach (Vertex v in g.V)
{
F.comboBoxFrom.Items.Add(v);
F.comboBoxTo.Items.Add(v);
}
F.comboBoxFrom.SelectedIndex = 0;
F.comboBoxTo.SelectedIndex = 1;

//Разрешить ввод веса
F.numericUpDown.Enabled = true;
F.numericUpDown.Value = 1;

if (F.ShowDialog() != DialogResult.OK) return; //Отказался
g.AddTraffic((Vertex)F.comboBoxFrom.SelectedItem, (Vertex)F.comboBoxTo.SelectedItem, (int)F.numericUpDown.Value);
pictureBox.Refresh();
}

private void removeToolStripMenuItem1_Click(object sender, EventArgs e)
{
if (!HasSelect) return;
g.RemoveEdge(SelectedX, SelectedY);
HasSelect = false;
pictureBox.Refresh();
}

private void removeToolStripMenuItem2_Click(object sender, EventArgs e)
{
if (!HasSelect) return;
g.RemoveTraffic(SelectedX, SelectedY);
HasSelect = false;
pictureBox.Refresh();
}

//Выход
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}

private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
g = new Graph();
pictureBox.Refresh();
}

private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() != DialogResult.OK) return;
g = new Graph();
g.Load(openFileDialog1.FileName);
pictureBox.Refresh();
}

private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
if (saveFileDialog1.ShowDialog() != DialogResult.OK) return;
g.Save(saveFileDialog1.FileName);
}

private void Form1_Load(object sender, EventArgs e)
{
g = new Graph();
g.Load("default.graph");
}

private void helpToolStripMenuItem_Click(object sender, EventArgs e)
{
string s = "Интерфейс для редактирования:" + Environment.NewLine +
"Клик мышкой -определяет 'выбранную точку', отображается крестиком" + Environment.NewLine +
"Вершина добавить: поместить в выбранную точку новую вершину" + Environment.NewLine +
"Вершина, ребро, трафик -- удалить : ближайшая к выбранной точке вершина удаляется" + Environment.NewLine;
MessageBox.Show(s, "Справка", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

private void solveToolStripMenuItem_Click(object sender, EventArgs e)
{
g.Solve();
pictureBox.Refresh();
}
}
}









21

Список использованных источников

1. Албахари Д. C# 6.0. Справочник. Полное описание языка / Джозеф Албахари, Бен Албахари - Москва. : Вильямс. 2017 -1040c
2. Васильев А. Н. Программирование на C# для начинающих. Основные сведения/Васильев Алексей Николаевич.- Москва.: БОМБОРА. 2019 -592c
3. Иванова Г. Объектно-ориентированное программирование. Учебник/ Иванова Г, Ничушкина Т. – М.: МГТУ им. Н.Э. Баумана, 2014 - 455с.
4. Комлев Н. Объектно Ориентированное Программирование. Настольная книга программиста/ Н. Комлев – М.: Солон-Пресс, 2018 - 298с.
5. Маклафлин Б. C#. Объектно-ориентированный анализ и проектирование/ Бретт Маклафлин - СПб.: Питер. 2017 -608c
6. Нортроп Т. Основы разработки приложений на платформе Microsoft .Net Framework. Учебный курс Microsoft / Нортроп Тони, Уилдермьюс Шон, Райан Билл. - М.: «Русская редакция», СПб.: «Питер», 2007.
7. Павловская Т. А. C#. Программирование на языке высокого уровня: Учебник для вузов/ Павловская Т. А. - СПб.: БХВ-Петербург. 2007 -342c
8. Рихтер Д. C#. CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C#/ Джеффри Рихтер - СПб.: Питер. 2017 -896c
9. Рэнди С. С# 5.0. Карманный справочник / Стефан Рэнди Дэвис, Чак Сфер. — Москва. : Вильямс, 2013. — 288 с.
10. Шилдт Герберт. C# 4.0. Полное руководство/Шилдт Герберт.- Москва.: Вильямс. 2019 -1056c
11. Шустова Л. И. C#. CLR via C#. Базы данных. Учебник. Студентам ВУЗов/Шустова Лариса Ивановна, Тараканов Олег Владимирович- Москва.: Инфра-М. 2021 -304c
12. Фаронов В. В., Создание приложений с помощью C#: Руководство программиста/ Фаронов В. В. - М.: Эксмо, 2008 -576c