на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Разработка специализированного программного модуля для решения указанной задачи
p align="left">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);

}

}

}

Страницы: 1, 2



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.