Файл: Приложение Конвертер.docx

ВУЗ: Не указан

Категория: Методичка

Дисциплина: Программирование

Добавлен: 21.10.2018

Просмотров: 1218

Скачиваний: 16

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

public int Acc(){ }

//Добавить ноль.

public string AddZero(){ }

//Добавить разделитель.

public string AddDelim(){ }

//Удалить символ справа.

public string Bs() { }

//Очистить редактируемое число.

public string Clear() { }

//Выполнить команду редактирования.

public string DoEdit(int j) { }

}

}

Класс сохраните в файле Editor. В разделе описания констант опишите следующие константы: «разделитель целой и дробной частей» строкового типа; «строковое представление нуля» строкового типа.

        1. Содержание отчета

  1. Задание.

  2. Текст программы.

  3. Тестовые наборы данных для тестирования класса.

        1. Контрольные вопросы

  1. В чём состоит особенность раздела описания класса с уровнем доступа protected?

  2. В чём состоит особенность раздела описания класса с уровнем доступа private?

  3. В чём состоит особенность раздела описания класса с уровнем доступа public?

  4. В чём состоит особенность инициализации полей ссылочного типа и констант в конструкторе?

  5. Что такое this?

  6. Как описываются поля в классах?

  7. Какой операцией создаются объекты классов?

  8. Как вызвать нестатический метод класса?

        1. Класс История.

Цель: Сформировать практические навыки реализации классов средствами объектно-ориентированного программирования языка C#; использования библиотечного класса обобщённой коллекции List<> для обработки данных.

        1. Задание 2

  1. Разработать и реализовать класс History «История», используя класс языка C#. Класс отвечает за документирование выполнения пользователем переводов чисел. Объекты класса хранят исходные числа, результаты преобразования и основания систем счисления исходного числа и результата.

Атрибуты и операции класса представлены таблице 3.

Таблица 3 - Атрибуты и операции класса «История»

История

Запись(i: integer): String;

ДобавитьЗапись(a: String);

Записей(): integer

ОчиститьИсторию();

Обязанность: ввод, вывод, хранение данных введённых пользователем и полученных результатов.

  1. Класс должен отвечать за ввод, вывод, хранение данных введённых пользователем и полученных результатов. Класс должен обеспечивать:

  • добавление записи (ДобавитьЗапись) - строки, содержащей введённое пользователем число, результат его преобразования и основания систем счисления исходной и той, в которую число преобразовано;

  • извлечение записи по её номеру в списке (Запись);

  • очистка списка (ОчиститьИсторию);

  • конструктор (Запись);

  • текущий размер списка в числе записей (Записей);

  1. Протестировать каждый метод класса.

        1. Рекомендации к выполнению

  1. Создайте консольное приложение, в которое добавьте класс History и сохраните его в файле History.

  2. В этот же файл добавьте структуру (struct) Record с четырьмя полями для хранения исходного числа, результата и оснований их систем счисления. В структуру добавьте конструктор и метод ToString() для преобразования значения в формат строки.

  3. Класс History, постройте на основе библиотечного класса коллекции List<Record> из пространства имён System.Collections.Generic.

  4. В классе History опишите поле List<Record> L – список значений типа Record. Для поля опишите уровень доступа private.

  5. Следующие операции класса опишите с уровнем доступа 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() { }

}

        1. Содержание отчета

  1. Задание.

  2. Текст программы.

  3. Тестовые наборы данных для тестирования класса.

        1. Контрольные вопросы

  1. В чём состоит особенность обобщённой коллекции List< >?

  2. В чём состоит отличие типа struct от типа class?

  3. Как создаются объекты типа struct?

  4. В чём состоит особенность раздела описания класса с уровнем доступа private?

  5. В чём состоит особенность раздела описания класса с уровнем доступа public?

  6. В чём состоит особенность инициализации полей ссылочного типа и констант в конструкторе?

  7. Что такое this?

      1. Лабораторная работа №3

        1. Класс Управление для «Конвертора p1_р2».

Цель: Сформировать практические навыки реализации классов на языке C#.

        1. Задание 1

  1. Реализовать Управление для «Конвертера p1_р2».

  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_

Рекомендации к выполнению

  1. Тип данных реализовать, используя класс.

  2. Для записи и считывания полей «преобразователя» используйте свойства.

  3. Тип данных реализуйте в отдельном файле 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);

}

}

}

        1. Содержание отчета

  1. Задание.

  2. Текст программы.

  3. Тестовые наборы данных для тестирования класса.

        1. Контрольные вопросы

  1. Что такое инкапсуляция?

  2. Как синтаксически представлено поле в описании класса?

  3. Как синтаксически представлен метод в описании класса?

  4. Как синтаксически представлено простое свойство в описании класса?

  5. Особенности описания методов класса?

  6. Особенности описания и назначение конструктора класса?

  7. Видимость идентификаторов в описании класса?

  8. Особенности вызова методов применительно к объектам класса?

        1. Интерфейс приложения «Конвертор р1_р2».

Цель: Сформировать практические навыки реализации графических интерфейсов пользователя (GUI) на основе библиотеки визуальных компонентов.

        1. Задание 2

  1. Реализовать «Интерфейс» приложения «Конвертер р1_р2», используя библиотечный класс формы и визуальные компоненты.

  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

Рекомендации к выполнению.

  1. Интерфейс приложения будет состоять из трёх форм: основная форма класс TPanel_p_p, HistoryForm – форма для отображения истории, AboutBox – форма, информирующая о приложении. Все они наследники класса Form.

  2. Для реализации интерфейса приложения разместите на форме компоненты, описанные в таблице 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

Ввод цифр от AF.

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 .