Смекни!
smekni.com

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

Рисунок 9 – Вывод картотеки и успешное создание извещения на оплату

Рисунок 10 – Извещение на оплату. Файл 2425017.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("| " + 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("&bsol;n == ГЛАВНОЕ МЕНЮ == &bsol;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("&bsol;n == ДОБАВЛЕНИЕ НОМЕРА ==&bsol;n");

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

Name = Console.ReadLine();

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

{

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

ConsoleKeyInfo key;

Console.WriteLine("&bsol;n Нажмите любую клавишу для повторного ввода&bsol;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("&bsol;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("&bsol;n");

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

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

try

{

Phone = uint.Parse(sPhone);

}

catch (Exception)

{

Console.WriteLine(" Ошибка: &bsol;"Номер телефона&bsol;" не соответствует формату!");

index = false;

}

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

try

{

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

}

catch (Exception)

{

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

index = false;

}

if (index == true)

{

tree.InsertNode(Phone, Time, Name);

Tree.itemsNode++;

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

Console.ReadKey();

break;

}

else

{

ConsoleKeyInfo key;

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

key = Console.ReadKey();

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

}

} while (true);

}

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

public static void SearchDialog(Tree tree)

{

Console.Clear();

Console.WriteLine("&bsol;n == КАРТОТЕКА == &bsol;n");

ConsoleKeyInfo key;

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

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

tree.InorderTraversal();

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

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

do