Разработка и описание программы на заданную тематику

Автор работы: Пользователь скрыл имя, 31 Марта 2014 в 02:51, задача

Краткое описание

•Разработать программу по заданной тематике в среде 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(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;

}

}

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.ShowDialog() == DialogResult.OK)&&((st = TxtSaveFileDialog.OpenFile()) != null))

{

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.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("Ошибка в параметре поиска!");

}

}

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("Близнецы: " + ValueList[i - 1] + ", " + ValueList[i] + Environment.NewLine);

}

}

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

Информация о работе Разработка и описание программы на заданную тематику