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)

       {

       }

   }

}

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


 

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

29633. Класс строго вероятностных способов формирования выборочной совокупности. Гнездовой отбор 52 KB
  Гнездовой отбор. Способы построения выборки делятся на 2 крупных класса: Случайные вероятностные это такие способы отбора когда каждый элемент генеральной совокупности имеет известную чаще всего равную вероятность быть выбранным. Неслучайные все остальные способы отбора. Для реализации случайного отбора необходимо иметь основу выборки списки элементов генеральной совокупности.
29634. Квотная выборка в социологическом исследовании 24 KB
  Способы построения выборки делятся на 2 крупных класса: Случайные вероятностные это такие способы отбора когда каждый элемент генеральной совокупности имеет известную чаще всего равную вероятность быть выбранным. Неслучайные все остальные способы отбора. Для реализации случайного отбора необходимо иметь основу выборки списки элементов генеральной совокупности. К вероятностным способам отбора относят: Простой случайный отбор в рамках которого элементы отбираются либо с помощью таблицы случайных чисел либо с помощью...
29635. Стратифицированный отбор единиц наблюдения в социологическом исследовании 27 KB
  Способы построения выборки делятся на 2 крупных класса: Случайные вероятностные это такие способы отбора когда каждый элемент генеральной совокупности имеет известную чаще всего равную вероятность быть выбранным. Неслучайные все остальные способы отбора. Для реализации случайного отбора необходимо иметь основу выборки списки элементов генеральной совокупности.
29636. Многоступенчатый способ формирования выборочной совокупности 25 KB
  Этапы построения выборки. 1один алгоритм выборки зависит от сложности объекта об общих теоретических построения выборки. В случае если полная основа выборки недоступна т.е случайный отбор невозможен значимыевыбор задачи исследования с точки зрения критерия для построения и стратифицированной или квотной выборки чаще всего выступают со.
29637. Опросные методы в социологическом исследовании. Назначение, классификация видов 25 KB
  Опросы можно классифицировать по разным основаниям: По форме контакта. Спрашиваются и отвечающего опросы делятся на: интервью и анкетирования Интервью непосредственный контакт. По характеру респондентов опросы делятся на:1Массовые респондентом выступают представители объекта исследования. б выборочные 4 по процедуре опросы бывают: групповые и индивидуальные.
29638. Опрос как процесс, фазы опроса. Способы создания мотивации к участию в опросе 30 KB
  Метод опроса применяется когда необходимо получить информацию о явлениях и процессах которые недоступны прямому наблюдению и недостаточно полно отражены в анализируемых документах. Достоинства метода опроса. С помощью метода опроса мы можем за относительно короткий период опросить большое число респондентов и достаточно быстро получить большие объемы информации.
29639. Анкета как документ анкетного опроса. Классификация вопросов анкеты 31 KB
  Классификация вопросов анкеты. Анкета инструмент опроса структурно организованный набор вопросов выраженных на языке респондента каждый из которых логически связан с центральной проблемой исследования. В ней предполагается жестко фиксированный порядок содержание и форма вопросов ясное указание способов ответа. Вопрос анкеты это письменное обращение к респонденту с целью выявления информации относящейся к предметному содержанию исследования.
29640. Язык и композиция вопросов анкеты 36.5 KB
  Виды вопросов по форме: Закрытый вопрос вопрос с фиксированными и изначально заданными вариантами ответов. Открытый вопрос вопрос ответ на который дается в свободной форме отсутствуют изначально заданные варианты ответов. Открытый вопрос используется: для проверки знаний для исследования новых тем и индивидуального многообразия для выявления аргументов по некоторым вопросам.
29641. Интервью в социологическом исследовании. Классификация видов интервью 28 KB
  Классификация видов интервью. Интервью проводимая по определенному плану беседа целенаправленное общение предполагающая прямой контакт интервьюера с опрашиваемым. Интервьюер лицо ведущее непосредственное общение с респондентом при помощи вопросника с целью сбора информации обеспечивающее правильное и надежное использование инструмента исследования.