788
Использование Windows Forms и шаблонов классов
Лабораторная работа
Информатика, кибернетика и программирование
Разработать в MS Visual Studio программное решение на языке C#, которое реализует для контейнера типа линейный односвязный список оконный пользовательский интерфейс. Использовать методы визуального программирования и классы библиотеки Windows Forms.
Русский
2013-01-06
217.5 KB
73 чел.
Министерство образования и науки российской федерации
Обнинский институт атомной энергетики филиал
Федерального государственного образовательного бюджетного образовательного учреждения
высшего профессионального образования
«национальный исследовательский ядерный университет «мифи»
(ИАТЭ НИЯУ МИФИ)
Отчет по лабораторной работе №2
«Использование Windows Forms и шаблонов классов»
Работу выполнил
студент группы ВТ-09
Стрелицын И. И.
Работу проверил
Тельнов В. П.
15:29:25
Постановка задачи
Разработать в MS Visual Studio программное решение на языке C#, которое реализует для контейнера типа «линейный односвязный список» оконный пользовательский интерфейс. Использовать методы визуального программирования и классы библиотеки Windows Forms. Собственно контейнер реализовать на основе шаблонов классов из пространства имен System.Collections.Generic. Контейнер сделать полиморфным, чтобы он работал со следующими объектами: строки, целые числа, структуры. В программном решении следует реализовать следующие операции над контейнером:
Описание возможностей библиотеки Windows Forms и шаблонов классов из System.Collections.Generic
Windows Forms название интерфейса программирования приложений (API), отвечающего за графический интерфейс пользователя и являющегося частью Microsoft .NET Framework. Windows Forms упрощает доступ к визуальным компонентам (виджетам) Microsoft Windows за счет создания обертки для существующего Win32 API в управляемом коде. Управляемый код является машинно-независимым и не зависит от языка разработки. То есть программист одинаково может использовать Windows Forms как при написании ПО на C#, С++, так и на VB.Net, J# и др.
Основной класс Windows Forms форма, экземплярами которого являются главные и диалоговые окна. Формы являются потомками класса Form, определенного в пространстве имен System.Windows.Forms. Интерфейс Windows Forms позволяет работать в режиме конструктора, добавляя элементы управления (кнопки, поля для ввода текста, поля для отображения текста, меню и прочие компоненты, характерные для Windows-приложений) простым «перетаскиванием». В коде они представлены как поля класса формы. Все элементы управления окна являются объектами классов, содержащихся в System.Windows.Forms и являющихся потомками базового класса Control. Ответная реакция программы на определенное действие (событие), связанное с элементом управления обработчик события - оформляется в виде метода формы.
Пример 1.
Класс TextBox предоставляет элемент управления "текстовое поле" Windows. Он содержит многие члены, в том числе свойство Text, содержащее текст, и метод Clear, очищающий текстовое поле.
Пример 2.
Класс Button представляет элемент управления Windows "Кнопка". Можно задать обработчик события нажатия кнопки, например, функцию-член button1_Click, которая будет вызывать метод textBox1.Clear(). Наблюдаемый эффект очистка текстового поля textBox1 при нажатии кнопки button1.
При запуске приложения с помощью статического метода Run класса Application создается экземпляр класса формы. При этом вызывается конструктор формы, инициализирующий окно и все заданные элементы управления. При завершении работы все элементы подготавливаются к высвобождению ресурсов.
Пространство имен System.Collections.Generic содержит интерфейсы и классы, определяющие универсальные коллекции, которые позволяют пользователям создавать строго типизированные коллекции, обеспечивающие повышенную производительность и безопасность типов по сравнению с неуниверсальными строго типизированными коллекциями. Методы этих классов предоставляют часто используемые алгоритмы обработки коллекций данных.
Пример 3.
Список из объектов класса Int можно представить коллекцией List<Int>. Для сортировки списка нужно вызвать метод Sort класса List<T>.
Схема наследования классов, использованных в работе
Описание классов, их методов и свойств, использованных в работе:
Представляет окно или диалоговое окно, которое составляет пользовательский интерфейс приложения.
Свойства:
Text заголовок окна.
Представляет элемент управления Windows для отображения списка позиций. Данный элемент управления лучше всего подходит для отображения коллекций текстовых данных.
Свойства:
Enabled указывает, может ли элемент управления отвечать на действия пользователя.
Items - получает позиции элемента управления.
DataSource - получает или задает источник данных.
DisplayMember - получает или задает свойство отображения. В данном случае свойство Info класса CPolymorph.
Методы:
SetSelected - получает или задает свойство отображения.
Предоставляет элемент управления "текстовое поле" Windows. Данный элемент управления лучше всего подходит для ввода текстовой информации.
Свойства:
Text - получает или задает текущий текст в текстовом поле
Методы:
Clear очищает текстовое поле.
Представляет элемент управления Windows "Кнопка".
Свойства:
Text текст на кнопке.
Использовалось также событие Click.
Представляет стандартную надпись Windows.
Свойства:
Text содержание надписи.
Запрашивает пользователя об открытии файла.
Свойства:
Filter фильтры файлов, отображаемые в диалоговом окне. В данной программе отображаются только текстовые файлы.
RestoreDirectory показывает, восстанавливает ли диалоговое окно текущую папку перед закрытием.
InitialDirectory исходный каталог для выбора файла.
Запрашивает пользователя о сохранении файла.
Свойства:
Filter фильтры файлов, отображаемые в диалоговом окне. В данной программе отображаются только текстовые файлы.
RestoreDirectory показывает, восстанавливает ли диалоговое окно текущую папку перед закрытием.
InitialDirectory исходный каталог для выбора файла.
Отображает окно сообщения, содержащее текст, кнопки и символы, с помощью которых информируется и инструктируется пользователь. В данной работе используется для информирования об исключениях.
Методы:
Show - отображает окно сообщения с заданным заголовком и текстом.
Инкапсулирует источник данных для формы. В данной программе объект этого класса используется для привязки listBox1 к свойству Info класса CPolymorph. Данный класс обеспечивает простоту обновления данных в элементе управления.
Свойства:
DataSource - возвращает или задает источник данных, к которому привязан соединитель.
Методы:
ResetBindings обновляет отображаемые значения.
Инкапсулирует источник данных для формы. В данной программе объект этого класса используется для привязки listBox1 к свойству Info класса CPolymorph. Данный класс одинаково подходит для отображения как отсортированных, так и не отсортированных списков.
Свойства:
Count - возвращает количество элементов в списке.
Items обеспечивает доступ к элементам списка.
Методы:
Add добавляет элемент в список.
AddRange добавляет группу элементов.
FindIndex выполняет поиск элемента, соответствующего указанному предикату, и возвращает индекс первого найденного.
RemoveAt удаляет элемент с указанным индексом.
Clear удаляет все элементы списка.
Exists показывает, существует ли в списке элемент, соответствующий указанному предикату.
Sort сортирует элементы в соответствии с предикатом.
Reverse изменяет порядок следования элементов на обратный.
Эскиз окна приложения
В начале работы большая часть действий недоступна для пользователя, так как список не создан. При нажатии кнопки «Создать список» будет создан пустой список. Можно добавить в список строку из поля «Строка» (строка должна содержать только допустимые символы*), целое число из поля «Число» или структуру, состоящую из строки и числа. Новый элемент появится в списке слева (в структурах строка и число отделяются комбинацией пробел-слэш-пробел).
При нажатии кнопки «Найти» будет выделен первый элемент списка, введенный в полях для ввода. Выделенный элемент можно удалить кнопкой «Удалить элемент».
При нажатии кнопки «Открыть…» появится диалоговое окно с предложением загрузить список из текстового файла. Если в файле встречаются недопустимые строки, они будут пропущены и появится сообщение об этом.
При нажатии кнопки «Сохранить…» появится диалоговое окно с предложением сохранить список в текстовом файле.
Для завешения работы над списком пользователю нужно нажать кнопку «Удалить список».
Другие кнопки:
«Удалить повторы» - удаляются повторяющиеся элементы.
«Сортировка» - сортировка по возрастанию.
«Изменить порядок» - изменяется порядок следования элементов на противоположный.
«Объединение», «Пересечение», «Вычитание» - операции с двумя списками. Второй список открывается из файла. После удаления списка, который был результатом операции, появится начальный список, над которым производилась операция.
*Допустимыми символами являются буквы латинского алфавита и все символы кроме и /.
Описание механизма обеспечения полиморфизма контейнера
Для обеспечения полиморфизма было разработано четыре класса, один из которых является абстрактным классом-предком. Схема наследования классов:
В абстрактном классе CPolymorph определено виртуальное свойство:
public abstract String Info
{
get;
set;
}
В классах CInt, CString и CStruct происходит перекрытие виртуального свойства абстрактного класса. Свойство Info данных классов, отображает информацию из их полей в определенном формате. Объявлен класс List, потомок класса List<CPolymorph>. Такой контейнер может работать с объектами классов CInt, CString и CStruct. Таким образом, контейнер является полиморфным.
Иерархия классов разработанного приложения
Листинг кода
Файл Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace Laba_2
{
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
Файл 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 Laba_2
{
public partial class Form1 : Form
{
private BindingSource binding1; //привязка listBox к List1
private List List1;
private List List2;
private CString StringItem;
private CInt IntItem;
private CStruct StructItem;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
//Создание списка
{
try
{
List1 = new List();
binding1 = new BindingSource();
if (List1 == null || binding1 == null)
throw new MyException("Не удалось создать список");
binding1.DataSource = List1;
listBox1.DataSource = binding1;
listBox1.DisplayMember = "Info";
listBox1.Enabled = true;
textBox3.Text = List1.Count.ToString();
button2.Enabled = true;
button3.Enabled = true;
button5.Enabled = true;
button6.Enabled = true;
button7.Enabled = true;
button9.Enabled = true;
button10.Enabled = true;
button11.Enabled = true;
button12.Enabled = true;
button13.Enabled = true;
}
catch (MyException ex)
{
MessageBox.Show(ex.Text, "Исключение");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Исключение");
}
}
private void button2_Click(object sender, EventArgs e)
//Добавление элемента
{
try
{
if (List1.Count > List.MaxCount)
throw new MyException("Список переполнен");
if (textBox1.Text == "" && textBox2.Text == "")
throw new MyException("Поля для ввода пусты");
//Добавление строки
if (textBox2.Text == "")
{
StringItem = new CString();
StringItem.Info = textBox1.Text;
List1.Add(StringItem);
}
//Добавление числа
if (textBox1.Text == "")
{
IntItem = new CInt();
IntItem.Info = textBox2.Text;
List1.Add(IntItem);
}
//Добавление структуры
if (!(textBox1.Text == "" || textBox2.Text == ""))
{
StructItem = new CStruct();
StructItem.XInfo = Convert.ToInt32(textBox2.Text);
StructItem.SInfo = textBox1.Text;
List1.Add(StructItem);
}
button4.Enabled = true;
}
catch (MyException ex)
{
MessageBox.Show(ex.Text, "Исключение");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Исключение");
}
textBox1.Clear();
textBox2.Clear();
binding1.ResetBindings(false);
textBox3.Text = List1.Count.ToString();
}
private void button3_Click(object sender, EventArgs e)
//Поиск элемента
{
//Поиск строки
try
{
if (textBox1.Text == "" && textBox2.Text == "")
throw new MyException("Поля для ввода пусты");
if (textBox2.Text == "")
{
listBox1.SetSelected(
List1.FindIndex(delegate(CPolymorph Item)
{
return Item.Info == textBox1.Text;
}),
true);
}
//Поиск числа
if (textBox1.Text == "")
{
listBox1.SetSelected(
List1.FindIndex(delegate(CPolymorph Item)
{
return Item.Info == textBox2.Text;
}),
true);
}
//Поиск структуры
if (!(textBox1.Text == "" || textBox2.Text == ""))
{
listBox1.SetSelected(
List1.FindIndex(delegate(CPolymorph Item)
{
return Item.Info == textBox1.Text + CStruct.Separator + textBox2.Text;
}),
true);
}
}
catch (ArgumentOutOfRangeException)
{
MessageBox.Show("Элемент не найден", "Исключение");
}
catch (MyException ex)
{
MessageBox.Show(ex.Text, "Исключение");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Исключение");
}
textBox1.Clear();
textBox2.Clear();
}
private void button4_Click(object sender, EventArgs e)
//Удаление выделенного элемента
{
try
{
List1.RemoveAt(listBox1.SelectedIndex);
if (List1.Count == 0) button4.Enabled = false;
binding1.ResetBindings(false);
textBox3.Text = List1.Count.ToString();
}
catch (ArgumentOutOfRangeException)
{
MessageBox.Show("Нет элементов", "Исключение");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Исключение");
}
}
private void button5_Click(object sender, EventArgs e)
//Удаление списка
{
List1.Clear();
if (List2 != null)
{
List1.AddRange(List2); //если перед этим было объединение списков
List2.Clear();
List2 = null;
binding1.ResetBindings(false);
textBox3.Text = List1.Count.ToString();
}
else
{
listBox1.Enabled = false;
textBox3.Clear();
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
button5.Enabled = false;
button6.Enabled = false;
button7.Enabled = false;
button9.Enabled = false;
button10.Enabled = false;
button11.Enabled = false;
button12.Enabled = false;
button13.Enabled = false;
List1 = null;
binding1 = null;
listBox1.DataSource = null;
listBox1.Items.AddRange(new object[] { "Нажмите \"Создать\" ", "или \"Открыть...\"" });
}
}
private void button6_Click(object sender, EventArgs e)
//Удаление дублирующих элементов
{
for (int i = 0; i < List1.Count; i++)
for (int j = i + 1; j < List1.Count; j++)
if (List1[i].Info == List1[j].Info)
{
List1.RemoveAt(j);
--j;
}
binding1.ResetBindings(false);
textBox3.Text = List1.Count.ToString();
}
private void button7_Click(object sender, EventArgs e)
//Сортировка элементов
{
List1.Sort(delegate(CPolymorph Item1, CPolymorph Item2)
{
return Item1.Info.CompareTo(Item2.Info);
});
binding1.ResetBindings(false);
}
private void button8_Click(object sender, EventArgs e)
//Открытие списка
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
List1 = new List();
if (List1 == null) throw new MyException("Не удалось создать список");
Stream stream1;
stream1 = openFileDialog1.OpenFile();
Boolean IsWrongItems = false;
String Line;
using (StreamReader streamReader1 = new StreamReader(stream1))
{
while ((Line = streamReader1.ReadLine()) != null)
{
switch (FSM.Test(Line))
{
case 2:
IntItem = new CInt();
IntItem.Info = Line;
List1.Add(IntItem);
break;
case 3:
StringItem = new CString();
StringItem.Info = Line;
List1.Add(StringItem);
break;
case 7:
StructItem = new CStruct();
StructItem.Info = Line;
List1.Add(StructItem);
break;
default:
IsWrongItems = true;
break;
}
}
}
stream1.Close();
binding1 = new BindingSource();
binding1.DataSource = List1;
listBox1.DataSource = binding1;
listBox1.DisplayMember = "Info";
listBox1.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = true;
button5.Enabled = true;
button6.Enabled = true;
button7.Enabled = true;
button10.Enabled = true;
button11.Enabled = true;
button12.Enabled = true;
button13.Enabled = true;
binding1.ResetBindings(false);
textBox3.Text = List1.Count.ToString();
if (IsWrongItems)
MessageBox.Show("Некоторые строки исходного файла пропущены, т.к. являются недопустимыми", "Исключение");
}
catch (ArgumentException)
{
MessageBox.Show("Не удалось открыть файл", "Исключение");
}
catch (MyException ex)
{
MessageBox.Show(ex.Text, "Исключение");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Исключение");
}
}
}
private void button9_Click(object sender, EventArgs e)
//Сохранение списка
{
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
Stream stream1;
stream1 = saveFileDialog1.OpenFile();
using (StreamWriter StreamWriter1 = new StreamWriter(stream1))
{
for (int i = 0; i < List1.Count; i++)
{
StreamWriter1.WriteLine(List1[i].Info);
}
}
stream1.Close();
}
catch (ArgumentException)
{
MessageBox.Show("Не удалось открыть файл", "Исключение");
}
catch (MyException ex)
{
MessageBox.Show(ex.Text, "Исключение");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Исключение");
}
}
}
private void button10_Click(object sender, EventArgs e)
//Объединение списков
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
List2 = new List();
if (List2 == null) throw new MyException("Не удалось создать список");
List2.AddRange(List1); //копия исходного списка хранится в List2
Stream stream1;
stream1 = openFileDialog1.OpenFile();
Boolean IsWrongItems = false;
String Line;
using (StreamReader streamReader1 = new StreamReader(stream1))
{
while ((Line = streamReader1.ReadLine()) != null)
{
switch (FSM.Test(Line))
{
case 2:
IntItem = new CInt();
IntItem.Info = Line;
List1.Add(IntItem);
break;
case 3:
StringItem = new CString();
StringItem.Info = Line;
List1.Add(StringItem);
break;
case 7:
StructItem = new CStruct();
StructItem.Info = Line;
List1.Add(StructItem);
break;
default:
IsWrongItems = true;
break;
}
}
}
stream1.Close();
binding1.ResetBindings(false);
textBox3.Text = List1.Count.ToString();
if (IsWrongItems)
MessageBox.Show("Некоторые строки исходного файла пропущены, т.к. являются недопустимыми", "Исключение");
}
catch (ArgumentException)
{
MessageBox.Show("Не удалось открыть файл", "Исключение");
}
catch (MyException ex)
{
MessageBox.Show(ex.Text, "Исключение");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Исключение");
}
}
}
private void button11_Click(object sender, EventArgs e)
//Пересечение списков
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
List2 = new List();
if (List2 == null) throw new MyException("Не удалось создать список");
List2.AddRange(List1); //копия исходного списка хранится в List2
List1.Clear();
Stream stream1;
stream1 = openFileDialog1.OpenFile();
Boolean IsWrongItems = false;
String Line;
using (StreamReader streamReader1 = new StreamReader(stream1))
{
while ((Line = streamReader1.ReadLine()) != null)
{
switch (FSM.Test(Line))
{
case 2:
if (List2.Exists(delegate(CPolymorph Item)
{
return Item.Info == Line;
}))
{
IntItem = new CInt();
IntItem.Info = Line;
List1.Add(IntItem);
}
break;
case 3:
if (List2.Exists(delegate(CPolymorph Item)
{
return Item.Info == Line;
}))
{
StringItem = new CString();
StringItem.Info = Line;
List1.Add(StringItem);
}
break;
case 7:
if (List2.Exists(delegate(CPolymorph Item)
{
return Item.Info == Line;
}))
{
StructItem = new CStruct();
StructItem.Info = Line;
List1.Add(StructItem);
}
break;
default:
IsWrongItems = true;
break;
}
}
}
stream1.Close();
binding1.ResetBindings(false);
textBox3.Text = List1.Count.ToString();
if (IsWrongItems)
MessageBox.Show("Некоторые строки исходного файла пропущены, т.к. являются недопустимыми", "Исключение");
}
catch (ArgumentException)
{
MessageBox.Show("Не удалось открыть файл", "Исключение");
}
catch (MyException ex)
{
MessageBox.Show(ex.Text, "Исключение");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Исключение");
}
}
}
private void button12_Click(object sender, EventArgs e)
//Вычитание из списка List1
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
List2 = new List();
if (List2 == null) throw new MyException("Не удалось создать список");
List2.AddRange(List1); //копия исходного списка хранится в List2
Stream stream1;
stream1 = openFileDialog1.OpenFile();
String Line;
using (StreamReader streamReader1 = new StreamReader(stream1))
{
while ((Line = streamReader1.ReadLine()) != null)
{
List1.RemoveAll(delegate(CPolymorph Item)
{
return Item.Info == Line;
});
}
}
stream1.Close();
binding1.ResetBindings(false);
textBox3.Text = List1.Count.ToString();
}
catch (ArgumentException)
{
MessageBox.Show("Не удалось открыть файл", "Исключение");
}
catch (MyException ex)
{
MessageBox.Show(ex.Text, "Исключение");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Исключение");
}
}
}
private void button13_Click(object sender, EventArgs e)
//Изменить порядок на противоположный
{
List1.Reverse();
binding1.ResetBindings(false);
}
}
}
Файл FSM.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Laba_2
{
class FSM
//конечный автомат
{
//сигнальные состояния:
public const int IntState = 2;
public const int StringState = 3;
public const int StructState = 7;
private enum States { q0 = 0, q1, q2, q3, q4, q5, q6, q7 };
static public int Test(String Line)
//2 - Line является числом
//3 - Line является строкой
//7 - Line является структурой
//0 - недопустимое слово
{
States State = States.q1;
for (int i = 0; i < Line.Length; i++)
{
switch (State)
{
case States.q0:
return (int)State;
case States.q1:
State = (Char.IsDigit(Line, i)) ? States.q2 : States.q0;
if (SymLettPunct(Line[i])) State = States.q3;
break;
case States.q2:
State = (Char.IsDigit(Line, i)) ? States.q2 : States.q0;
break;
case States.q3:
State = (SymLettPunct(Line[i])) ? States.q3 : States.q0;
if (Line[i] == ' ') State = States.q4;
break;
case States.q4:
State = (Line[i] == '/') ? States.q5 : States.q0;
break;
case States.q5:
State = (Line[i] == ' ') ? States.q6 : States.q0;
break;
case States.q6:
State = (Char.IsDigit(Line, i)) ? States.q7 : States.q0;
break;
case States.q7:
State = (Char.IsDigit(Line, i)) ? States.q7 : States.q0;
break;
default:
break;
}
}
return (int)State;
}
static private bool SymLettPunct(char c)
{
return
(((c > 'A' && c < 'Z')
|| (c > 'a' && c < 'z')
|| Char.IsSymbol(c)
|| Char.IsPunctuation(c)
|| c == '_')
&& c != '/'
&& c != ' ');
}
}
}
Файл Exeptions.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Laba_2
{
class MyException : Exception
{
private string text;
public string Text
{
get
{
return text;
}
}
public MyException(string Text)
{
this.text = Text;
}
}
}
Файл CString.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Laba_2
{
class CString : CPolymorph
{
const int N = 20; //максимальная длина строки
private string S;
public override string Info
{
get
{
return S;
}
set
{
if (value.Length > N) throw new MyException("Слишком длинная строка");
S = value;
}
}
}
}
Файл CInt.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Laba_2
{
class CInt : CPolymorph
{
private int X;
public int XInfo
{
get
{
return X;
}
set
{
try
{
X = value;
}
catch (OverflowException)
{
throw new MyException("Слишком большое число");
}
}
}
public override string Info
{
get
{
return X.ToString();
}
set
{
try
{
if (FSM.Test(value) != FSM.IntState)
throw new MyException("\"" + value + "\" не является числом");
X = Convert.ToInt32(value);
}
catch (OverflowException)
{
throw new MyException("Слишком большое число");
}
}
}
}
}
Файл CStruct.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Laba_2
{
class CStruct : CPolymorph
{
private int X;
private string S;
public const String Separator = " / ";
public int XInfo
{
get
{
return X;
}
set
{
try
{
X = value;
}
catch (OverflowException)
{
throw new MyException("Слишком большое число");
}
}
}
public string SInfo
{
get
{
return S;
}
set
{
if (value.Length > 20)
throw new MyException("Слишком длинная строка");
S = value;
}
}
public override string Info
{
get
{
return (S + Separator + X.ToString());
}
set
{
if (FSM.Test(value) != FSM.StructState)
throw new MyException("\"" + value + "\" не является структурой");
if ((S = value.Split(new String[] { Separator }, StringSplitOptions.RemoveEmptyEntries)[0]).Length > 20)
throw new MyException("Слишком длинная строка");
X = Convert.ToInt32(value.Split(new String[] { Separator }, StringSplitOptions.RemoveEmptyEntries)[1]);
}
}
}
}
Файл CPolymorph.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Laba_2
{
abstract class CPolymorph
{
public abstract String Info
{
get;
set;
}
}
}
CPolymorph
String
CInt
CStruct
А также другие работы, которые могут Вас заинтересовать | |||
26062. | Катаболизм и анаболизм. Биологическое значение основных метаболических путей (гликолиз, цикл трикарбоновых кислот, расщепление и синтез жирных кислот) | 15.72 KB | |
При катаболизме происходит расщепление и окисление в результате чего извлекается энергия из расщепившихся макромолекул. На первом этапе идут 2 необратимых реакции в результате чего тратится 2 мол АТФ. В результате этого этапа образуется 2 мол НАДНН и 4 мол АТФ. Конечным продуктом является 2 мол ПВК. | |||
26063. | Липиды | 14.89 KB | |
Липидынизкомолекулярные оргие соедия полностью или почти полностью нерастворимые в воде. Биологические фии липидов: 1 Структурная липиды в виде комплекса с белками являются стрми элементами мембран клеток. Классификация липидов: 1Простые липиды ацилглицеролы воска. 2Сложные липиды фосфолипиды гликолипиды стероиды. | |||
26064. | Макромолекулы как основа организации биологических структур | 23.39 KB | |
Первичная структура линейная. Вторичная структура. Структура полипептидной цепи спирализована неполностью. Такие параллельно расположенные участки структура конфигурация представляет собой складчатую структуру которая включает параллельные цепи связанные водородной связью. | |||
26065. | Нуклеиновые кислоты, основные типы, физ-хим | 14.65 KB | |
Сущт несколько форм ДНК Bформаправозакрученная длина полного витка 34 ангстрема ширина 20 А полный виток спирали10 пар нуклеотидов. Аформа: 11 пар оснований в витке угол наклона 20 Сформа9. Третичная формаукладка в прве. Исходная кольцевая форма у бактерий хлоропластов митох. | |||
26066. | Углеводы, их биологическая роль, классификация | 12.82 KB | |
Классификация: Простые сахарамоносахды их производные; Сложные сахараолигосахариды и полисахариды. Моносахаридыальдозы и кетозы. Олигосахаридыуглеводы молекулы которых содержат 210 моносахаридных остатков. Среди них различают гомополисахды из остатков 1 моносахда гетерополисахдыиз остатков разных моносахдов. | |||
26067. | Ферменты как биокатализаторы, их специфичность | 14.05 KB | |
Ферменты явлся глобулярными белками вклт простые однокомпонентные и сложные двукомпонентные. Белковая часть двукомпонентных ферментов называется апоферментом молекула в целом холоферментом небелковые компоненты легко диссоциирущие из комплекса коферменты. Ферменты внутри клетки содержатся и действуют в определенных ее органеллах. Почти все ферменты гликолиза обнаруживаются в цитоплазме ферменты окислительного фосфорилирования во внутренней мембране. | |||