1167

Преобразование приложений в оконные приложения

Лабораторная работа

Информатика, кибернетика и программирование

Включить контейнерный объект в основной класс, вставив вызовы его функций в функции, осуществляющие ввод-вывод в файл и очистку. Реализовать функции для вывода информации.

Русский

2013-01-06

113.5 KB

1 чел.

МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ

КАФЕДРА МАТЕМАТИЧЕСКОЙ КИБЕРНЕТИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

ОТЧЁТ

ПО ЛАБОРАТОРНОЙ РАБОТЕ №4

по дисциплине "Технология разработки программного обеспечения"

Группа: ПО0902
Студент: Емельянов Александр



Проверил:

Абышов Р.

Москва 2012

ЗАДАНИЕ

 Преобразовать приложение из третьей лабораторной работы в оконное приложение.

 Включить контейнерный объект в основной класс, вставив вызовы его функций в функции, осуществляющие ввод-вывод в файл и очистку.

 Реализовать функции для вывода информации.

КОД ПРОГРАММЫ:

Program.cs:

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Windows.Forms;

namespace lab4

{

staticclassProgram

   {

       [STAThread]

staticvoid Main()

       {

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(newForm1());

       }

   }

}

TelephoneDirectory.cs:

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

using System.Xml;

namespace lab4

{

   class TelephoneDirectory

   {

       private string _name;

       private int _number;

       private bool _vip;

       public override string ToString()

       {

           return _name;

       }

       public string Name

       {

           get { return _name; }

           set { _name = value; }

       }

       public int TelephoneNumber

       {

           get { return _number; }

           set { _number = value; }

       }

       public bool VIP_group

       {

           get { return _vip; }

           set { _vip = value; }

       }

       public bool Write(Stream stream)

       {

           if (!stream.CanWrite)

               return false;

           XmlDocument document = new XmlDocument();

           XmlElement hotelElement;

           Write(document, out hotelElement);

           document.AppendChild(hotelElement);

           document.Save(stream);

           return true;

       }

       public virtual void Write(XmlDocument document, out XmlElement hotelElement)

       {

           hotelElement = document.CreateElement("Telephone Directory");

           XmlAttribute nameAttribute = document.CreateAttribute("Name");

           nameAttribute.InnerText = _name;

           hotelElement.Attributes.Append(nameAttribute);

           XmlAttribute starsCountAttribute = document.CreateAttribute("Telephone Number");

           starsCountAttribute.InnerText = _number.ToString();

           hotelElement.Attributes.Append(starsCountAttribute);

           XmlAttribute hasRestaurantAttribute = document.CreateAttribute("VIP");

           hasRestaurantAttribute.InnerText = _vip.ToString();

           hotelElement.Attributes.Append(hasRestaurantAttribute);

       }

       public bool Read(Stream stream)

       {

           if (!stream.CanRead)

               return false;

           XmlDocument document = new XmlDocument();

           try

           {

               document.Load(stream);

           }

           catch (Exception ex)

           {

               return false;

           }

           return Read(document.DocumentElement);

       }

       public virtual bool Read(XmlElement hotelElement)

       {

           if (hotelElement.Attributes["Name"] == null)

               return false;

           if (hotelElement.Attributes["Telephone Number"] == null)

               return false;

           int starsCount;

           if (!int.TryParse(hotelElement.Attributes["Telephone Number"].InnerText, out starsCount))

               return false;

           if (hotelElement.Attributes["VIP"] == null)

               return false;

           bool hasRestaurant;

           if (!bool.TryParse(hotelElement.Attributes["VIP"].InnerText, out hasRestaurant))

               return false;

           _name = hotelElement.Attributes["Name"].InnerText;

           _number = starsCount;

           _vip = hasRestaurant;

           return true;

       }

   }

}

DirectoryCollection.cs:

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

using System.Xml;

namespace lab4

{

   class DirectoryCollection : ICollection<TelephoneDirectory>

   {

       private IList<Hotel> _records;

       

       #region ICollection members

       public DirectoryCollection(IEnumerable<TelephoneDirectory> items = null)

       {

           _records = new List<TelephoneDirectory>();

           if (items != null)

               foreach (TelephoneDirectory item in items)

                   _records.Add(item);

       }

       public void Add(TelephoneDirectory item)

       {

           _records.Add(item);

       }

       public void Clear()

       {

           _records.Clear();

       }

       public bool Contains(TelephoneDirectory item)

       {

           return _records.Contains(item);

       }

       public void CopyTo(TelephoneDirectory [] array, int arrayIndex)

       {

           _records.CopyTo(array, arrayIndex);

       }

       public int Count

       {

           get { return _records.Count; }

       }

       public bool IsReadOnly

       {

           get { return _records.IsReadOnly; }

       }

       public bool Remove(TelephoneDirectory item)

       {

           return _records.Remove(item);

       }

       public IEnumerator< TelephoneDirectory > GetEnumerator()

       {

           return _records.GetEnumerator();

       }

       System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()

       {

           return _records.GetEnumerator();

       }

       #endregion

       public bool Write(Stream stream)

       {

           if (!stream.CanWrite)

               return false;

           XmlDocument document = new XmlDocument();

           XmlElement records = document.CreateElement("Records");

           foreach (TelephoneDirectory teldir in _records)

           {

               XmlElement dirElement;

               Teldir.Write(document, out dirElement);

               records.AppendChild(dirElement);

           }

           XmlDeclaration declaration = document.CreateXmlDeclaration("1.0", "utf-8", null);

           document.AppendChild(declaration);

           document.AppendChild(records);

           document.Save(stream);

           return true;

       }

       public bool Read(Stream stream)

       {

           if (!stream.CanRead)

               return false;

           Clear();

           XmlDocument document = new XmlDocument();

           try

           {

               document.Load(stream);

           }

           catch (Exception ex)

           {

               return false;

           }

           XmlNodeList hotelElements = document.DocumentElement.SelectNodes("Telephone Directory");

           

           foreach (XmlNode hotelElement in hotelElements)

           {

               XmlNode availableRoomsElement = hotelElement.SelectSingleNode("Relatives");

               Hotel record;

               if (availableRoomsElement != null)

                   record = new VIP ();

               else

                   record = new TelephoneDirectory ();

               record.Read(hotelElement as XmlElement);

               _records.Add(record);

           }

           return true;

       }

   }

}

VIP.cs:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Xml;

namespace lab4

{

   class VIP : TelephoneDirectory

   {

       private IList<int> _relative = new List<int>();

       private IList<int> _age = new List<int>();

       public IEnumerable<int> Relative

       {

           get { return _relative; }

       }

       public IEnumerable<int> Age

       {

           get { return _age; }

       }

       public bool Relative1(int number)

       {

           if (!_relative.Contains(number))

               return false;

           _relative.Remove(number);

           _age.Add(number);

           return true;

       }

       public bool Age1(int number)

       {

           if (!_age.Contains(number))

               return false;

           _age.Remove(number);

           _relative.Add(number);

           return true;

       }

       public override void Write(XmlDocument document, out XmlElement hotelElement)

       {

           base.Write(document, out hotelElement);

           XmlElement RelativesElement = document.CreateElement("Relatives");

           foreach (int availableRoom in _relative)

           {

               XmlElement roomElement = document.CreateElement("Relative group");

               roomElement.InnerText = availableRoom.ToString();

               availableRoomsElement.AppendChild(roomElement);

           }

           hotelElement.AppendChild(availableRoomsElement);

           XmlElement reservedRoomsElement = document.CreateElement("Ages");

           foreach (int reservedRoom in _age)

           {

               XmlElement roomElement = document.CreateElement("Age");

               roomElement.InnerText = reservedRoom.ToString();

               reservedRoomsElement.AppendChild(roomElement);

           }

           hotelElement.AppendChild(reservedRoomsElement);

       }

       public override bool Read(XmlElement hotelElement)

       {

         XmlNodeList relativesElements = dirElement.SelectNodes(@"Relatives/Relative group");

           if (relativesElements == null)

               return false;

           XmlNodeList agesElements = dirElement.SelectNodes(@"Ages/Age");

           if (agesElements == null)

               return false;

           if (!base.Read(dirElement))

               return false;

           _relative.Clear();

           _age.Clear();

           foreach (XmlNode relativeElement in relativesElements)

           {

               int relative2;

               if (int.TryParse(relativeElement.InnerText, out relative2))

                   _relative.Add(relative2);

           }

           foreach (XmlNode ageElement in agesElements)

           {

               int age2;

               if (int.TryParse(ageElement.InnerText, out age2))

                   _age.Add(age2);

           }

           return true;

       }

   }

}

Form1.cs:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace lab4

{

   public partial class Form1 : Form

   {

       private DirectoryCollection _collection = new HotelCollection();

       public Form1()

       {

           InitializeComponent();

       }

       private void clearButton_Click(object sender, EventArgs e)

       {

           _collection.Clear();

           Name.Items.Clear();

           ClearFields();

       }

       private void loadButton_Click(object sender, EventArgs e)

       {

           try

           {

               OpenFileDialog dialog = new OpenFileDialog();

               dialog.Filter = "Файлы XML (*.xml)|*.xml";

               if (dialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)

                   return;

               string path = dialog.FileName;

               FileStream fs = new FileStream(path, FileMode.Open);

               _collection.Read(fs);

               fs.Close();

               UpdateListBox();

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

           }

       }

       private void saveButton_Click(object sender, EventArgs e)

       {

           try

           {

               SaveFileDialog dialog = new SaveFileDialog();

               dialog.Filter = "Файлы XML (*.xml)|*.xml";

               if (dialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)

                   return;

               string path = dialog.FileName;

               FileStream fs = new FileStream(path, FileMode.OpenOrCreate);

               _collection.Write(fs);

               fs.Close();

           }

           catch (Exception ex)

           {

               MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

           }

       }

       private void UpdateListBox()

       {

           Name.Items.Clear();

           ClearFields();

           foreach (TelephoneDirectory dir in _collection)

               Name.Items.Add(hotel);

       }

       private void ClearFields()

       {

           lAge.Items.Clear();

           tbName.Text = "";

           chbVIP.Checked = false;

           pnlAdvanced.Visible = false;

       }

       private void lbHotels_SelectedIndexChanged(object sender, EventArgs e)

       {

           ClearFields();

           TelephoneDirectory dir = Name.SelectedItem as TelephoneDirectory;

           if (dir == null)

               return;

           if (!(dir is VIP))

               pnlAdvanced.Visible = false;

           else

           {

               VIP rdir = (VIP)dir;

               pnlAdvanced.Visible = true;

               foreach (int item in rdir.Age)

                   lAge.Items.Add(item);

           }

           tbName.Text = dir.Name;

           chbVIP.Checked = dir.VIP_group;

       }

       private void Form1_Load(object sender, EventArgs e)

       {

       }

       private void label4_Click(object sender, EventArgs e)

       {

       }

   }

}

СКРИНШОТ ПРОГРАММЫ:


 

А также другие работы, которые могут Вас заинтересовать

45270. Принципы построения сети сотовой связи на основе CDMA (многостанционный доступ с кодовым разделением каналов) 403 KB
  Каналы трафика и управления В CDM каналы для передачи от базовой станции к мобильной станции называются прямыми Forwrd. В обратном направлении подвижные станции отвечают асинхронно без использования пилотного сигнала при этом уровень мощности приходящий к базовой станции от каждой подвижной станции одинаков. Состав прямых каналов Пилотный канал Pilot Chnnel предназначен для установления начальной синхронизации контроля уровня сигнала базовой станции по времени частоте и фазе идентификации базовой станции. Канал синхронизации SCH ...
45271. Сеть общеканальной сигнализации ОКС- 7. Принципы построения, режимы 47.5 KB
  Сеть общеканальной сигнализации ОКС 7. Рисунок по структуре протоколов В системе ОКС7 сигнальные сообщения передаются по отдельными звеньям сигнализации причем одно звено сигнализации может передавать сигнальные сообщения для большого числа разговорных каналов. Для обеспечения избыточности в другой системе ИКМ как правило предоставляется дополнительный канал сигнализации. ОКС7 имеет собственную сеть сигнализации независимую от разговорной сети.
45272. Уровни и подсистемы ОКС-7 55 KB
  Верхний уровень ОКС7 включает подсистемы: обеспечивание транзакций TCP пользовательские ISUP MUP HUP сервисные элементы прикладного уровня SL уровень подвижной связи стандарта GSMMP прикладная подсистема интеллектуальной сети INP подсистема эксплуатации техническое обслуживание и административное управление OMT. Подсистема пользователя ОКС7 обеспечивает функции сигнализации необходимые для обслуживания вызовов в телефонной сети и в сети ISDN а также для поддержки дополнительных услуг в ISDN. Подсистема...
45273. Подсистема передачи сообщений (МТР) ОКС-7 54.5 KB
  Для передачи сигнальной информации между пунктами сигнализации и для управления SCCP. МТР1: определяет физические электрические и функциональные характеристики канала передачи данных для звена сигнализации. МТР2: определяет функции и процедуры относящиеся к передаче сигнальных сообщений по звену сигнализации между двумя напрямую связанными пунктами сигнализации. Сочетание МТР1 и МТР2 организует звено сигнализации для передачи...
45274. Подсистема пользователя сети ОКС-7 с интеграцией служб (ISUP). Сигнальные сообщения при установлении соединения. Сценарий процесса установления соединения 151.5 KB
  Любое сообщение включает ряд параметров. Предусмотрены следующие 3 категории: Фиксированные обязательные параметры всегда включаются в сообщение и имеют фиксированную длину при этом позиция длина и порядок расположения обязательных параметров однозначно определяются типом сообщения поэтому их название и индикаторы длины не включаются в сообщение. Переменные обязательные параметры всегда включаются в сообщение но имеют переменную длину. Расположение переменных обязательных параметров в сообщении ...
45275. Коммутация каналов, пакетов, сообщений 35.5 KB
  Сеть связи switching network представляет собой совокупность технических средств предназначенных для передачи приема информации и состоит из абонентских устройств АУ линий связи и коммутационных узлов КУ.1 Фрагмент сети связи Лицо пользующееся абонентским устройством для передачи приема информации называется абонентом. Для передачи приема информации между удаленными коммутационными узлами используют каналы связи которые образуются при помощи многоканальных систем передачи. Он характеризуется тем что канал между передатчиком и...
45276. Принципы построения цифровых коммутаторов (пространственный, временной). Адресная и информационная память 201.5 KB
  Номер ячейки памяти определяет номер канала на выходе а адрес который в ней записан определяет ту ячейку ИП которую нужно открыть на данном канальном интервале. Схема коммутации и управляющей памяти является общей. Число разрядов в ячейках управляющей памяти равно N=log n. В каждой ячейке управляемой памяти записываются адреса схем И которые необходимо открыть в период канального интервала соответствующего номеру ячейки управляющей памяти.
45277. Обобщенная структурная схема цифровой АТС. Преобразование аналогового сигнала в цифровую форму 87 KB
  Преобразование аналогового сигнала в цифровую форму. МАЛ содержит абонентские комплекты АК взаимодействие оборудования АТСЭ с оконечным устройством пользователя и мультиплексор цифрового тракта Мх мультиплексирование индивидуальных Вканалов МЦК содержит коммутационное поле КПпроизводит коммутацию любого канального интервала time slot любого входящего тракта с любым канальным интервалом любого исходящего тракта линейные комплекты ЛКтобеспечивает синхронизацию ИКМ трактов и преобразование линейного сигнала генератор...
45278. Идеология и архитектура Softswitch коммутатора 135.5 KB
  Идеология и архитектура Softswitch коммутатора. Рисунок по архитектуре Softswitch является носителем интеллектуальных возможностей сети который координирует управление обслуживанием вызовов сигнализацию и функции обеспечивающие установление соединения через одну или несколько сетей. Фактически Softswitch остается тем же привычным коммутационным узлом но без цифрового коммутационного поля кросса и т. Термин Softswitch был придуман при разработке интерфейса между интерактивной речевой системой IVR и АТС с коммутацией каналов в...