Задание
Создать программу для создания карты локальной сети и примерный расчет стоимости элементов созданной локальной сети..
Функционал программы
Например:
- Создание карты
- Редактирование элементов
- Редактирование доступного оборудования для расчетов
- Расчет стоимостикарты (дезучета расходных материалов)
- Хранилище данных - MSSQL сервер
Фрагмент программного кода
using System;
using System.ComponentModel;
using System.Drawing;
using System.Runtime.CompilerServices;
using NetworkMap.Annotations;
using NetworkMap.Properties;
namespace NetworkMap
{
/// <summary> Элемент сетевой инфраструктуры </summary>
public class Element : INotifyPropertyChanged
{
private bool _selected;
/// <summary> Уникальный идентификатор </summary>
public Guid Id { get; set; }
public string Name { get; set; }
/// <summary> Координаты расположения на карте </summary>
public Point Location { get; set; }
public Size Size { get; private set; } = Size.Empty;
/// <summary> Тип элемента </summary>
public ETypeElement Type
{
get => _type;
set
{
if (value == _type) return;
_type = value;
OnPropertyChanged();
OnPropertyChanged(nameof(Image));
bmp = (Bitmap)Resources.ResourceManager.GetObject(Type.ToString());
Size = bmp.Size;
}
} private ETypeElement _type;
/// <summary> Изображение элемента </summary>
public Bitmap Image {
get
{
if (bmp != null) return bmp;
bmp = (Bitmap)Resources.ResourceManager.GetObject(Type.ToString());
if (bmp != null)
Size = bmp.Size;
return bmp;
}
} private Bitmap bmp = null;
/// <summary> Признак выделения на карте элемента </summary>
public bool Selected
{
get => _selected;
set
{
if (value == _selected) return;
_selected = value;
OnPropertyChanged();
}
}
public Point Center => new Point(Location.X+(bmp.Width>>1),Location.Y+(bmp.Height>>1));
public Element()
{
if(Id==Guid.Empty)
Id = Guid.NewGuid();
}
public bool AnyPoint(Point p)
{
return (p.X >= Location.X && p.X < Location.X + Size.Width) &&
(p.Y >= Location.Y && p.Y < Location.Y + Size.Height);
}
/// <summary> Отрисовка элемента </summary>
public void Draw(Graphics g)
{
g.DrawImage(Image,Location);
if (!string.IsNullOrEmpty(Name))
{
var r = new Rectangle(Location.X,Location.Y+Size.Height-12,Size.Width,12);
g.FillRectangle(Brushes.DarkGray,r);
g.DrawString(Name,new Font("Consolas",8),Brushes.Black,r, new StringFormat{LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center} );
}
if (Selected)
{
g.DrawRectangle(Pens.Blue, Location.X+1,Location.Y+1,Size.Width-2,Size.Height-2);
}
}
#region event
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
}
Скриншот архива с проектом


Пояснения по запуску программы
C# NET.Framework 4.5 Совместима с windows 7 и выше
В архиве после покупки доступен полный исходный код приложения со всеми ресурсами (можно изменить, дополнить самостоятельно) а также билд для запуска и проверки в папке bin\Release
Телеграм
-