Рисунок 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("\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