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

бесплатно 0
4.5 151
Разработка программного модуля, позволяющего создать с помощью шаблона класса "бинарное дерево" картотеку абонентов, содержащую сведенья о телефонах и их владельцах. Выбор технологии, языка и среды программирования. Выбор стратегии тестирования программы.


Аннотация к работе
Целью данной курсовой работы является разработка программного модуля, позволяющего создать с помощью шаблона класса «бинарное дерево» картотеку абонентов, содержащую сведенья о телефонах и их владельцах. В разделе «Анализ и уточнение требований к программному продукту» проводится выбор структуры данных для хранения информации, метода и разработки основных алгоритмов решения задачи.В соответствие с заданием, языком программирования был выбран C#, а средой программирования - Microsoft Visual Studio 2010. Объектно-ориентированное программирование (ООП) - парадигма программирования , основанная на представлении предметной области (и/или проблемной области ) в виде системы взаимосвязанных абстрактных объектов и их реализаций.Бинарное (двоичное) дерево - это упорядоченное дерево, каждая вершина которого имеет не более двух поддеревьев, причем для каждого узла выполняется правило: в левом поддереве содержатся, только ключи, имеющие значения, меньшие, чем значение данного узла, а в правом поддереве содержатся, только ключи, имеющие значения, большие, чем значение данного узла.В данной курсовой работе необходимо создать шаблона класса «бинарное дерево» и написать программу, использующую этот шаблон класса для создания картотеки абонентов, содержащую сведенья о телефонах и их владельцах. Программа должна: · обеспечивать начальное формирование картотеки в виде двоичного дерева· Главное меню - функция меню, выбор пункта меню в зависимости от того, какое действие необходимо произвести;Для работы с программой было реализовано меню, состоящее из 4 методов класса MENUDIALOG: MAINDIALOG - главное меню, через которое осуществляется выбор необходимого действия. Имеет 3 варианта действий: 1) Переход в меню добавления нового номера. При успешном добавлении программа возвращает пользователя в главное меню. В случае ошибки ввода данных предоставляется возможность вернуться в главное меню, либо повторить ввод данных. Производит вывод картотеки и предоставляет пользователю 2 варианта последующих действий: 1) Переход в меню для создания извещения по оплате телефонного разговора.В программе осуществляется 2 способа ввода данных: 1) Ввод при добавлении нового абонента. Для добавления абонента необходимо заполнить следующие поля: · Имя абонента (до 22 знаков); · Время разговора (формат ввода - мин:сек). Контроль ошибок: В случае неверного ввода номера телефона, либо времени разговора, на экран выдается сообщение об ошибке ввода. Для создания извещения, необходимо: · Указать номер телефона (формат ввода - цифры, 7 знаков);Контрольный пример - это специальные данные, являющиеся исходными для программного алгоритма и отвечающие требованиям по объему и составу вводимой информации, которая должна соответствовать поставленной задаче. Для того чтобы подтвердить работоспособность системы необходимо провести тестирование, и показать реализацию основных функций. В качестве результатов тестирования, чтобы показать работоспособность системы запустим программу. Добавим нового абонента: · Имя абонента: Льдов Анатолий Добавим еще несколько записей и выведем картотеку путем нажатия «2» в главном меню.Курсовая работа выполнена с целью разработки программы для создания картотеки абонентов, содержащей сведенья о телефонах и их владельцах.

План
Содержание

Введение

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

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

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

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

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

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

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

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

5 Выбор стратегии тестирования и разработка тестов.

Заключение

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

Приложение А. Техническое задание

Приложение Б. Руководство пользователя

Приложение В. Код программы

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

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

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

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

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

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

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

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

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

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

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

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

Министерство образования Республики Беларусь

Министерство образования и науки Российской Федерации

Государственное учреждение высшего профессионального образования

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

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

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

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

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

Составить программу, которая: O обеспечит начальное формирование картотеки в виде двоичного дерева;

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

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

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

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

Министерство образования Республики Беларусь

Министерство образования и науки Российской Федерации

Государственное учреждение высшего профессионального образования

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

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

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

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

Работа программы начинается с ее запуска: запускается файл 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("| " SPHONE " | " STIME);

INORDERHELPER(node.RIGHTNODE);

}

//поиск номера телефона для создания извещения на оплату 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("

== ГЛАВНОЕ МЕНЮ ==

");

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("

== ДОБАВЛЕНИЕ НОМЕРА ==

");

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

Name = Console.READLINE();

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

{

Console.WRITELINE(" Ошибка: \"Имя абонента\" не соответствует формату! Не более 22 символов.");

CONSOLEKEYINFO key;

Console.WRITELINE("

Нажмите любую клавишу для повторного ввода

либо 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("

Время разговора(мин:сек): ");

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("

");

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)`);

}

catch (Exception)

{

Console.WRITELINE(" Ошибка: \"Время разговора\" не соответствует формату!");

index = false;

}

if (index == true)

{

tree.INSERTNODE(Phone, Time, Name);

Tree.ITEMSNODE ;

Console.WRITELINE(" Запись успешно создана.

Нажмите любую клавишу для продолжения.");

Console.READKEY();

break;

}

else

{

CONSOLEKEYINFO key;

Console.WRITELINE("

Запись не создана изза ошибок

Нажмите любую клавишу для повторного ввода

либо ESC для выхода в главное меню");

key = Console.READKEY();

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

}

} while (true);

}

//Меню поиска элемента public static void SEARCHDIALOG(Tree tree)

{

Console.Clear();

Console.WRITELINE("

== КАРТОТЕКА ==

");

CONSOLEKEYINFO key;

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

Console.WRITELINE(" ----------------------|----------------|----------------");

tree.INORDERTRAVERSAL();

Console.WRITELINE("

1. Извещение на оплату телефонного разговора");

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

do

{

Console.Write("

Ваш выбор: ");

key = Console.READKEY();

string SKEY = Convert.TOSTRING(key.KEYCHAR);

switch (SKEY)

{

case "1": //переход в меню создания извещения на оплату if (Tree.ITEMSNODE != 0)

{

Console.WRITELINE();

PRICEPHONEDIALOG(tree);

Console.WRITELINE("

1. Извещение на оплату телефонного разговора");

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

}

else

Console.WRITELINE("

Картотека пуста!");

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("

Номер телефона(ххх:хх:хх): ");

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("

Такой номер не найден");

else

{

bool index = false;

string SPRACE = "";

uint Prace = 0;

do

{

Console.Write("

Введите цену за минуту разговора: ");

SPRACE = Console.READLINE();

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

{

Prace = uint.Parse(SPRACE);

index = true;

}

catch (Exception)

{

Console.WRITELINE("

Ошибка: \"Цена\" не соответствует формату!");

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("

Файл {0} , с извещением на оплату, был успешно создан", FILE_NAME);

}

}

break;

}

catch (Exception)

{

Console.WRITELINE("

Ошибка: \"Номер телефона\" не соответствует формату!");

}

} while (true);

}

}

}
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?