Добавлен: 21.10.2018
Просмотров: 1302
Скачиваний: 16
public int Acc(){ }
//Добавить ноль.
public string AddZero(){ }
//Добавить разделитель.
public string AddDelim(){ }
//Удалить символ справа.
public string Bs() { }
//Очистить редактируемое число.
public string Clear() { }
//Выполнить команду редактирования.
public string DoEdit(int j) { }
}
}
Класс сохраните в файле Editor. В разделе описания констант опишите следующие константы: «разделитель целой и дробной частей» строкового типа; «строковое представление нуля» строкового типа.
-
Содержание отчета
-
Задание.
-
Текст программы.
-
Тестовые наборы данных для тестирования класса.
-
Контрольные вопросы
-
В чём состоит особенность раздела описания класса с уровнем доступа protected?
-
В чём состоит особенность раздела описания класса с уровнем доступа private?
-
В чём состоит особенность раздела описания класса с уровнем доступа public?
-
В чём состоит особенность инициализации полей ссылочного типа и констант в конструкторе?
-
Что такое this?
-
Как описываются поля в классах?
-
Какой операцией создаются объекты классов?
-
Как вызвать нестатический метод класса?
Цель: Сформировать практические навыки реализации классов средствами объектно-ориентированного программирования языка C#; использования библиотечного класса обобщённой коллекции List<> для обработки данных.
-
Задание 2
-
Разработать и реализовать класс History «История», используя класс языка C#. Класс отвечает за документирование выполнения пользователем переводов чисел. Объекты класса хранят исходные числа, результаты преобразования и основания систем счисления исходного числа и результата.
Атрибуты и операции класса представлены таблице 3.
Таблица 3 - Атрибуты и операции класса «История»
История |
Запись(i: integer): String; |
ДобавитьЗапись(a: String); |
Записей(): integer |
ОчиститьИсторию(); |
Обязанность: ввод, вывод, хранение данных введённых пользователем и полученных результатов. |
-
Класс должен отвечать за ввод, вывод, хранение данных введённых пользователем и полученных результатов. Класс должен обеспечивать:
-
добавление записи (ДобавитьЗапись) - строки, содержащей введённое пользователем число, результат его преобразования и основания систем счисления исходной и той, в которую число преобразовано;
-
извлечение записи по её номеру в списке (Запись);
-
очистка списка (ОчиститьИсторию);
-
конструктор (Запись);
-
текущий размер списка в числе записей (Записей);
-
Протестировать каждый метод класса.
-
Рекомендации к выполнению
-
Создайте консольное приложение, в которое добавьте класс History и сохраните его в файле History.
-
В этот же файл добавьте структуру (struct) Record с четырьмя полями для хранения исходного числа, результата и оснований их систем счисления. В структуру добавьте конструктор и метод ToString() для преобразования значения в формат строки.
-
Класс History, постройте на основе библиотечного класса коллекции List<Record> из пространства имён System.Collections.Generic.
-
В классе History опишите поле List<Record> L – список значений типа Record. Для поля опишите уровень доступа private.
-
Следующие операции класса опишите с уровнем доступа public:
-
добавить запись (AddRecord) - строку, содержащую введённое пользователем число, результат его преобразования и основания их систем счисления;
-
извлечь запись по её номеру из списка L;
-
очистить историю (Clear);
-
конструктор (History);
-
текущий размер списка в числе записей (Count);
Описание структуры Record и класса History могут иметь следующий вид:
public struct Record
{
int p1;
int p2;
string number1;
string number2;
public Record(int p1, int p2, string n1, string n2) { }
public override string ToString() { }
}
public class History
{
List<Record> L;
public Record this[int i] { }
public void AddRecord(int p1, int p2, string n1, string n2) { }
public void Clear() { }
public int Count() { }
public History() { }
}
-
Содержание отчета
-
Задание.
-
Текст программы.
-
Тестовые наборы данных для тестирования класса.
-
Контрольные вопросы
-
В чём состоит особенность обобщённой коллекции List< >?
-
В чём состоит отличие типа struct от типа class?
-
Как создаются объекты типа struct?
-
В чём состоит особенность раздела описания класса с уровнем доступа private?
-
В чём состоит особенность раздела описания класса с уровнем доступа public?
-
В чём состоит особенность инициализации полей ссылочного типа и констант в конструкторе?
-
Что такое this?
Цель: Сформировать практические навыки реализации классов на языке C#.
-
Задание 1
-
Реализовать Управление для «Конвертера p1_р2».
-
Протестировать каждый метод класса.
Спецификация класса Управление для «Конвертера p1_р2».
ADT Control_
Данные
Объект класса Control_ (Управление) отвечают за координацию действий между классом «Интерфейс» и классами «Редактор», «Конвертер p1_10», «Конвертер 10_p2», «История». Объект класса Control_ содержат поля: ed типа Editor, his типа История, и свойства: Pin типа int (основание системы счисления исходного числа), Pout типа int (основание системы счисления результата), St типа State (состояние конвертера). Он может находиться в одном из двух состояний: «Редактирование», «Преобразовано». Объекты этого типа изменяемы.
Операции
Операции представлены в таблице 4.
Таблица 4 - Операции
Control_ |
Конструктор |
Вход: |
Нет. |
Процесс: |
Создаёт объект Управление типа (тип Control_) и инициирует поля объекта начальными значениями. |
DoCommand |
Выполнить команду. |
Вход: |
n - целое значение, номер выполняемой команды. |
Предусловия: |
Нет. |
Процесс: |
В зависимости от значения n и состояния (St) передаёт сообщение объекту Редактор или Преобразователь и изменяет состояние. Возвращает строку результата: либо отредактированное число, либо результат преобразования. |
Выход: |
Строка. |
Постусловия: |
Нет. |
end Control_
Рекомендации к выполнению
-
Тип данных реализовать, используя класс.
-
Для записи и считывания полей «преобразователя» используйте свойства.
-
Тип данных реализуйте в отдельном файле Control_.
Пример описания класса Управление приведён ниже.
namespace Конвертор
{
class Control_
{
//Основание системы сч. исходного числа.
const int pin = 10;
//Основание системы сч. результата.
const int pout = 16;
//Число разрядов в дробной части результата.
const int accuracy = 10;
public История his = new История();
public enum State {Редактирование, Преобразовано}
//Свойство для чтения и записи состояние Конвертера.
public State St { get; set; }
//Конструктор.
public Control_()
{
St = State.Редактирование;
Pin = pin;
Pout = pout;
}
//объект редактор
public Editor ed = new Editor();
//Свойство для чтения и записи основание системы сч. р1.
public int Pin { get; set; }
//Свойство для чтения и записи основание системы сч. р2.
public int Pout { get; set; }
//Выполнить команду конвертера.
public string DoCmnd(int j)
{
if (j == 19)
{
double r = Conver_P_10.dval(ed.Number, (Int16)Pin);
string res = Conver_10_P.Do(r, (Int32)Pout,acc());
St = State.Преобразовано;
his.ДобавитьЗапись(Pin, Pout, ed.Number, res);
return res;
}
else
{
St = State.Редактирование;
return ed.DoEdit(j);
}
}
//Точность представления результата.
private int acc()
{
return (int)Math.Round(ed.Acc() * Math.Log(Pin) / Math.Log(Pout) + 0.5);
}
}
}
-
Содержание отчета
-
Задание.
-
Текст программы.
-
Тестовые наборы данных для тестирования класса.
-
Контрольные вопросы
-
Что такое инкапсуляция?
-
Как синтаксически представлено поле в описании класса?
-
Как синтаксически представлен метод в описании класса?
-
Как синтаксически представлено простое свойство в описании класса?
-
Особенности описания методов класса?
-
Особенности описания и назначение конструктора класса?
-
Видимость идентификаторов в описании класса?
-
Особенности вызова методов применительно к объектам класса?
Цель: Сформировать практические навыки реализации графических интерфейсов пользователя (GUI) на основе библиотеки визуальных компонентов.
-
Задание 2
-
Реализовать «Интерфейс» приложения «Конвертер р1_р2», используя библиотечный класс формы и визуальные компоненты.
-
Протестировать методы класса.
Спецификация класса «Интерфейс».
Интерфейс приложения представлен на рисунке 1.
ADT TPanel_p_p
Данные
«Интерфейс» конвертера действительных чисел из системы счисления с основанием p1 в систему счисления с основанием p2 предназначен для: выбора оснований систем счисления p1, p2 из диапазона от 2..16; ввода и редактирования действительного числа со знаком в системе счисления с выбранным основанием p1; отображения результата – представления ввёдённого числа в системе счисления с основанием p2; отображения справки о приложении; отображения истории текущего сеанса работы пользователя с приложением.
«Интерфейс» несёт на себе визуальные компоненты, реализующие выполнения команд преобразователя и объект «Управление» класса Control_.
Операции. Операции представлены в таблице 5.
Таблица 5 - Операции
Наименование |
Пояснение |
trackBar1_Scroll |
Обработчик события Scroll для компонента trackBar1. |
Вход: |
object sender, EventArgs e. sender – указатель на объект, который явился инициатором события Scroll. e - это объект базового класса для классов, содержащих данные о событии. |
Предусловия: |
Пользователь перетаскивает бегунок компонента trackBar1. |
Процесс: |
Обновляет свойства визуальных компонентов формы, связанных с изменением основания системы счисления р1 исходного числа. Устанавливает новое значение основания системы счисления. Обновляет состояние командных кнопок. |
Постусловия: |
Обновления выполнены. |
Выход: |
Нет. |
numericUpDown1_ValueChanged |
Обработчик события ValueChanged для компонента numericUpDown1. |
Вход: |
object sender, EventArgs e. sender – указатель на объект, который явился инициатором события ValueChanged. |
Предусловия: |
Пользователь изменяет р1 с помощью компонента numericUpDown1. |
Процесс: |
Обновляет свойства визуальных компонентов формы, связанных с изменением основания системы счисления р1 исходного числа. Устанавливает новое значение основания системы счисления. Обновляет состояние командных кнопок. |
Постусловия: |
Обновления выполнены. |
Выход: |
Нет. |
trackBar2_Scroll |
Обработчик события Scroll для компонента trackBar2. |
Вход: |
object sender, EventArgs e. sender – указатель на объект, который явился инициатором события Scroll. |
Предусловия: |
Пользователь перетаскивает бегунок компонента trackBar2. |
Процесс: |
Обновляет свойства визуальных компонентов формы, связанных с изменением основания системы счисления p2 исходного числа. Устанавливает новое значение основания системы счисления. |
Постусловия: |
Обновления выполнены. |
Выход: |
Нет. |
numericUpDown2_ValueChanged |
Обработчик события ValueChanged для компонента numericUpDown2. |
Вход: |
object sender, EventArgs e. sender – указатель на объект, который явился инициатором события ValueChanged. |
Предусловия: |
Пользователь изменяет р2 с помощью компонента numericUpDown2. |
Процесс: |
Обновляет свойства визуальных компонентов формы, связанных с изменением основания системы счисления р2 результата. Устанавливает новое значение основания системы счисления. Обновляет состояние командных кнопок. |
Постусловия: |
Обновления выполнены. |
Выход: |
Нет. |
numericUpDown1_ValueChanged |
Обработчик события ValueChanged для компонента numericUpDown1. |
Вход: |
object sender, EventArgs e. sender – указатель на объект, который явился инициатором события ValueChanged. |
Предусловия: |
Пользователь изменяет р1 с помощью компонента numericUpDown1. |
Процесс: |
Обновляет свойства визуальных компонентов формы, связанных с изменением основания системы счисления р1 результата. Устанавливает новое значение основания системы счисления. Обновляет состояние командных кнопок. |
Постусловия: |
Обновления выполнены. |
Выход: |
Нет. |
TPanelp_p_Load |
Обработчик события Load для компонента TPanelp_p. |
Вход: |
(object sender, EventArgs e). sender – указатель на объект, который явился инициатором события Load. |
Предусловия: |
Форма загружается в память. |
Процесс: |
Устанавливает начальные значения свойств визуальных компонентов формы после загрузки формы. |
Выход: |
Нет. |
Постусловия: |
Установка свойств выполнена. |
DoCmnd(int j) |
Выполнить команду. |
Вход: |
j значение целого типа – номер команды преобразователя. |
Предусловия: |
Пользователь нажал командную кнопку команды с номером j. |
Процесс: |
Передаёт сообщение объекту Управление и отображает возвращаемый им результат. Вызывается метод объекта Управление и передаётся номер набранной пользователем команды Конвертора. |
Выход: |
Нет. |
Постусловия: |
Обновляется состояние Интерфейса. |
button_Click |
Обработчик события Click для командных кнопок. |
Вход: |
object sender, EventArgs e. sender: object – указатель на объект, который явился инициатором события Click. |
Предусловия: |
Пользователь нажал командную кнопку. |
Процесс: |
Извлекает из свойства Tag командной кнопки номер соответствующей ей команды. Вызывает метод DoCmnd Интерфейса и передаёт в него номер команды. |
Выход: |
Нет. |
Постусловия: |
Нет. |
TPanelp_p_KeyPress |
Обработчик события KeyPress для алфавитно-цифровых клавиш клавиатуры. |
Вход: |
object sender, KeyPressEventArgs e. |
Предусловия: |
Пользователь нажал алфавитно-цифровую клавишу клавиатуры. |
Процесс: |
Определяет по нажатой алфавитно-цифровой клавише номер соответствующей ей команды. Вызывает метод DoCmnd Интерфейса и передаёт в него номер команды. |
Выход: |
Нет. |
Постусловия: |
Команда пользователя вызвана. |
TPanelp_p_KeyDown |
Обработчик события KeyDown для клавиш управления клавиатуры. |
Вход: |
(object sender, KeyEventArgs e) |
Предусловия: |
Пользователь нажал клавишу управления клавиатуры. |
Процесс: |
Определяет по нажатой клавише управления номер соответствующей ей команды. Вызывает метод DoCmnd Интерфейса и передаёт в него номер команды. |
Выход: |
нет. |
Постусловия: |
Команда пользователя вызвана. |
UpdateP1 |
Выполнить обновления связанные с изменением р1. |
Вход: |
Нет. |
Предусловия: |
Изменено основание с.сч. р1 исходного числа. |
Процесс: |
Выполняет необходимые обновления при смене ос. с. сч. р1. |
Выход: |
Нет. |
Постусловия: |
Состояние кнопок обновлено. |
UpdateP2 |
Выполнить обновления связанные с изменением р2. |
Вход: |
Нет. |
Предусловия: |
Изменено основание с.сч. р2 результата. |
Процесс: |
Выполняет необходимые обновления при смене ос. с. сч. р2. |
Выход: |
Нет. |
Постусловия: |
Состояние кнопок обновлено. |
UpdateButtons |
|
Вход: |
Нет. |
Предусловия: |
Изменено основание с.сч. р1 исходного числа. |
Процесс: |
Обновляет состояния командных кнопок предназначенных для ввода цифр выбранной системы счисления p1. |
Выход: |
Нет. |
Постусловия: |
Состояние кнопок обновлено. |
выходToolStripMenuItem_Click |
Команда Выход основного меню класса TPanelp_p формы. |
Вход: |
object sender, EventArgs e. |
Предусловия: |
Пользователь кликает мышью на пункте Выход основного меню формы. |
Процесс: |
Завершает работу приложения. |
Выход: |
Нет. |
Постусловия: |
Приложение завершено. |
справкаToolStripMenuItem_Click |
Команда Справка основного меню класса TPanelp_p формы. |
Вход: |
object sender, EventArgs e |
Предусловия: |
Пользователь кликает мышью на пункте Справка основного меню формы. |
Процесс: |
Показывает окно со справкой по приложению. |
Выход: |
Нет. |
Постусловия: |
Отображено окно справки. |
историяToolStripMenuItem_Click |
Команда История основного меню класса TPanelp_p формы. |
Вход: |
object sender, EventArgs e |
Предусловия: |
Пользователь кликает мышью на пункте История основного меню формы. |
Процесс: |
Открывает окно История. |
Выход: |
Нет. |
Постусловия: |
Окно История - открыто. |
end TPanel_p_p
Рекомендации к выполнению.
-
Интерфейс приложения будет состоять из трёх форм: основная форма класс TPanel_p_p, HistoryForm – форма для отображения истории, AboutBox – форма, информирующая о приложении. Все они наследники класса Form.
-
Для реализации интерфейса приложения разместите на форме компоненты, описанные в таблице 6.
Таблица 6 - Компоненты
Имя компонента |
Имя класса |
Назначение |
label1 |
Label |
Исходное число. |
label2 |
Label |
Результат. |
label3 |
Label |
Подпись к исходному числу. |
label4 |
Label |
Подпись к результату. |
trackBar1 |
TrackBar |
Изменять основание с. сч. р1. |
trackBar2 |
TrackBar |
Изменять основание с. сч. р2. |
numericUpDown1 |
NumericUpDown |
Изменять основание с. сч. р1. |
numericUpDown2 |
NumericUpDown |
Изменять основание с. сч. р2. |
button1 – button10 |
Button |
Ввод цифр от 0 – 9. |
button11 – button16 |
Button |
Ввод цифр от A – F. |
button17 |
Button |
Разделитель целой и дробной частей (,). |
button18 |
Button |
Забой крайнего правого символа (BS). |
button19 |
Button |
Удалить исходное число (CL). |
button20 |
Button |
Выполнить (Execute). |
menuStrip1 |
menuStrip1 |
Основное меню главной формы. |
выходToolStripMenuItem |
ToolStripMenuItem |
Завершение работы приложения. |
историяToolStripMenuItem |
ToolStripMenuItem |
Просмотр журнала сеанса работы. |
справкаToolStripMenuItem |
ToolStripMenuItem |
Справка по приложению. |
Для этого перейдите на вкладку Конструктор формы окна редактора и сделайте форму активной. Добавьте на форму из вкладки «Панели элементов» из раздела «Все формы Windows Forms» командные кнопки Button. Кнопки помещайте на форму снизу вверх слева направо, начиная с 0. Порядок добавления кнопок на форму должен совпадать с порядком их нумерации. Выделите все кнопку и в окне Свойства на закладке Свойства раскройте свойство Font (Шрифт) и установите требуемые вам свойства для шрифта. Затем в свойство Text (Текст) занесите соответствующие цифры. Затем в свойство Tag каждой кнопки занесите целое число соответствующее кнопке: кнопки для ввода цифр нумеруйте от 0 до 15; кнопка разделитель целой и дробной части – 16; удалить крайний символ слева (BS) - 17; очистить всё (CL) – 18; выполнить ( Enter) - 19. Измените размер кнопок (свойство Size), если это необходимо.
Добавьте на форму два компонента TrackBar из вкладки «Панель элементов» из раздела «Все формы Windows Forms». С помощью окна «Свойства» установите в их свойства Minimum значение 2, а в Maximum - значение 16. Рядом с каждым из них разместите компонент NumericUpDown «числовое поле со стрелками вверх/вниз». Добавьте на форму два компонента Label. В одном будем отображать основание системы счисления р1, в другом – подпись к нему. Добавьте на форму ещё два компонента Label для основания системы счисления результата р2.
Добавьте на форму компонент MenuStrip из вкладки «Панель элементов» из раздела «Все формы Windows Forms». Добавьте в компонент MenuStrip три пункта меню MenuItem. С помощью окна «Свойства» установите в их свойства Text значение Выход, История, Справка. Полученная форма будет иметь вид, как представлено на рис.18 .