Имя поля
|
Тип поля
|
Размер (в байтах)
|
Описание поля
|
n
|
int
|
4
|
Количество строк
|
m
|
int
|
4
|
Количество столбцов
|
a1,a2
|
TextBox
|
|
Введённые матрицы
|
a3
|
TextBox
|
|
Результирующая матрица
|
d,e
|
int
|
4
|
Детерминант матрицы
|
s,c
|
int
|
4
|
След матрицы
|
p,r
|
int
|
4
|
Элемент матрицы
|
2. Вычислительная система
.1 Используемые технические средства
Конфигурация компьютера, на котором будет разрабатываться программное
приложение:
- процессор Intel Core 2 Duo 3500Mhz;
оперативная память DDR2 2Gb;
жёсткий диск HDD Samsung 250Gb;
видеокарта nVidia GeForce 9200GT 512Mb;
- материнская плата Gigabyte;
монитор Samsung
19";
- клавиатура Defender;
мышь
A4Tech.
автоматизация матрица компьютер программный
2.2 Инструменты разработки
Инструментами разработки будут являться:
- операционная система Windows XP Professional SP3;
- среда Microsoft Visual C# 2008 Professional;
- язык программирования С#;
- CASE-среда Rational Rose 2003;
- HelpMaker 7.3.
Сегодня никем не опровергается тот факт, что операционные системы
семейства Windows завоевали не только подавляющую часть белорусского рынка
настольных операционных систем и в корпоративном, и в домашнем секторе, но и
немалую долю рынка серверных операционных систем. Каковы бы ни были претензии к
этим операционным системам и к их производителю со стороны некоторых
пользователей, нельзя отрицать того, что именно среди операционных систем этого
семейства большинство белорусских потребителей находят ту, сочетание цены,
производительности, удобства, функциональности и надежности которой
удовлетворяет требованиям, предъявляемым решаемыми задачами.
Для разработки данного программного приложения была использована Windows
XP Professional. Данная операционная система является оптимальным решением для
предприятия любого размера. Данная версия операционной системы Windows сочетает
в себе преимущества Windows 2000 Professional (например, средства безопасности,
управляемость и надежность) с лучшими качествами Windows 98 и Windows ME
(поддержка Plug&Play, простой пользовательский интерфейс и передовые службы
поддержки). Это делает Windows XP Professional наиболее подходящей операционной
системой для настольных компьютеров, применяемых в корпоративной среде.
Независимо от того, где устанавливается Windows XP Professional - на одном
компьютере или в масштабе локальной сети, - эта система повышает вычислительные
возможности предприятия, одновременно сокращая совокупную стоимость
программного обеспечения всех настольных компьютеров.# - язык программирования,
сочетающий объектно-ориентированные и аспектно-ориентированные концепции.
Разработан в 1998-2001 годах группой инженеров под руководством Андерса
Хейлсберга в компании Microsoft как основной язык разработки приложений для
платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой
.NET, поэтому программы на нём можно создавать и компилировать даже без
инструментальных средств, вроде Visual Studio.# относится к семье языков с
C-подобным синтаксисом, из них его синтаксис наиболее близок к С++ и Java. Язык
имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку
операторов, указатели на функции-члены классов, атрибуты, события, свойства,
исключения, комментарии в формате XML. Переняв многое от своих предшественников
- языков С++, Java, Delphi, Модула и Smalltalk - С#, опираясь на практику их
использования, исключает некоторые модели, зарекомендовавшие себя как
проблематичные при разработке программных систем: так, C# не поддерживает
множественное наследование классов (в отличие от C++).# разрабатывался как язык
программирования прикладного уровня для CLR и, как таковой, зависит, прежде
всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#,
которая отражает FCL. Присутствие или отсутствие тех или иных выразительных
особенностей языка диктуется тем, может ли конкретная языковая особенность быть
транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии
1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует
ожидать и в дальнейшем. (Однако эта закономерность была нарушена с выходом C#
3.0, представляющим собой расширения языка, не опирающиеся на расширения
платформы .NET.) CLR предоставляет C#, как и всем другим .NET-ориентированным
языкам, многие возможности, которых лишены "классические" языки
программирования. Например, сборка мусора не реализована в самом C#, а
производится CLR для программ, написанных на C# точно так же, как это делается
для программ на VB.NET, J# .Rose - популярное средство визуального
моделирования объектно-ориентированных информационных систем компании Rational
Software Corp. Работа продукта основана на универсальном языке моделирования
UML (Universal Modeling Language). Благодаря уникальному языку моделирования
Rational Rose способен решать практически любые задачи в проектировании
информационных систем: от анализа бизнес процессов до кодогенерации на
определенном языке программирования. Только Rose позволяет разрабатывать как
высокоуровневые, так и низкоуровневые модели, осуществляя тем самым либо
абстрактное проектирование, либо логическое.
Только Rational Rose имеет весь необходимый набор визуальных средств
проектирования. Только Rose поможет решить проблемы с кодогенерацией на
определенном языке программирования. Только Rational Rose осуществляет такие
подходы, как прямое и обратное проектирование, а так же Round Trip Engineering.
Такой арсенал позволит не только проектировать новую систему, но и доработать
старую, произведя процесс обратного проектирования.
Для того чтобы наиболее полно покрыть весь сегмент рынка средств
проектирования и разработки, компания Rational выпускает несколько версий
своего продукта. Каждый из них может решать как строго определенный круг задач,
так и весь спектр проблем проектирования и разработки.
3. Проектирование задачи
.1 Объектно-ориентированный анализ
В проектируемой системе используются стандартные
классы: Form, MenuStrip, OpenDialog, SaveDialog, NumericUpDown, GroupBox, TextBox, Button,
RadioButton, Label, HelpProvider. Также присутствует пользовательский класс Matrix, так же изображенный на диаграмме классов. Диаграмма
классов для проектируемой системы представлена в графической части на листе 2.
Компонент класса MenuStrip будет использован для создания главного меню программы, в котором будут
доступны все функции, которые программа может выполнять.
Компонент класса TextBox
представляет собой однострочный редактор текста. Он будет использоваться для
ввода размерности матриц.
Объект класса Button представляет собой элемент управления Windows
"Кнопка".
Компонент GroupBox служит контейнером
для размещения дочерних компонентов и представляет собой прямоугольное окно с
рамкой и текстом в разрыве рамки. Обычно с его помощью выделяется группа
управляющих элементов, объединенных по функциональному назначению. После того
как компоненты помещены в группу, она становится их родительским классом.
Компонент класса GroupBox будет
использован для группировки действий над матрицами.
Объект RadioButton используется для предоставления
пользователю возможности выбора. В программе используется для задания выбора
действия над матрицами.
Компоненты класса Label
(метки) предназначены для размещения на форме различного рода текстовых
надписей.
Компонент класса NumericUpDown будет использован для поиска элемента матрицы по индексу.
RadioButton - кнопка с зависимой фиксацией. Она позволяет выбрать одну функцию из
несколько имеющихся.
HelpProvider - позволяет прикрепить к windows
- приложению справочную систему при помощи свойства HelpNamespace, которая будет содержать информацию
о работе программы. Компонент является не визуальным.
Компоненты OpenDialog и SaveDialog находятся на странице Dialogs. Все компоненты этой страницы
являются не визуальными, то есть не видны в момент работы программы. Поэтому их
можно разместить в любом месте формы. Оба рассматриваемых компонента имеют
идентичные свойства и отличаются только внешним видом. После вызова компонента
появляется диалоговое окно, с помощью которого выбирается имя программы и путь
к ней. В случае успешного завершения диалога имя выбранного файла и маршрут поиска
содержаться в свойстве FileName.
Описание класса Matrix
представлено ниже.
public class matrix
{int stroka;int stolbets;TextBox[,] a1;TextBox[,]
a2;TextBox[,] a3;matrix(int stroka, int stolbets)
{.stroka = stroka;.stolbets = stolbets;
}int Stroka
{{ return stroka; }{ stroka = value; }
}int Stolbets
{{ return stolbets; }{ stolbets = value; }
}
}
Опишем назначение переменных и методов класса.
Переменные типа int: stroka
- количество строк в матрицах, stolbets - количество столбцов в матрицах.
Переменные типа TextBox: а1,а2 - введённые матрицы, а3 - результирующая
матрица.
Для моделирования процесса выполнения операций в языке UML используются
так называемые диаграммы деятельности. Применяемая в них графическая нотация во
многом похожа на нотацию диаграммы состояний, поскольку на диаграммах
деятельности также присутствуют обозначения состояний и переходов. Отличие
заключается в семантике состояний, которые используются для представления не
деятельностей, а действий, и в отсутствии на переходах сигнатуры событий.
Каждое состояние на диаграмме деятельности соответствует выполнению некоторой
элементарной операции, а переход в следующее состояние срабатывает только при
завершении этой, операции в предыдущем состоянии. Графически диаграмма
деятельности представляется в форме графа деятельности, вершинами которого
являются состояния действия, а дугами - переходы от одного состояния действия к
другому.
Именно диаграммы деятельности позволяют реализовать в языке UML
особенности процедурного и синхронного управления, обусловленного завершением
внутренних деятельностей и действий. Метамодель UML предоставляет для этого
необходимые термины и семантику. Основным направлением использования диаграмм
деятельности является визуализация особенностей реализации операций классов,
когда необходимо представить алгоритмы их выполнения. При этом каждое состояние
может являться выполнением операции некоторого класса либо ее части, позволяя
использовать диаграммы деятельности для описания реакций на внутренние события
системы.
В контексте языка UML деятельность (activity) представляет собой
некоторую совокупность отдельных вычислений, выполняемых автоматом. При этом
отдельные элементарные вычисления могут приводить к некоторому результату или
действию (action). На диаграмме деятельности отображается логика или
последовательность перехода от одной деятельности к другой, при этом внимание
фиксируется на результате деятельности. Сам же результат может привести к
изменению состояния системы или возвращению некоторого значения.
Диаграмма деятельности для проектируемой системы представлена в
графической части на листе 3.
Для представления временных особенностей передачи и приема сообщений
между объектами используется диаграмма последовательности. Она используется при
моделировании синхронных процессов, описывающих взаимодействия объектов. При
этом диаграмма последовательности имеет как бы два измерения: одно - слева
направо в виде вертикальных линий, каждая из которых изображает линию жизни
отдельного объекта, участвующего во взаимодействии; второе - вертикальная
временная ось, направленная сверху вниз, на которой начальному моменту времени
соответствует самая верхняя часть диаграммы. На диаграмме последовательности
изображаются исключительно те объекты, которые непосредственно участвуют во взаимодействии.
Т.о., все объекты на диаграмме последовательности образуют некоторый порядок,
определяемый степенью активности этих объектов при взаимодействии друг с
другом. При этом взаимодействие объектов реализуется посредством сообщений,
которые посылаются одними объектами другим.
Каждое взаимодействие описывается совокупностью сообщений, которыми
участвующие в нем объекты обмениваются между собой. Сообщение - законченный
фрагмент информации, который отправляется одним объектом другому. Прием
сообщения инициирует выполнение определенных действий, направленных на решение
отдельной задачи тем объектом, которому это сообщение отправлено, т.е.
сообщения могут инициировать выполнение операций объектом соответствующего
класса, а параметры этих операций передаются вместе с сообщением. На диаграмме
последовательности все сообщения упорядочены по времени своего возникновения в
моделируемой системе.
Диаграмма последовательности для проектируемой системы представлена в
графической части на листе 4.
Диаграмма компонентов описывает объекты реального мира - компоненты
программного обеспечения. Эта диаграмма позволяет определить архитектуру
разрабатываемой системы, установив зависимости между программными компонентами,
в роли которых может выступать исходный, бинарный и исполняемый код. Диаграмма компонентов для проектируемой системы представлена
в графической части на листе 5.
3.2 Концептуальный прототип
Концептуальный прототип состоит из описания внешнего пользовательского
интерфейса - системы меню, диалоговых окон и элементов управления. Кнопочная
навигация дублирует часто используемые пункты основного меню.
При создании приложения важную роль играют формы, так как они являются
основным диалоговым средством работы пользователя. Разрабатываемое приложение
будет одноконное. В приложении предусмотрено меню, которое обеспечит быструю
навигацию в программе, удобный доступ к функциям приложения и структурирует их
в однородные группы.
При запуске приложения, первой будет запускаться главная форма. На ней
располагаются основные элементы управления. На этой форме расположены
компоненты классов GroupBox для
группировки компонентов действий над матрицами. Компоненты класса RadioButton предназначены для выбора типа
операции над матрицами. Компоненты Lable поясняют действия выполняемые пользователем. Главное меню представляет
собой набор кнопок "Новая матрица", "Выполнить",
"Открыть", "Сохранить", "Справка",
"Выход". Компонент OpenFileDialog связан с кнопкой "Открыть" и обеспечивает открытие
диалогового окна для выбора существующего файла. Компонент SaveFileDialog связан с кнопкой
"Сохранить" и обеспечивает открытие диалогового окна для выбора пути
и сохранения файла. Компонент HelpProvider связан с кнопкой "Справка" и обеспечивает запуск внешней
справочной системы данного программного приложения. Создать новую матрицу можно
нажав на кнопку "Создать". Для заполнения матриц случайными числами
нужно нажать кнопку "Генерировать". Для выполнения выбранного
действия используется кнопка главного меню "Выполнить". Открыть
существующий файл, можно при помощи кнопки "Открыть". Сохранить
текущую матрицу можно нажатием на кнопку "Сохранить". Очистка текущих
результатов для создания новых матриц закреплена за кнопкой "Новая
матрица". Справочная информация отображается при нажатии на кнопку
главного меню "Справка". При нажатии на кнопку "Выход",
приложение завершит работу.
3.3 Функции: логическая и физическая организация и элементы управления
Рассмотрим основные функции программы.
Создание двух матриц для ввода чисел осуществляется в методах пользовательского
класса Matrix. Создание объектов и вызов методов
данного класса закреплены за кнопкой "Создать". Реализация данной
функции представлена ниже.
private void button1_Click(object sender, EventArgs e)//создание матриц
{
{= Convert.ToInt32(textBox1.Text);= Convert.ToInt32(textBox2.Text);(n
>= 5)
{ MessageBox.Show("Превышено допустимое количество строк в
матрице!", "Внимание",
MessageBoxButtons.OK,MessageBoxIcon.Error); }(m >= 5)
{ MessageBox.Show("Превышено допустимое количество столбцов в
матрице!", "Внимание",
MessageBoxButtons.OK,MessageBoxIcon.Error); }= new TextBox[n, m];= new
TextBox[n, m];k = 30;l = 90;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j] = new TextBox();[i, j].Width = 25;[i, j].Location = new Point(50
+ k, 50 + l);.Add(a1[i, j]);+= 30;
}= 30;+= 30;
}k1 = 30;l1 = 240;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j] = new TextBox();[i, j].Width = 25;[i, j].Location = new Point(50
+ k1, 50 + l1);.Add(a2[i, j]);+= 30;
}= 30;+= 30;
}.Enabled = true;.Enabled = true;
новаяМатрицаToolStripMenuItem.Enabled = true;.Enabled = false;.Enabled =
true;.Enabled = false;.Enabled = false;
}{ MessageBox.Show("Вводите числа в диапазоне от 1 до 4",
"Внимание", MessageBoxButtons.OK,MessageBoxIcon.Warning); }
}
Заполнение двух матриц случайными числами осуществляется в методах
пользовательского класса Matrix.
Создание объектов и вызов методов данного класса закреплены за кнопкой
"Генерировать". Реализация данной функции представлена ниже.
private void button2_Click(object sender, EventArgs e)//заполнение матриц
случайными числами
{x = new Random();(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j].Text = Convert.ToString(x.Next(-49, 499));
}}(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j].Text = Convert.ToString(x.Next(-49, 499));
}}.Enabled = false;
}
Выполнение действий над матрицами осуществляется в методах
пользовательского класса Matrix.
Создание объектов и вызов методов данного класса закреплены за кнопкой меню
"Выполнить". Реализация данной функции представлена ниже.
private void fileToolStripMenuItem_Click(object sender, EventArgs e)
{
{(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{(i>=100)
{ MessageBox.Show("Вводите только числа!",
"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Error); }(j>=100)
{ MessageBox.Show("Вводите только числа!",
"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Error); }
}
}(radioButton1.Checked == true)//сложение матриц
{= Convert.ToInt32(textBox1.Text);= Convert.ToInt32(textBox2.Text);= new
TextBox[n, m];k2 = 200;l2 = 240;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j] = new TextBox();[i, j].Width = 25;[i, j].Location = new Point(50
+ k2, 50 + l2);[i, j].Text = Convert.ToString(Convert.ToInt32(a1[i, j].Text) +
Convert.ToInt32(a2[i, j].Text));.Add(a3[i, j]);+= 30;
}= 200;+= 30;
}.Enabled = false;.Enabled = false;.Enabled = false;
}(radioButton2.Checked == true)//вычитание матриц
{= Convert.ToInt32(textBox1.Text);= Convert.ToInt32(textBox2.Text);= new
TextBox[n, m];k2 = 200;l2 = 240;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j] = new TextBox();[i, j].Width = 25;[i, j].Location = new Point(50
+ k2, 50 + l2);[i, j].Text = Convert.ToString(Convert.ToInt32(a1[i, j].Text) -
Convert.ToInt32(a2[i, j].Text));.Add(a3[i, j]);+= 30;
}= 200;+= 30;
}.Enabled = false;.Enabled = false;.Enabled = false;
}(radioButton3.Checked == true)//умножение матриц
{= Convert.ToInt32(textBox1.Text);= Convert.ToInt32(textBox2.Text);= new
TextBox[n, m];k2 = 200;l2 = 240;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j] = new TextBox();[i, j].Width = 25;[i, j].Location = new Point(50
+ k2, 50 + l2);[i, j].Text = Convert.ToString(Convert.ToInt32(a1[i, j].Text) *
Convert.ToInt32(a2[i, j].Text));.Add(a3[i, j]);+= 30;
}= 200;+= 30;
}.Enabled = false;.Enabled = false;.Enabled = false;
}(radioButton4.Checked)//транспонирование матриц
{= Convert.ToInt32(textBox1.Text);= Convert.ToInt32(textBox2.Text);= new
TextBox[n, m];k2 = 200;l2 = 240;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j] = new TextBox();[i, j].Width = 25;[i, j].Location = new Point(50
+ k2, 50 + l2);[i, j].Text = Convert.ToString(Convert.ToInt32(a1[j,
i].Text));.Add(a3[i, j]);+= 30;
}= 200;+= 30;
}.Enabled = false;.Enabled = false;.Enabled = false;
}(radioButton5.Checked == true)//вычисление детерминанта
{= Convert.ToInt32(textBox1.Text);= Convert.ToInt32(textBox2.Text);d =
1;t = 1;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{(i == j) d *= Convert.ToInt32(a1[i, j].Text);(i == j) t *=
Convert.ToInt32(a2[i, j].Text);
}
}.Show(string.Format("Детерминант 1 матрицы = " +
d.ToString()), "Результат", MessageBoxButtons.OK,
MessageBoxIcon.Information);.Show(string.Format("Детерминант 2 матрицы =
" + t.ToString()), "Результат", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}(radioButton6.Checked == true)//вычисление следа
{= Convert.ToInt32(textBox1.Text);= Convert.ToInt32(textBox2.Text);s =
0;c = 0;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{(i == j) s += Convert.ToInt32(a1[i, j].Text);(i == j) c +=
Convert.ToInt32(a2[i, j].Text);
}
}.Show(string.Format("След 1 матрицы = " + s.ToString()),
"Результат", MessageBoxButtons.OK,
MessageBoxIcon.Information);.Show(string.Format("След 2 матрицы = " +
c.ToString()), "Результат", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}(radioButton7.Checked == true)//поиск элемента матрицы
{z;w;= Convert.ToInt32(textBox1.Text);= Convert.ToInt32(textBox2.Text);=
Convert.ToInt32(numericUpDown1.Text);= Convert.ToInt32(numericUpDown2.Text);p =
-1;r = -1;= z - 1;= w - 1;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{(z == i & w == j)= Convert.ToInt32(a1[i, j].Text);(z == i & w ==
j)= Convert.ToInt32(a2[i, j].Text);
}
}(p == -1) MessageBox.Show("Элемент с таким индексом не
существует", "Внимание", MessageBoxButtons.OK,
MessageBoxIcon.Error);MessageBox.Show(string.Format("Элемент 1 матрицы =
" + p.ToString()), "Результат", MessageBoxButtons.OK,
MessageBoxIcon.Information);(r != -1)
MessageBox.Show(string.Format("Элемент 2 матрицы = " + r.ToString()),
"Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
}.Enabled = false;.Enabled = true;
}{ MessageBox.Show("Вводите только числа!",
"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
}
Сохранение результата осуществляется в методах пользовательского класса Matrix. Создание объектов и вызов методов
данного класса закреплены за кнопкой меню "Сохранить". Реализация
данной функции представлена ниже.
private void saveToolStripMenuItem_Click(object sender, EventArgs
e)//сохранить файл
{sfd = new SaveFileDialog();.Filter = "txt files
(*.txt)|*.txt";.ShowDialog();sw = new StreamWriter(sfd.FileName);(int i =
0; i < a3.GetLength(0); i++)
{(int j = 0; j < a3.GetLength(1); j++)
{.WriteLine(a3[i, j].Text + " ");
}
}.Close();.Enabled = true;
}
Просмотр сохраненного результата осуществляется в методах
пользовательского класса Matrix.
Создание объектов и вызов методов данного класса закреплены за кнопкой меню
"Открыть". Реализация данной функции представлена ниже.
private void openToolStripMenuItem_Click(object sender, EventArgs
e)//открыть файл
{ofd = new OpenFileDialog();.ShowDialog();sr = new
StreamReader(ofd.FileName);(int i = 0; i < a3.GetLength(0); i++)
{(int j = 0; j < a3.GetLength(1); j++)
{[i, j].Text = sr.ReadLine();
}
}.Close();
}
Вызов справки осуществляется в методах пользовательского класса Matrix.
Создание объектов и вызов методов даного класса закреплены за кнопкой меню
"Справка". Реализация данной функции представлена ниже.
void helpToolStripMenuItem_Click_1(object sender, EventArgs e)//вызов
справки
{p = new Process();.StartInfo.FileName = helpProvider1.HelpNamespace;.Start();.WaitForExit();
}
Очистка текущих результатов для создания новых матриц осуществляется в
методах пользовательского класса Matrix.
Создание объектов и вызов методов данного класса закреплены за кнопкой меню
"Новая матрица". Реализация данной функции представлена ниже.
void новаяМатрицаToolStripMenuItem_Click(object sender,
EventArgs e)//очистить
{.Restart();
}
Выход из матричного редактора осуществляется в методах пользовательского
класса Matrix. Создание объектов и вызов методов
данного класса закреплены за кнопкой меню "Выход". Реализация данной
функции представлена ниже.
private void exitToolStripMenuItem_Click(object sender, EventArgs
e)//выход
{.Exit();
}
4.
Описание программного средства
.1 Общие сведения
Для того чтобы начать работу с программой, нужно запустить файл
"Матричный редактор.exe".
Его объем составляет 372 килобайта. Файл "Матричный редактор.exe" содержит три директивы: System.Windows.Forms,
System.IO, System.Diagnostics. Для функционирования программы
необходимо установить .Net Framework 3.0.
На этапе компиляции программы подключаются стандартная директива System.Windows.Forms
для возможности расположения и использования компонент на форме, директива System.IO, предназначенная для использования функций работы с файлами,
директива System.Diagnostics - использование функции загрузки сторонних
приложений.
.2 Функциональное назначение
Главным назначением программы является автоматизация процесса операций
над матрицами. Программное приложение должно автоматически выполнять выбранное
действие над матрицами.
При выполнении действия над матрицами проверяется выбранный пункт
действия и введенная размерность матриц и выполняется соответствующее действие
над матрицами указанной размерности.
В программе имеется возможность поиска по индексу элемента матрицы.
Данные сохраняются в виде файла.
Средства защиты, разграничения доступа к данным и сетевая поддержка не
предусмотрены.
5. Методика испытаний
.1 Технические требования
Минимальные системные требования к данному приложению представлены в
таблице 3.
Таблица 3 - Минимальные системные требования
Элементы конфигурации
|
Описание характеристик
|
Процессор
|
AMD/Intel
1200Ghz +
|
Оперативная память
|
256mb +
|
Видео адаптер
|
64mb +
|
Дисковой накопитель
|
25 Mb+
свободного места
|
Клавиатура
|
Совместимая с персональным
компьютером
|
Мышь
|
Совместимая с персональным
компьютером
|
Блок питания
|
200W +
|
Монитор
|
15 +
|
Операционная система
|
Windows 95\98\2000\XP\Vista
|
Рекомендуемые системные требования к данному приложению представлены в
таблице 4.
Таблица 4 - Рекомендуемые системные требования
Элементы
конфигурацииОписание характеристик
|
|
Процессор
|
AMD/Intel
2000Ghz +
|
1024mb +
|
Видео адаптер
|
128mb +
|
Дисковой накопитель
|
50 Mb+ свободного
места
|
Клавиатура
|
Совместимая с персональным
компьютером
|
Мышь
|
Совместимая с персональным
компьютером
|
Блок питания
|
300W +
|
Монитор
|
17 +
|
Операционная система
|
Windows XP\Vista
|
5.2 Функциональное тестирование
При функциональном тестировании осуществляется проверка каждого пункта
меню, каждой операции, которую выполняет приложение. Функциональное
тестирование должно гарантировать работу всех элементов управления в автономном
режиме.
Протестируем функцию заполнения матриц случайными числами и функцию
поиска.
Для того чтобы заполнить матрицы случайными числами необходимо ввести
количество строк и столбцов в матрицах, нажать кнопку "Создать", а
затем нажать кнопку "Генерировать". Реализация данной функций
представлена на рисунке 2.
Для поиска элемента матрицы необходимо выбрать из списка действий поиск,
ввести нужную строку и столбец и нажать кнопку главного меню
"Выполнить".
Реализация данной функций представлена на рисунках 3 и 4.
Рисунок 2 - Генерация случайными числами
Рисунок 3 - Результат поиска в 1 матрице
Рисунок 4 - Результат поиска во 2 матрице
В случаи ввода некорректных значений приложение выдаст сообщение об
ошибке.
Примеры таких сообщений представлены на рисунке 5-8.
Рисунок 5 - Сообщение об ошибке
Рисунок 6 - Сообщение об ошибке
Рисунок 7 - Сообщение об ошибке
Рисунок 8 - Сообщение об ошибке
6. Применение
.1 Назначение программы
Главным назначением программы является автоматизация операций над
матрицами в зависимости от таких показателей, как: размерность матриц, ввод
матриц, выбранное действие.
Разработанное приложение имеет понятный интерфейс, довольно просто в
применении, но в тоже время позволяет уменьшить затраты времени, используемые
при вычислении за счет автоматизации вычислительных процессов.
.2 Условия применения
Необходимо отметить, что данное программное средство не обладает
средствами, ограничивающими доступ к нему, а также средствами, препятствующими
свободному распространения программы. Для работы с приложением не требуется
установка дополнительных компонентов и специальных технических и программных ресурсов.
.3 Справочная система
Справочная система представляет собой описание возможных действий для
работы с программой. Файл справки с расширением hta поставляется вместе с программным продуктом, файл
справки связан с программой при помощи компонента HelpProvider и свойства HelpNamespace где указывается путь к месту
хранения файла. Для возможности вызова справки по нажатию клавиши F1 в свойствах формы установлен
параметр HelpButton = true.
Рисунок 9 - Справочная система программы
6.4 Демонстрационный пример использования
Полную проверку программы гарантирует исчерпывающее тестирование. Оно
требует проверить все наборы исходных данных, все варианты их обработки и
включает большое количество тестовых вариантов. Хорошим считают тестовый
вариант с высокой вероятностью обнаружения еще нераскрытой ошибки. Успешным
называют тест, который обнаруживает до сих пор не раскрытую ошибку.
На главной форме расположено меню с кнопками: "Новая матрица",
"Выполнить", "Открыть", "Сохранить",
"Справка", "Выход". Также на главной форме расположен GroupBox с действиями над матрицами:
"Сложение", "Вычитание", "Умножение",
"Транспонирование", "Вычисление детерминанта",
"Вычисление следа", "Поиск" и кнопки "Создать",
"Генерировать". Пример действий над матрицами с 4 строками и 4
столбцами представлен на рисунках 10-18.
Рисунок 10 - Сложение матриц
Рисунок 11 - Вычитание матриц
Рисунок 12 - Умножение матриц
Рисунок 13 - Транспонирование матриц
Рисунок 14 - Вычисление детерминанта 1 матрицы
Рисунок 15 - Вычисление детерминанта 2 матрицы
Рисунок 16 - Вычисление следа 1 матрицы
Рисунок 17 - Вычисление следа 2 матрицы
Рисунок 18 - Сохранение результата в файл
Рисунок 19 - Просмотр сохранённого результата
Рисунок 20 - Открытие сохранённого файла
Заключение
В рамках курсового проектирования по предмету "Конструирование
программ и языки программирования" было разработано программное приложение
"Матричный редактор", позволяющее автоматизировать процесс выполнения
действий над матрицами.
Программное средство имеет ряд достоинств: простой и понятный интерфейс,
небольшой объем памяти, занимаемый приложением на различных носителях
информации, удобно для быстрой обработки информации.
В программе реализованы такие задачи, как: выбор действия над матрицами,
выбор способа ввода матриц, возможность чтения информации из файла,
предоставление справочной информации. Данные сохраняются в виде файла.
Программа реализована в полном объеме и в соответствии с заданными
требованиями. Полностью отлажена и протестирована. Поставленные задачи выполнены.
Возможным недостатком является ограниченность размерности матриц, что и
планируется доработать в последующих версиях программы.
В процессе разработки программы использовался в большом объеме материал
по программированию, что способствовало закреплению наработанных навыков и
умений в этих интересных областях знаний.
Литература
1 Троелсен Э С# и платформа .Net. - М.: Питер, 2003
2 Багласова Т.Г. Методические указания по оформлению
курсовых и дипломных работ. -М.: ТБП, 2006
Павловская Т. С#. Программирование на языке высокого
уровня. Учебник для вузов. - М.: Питер, 2008
4 Леонтьев В.П. Новейшая энциклопедия персонального
компьютера. - М.: ОЛМА-ПРЕСС, 2002
5 Липсиц А.М. CASE-технологии. Современные методы и средства проектирования информационных
систем. - М.: Бином, 1999
6 Леоненков А. UML2 - М.: БХВ-Петербург, 2007
7 ГОСТ 2.106-96. ЕСКД. Текстовые документы
8 ГОСТ 19.401-2000. ЕСПД. Текст программы
Приложение
Текст программы
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;System.IO;System.Diagnostics;Matrix
{partial class Form1 : Form
{int n;int m;TextBox[,] a1;TextBox[,] a2;TextBox[,] a3;class
matrix
{int stroka;int stolbets;TextBox[,] a1;TextBox[,] a2;TextBox[,]
a3;matrix(int stroka, int stolbets)
{.stroka = stroka;.stolbets = stolbets;
}int Stroka
{{ return stroka; }{ stroka = value; }
}int Stolbets
{{ return stolbets; }{ stolbets = value; }
}
}Form1()
{();s = Application.StartupPath;.HelpNamespace = s +
"\\Help\\help_tmphtm\\index.hta";
} void button1_Click(object sender, EventArgs e)//создание
матриц
{
{= Convert.ToInt32(textBox1.Text);=
Convert.ToInt32(textBox2.Text);(n >= 5)
{ MessageBox.Show("Превышено допустимое количество строк
в матрице!", "Внимание",
MessageBoxButtons.OK,MessageBoxIcon.Error); }(m >= 5)
{ MessageBox.Show("Превышено допустимое количество
столбцов в матрице!", "Внимание",
MessageBoxButtons.OK,MessageBoxIcon.Error); }= new TextBox[n, m];= new
TextBox[n, m];k = 30;l = 90;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j] = new TextBox();[i, j].Width = 25;[i, j].Location =
new Point(50 + k, 50 + l);.Add(a1[i, j]);+= 30;
}= 30;+= 30;
}k1 = 30;l1 = 240;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j] = new TextBox();[i, j].Width = 25;[i, j].Location =
new Point(50 + k1, 50 + l1);.Add(a2[i, j]);+= 30;
}= 30;+= 30;
}.Enabled = true;.Enabled = true;
новаяМатрицаToolStripMenuItem.Enabled = true;.Enabled =
false;.Enabled = true;.Enabled = false;.Enabled = false;
}{ MessageBox.Show("Вводите числа в диапазоне от 1 до
4", "Внимание", MessageBoxButtons.OK,MessageBoxIcon.Warning); }
}void button2_Click(object sender, EventArgs e)//заполнение
матриц случайными числами
{x = new Random();(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j].Text = Convert.ToString(x.Next(-49, 499));
}
}(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j].Text = Convert.ToString(x.Next(-49, 499));
}
}.Enabled = false;
}void fileToolStripMenuItem_Click(object sender, EventArgs e)
{
{(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{(i>=100)
{ MessageBox.Show("Вводите только числа!",
"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Error); }(j>=100)
{ MessageBox.Show("Вводите только числа!",
"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Error); }
}
}(radioButton1.Checked == true)//сложение матриц
{= Convert.ToInt32(textBox1.Text);=
Convert.ToInt32(textBox2.Text);= new TextBox[n, m];k2 = 200;l2 = 240;(int i =
0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j] = new TextBox();[i, j].Width = 25;[i, j].Location =
new Point(50 + k2, 50 + l2);[i, j].Text =
Convert.ToString(Convert.ToInt32(a1[i, j].Text) + Convert.ToInt32(a2[i,
j].Text));.Add(a3[i, j]);+= 30;
}= 200;+= 30;
}.Enabled = false;.Enabled = false;.Enabled = false;
}(radioButton2.Checked == true)//вычитание матриц
{= Convert.ToInt32(textBox1.Text);=
Convert.ToInt32(textBox2.Text);= new TextBox[n, m];k2 = 200;l2 = 240;(int i =
0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j] = new TextBox();[i, j].Width = 25;[i, j].Location =
new Point(50 + k2, 50 + l2);[i, j].Text =
Convert.ToString(Convert.ToInt32(a1[i, j].Text) - Convert.ToInt32(a2[i,
j].Text));.Add(a3[i, j]);+= 30;
}= 200;+= 30;
}.Enabled = false;.Enabled = false;.Enabled = false;
}(radioButton3.Checked == true)//умножение матриц
{= Convert.ToInt32(textBox1.Text);=
Convert.ToInt32(textBox2.Text);= new TextBox[n, m];k2 = 200;l2 = 240;(int i =
0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j] = new TextBox();[i, j].Width = 25;[i, j].Location =
new Point(50 + k2, 50 + l2);[i, j].Text = Convert.ToString(Convert.ToInt32(a1[i,
j].Text) * Convert.ToInt32(a2[i, j].Text));.Add(a3[i, j]);+= 30;
}= 200;+= 30;
}.Enabled = false;.Enabled = false;.Enabled = false;
}(radioButton4.Checked)//транспонирование матриц
{= Convert.ToInt32(textBox1.Text);= Convert.ToInt32(textBox2.Text);=
new TextBox[n, m];k2 = 200;l2 = 240;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{[i, j] = new TextBox();[i, j].Width = 25;[i, j].Location =
new Point(50 + k2, 50 + l2);[i, j].Text = Convert.ToString(Convert.ToInt32(a1[j,
i].Text));.Add(a3[i, j]);+= 30;
}= 200;+= 30;
}.Enabled = false;.Enabled = false;.Enabled = false;
}(radioButton5.Checked == true)//вычисление детерминанта
{= Convert.ToInt32(textBox1.Text);=
Convert.ToInt32(textBox2.Text);d = 1;t = 1;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{(i == j) d *= Convert.ToInt32(a1[i, j].Text);(i == j) t *=
Convert.ToInt32(a2[i, j].Text);
}
}.Show(string.Format("Детерминант 1 матрицы = " +
d.ToString()), "Результат", MessageBoxButtons.OK,
MessageBoxIcon.Information);.Show(string.Format("Детерминант 2 матрицы =
" + t.ToString()), "Результат", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}(radioButton6.Checked == true)//вычисление следа
{= Convert.ToInt32(textBox1.Text);=
Convert.ToInt32(textBox2.Text);s = 0;c = 0;(int i = 0; i < n; i++)
{(int j = 0; j < m; j++)
{(i == j) s += Convert.ToInt32(a1[i, j].Text);(i == j) c +=
Convert.ToInt32(a2[i, j].Text);
}
}.Show(string.Format("След 1 матрицы = " +
s.ToString()), "Результат", MessageBoxButtons.OK,
MessageBoxIcon.Information);.Show(string.Format("След 2 матрицы = " +
c.ToString()), "Результат", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}(radioButton7.Checked == true)//поиск элемента матрицы
{z;w;= Convert.ToInt32(textBox1.Text);=
Convert.ToInt32(textBox2.Text);= Convert.ToInt32(numericUpDown1.Text);=
Convert.ToInt32(numericUpDown2.Text);p = -1;r = -1;= z - 1;= w - 1;(int i = 0;
i < n; i++)
{(int j = 0; j < m; j++)
{(z == i & w == j)= Convert.ToInt32(a1[i, j].Text);(z ==
i & w == j)= Convert.ToInt32(a2[i, j].Text);
}
}(p == -1) MessageBox.Show("Элемент с таким индексом не
существует", "Внимание", MessageBoxButtons.OK,
MessageBoxIcon.Error);MessageBox.Show(string.Format("Элемент 1 матрицы =
" + p.ToString()), "Результат", MessageBoxButtons.OK,
MessageBoxIcon.Information);(r != -1)
MessageBox.Show(string.Format("Элемент 2 матрицы = " + r.ToString()),
"Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
}.Enabled = false;.Enabled = true;
}{ MessageBox.Show("Вводите только числа!",
"Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
}void выходToolStripMenuItem_Click(object sender, EventArgs
e)//выход
{.Exit();
}void openToolStripMenuItem_Click(object sender, EventArgs
e)//открыть файл
{ofd = new OpenFileDialog();.ShowDialog();sr = new
StreamReader(ofd.FileName);(int i = 0; i < a3.GetLength(0); i++)
{(int j = 0; j < a3.GetLength(1); j++)
{[i, j].Text = sr.ReadLine();
}
}.Close();
}void saveToolStripMenuItem_Click(object sender, EventArgs
e)//сохранить файл
{sfd = new SaveFileDialog();.Filter = "txt files
(*.txt)|*.txt";.ShowDialog();sw = new StreamWriter(sfd.FileName);(int i =
0; i < a3.GetLength(0); i++)
{(int j = 0; j < a3.GetLength(1); j++)
{.WriteLine(a3[i, j].Text + " ");
}
}.Close();.Enabled = true;
}void exitToolStripMenuItem_Click(object sender, EventArgs
e)//выход
{.Exit();
}void helpToolStripMenuItem_Click_1(object sender, EventArgs
e)//вызов справки
{p = new Process();.StartInfo.FileName =
helpProvider1.HelpNamespace;.Start();.WaitForExit();
}void новаяМатрицаToolStripMenuItem_Click(object sender,
EventArgs e)//очистить
{.Restart();
}
}
}