Разработка и описание программы на заданную тематику
Задача, 31 Марта 2014, автор: пользователь скрыл имя
Краткое описание
•Разработать программу по заданной тематике в среде Microsoft Visual;
•Составить описание разработанной программы, использую метрику Холстеда, три критерия, метрику Маккейба, функциональные указатели, модели Джелински – Моранды и Миллса.
Содержание
1. Формулировка задания 3
2. Описание программы 4
2.1 Постановка задачи 4
2.2 Алгоритм задачи 5
2.3 Исходный текст программы 6
2.4 Виды основных окон программы 13
3. Оценка характеристик программы на основе метрик Холстеда 16
4. Оценка структурной сложности программы на основе трех критериев и метрики Маккейба. 34
5. Оценка характеристик программы на основе функциональных указателей 39
6. Оценка надежности программы 42
6.1 Оценка надежности программы на основе модели Джелински – Моранды 42
6.2 Оценка надежности программы на основе модели Миллса 44
7. Выводы 46
8. Литература 47
Вложенные файлы: 1 файл
Документация_Новикова_372_КДЗ.docx
— 258.06 Кб (Скачать файл)
Научный исследовательский университет – Высшая школа экономики
Факультет Бизнес – информатики
Контрольное домашнее задание по предмету:
«Стандартизация, сертификация и управление качеством программного обеспечения»
на тему
«Разработка и описание программы на заданную тематику»
Вариант №140
Работу выполнила:
Новикова Ю.Д.
Группа 372
Подпись____________ Дата сдачи: 01.06.2012
Москва, 2012
Оглавление
1. Формулировка задания
- Разработать программу по заданной тематике в среде Microsoft Visual;
- Составить описание разработанной программы, использую метрику Холстеда, три критерия, метрику Маккейба, функциональные указатели, модели Джелински – Моранды и Миллса.
2. Описание программы
2.1 Постановка задачи
№1: Сформировать файл в формате ".txt" с именем "IN.txt" с данными о мощности двигателя (в лошадиных силах) и стоимости двадцати марок легковых автомобилей. Вывести на экран характеристики каждого из автомобилей, у которых мощность двигателя не превышает заданную мощность или стоимость (задаются с клавиатуры по запросу программы).
№2: Простое число - натуральное число, большее единицы, имеющее только два делителя: единицу и само это число. Числа-близнецы - два нечетных простых числа, разность которых равна 2 (например: 11 и 13). Вывести на экран все числа - близнецы из диапазона от K до M. Диапазон вводится с клавиатуры по запросу программы. Результат вывести на экран.
Программы №1 и №2 должны быть объединены в одну с выбором решаемой задачи из главного окна программы.
Ввод данных должен осуществляться с клавиатуры.
2.2 Алгоритм задачи
Алгоритм задачи представим в форме Microsoft Visio
2.3 Исходный текст программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace KDZ
{
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Values vs = new Values();
Main mf = new Main(ref vs);
TaskForm tf = new TaskForm(ref vs);
do
{
mf.ShowDialog();
tf.ShowDialog();
} while (vs.StateID != 0);
}
}
/// <summary>
/// Класс TaskForm наследует класс Form
/// </summary>
public partial class TaskForm : Form
{
Values vs;
public TaskForm(ref Values vs)
{
this.vs = vs;
InitializeComponent();
}
/// <summary>
/// Метод запуска формы задачи
/// </summary>
private void TaskForm_Load(object sender, EventArgs e)
{
TaskControl.TabPages.Remove(SecondPage);
TaskControl.TabPages.Remove(FirstPage);
Price.Checked = true;
switch (vs.OperationID)
{
case 1:
TaskControl.TabPages.Add(FirstPage);
break;
case 2:
TaskControl.TabPages.Add(SecondPage);
break;
}
}
/// <summary>
/// Метод закрытия формы задачи
/// </summary>
private void TaskForm_FormClosed(object sender, FormClosedEventArgs e)
{
switch (MessageBox.Show("Вы хотите продолжить тестирование программы, выбрав другую задачу?", "Важное предупреждение!", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{
case DialogResult.Yes:
vs.StateID = 1;
break;
case DialogResult.No:
vs.StateID = 0;
break;
}
}
//----------------------------------------------------------------------------------------
//Все для 1-ой задачи. Начало
StreamWriter sw;
StreamReader sr;
Stream st;
struct Car
{
/// <summary>
/// Объявляем атрибуты для автомобилей
/// </summary>
public string Name;
public int Price;
public int Power;
public Car(string Name, int Price, int Power)
{
this.Name = Name;
this.Power = Power;
this.Price = Price;
}
}
List<Car> CarList = new List<Car>();
/// <summary>
/// Метод выбора файла для поиска
/// </summary>
private void CreateButton_Click(object sender, EventArgs e)
{
TxtSaveFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
if ((TxtSaveFileDialog.ShowDialog() == DialogResult.OK)&&((st = TxtSaveFileDialog.OpenFile())
!= null))
{
sw = new StreamWriter(st);
sw.Write(MainBox.Text);
sw.Close();
}
}
/// <summary>
/// Метод поиска автомобиля в выбранном файле по заданным параметрам
/// </summary>
private void FindButton_Click(object sender, EventArgs e)
{
int CheckValue;
string str;
string Name = "";
int Power = 0;
int Price = 0;
if (int.TryParse(ValueBox.Text, out CheckValue))
{
if ((TxtOpenFileDialog.ShowDialog() == DialogResult.OK) && ((st = TxtOpenFileDialog.OpenFile())
!= null))
{
sr = new StreamReader(st);
int paramID = 0;
while ((str = sr.ReadLine()) != null)
{
switch (paramID)
{
case 0:
Name = str;
paramID++;
break;
case 1:
Power = int.Parse(str.Replace(" ", "").Substring(9, str.Length - 10));
paramID++;
break;
case 2:
Price = int.Parse(str.Replace(" ", "").Substring(10, str.Length - 11));
CarList.Add(new Car(Name,Price,Power));
paramID = 0;
break;
}
}
Search(CheckValue);
CarList.Clear();
}
}
//Если ошиблись в параметрах поиска
else
{
MessageBox.Show("Ошибка в параметре поиска!");
}
}
/// <summary>
/// Метод вывода найденной информации об автомобиле
/// </summary>
private void Search(int CheckValue)
{
MainBox.Clear();
for (int i = 0; i < CarList.Count; i++)
{
//Если ищем автомобили по цене
if (Price.Checked == true)
{
if (CarList[i].Price <= CheckValue)
{
MainBox.AppendText("Марка автомобиля: " + CarList[i].Name + Environment.NewLine +
"Мощность: " + CarList[i].Power + Environment.NewLine + "Цена: " + CarList[i].Price + Environment.NewLine);
}
}
else
//Если ищем автомобили по мощности
{
if (CarList[i].Power <= CheckValue)
{
MainBox.AppendText("Марка автомобиля: " + CarList[i].Name + Environment.NewLine +
"Мощность: " + CarList[i].Power + Environment.NewLine +
"Цена: " + CarList[i].Price + Environment.NewLine);
}
}
}
//Если по заданным параметрам ничего не найдено
if (MainBox.Text == "")
{
MainBox.AppendText("Ничего не найдено!");
}
}
//Все для 1-ой задачи. Конец.
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
//Все для 2-ой задачи. Начало.
List<int> ValueList = new List<int>();
private void ProcessButton_Click(object sender, EventArgs e)
{
int MinValue; //Минимальное значение интервала
int MaxValue;// Максимальное значение интервала
OutputBox.Clear();
if ((int.TryParse(MinBox.Text, out MinValue)) && (int.TryParse(MaxBox.Text, out MaxValue)))
{
if (MinValue < MaxValue)
{
//Создаем массив простых чисел из заданного промежутка
for (int i = MinValue; i <= MaxValue; i++)
{
for (int b = 2; b < i; b++)
{
if (i % b == 0)
{
break;
}
if ((b == i - 1) || (b > Math.Sqrt(i)))
{
ValueList.Add(i);
break;
}
}
}
//Выводим найденные числа - близнецы из заданного промежутка
for (int i = 1; i < ValueList.Count; i++)
{
if (ValueList[i] - ValueList[i - 1] == 2)
{
OutputBox.AppendText("Близнецы: "
+ ValueList[i - 1] + ", " + ValueList[i]
+ Environment.NewLine);
}
}
// Если в указанном интервале нет чисел - близнецов
if (OutputBox.Text == "")
{
OutputBox.AppendText("Ничего не найдено!");
}
ValueList.Clear();
}
}
//Если ошиблись при вводе параметров
else
{
MessageBox.Show("Ошибка при вводе параметров!");
}
}
//Все для 2-ой задачи. Конец.
//-------------------------------------------------------------------------------------------------
}
public class Values
{
//Отвечает за выбор задачи
private int OpID;
//Отвечает за
продолжение или не продолжение
работы с программой
private int StID;
public int OperationID
{
get { return OpID; }
set
{
OpID = value;
}
}
public int StateID
{
get { return StID; }
set
{
StID = value;
}
}
public Values()
{
OpID = 1;
StID = 0;
}
}
public partial class Main : Form
{
Values vs;
public Main(ref Values vs)
{
InitializeComponent();
this.vs = vs;
}
private void FirstTaskButton_Click(object sender, EventArgs e)
{
vs.OperationID = 1;
Hide();
}
private void SecondButton_Click(object sender, EventArgs e)
{
vs.OperationID = 2;
Hide();
}
private void Main_FormClosed(object sender, FormClosedEventArgs e)
{
System.Environment.Exit(0);
}
}
}
2.4 Виды основных окон программы
Выбор программы:
Задача №1:
Результат сортировки автомобилей по мощности, не превышающей 220 л.с.:
Результат сортировки автомобилей по цене, не превышающей 19 000:
Задача №2
Результат поиска чисел – близнецов на интервале от 20 до 50:
3. Оценка характеристик программы
на основе метрик Холстеда
№ строки |
Строка программы |
using System; | |
using System.Collections.Generic; | |
using System.ComponentModel; | |
using System.Data; | |
using System.Drawing; | |
using System.Linq; | |
using System.Text; | |
using System.Windows.Forms; | |
using System.IO; | |
namespace KDZ | |
{ | |
static class Program | |
{ | |
[STAThread] | |
static void Main() | |
{ | |
Values vs = new Values(); | |
Main mf = new Main(ref vs); | |
TaskForm tf = new TaskForm(ref vs); | |
do | |
{ | |
mf.ShowDialog(); | |
tf.ShowDialog(); | |
} | |
while (vs.StateID != 0); | |
} | |
} | |
public partial class TaskForm : Form | |
{ | |
Values vs; | |
public TaskForm(ref Values vs) | |
{ | |
this.vs = vs; | |
InitializeComponent(); | |
{ | |
private void TaskForm_Load(object sender, EventArgs e) | |
{ | |
TaskControl.TabPages.Remove( | |
TaskControl.TabPages.Remove( | |
Price.Checked = true; | |
switch (vs.OperationID) | |
{ | |
case 1: | |
TaskControl.TabPages.Add( | |
break; | |
case 2: | |
TaskControl.TabPages.Add( | |
break; | |
} | |
} | |
private void TaskForm_FormClosed(object sender, FormClosedEventArgs e) | |
{ | |
switch (MessageBox.Show("Вы хотите продолжить тестирование программы, выбрав другую задачу?", "Важное предупреждение!", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) | |
{ | |
case DialogResult.Yes: | |
vs.StateID = 1; | |
break; | |
case DialogResult.No: | |
vs.StateID = 0; | |
break; | |
} | |
} | |
StreamWriter sw; | |
StreamReader sr; | |
Stream st; | |
struct Car | |
{ | |
public string Name; | |
public int Price; | |
public int Power; | |
public Car(string Name, int Price, int Power) | |
{ | |
this.Name = Name; | |
this.Power = Power; | |
this.Price = Price; | |
} | |
} | |
List<Car> CarList = new List<Car>(); | |
private void CreateButton_Click(object sender, EventArgs e) | |
{ | |
TxtSaveFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; | |
if ((TxtSaveFileDialog. | |
{ | |
sw = new StreamWriter(st); | |
sw.Write(MainBox.Text); | |
sw.Close(); | |
} | |
} | |
private void FindButton_Click(object sender, EventArgs e) | |
{ | |
int CheckValue; | |
string str; | |
string Name = ""; | |
int Power = 0; | |
int Price = 0; | |
if (int.TryParse(ValueBox.Text, out CheckValue)) | |
{ | |
if ((TxtOpenFileDialog. | |
{ | |
sr = new StreamReader(st); | |
int paramID = 0; | |
while ((str = sr.ReadLine()) != null) | |
{ | |
switch (paramID) | |
{ | |
case 0: | |
Name = str; | |
paramID++; | |
break; | |
case 1: | |
Power = int.Parse(str.Replace(" ", "").Substring(9, str.Length - 10)); | |
paramID++; | |
break; | |
case 2: | |
Price = int.Parse(str.Replace(" ", "").Substring(10, str.Length - 11)); | |
CarList.Add(new Car(Name,Price,Power)); | |
paramID = 0; | |
break; | |
} | |
} | |
Search(CheckValue); | |
CarList.Clear(); | |
} | |
} | |
else | |
{ | |
MessageBox.Show("Ошибка в параметре поиска!"); | |
} | |
} | |
private void Search(int CheckValue) | |
{ | |
MainBox.Clear(); | |
for (int i = 0; i < CarList.Count; i++) | |
{ | |
if (Price.Checked == true) | |
{ | |
if (CarList[i].Price <= CheckValue) | |
{ | |
MainBox.AppendText("Марка автомобиля: " + CarList[i].Name + Environment.NewLine + "Мощность: " + CarList[i].Power + Environment.NewLine + "Цена: " + CarList[i].Price + Environment.NewLine); | |
} | |
} | |
else | |
{ | |
if (CarList[i].Power <= CheckValue) | |
{ | |
MainBox.AppendText("Марка автомобиля: " + CarList[i].Name + Environment.NewLine + "Мощность: " + CarList[i].Power + Environment.NewLine + "Цена: " + CarList[i].Price + Environment.NewLine); | |
} | |
} | |
} | |
if (MainBox.Text == "") | |
{ | |
MainBox.AppendText("Ничего не найдено!"); | |
} | |
} | |
List<int> ValueList = new List<int>(); | |
private void ProcessButton_Click(object sender, EventArgs e) | |
{ | |
int MinValue; | |
int MaxValue; | |
OutputBox.Clear(); | |
if ((int.TryParse(MinBox.Text, out MinValue)) && (int.TryParse(MaxBox.Text, out MaxValue))) | |
{ | |
if (MinValue < MaxValue) | |
{ | |
for (int i = MinValue; i <= MaxValue; i++) | |
{ | |
for (int b = 2; b < i; b++) | |
{ | |
if (i % b == 0) | |
{ | |
break; | |
} | |
if ((b == i - 1) || (b > Math.Sqrt(i))) | |
{ | |
ValueList.Add(i); | |
break; | |
} | |
} | |
} | |
for (int i = 1; i < ValueList.Count; i++) | |
{ | |
if (ValueList[i] - ValueList[i - 1] == 2) | |
{ | |
OutputBox.AppendText(" | |
} | |
} | |
if (OutputBox.Text == "") | |
{ | |
OutputBox.AppendText("Ничего не найдено!"); | |
} | |
ValueList.Clear(); | |
} | |
} | |
else | |
{ | |
MessageBox.Show("Ошибка при вводе параметров!"); | |
} | |
} | |
} | |
public class Values | |
{ | |
private int OpID; | |
private int StID; | |
public int OperationID | |
{ | |
get { return OpID; } | |
set | |
{ | |
OpID = value; | |
} | |
} | |
public int StateID | |
{ | |
get { return StID; } | |
set | |
{ | |
StID = value; | |
} | |
} | |
public Values() | |
{ | |
OpID = 1; | |
StID = 0; | |
} | |
} | |
public partial class Main : Form | |
{ | |
Values vs; | |
public Main(ref Values vs) | |
{ | |
InitializeComponent(); | |
this.vs = vs; | |
} | |
private void FirstTaskButton_Click(object sender, EventArgs e) | |
{ | |
vs.OperationID = 1; | |
Hide(); | |
} | |
private void SecondButton_Click(object sender, EventArgs e) | |
{ | |
vs.OperationID = 2; | |
Hide(); | |
} | |
private void Main_FormClosed(object sender, FormClosedEventArgs e) | |
{ | |
System.Environment.Exit(0); | |
} | |
} | |
} |
Таблица 1. Словарь операторов и операций программы
№ п/п |
Операторы, операции |
Количество повторений |
1 |
using |
9 |
2 |
namespace |
1 |
3 |
class |
4 |
4 |
Static |
2 |
5 |
void |
1 |
6 |
Public |
12 |
7 |
…Parse() |
5 |
8 |
...ReadLine() |
1 |
9 |
If…else |
13 |
10 |
; |
102 |
11 |
, |
24 |
12 |
* |
6 |
13 |
= |
52 |
14 |
. |
102 |
15 |
{} |
52 |
16 |
() |
100 |
17 |
“” |
44 |
18 |
: |
16 |
19 |
+ |
26 |
20 |
<= |
3 |
21 |
> |
5 |
22 |
&& |
3 |
23 |
partial |
2 |
24 |
Private |
11 |
25 |
++ |
6 |
26 |
< |
8 |
27 |
do…while |
1 |
28 |
While() |
1 |
29 |
- |
6 |
30 |
== |
8 |
31 |
[] |
13 |
32 |
Environment.NewLine() |
7 |
33 |
new |
8 |
34 |
ref |
4 |
35 |
!= |
4 |
36 |
break |
9 |
37 |
object |
8 |
38 |
TaskControl.TabPages.Remove |
2 |
39 |
...Add() |
4 |
40 |
Price.Checked |
2 |
41 |
true |
2 |
42 |
case |
7 |
43 |
Switch() |
3 |
44 |
MessageBox.Show() |
3 |
45 |
MessageBoxButtons.YesNo |
1 |
46 |
MessageBoxIcon.Question |
1 |
47 |
DialogResult.Yes |
1 |
48 |
DialogResult.No |
1 |
49 |
struct |
1 |
50 |
string |
4 |
51 |
substring |
2 |
52 |
int |
26 |
53 |
this |
5 |
54 |
<> |
2 |
55 |
TxtSaveFileDialog.Filter |
1 |
56 |
…ShowDialog() |
4 |
57 |
DialogResult.OK |
2 |
58 |
...OpenFile() |
2 |
59 |
null |
3 |
60 |
str.Replace() |
2 |
61 |
str.Length |
2 |
62 |
sw.Write() |
1 |
63 |
sw.Close() |
1 |
64 |
int.TryParse |
3 |
65 |
...Text |
6 |
66 |
out |
3 |
67 |
% |
1 |
68 |
|| |
1 |
69 |
Math.Sqrt |
1 |
70 |
Search |
2 |
71 |
…Clear() |
4 |
72 |
for |
4 |
73 |
…Count |
2 |
74 |
…AppendText() |
5 |
75 |
get |
2 |
76 |
set |
2 |
77 |
return |
2 |
78 |
value |
2 |
79 |
Hide() |
2 |
80 |
…Exit() |
1 |
Всего |
807 | |