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

 

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

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

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

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

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

·

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


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

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

 

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

 

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

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

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

 

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


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

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

 

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


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

 

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

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

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

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

· Номер телефона: 2425017

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

·

Рисунок 7 – Успешное создание новой записи

 

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

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

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

       {

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

   }

}

}

 










Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: