Курсовая работа: Поле редактирования с возможностью задания IP-адреса

Курсовая работа

По дисциплине "Объектно-ориентированное программирование"

На тему "Поле редактирования с возможностью задания IP-адреса"


Содержание

1. Постановка задачи и ее анализ

2. Иерархия классов и интерфейсов

3. Описание классов, их полей, свойств

4. Блок-схемы алгоритмов

5. Тестирование

Заключение

Приложение

приложение интерфейс программирование алгоритм


1. Постановка задачи и ее анализ

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

При этом необходимыми условиями работы являются использование в качестве инструмента разработки - среды программирования Microsoft Visual Studio.NET. Язык программирования C#.

В данной пояснительной записке рассматривается описание процесса создания компонента дальнейшего использования при создании приложений "Editip".

Компонент "Editip" содержит в себе 4 свойства "ip1", "ip2", "ip3", "ip4", хранящие IPv4 номера побитно. Эти свойства были созданы для проверки правильности обработки компонентов введенных данных. При событии изменения строки идет проверка на ввод цифр или точки. Если введен неудовлетворяющий этому условию символ – он убирается из строки, без сброса каретки. Если в строке обнаружится более трех точек, и после последней будет стоять число – все содержимое текстового поля обновляется согласно правилам ввода IP-адреса (754.198589.50.5 превращается в 255.255.50.5).


2. Иерархия классов и интерфейсов

Рисунок 1 – Иерархия классов

3. Описание классов, их полей, свойств

Класс "Editip" является дочерним классом "TextBox". В него добавлены свойства свойства "ip1", "ip2", "ip3", "ip4" типа byte. Изменен метод "OnTextCanged", в котором идет проверка на удовлетворение введенных данных условию поставленной задачи и обработка этих данных с изменением свойств, таких как "ip1", "ip2", "ip3", "ip4" и "Text".

 


4. Блок-схемы алгоритмов

Алгоритм метода "OnTextChanged".


5. Тестирование

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

В результате тестирования компонента были осуществлены следующие операции:

- в форму был помещен созданный компонент "Editip" и четыре стандартных компонента "Label" имеющих обозначение ip1, ip2, ip2, ip4 соответственно;

- в событии TextCanged компонента Editip было прописано присвоение свойств ip1, ip2, ip3, ip4 проверочным строкам (выделены жирным).

Рисунок 4 – Ввод в форму ip адреса

- при внесении в поле компонента числа превышающего 255, ip автоматически снижали это число в 255.

Рисунок 5 – Ввод в форму больших чисел


- после ввода последних цифр, после третьей точки, вид компонента приходил в "порядок", если числа ip1, ip2, ip3 не соответствовали требованиям

Рисунок 6 – Ввод в форму последнего числа

- была выявлена ошибка переполнения, вследствие ввода слишком большого числа, которое не могло быть преобразовано в числовой формат Int32.

Рисунок 7 – Ошибка


Ошибка была исправлена использованием в компоненте try-catch

Рисунок 8 – Ошибка исправлена


Заключение

В рамках курсовой работы была создан компонент "Editip" для дальнейшего использования при создании приложений. В процессе проектирования использовались методологии объектно-ориентированного программирования.

В процессе создания программы мы более тесно познакомились с синтаксисом языка C#, в частности создания компонентов, которые очень удобно использовать в широком спектре разнотипных программ.


Приложение

Листинг

Модуль главной формы

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace OOPip

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void editip1_TextChanged(object sender, EventArgs e)

{

label1.Text = Convert.ToString(editip1.ip1);

label2.Text = Convert.ToString(editip1.ip2);

label3.Text = Convert.ToString(editip1.ip3);

label4.Text = Convert.ToString(editip1.ip4);

}

}

}


Модуль компонента "Editip"

using System;

using System.ComponentModel;

using System.Collections.Generic;

using System.Diagnostics;

using System.Text;

namespace OOPip

{

public partial class Editip : System.Windows.Forms.TextBox

{

public Editip()

{

InitializeComponent();

}

public Editip(IContainer container)

{

container.Add(this);

Text = "0.0.0.0";

InitializeComponent();

}

// объявляем переменные хранящие циры ip адреса

public short ip1, ip2, ip3, ip4;

// встраиваемся в событие изменения текста

protected override void OnTextChanged(EventArgs e)

{

// обнуляем переменные хранящие циры ip адреса

ip1 = 0;

ip2 = 0;

ip3 = 0;

ip4 = 0;

// запоминаем положение каретки

int start = SelectionStart;

//счетчик точек

byte pCount = 0;

// если строка не пуста

try

{

if (Text != "")

{

// нам нужен ввод только цифр, проверяем введенные символы на соответствие

for (int i = 0; i < Text.Length; i++)

{

// проверка на соответствие числам

if ((Convert.ToInt32(Text[i]) >= 48 && Convert.ToInt32(Text[i]) <= 57)

// или соотвествие точке, не стоящей первой, не более чем третей и после цифры

|| (Text[i] == '.' && pCount < 3 && i >= 1

&& (Convert.ToInt32(Text[i - 1]) >= 48 && Convert.ToInt32(Text[i - 1]) <= 57)))

{

if (Text[i] == '.')

{

pCount++;

}

}

else

{

Text = Text.Substring(0, i) + Text.Substring(i + 1);

}

}

// закрываем ипы методом сканирования на точки

string Str = Text;

int ii = 0;

if (Str.IndexOf('.') != -1)

{

ii = (Convert.ToInt32(Str.Substring(0, Str.IndexOf('.'))));

if (ii > 255) { ii = 255; } ip1 = Convert.ToByte(ii);

Str = Str.Substring(Str.IndexOf('.') + 1);

}

if (Str.IndexOf('.') != -1)

{

ii = (Convert.ToInt32(Str.Substring(0, Str.IndexOf('.'))));

if (ii > 255) { ii = 255; } ip2 = Convert.ToByte(ii);

Str = Str.Substring(Str.IndexOf('.') + 1);

}

if (Str.IndexOf('.') != -1)

{

ii = (Convert.ToInt32(Str.Substring(0, Str.IndexOf('.'))));

if (ii > 255) { ii = 255; } ip3 = Convert.ToByte(ii);

Str = Str.Substring(Str.IndexOf('.') + 1);

}

if (Str != "")

{

ii = (Convert.ToInt32(Str)); if (ii > 255) { ii = 255; } ip4 = Convert.ToByte(ii);

}

}

}

catch { }

// приводим в "божеский вид" напечатаный текст, если уже имеется 3 точки и последний символ не точка

if (pCount == 3 && Text.LastIndexOf('.') != Text.Length - 1)

{

Text = Convert.ToString(ip1) + "." + Convert.ToString(ip2) + "." + Convert.ToString(ip3) + "." + Convert.ToString(ip4);

}

// возвращаем каретку на место (сбивается при измении текста)

SelectionStart = start;

base.OnTextChanged(e);

}

}

}