Помощь в написании студенческих работ
Антистрессовый сервис

Разработка специализированного программного модуля для решения указанной задачи

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Министерство образования Республики Беларусь Министерство образования и науки Российской Федерации Государственное учреждение высшего профессионального образования БЕЛОРУССКО-РОССИЙСКИЙ УНИВЕРСИТЕТ Кафедра «Автоматизированные системы управления». Выбор технологии, языка и среды программирования В соответствие с заданием, языком программирования был выбран C#, а средой программирования — Microsoft… Читать ещё >

Разработка специализированного программного модуля для решения указанной задачи (реферат, курсовая, диплом, контрольная)

Министерство образования Республики Беларусь Министерство образования и науки Российской Федерации Государственное учреждение высшего профессионального образования

«БЕЛОРУССКО-РОССИЙСКИЙ УНИВЕРСИТЕТ»

Кафедра «Автоматизированные системы управления»

Курсовая работа по дисциплине «Технологии программирования»

Разработка специализированного программного модуля для решения указанной задачи

051.23 01 02.81 425.03.81−01

  • Введение
  • 1 Выбор технологии, языка и среды программирования
  • 2 Анализ и уточнение требований к программному продукту
    • 2.1 Анализ процесса обработки информации и выбор структур данных для ее хранения
    • 2.2 Выбор методов и разработка основных алгоритмов решения задачи
  • 3 Разработка структурной схемы программного продукта
  • 4 Проектирование интерфейса пользователя
    • 4.1 Построение графа диалога
    • 4.2 Разработка форм ввода-вывода информации
  • 5 Выбор стратегии тестирования и разработка тестов.
  • Заключение
  • Список использованных источников
  • Приложение А. Техническое задание
  • Приложение Б. Руководство пользователя
  • Приложение В. Код программы

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

В разделе «Выбор технологии, языка и среды программирования» выбор средств реализации.

В разделе «Анализ и уточнение требований к программному продукту» проводится выбор структуры данных для хранения информации, метода и разработки основных алгоритмов решения задачи.

В разделе «Разработка структурной схемы программного продукта» приведена структурная схема программы.

В разделе «Проектирование интерфейса пользователя» производится построение графа диалога, а также разработка форм ввода-вывода информации.

В разделе «Выбор стратегии тестирования и разработка тестов» проводится тестирование нашей программы при различных исходных значениях.

Приложения содержат код программы и основные программные документы — руководство программиста и техническое задание, разработанные в соответствии с требованиями стандартов.

1 Выбор технологии, языка и среды программирования В соответствие с заданием, языком программирования был выбран C#, а средой программирования — Microsoft Visual Studio 2010. Для реализации программы использовалось объектно-ориентированное программирование.

Объектно-ориентированное программирование (ООП) — парадигма программирования, основанная на представлении предметной области (и/или проблемной области) в виде системы взаимосвязанных абстрактных объектов и их реализаций.

Основной проблемой процедурного программирования является то, что данные и функции их обработки не были связаны. Это вносило некоторую сложность в разработку программы. С появлением концепции ООП появилась новая структура данных — Класс. Это по сути дела тип данных, внешне похожий на структуру (в языке Си) или запись (в Pascal-е), в котором кроме данных (свойства) также содержались функции их обработки (методы). При этом появляются такие свойства как наследование, полиморфизм и инкапсуляция.

2 Анализ и уточнение требований к программному продукту

2.1 Анализ процесса обработки информации и выбор структур данных для ее хранения

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

Для хранения информации была выбрана структура данных типа бинарное дерево. Бинарное (двоичное) дерево — это упорядоченное дерево, каждая вершина которого имеет не более двух поддеревьев, причем для каждого узла выполняется правило: в левом поддереве содержатся, только ключи, имеющие значения, меньшие, чем значение данного узла, а в правом поддереве содержатся, только ключи, имеющие значения, большие, чем значение данного узла. Бинарное дерево является рекурсивной структурой, поскольку каждое его поддерево само является бинарным деревом и, следовательно, каждый его узел в свою очередь является корнем дерева.

2.2 Выбор методов и разработка основных алгоритмов решения задачи

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

· обеспечивать начальное формирование картотеки в виде двоичного дерева

· производить вывод всей картотеки

· вводить номер телефона и время разговора

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

3 Разработка структурной схемы программного продукта

· Главное меню — функция меню, выбор пункта меню в зависимости от того, какое действие необходимо произвести;

· Добавление элемента — добавление номера и время разговора в «бинарное дерево»

· Вывести всю картотеку — производит вывод картотеки по номерам телефонов в порядке возрастания.

· Извещение на оплату — по указанному номеру телефона создаёт файл под именем данного телефона и записывает информацию по оплате телефонного звонка.

4 Проектирование интерфейса пользователя

4.1 Построение графа диалога

Для работы с программой было реализовано меню, состоящее из 4 методов класса MenuDialog:

MainDialog — главное меню, через которое осуществляется выбор необходимого действия. Имеет 3 варианта действий:

1) Переход в меню добавления нового номера.

2) Переход в меню для вывода всей картотеки.

3) Выход из программы.

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

SearchDialog — меню вывода картотеки. Производит вывод картотеки и предоставляет пользователю 2 варианта последующих действий:

1) Переход в меню для создания извещения по оплате телефонного разговора.

2) Выход в главное меню.

PricePhoneDialog — меню создания извещения по оплате телефонного разговора. Создаёт файл <�номер телефона>.txt, в котором содержится:

· Имя абонента;

· Номер телефона;

· Время разговора;

· Цена за минуту разговора;

· Итого к оплате.

После создания файла с извещением, пользователь остаётся в меню SearchDialog.

4.2 Разработка форм ввода-вывода информации

В программе осуществляется 2 способа ввода данных:

1) Ввод при добавлении нового абонента. Из главного меню вызывается метод NewPhoneDialog класса MenuDialog. Для добавления абонента необходимо заполнить следующие поля:

· Имя абонента (до 22 знаков);

· Номер телефона (формат ввода — цифры, 7 знаков);

· Время разговора (формат ввода — мин: сек).

·

Рисунок 3 — Добавление нового абонента

Контроль ошибок:

В случае неверного ввода номера телефона, либо времени разговора, на экран выдаётся сообщение об ошибке ввода.

Рисунок 4 — Сообщение об ошибке ввода

2) Ввод данных при создании извещении на оплату телефонного разговора. Из меню SearchDialog вызывается метод PricePhoneDialog. Для создания извещения, необходимо:

· Указать номер телефона (формат ввода — цифры, 7 знаков);

· Ввести цену за минуту разговора (формат ввода — цифры).

Рисунок 5 — Создание извещения на оплату

Контроль ошибок:

В случае неверного ввода номера телефона, либо цены за минуту разговора, на экран выдаётся сообщение об ошибке ввода.

Рисунок 6 — Сообщение об ошибке ввода при создании извещения на оплату

5 Выбор стратегии тестирования и разработка тестов Контрольный пример — это специальные данные, являющиеся исходными для программного алгоритма и отвечающие требованиям по объему и составу вводимой информации, которая должна соответствовать поставленной задаче. Для того чтобы подтвердить работоспособность системы необходимо провести тестирование, и показать реализацию основных функций.

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

Добавим нового абонента:

· Имя абонента: Льдов Анатолий

· Номер телефона: 2 425 017

· Время разговора: 21:07

·

Рисунок 7 — Успешное создание новой записи Как видно из рисунка 7 создание новой записи прошло успешно.

Добавим ещё несколько записей и выведем картотеку путём нажатия «2» в главном меню. Картотека выведена в алфавитном порядке. Все данные соответствуют исходным данным, введённым при добавлении записей. Попытаемся создать извещение на оплату. Выберем «1» и введём номер 242−50−17. Цена минуты разговора равняется 2 рублям. Вводим «2». После окончания ввода данных, на экране отобразиться сообщение (рисунок 9) об успешном создании извещения под именем 2 425 017. txt (рисунок 10).

Рисунок 9 — Вывод картотеки и успешное создание извещения на оплату Рисунок 10 — Извещение на оплату. Файл 2 425 017. txt

В результате произведённых действий было проверена работоспособность добавления новой записи, вывод картотеки и создание извещения на оплату. Так как при корректном вводе данных на экран не было выведено сообщений об ошибках, испытание можно считать успешным.

Заключение

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

При реализации этой задачи были получены навыки применения технологии объектно-ориентированного программирования. Разработанный программный продукт может быть применен в учебных целях.

Список использованных источников

1. C#: Пер. с англ. / Дейтел Х., Дейтел П., Листфилд Дж., Нието Т., Йегер Ш., Златкина М. — СПб.: БХВ-Петербург, 2006. — 1056 с.

2. Visual C# 2008: базовый курс.: Пер. с англ. — М.: ООО «И.Д. Вильямс», 2009. — 1216 с.

3. Библиотека MSDN — msdn.microsoft.com

Министерство образования Республики Беларусь Министерство образования и науки Российской Федерации Государственное учреждение высшего профессионального образования БЕЛОРУССКО-РОССИЙСКИЙ УНИВЕРСИТЕТ Кафедра «Автоматизированные системы управления»

Техническое задание

Тема проекта: Разработать специализированный программный модуль для решения указанной задачи.

Исходные данные к проекту:

Создать шаблон класса «бинарное дерево». Использовать данный шаблон для создания картотеки абонентов, содержащей сведенья о телефонах и их владельцах.

Составить программу, которая:

Ш обеспечит начальное формирование картотеки в виде двоичного дерева;

Ш производит вывод всей картотеки;

Ш вводит номер телефона и время разговора;

Ш выводит извещение на оплату телефонного разговора.

Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.

Министерство образования Республики Беларусь Министерство образования и науки Российской Федерации Государственное учреждение высшего профессионального образования БЕЛОРУССКО-РОССИЙСКИЙ УНИВЕРСИТЕТ Кафедра «Автоматизированные системы управления»

Руководство пользователя

Данный программный модуль предназначен для работы с картотекой абонентов.

Работа программы начинается с её запуска: запускается файл tp_kurs.exe или же через среду программирования Microsoft Visual Studio 2010 открывается файл tp_kurs.sln и после компилирования проекта запускается программа.

Выход из программы осуществляется из главного меню нажатием клавиши «0» либо «Esc».

Министерство образования Республики Беларусь Министерство образования и науки Российской Федерации Государственное учреждение высшего профессионального образования БЕЛОРУССКО-РОССИЙСКИЙ УНИВЕРСИТЕТ Кафедра «Автоматизированные системы управления»

Код программы

Программный код файла PhoneBook. cs

using System;

using BinaryTreeLibrary;

using MenuDialog;

namespace PhoneBook

{

public class TreeTest

{

static void Main ()

{

Tree tree = new Tree ();

Menu.MainDialog (tree);

}

}

}

Программный код файла BinaryTreeLibrary. cs

using System;

namespace BinaryTreeLibrary

{

class TreeNode

{

private TreeNode leftNode; //левый узел

private uint phone; //номер телефона

private uint time; //время разговора

private string name; //имя абонента

private TreeNode rightNode; //правый узел

//создание нового узла

public TreeNode (uint nodePhone, uint nodeTime, string nodeName)

{

phone = nodePhone;

time = nodeTime;

name = nodeName;

leftNode = rightNode = null;

}

public TreeNode LeftNode

{

get

{

return leftNode;

}

set

{

leftNode = value;

}

}

public uint Phone

{

get

{

return phone;

}

set

{

phone = value;

}

}

public string Name

{

get

{

return name;

}

set

{

name = value;

}

}

public uint Time

{

get

{

return time;

}

set

{

time = value;

}

}

public TreeNode RightNode

{

get

{

return rightNode;

}

set

{

rightNode = value;

}

}

//добавление новой записи

public void Insert (uint insertPhone, uint insertTime, string insertName)

{

if (string.Compare (insertName, name) < 0)

{

if (leftNode == null)

leftNode = new TreeNode (insertPhone, insertTime, insertName);

else

leftNode.Insert (insertPhone, insertTime, insertName);

}

else if (string.Compare (insertName, name) > 0)

{

if (rightNode == null)

rightNode = new TreeNode (insertPhone, insertTime, insertName);

else

rightNode.Insert (insertPhone, insertTime, insertName);

}

}

}

public class Tree

{

private TreeNode root;

public static bool iSearch = false;

public static uint itemsNode = 0;

public static string SearchSTime = «» ;

public static string SearchName = «» ;

public static uint SearchTime = 0;

public Tree ()

{

root = null;

}

//добавление нового узла

public void InsertNode (uint insertPhone, uint insertTime, string insertName)

{

lock (this)

{

if (root == null)

root = new TreeNode (insertPhone, insertTime, insertName);

else

root.Insert (insertPhone, insertTime, insertName);

}

}

//обход дерева и вывод картотеки

public void InorderTraversal ()

{

lock (this)

{

InorderHelper (root);

}

}

private void InorderHelper (TreeNode node)

if (node == null) return;

InorderHelper (node.LeftNode);

string sPhone = «» ;

string sTime = «» ;

string sName = «» ;

sName = node.Name;

sPhone = Convert. ToString (node.Phone);

if (Convert.ToUInt32(node.Time / 60) < 10)

sTime = «0» + Convert. ToString (Convert.ToUInt32(node.Time / 60));

else

sTime = Convert. ToString (Convert.ToUInt32(node.Time / 60));

if (node.Time % 60 < 10)

sTime = sTime + «:0» + Convert. ToString (node.Time % 60);

else

sTime = sTime + «:» + Convert. ToString (node.Time % 60);

sPhone = sPhone. Insert (3, «-»);

sPhone = sPhone. Insert (6, «-»);

Console.Write («» + sName);

for (int i = 0; i < 22 — sName. Length; i++) Console. Write (««);

Console.WriteLine («

//поиск номера телефона для создания извещения на оплату

public void TreeSearch (uint key)

{

lock (this)

{

TreeHelperSearch (root, key);

}

}

private void TreeHelperSearch (TreeNode node, uint key)

{

if (node == null) return;

TreeHelperSearch (node.LeftNode, key);

if (node.Phone == key)

{

iSearch = true;

SearchSTime = «» ;

SearchName = node.Name;

SearchTime = node. Time;

if (Convert.ToUInt32(node.Time / 60) < 10)

SearchSTime = «0» + Convert. ToString (Convert.ToUInt32(node.Time / 60));

else

SearchSTime = Convert. ToString (Convert.ToUInt32(node.Time / 60));

if (node.Time % 60 < 10)

SearchSTime = SearchSTime + «:0» + Convert. ToString (node.Time % 60);

else

SearchSTime = SearchSTime + «:» + Convert. ToString (node.Time % 60);

}

TreeHelperSearch (node.RightNode, key);

}

}

}

Программный код файла MenuDialog. cs

using System;

using BinaryTreeLibrary;

using PhoneBook;

using System. IO;

namespace MenuDialog

{

public class Menu

{

//Главное меню

public static void MainDialog (Tree tree)

{

ConsoleKeyInfo key;

do

{

Console.Clear ();

Console.WriteLine («n == ГЛАВНОЕ МЕНЮ == n»);

Console.WriteLine («1. Добавление нового номера»);

Console.WriteLine («2. Вывести всю картотеку»);

Console.WriteLine («0. Выход из программы (клавиша ESC)»);

key = Console. ReadKey ();

string sKey = Convert. ToString (key.KeyChar);

switch (sKey)

{

case «1»: //переход в меню добавления новой записи

NewPhoneDialog (tree);

break;

case «2»: //переход в меню вывода картотеки

SearchDialog (tree);

break;

case «0»: //выход из программы

Environment.Exit (0);

break;

}

} while (key.Key ≠ ConsoleKey. Escape);

}

//Меню добавления элемента

public static void NewPhoneDialog (Tree tree)

{

do

{

back:

string sPhone = «» ;

string sSTime = «» ;

string sMTime = «» ;

string Name = «» ;

ConsoleKeyInfo temp;

uint Phone = 0;

uint Time = 0;

Console.Clear ();

Console.WriteLine («n == ДОБАВЛЕНИЕ НОМЕРА ==n»);

Console.Write («Имя абонента: «);

Name = Console. ReadLine ();

if (Name.Length > 22) //контроль ввода имени абонента

{

Console.WriteLine («Ошибка: „Имя абонента“ не соответствует формату! Не более 22 символов.»);

ConsoleKeyInfo key;

Console.WriteLine («n Нажмите любую клавишу для повторного вводаn либо ESC для выхода в главное меню»);

key = Console. ReadKey ();

if (key.Key == ConsoleKey. Escape) break;

else goto back;

}

Console.Write («Номер телефона (ххх:хх:хх): «);

for (int i = 0; i < 7; i++)

{

temp = Console. ReadKey ();

sPhone = sPhone + temp. KeyChar;

if (i == 2) Console. Write («-»);

if (i == 4) Console. Write («-»);

}

Console.Write («n Время разговора (мин:сек): «);

for (int i = 0; i < 4; i++)

{

temp = Console. ReadKey ();

if (i < 2) sMTime = sMTime + temp. KeyChar;

if (i == 1) Console. Write («:»);

if (i > 1) sSTime = sSTime + temp. KeyChar;

}

Console.WriteLine («n»);

bool index = true; //показатель успешного ввода данных

//контроль ввода номера телефона

try

{

Phone = uint. Parse (sPhone);

}

catch (Exception)

{

Console.WriteLine («Ошибка: „Номер телефона“ не соответствует формату!»);

index = false;

}

//контроль ввода времени разговора

try

{

Time = (uint.Parse (sMTime) + Convert. ToUInt32(uint.Parse (sSTime)/60)) * 60 + (uint.Parse (sSTime)%60);

}

catch (Exception)

{

Console.WriteLine («Ошибка: „Время разговора“ не соответствует формату!»);

index = false;

}

if (index == true)

{

tree.InsertNode (Phone, Time, Name);

Tree.itemsNode++;

Console.WriteLine («Запись успешно создана. n Нажмите любую клавишу для продолжения.»);

Console.ReadKey ();

break;

}

else

{

ConsoleKeyInfo key;

Console.WriteLine («n Запись не создана из-за ошибокn Нажмите любую клавишу для повторного вводаn либо ESC для выхода в главное меню»);

key = Console. ReadKey ();

if (key.Key == ConsoleKey. Escape) break;

}

} while (true);

}

//Меню поиска элемента

public static void SearchDialog (Tree tree)

{

Console.Clear ();

Console.WriteLine («n == КАРТОТЕКА == n»);

ConsoleKeyInfo key;

Console.WriteLine («Имя абонента | Номер телефона | Время разговора»);

Console.WriteLine («———————————|————————|————————»);

tree.InorderTraversal ();

Console.WriteLine («n 1. Извещение на оплату телефонного разговора»);

Console.WriteLine («0. Выход в главное меню (клавиша ESC)»);

do

{

Console.Write («n Ваш выбор: «);

key = Console. ReadKey ();

string sKey = Convert. ToString (key.KeyChar);

switch (sKey)

{

case «1»: //переход в меню создания извещения на оплату

if (Tree.itemsNode ≠ 0)

{

Console.WriteLine ();

PricePhoneDialog (tree);

Console.WriteLine («n 1. Извещение на оплату телефонного разговора»);

Console.WriteLine («0. Выход в главное меню (клавиша ESC)»);

}

else

Console.WriteLine («n Картотека пуста!»);

break;

case «0»: //выход в главное меню

return;

break;

}

} while (key.Key ≠ ConsoleKey. Escape);

}

//Меню для определения стоимости разговора

public static void PricePhoneDialog (Tree tree)

{

do

{

string sPhone = «» ;

ConsoleKeyInfo temp;

uint Phone = 0;

Console.Write («n Номер телефона (ххх:хх:хх): «);

for (int i = 0; i < 7; i++)

{

temp = Console. ReadKey ();

sPhone = sPhone + temp. KeyChar;

if (i == 2) Console. Write («-»);

if (i == 4) Console. Write («-»);

}

//контроль ввода номера телефона

try

{

Phone = uint. Parse (sPhone);

string FILE_NAME = sPhone + «.txt» ;

Tree.iSearch = false;

tree.TreeSearch (Phone);

if (Tree.iSearch == false) Console. WriteLine («n Такой номер не найден»);

else

{

bool index = false;

string sPrace = «» ;

uint Prace = 0;

do

{

Console.Write («n Введите цену за минуту разговора: «);

sPrace = Console. ReadLine ();

//контроль ввода цены разговора

try

{

Prace = uint. Parse (sPrace);

index = true;

}

catch (Exception)

{

Console.WriteLine («n Ошибка: „Цена“ не соответствует формату!»);

continue;

}

} while (index ≠ true);

//создание файла с извещением

if (File.Exists (FILE_NAME)) File. Delete (FILE_NAME);

using (StreamWriter output = File. CreateText (FILE_NAME))

{

sPhone = sPhone. Insert (3, «-»);

sPhone = sPhone. Insert (6, «-»);

output.WriteLine («Абонент: {0}», Tree. SearchName);

output.WriteLine («Номер телефона: {0}», sPhone);

output.WriteLine («Время разговора: {0}», Tree. SearchSTime);

output.WriteLine («Цена за минуту разговора: {0}», Prace);

output.WriteLine («===============»);

output.WriteLine («Итого к оплате: {0}», Prace * (Convert.ToUInt32(Tree.SearchTime / 60) + 1));

Console.WriteLine («n Файл {0}, с извещением на оплату, был успешно создан», FILE_NAME);

}

}

break;

}

catch (Exception)

{

Console.WriteLine («n Ошибка: „Номер телефона“ не соответствует формату!»);

}

} while (true);

}

}

}

Показать весь текст
Заполнить форму текущей работой