Ім'я файлу: Спецификация на программу Калькулятор.doc Розширення: doc Розмір: 112кб. Дата: 02.11.2021 скачати Пов'язані файли: 5fan_ru_Дослідження процесу проектування станів програмними засо 5fan_ru_Дослідження процесу проектування станів програмними засо Спецификация на программу «Калькулятор. Базовая версия». Общее описание Часть общего описания – см. 2.1. Калькулятор состоит из трех модулей – «Графический интерфейс», «Модуль, анализирующий и вычисляющий введенное выражение» (AnalaizerClass.dll) и «Модуль, реализующий математические функции» (CalcClass.dll). После того, как пользователь введет вычисляемое выражение одним из двух вышеописанных способов, управление передается анализирующему модулю, который форматирует выражение, выделяя числа и операторы, проверяет корректность скобочной структуры, а также выявляет неверные с точки зрения математики конструкции (например, 3+*+3), переводит выражение в обратную польскую запись, после чего вычисляет выражения, используя математические функции из модуля CalcClass. Описание интерфейса Входные данные Параметры вызова (формат командной строки) calc.exe [expression] expression – математическое выражение, удовлетворяющее требованию 3.2 Состояние информационного окружения В папке с программой также находятся файлы CalcClass.dll, AnalaizerClass.dll Выходные данные Коды возврата программы Число и 0 на новой строке – результат вычислений выражения. Error: <сообщение об ошибке> и код ошибки на новой строке — сообщение об ошибке в случае несоответствия входного выражения требованиям 3.2 Состояние информационного окружения после завершения программы В папке с программой также находятся файлы CalcClass.dll, AnalaizerClass.dll Сообщения об ошибках, выдаваемые программой (коды ошибок) Error 01 at — Неправильная скобочная структура, ошибка на символе Error 02 at — Неизвестный оператор на символе. Error 03 — Неверная синтаксическая конструкция входного выражения Error 04 at — Два подряд оператора на символе. Error 05 — Незаконченное выражение. Error 06 — Слишком малое или слишком большое значение числа для int. Числа должны быть в пределах от -2147483648 до 2147483647 Error 07 — Слишком длинное выражение. Максмальная длина — 65536 символов. Error 08 — Суммарное количество чисел и операторов превышает 30 Error 09 – Ошибка деления на 0. Описание файлов, входящих в пакете калькулятора CalcClass.dll – библиотека, в которой реализованы все необходимые математические функции. AnalaizerClass.dll – модуль, в котором реализован синтаксический разбор выражения, а также его вычисление. calc.exe – графическая оболочка, главный модуль. Интерфейс пользователя С одной стороны – это спецификация, и в ней не указывают конкретный вид программы, с другой – конкретный же продукт имеется. Клавиши «1» «2» «3» «4» «5» «6» «7» «8» «9» «0» «/» «*» «-» «+» «mod» «(» «)» – вводят соответствующий символ в поле выражение. Клавиша «Сброс» очищает поле «Выражение», клавиша «Стереть» удаляет последний введенный символ. Клавиша «=» начинает выполнение вычислений. «MR», «M+» и «MC» управляют памятью калькулятора, «+/-» — триггер унарного плюса/унарного минуса. Описание архитектуры Как уже отмечалось выше, в архитектуре системы выделено 3 модуля. Каждый из модулей занимается определенной задачей. Соответственно, Система – это взаимодействие этих 3-х модулей. Рассмотрим их подробнее. Модуль математических операций (CalcClass.dll) Модуль содержит все математические функции, используемые в программе. /// /// Функция сложения числа a и b /// /// слагаемое /// слагаемое /// public static int Add(long a, long b) /// /// функция вычитания чисел a и b /// /// уменьшаемое /// вычитаемое /// public static int Sub(long a, long b) /// /// функция умножения чисел a и b /// /// множитель /// множитель /// public static int Mult(long a, long b) /// /// функция нахождения частного /// /// делимое /// делитель /// public static int Div(long a, long b) /// /// функция деление по модулю /// /// делимое /// делитель /// public static int Mod(long a, long b) /// /// унарный плюс /// /// /// public static int ABS(long a) /// /// унарный минус /// /// /// public static int IABS(long a) Используется также глобальная переменная: /// /// Последнее сообщение об ошибке. /// Поле и свойство для него /// private static string _lastError = ""; public static string lastError Состоит из следующих методов и свойств: /// /// позиция выражения, на которой отловлена синтаксическая ошибка (в случае ловли на уровне выполнения - не определяется) /// private static int erposition = 0; /// /// Входное выражение /// public static string expression = ""; /// /// Показывает, есть ли необходимость в выводе сообщений об ошибках. В случае консольного запуска программы это значение - false. /// public static bool ShowMessage = true; /// /// Проверка корректности скобочной структуры входного выражения /// /// ошибка /// метод бежит по входному выражению, символ за символом анализируя его и считая количество скобочек. В случае возникновения /// ошибки возвращает false а в erposition записывает позицию, на которой возникла ошибка. public static bool CheckCurrency() /// /// Форматирует входное выражение, выставляя между операторами пробелы и удаляя лишние, а также отлавливает неопознанные операторы, следит за концом строки /// а также отлавливает ошибки на конце строки /// /// спец. символа & public static string Format() /// /// Создает массив, в котором располагаются операторы и символы, представленные в обратной польской записи (безскобочной) /// На этом же этапе отлавливаются почти все остальные ошибки (см код). По сути - это компиляция. /// /// public static System.Collections.ArrayList CreateStack() /// /// Вычисление обратной польской записи /// /// public static string RunEstimate() /// /// Метод, организующий вычисления. По очереди запускает CheckCorrncy, Format, CreateStack и RunEstimate /// /// public static string Estimate() Модуль графического интерфейса – обеспечивает управление системы в графической форме. Основные функции этого модуля – ввод и вывод данных. Взаимодействие модулей показано на рисунке: Функциональные требования Требования к программе Калькулятор должен выполнять следующие арифметические операции: сложение, вычитание, умножение, нахождение частного, нахождение остатка. Спецификацию на них см. 3.2. Калькулятор должен поддерживать работу с целыми числами в пределах от -2147483648 до 2147483647 (в дальнейшем MININT и MAXINT). В случае выхода за эти пределы должно выдаваться сообщение об ошибке Error 06. Калькулятор должен иметь память на одно целое число, а также возможность выводить это число на экран, сбрасывать его значение на 0 и прибавлять к нему любое другое число, введенное в поле ввода. При нажатии на клавишу M+ к числу, записанному в память, прибавляется число, записанное в поле «Результат». При этом на сложения накладываются ограничения из 3.2.1. Если в поле “Результат” записан код ошибки, то при нажатии на клавишу M+ должно выдаваться сообщение «Невозможно преобразовать к числу». При нажатии на кнопку MC число в памяти обнуляется. При нажатии на кнопку MR число из памяти приписывается в конец выражения в строке «Выражение». Калькулятор должен предоставлять возможность пользователю работать с операциями унарного плюса и унарного минуса. Если между нажатиями на кнопку <+/-> проходит менее 3 секунд, то введенный оператор меняется на противоположный. Если между нажатиями на кнопку <+/-> проходит более 3 секунд, то к выражению дописывается знак «-». Калькулятор должен иметь графический интерфейс, содержащий кнопки с цифрами и арифметическими операциями, кнопкой равенства, кнопками работы с памятью, кнопками редактирования скобочек и кнопками сброса, переключателем унарного минуса/унарного плюса, текстовыми полями для ввода выражения и вывода результата. При нажатии на клавишу При нажатии на клавишу В случае неверно построенного вычисляемого выражения или несоответствия его требованиям 3.2 в текстовое окно результат должно выводиться соответствующие сообщение (см 2.2.3) Арифметические операции Сложение Для чисел, каждое из которых меньше либо равно MAXINT и больше либо равно MININT, функция суммирования должна возвращать правильную сумму с точки зрения математики. Для чисел, сумма которых больше чем MAXINT и меньше чем MININT, а также в случае, если любое из слагаемых больше чем MAXINT или меньше чем MININT, программа должна выдавать ошибку Error 06(см 2.2.3). Вычитание Для чисел, каждое из которых меньше либо равно MAXINT и больше либо равно MININT, функция вычитания должна возвращать правильную разность с точки зрения математики. Для чисел, разность которых больше чем MAXINT и меньше чем MININT, а также в случае, если любое из чисел больше чем MAXINT или меньше чем MININT, программа должна выдавать ошибку Error 06(см 2.2.3). Умножение Для чисел, произведение которых меньше либо равно MAXINT и больше либо равно MININT, функция умножения должна возвращать правильное произведение с точки зрения математики. Для чисел, произведение которых больше чем MAXINT и меньше чем MININT, а также в случае, если любой из множителей больше чем MAXINT или меньше чем MININT, программа должна выдавать ошибку Error 06(см 2.2.3). Нахождение частного Для чисел, меньших либо равных MAXINT и больших либо равных MININT , частное которых меньше либо равно MAXINT и больше либо равно MININT и делитель не равен 0, функция деления должна возвращать правильное частное с точки зрения математики. Для чисел, частное которых больше чем MAXINT и меньше чем MININT, а также в случае, если любое из чисел больше чем MAXINT или меньше чем MININT, и для делителя, не равного 0, программа должна выдавать ошибку Error 06(см 2.2.3). Если делитель равен 0, программа должна выдавать ошибку Error 09. Деление с остатком Для чисел, меньших либо равных MAXINT и больших либо равных MININT, остаток которых меньше либо равен MAXINT и больше либо равен MININT и делитель не равен 0, функция деления должна возвращать правильный остаток с точки зрения математики. Для чисел, остаток которых больше чем MAXINT и меньше чем MININT, а также в случае, если любое из чисел больше чем MAXINT или меньше чем MININT, и для делителя, не равного 0, программа должна выдавать ошибку Error 06(см 2.2.3). Если делитель равен 0, программа должна выдавать ошибку Error 09. Унарный плюс \ минус Для чисел, меньших либо равных MAXINT и больших либо равных MININT, операция унарного плюса / минуса должна возвращать число соответствующего знака. Для чисел, больших MAXINT или меньших MININT, функция должна выдавать ошибку Error 06(см 2.2.3). Дополнительные требования к входному выражению Максимальное суммарное число операторов и чисел – 30. Максимальная глубина вложенности скобочной структуры – 3. В качестве унарного минуса используется символ «m» , в качестве унарного плюса — «p». Для операции нахождения частного – «/», для нахождения остатка — «mod». Между операторами скобками и числами может быть любое количество пробелов. Разрешается использовать лишь скобки вида «(» и «)». Максимальная длина выражения – 65535 символов. |