Ім'я файлу: Спецификация на программу Калькулятор.doc
Розширення: doc
Розмір: 112кб.
Дата: 02.11.2021
скачати
Пов'язані файли:
5fan_ru_Дослідження процесу проектування станів програмними засо
5fan_ru_Дослідження процесу проектування станів програмними засо

Спецификация на программу «Калькулятор. Базовая версия».


  1. Общее описание

Часть общего описания – см. 2.1.

Калькулятор состоит из трех модулей – «Графический интерфейс», «Модуль, анализирующий и вычисляющий введенное выражение» (AnalaizerClass.dll) и «Модуль, реализующий математические функции» (CalcClass.dll). После того, как пользователь введет вычисляемое выражение одним из двух вышеописанных способов, управление передается анализирующему модулю, который форматирует выражение, выделяя числа и операторы, проверяет корректность скобочной структуры, а также выявляет неверные с точки зрения математики конструкции (например, 3+*+3), переводит выражение в обратную польскую запись, после чего вычисляет выражения, используя математические функции из модуля CalcClass.


  1. Описание интерфейса




    1. Входные данные




      1. Параметры вызова (формат командной строки)

calc.exe [expression]

expression – математическое выражение, удовлетворяющее требованию 3.2

      1. Состояние информационного окружения

В папке с программой также находятся файлы CalcClass.dll, AnalaizerClass.dll


    1. Выходные данные




      1. Коды возврата программы

Число и 0 на новой строке – результат вычислений выражения.

Error: <сообщение об ошибке> и код ошибки на новой строке — сообщение об ошибке в случае несоответствия входного выражения требованиям 3.2

      1. Состояние информационного окружения после завершения программы

В папке с программой также находятся файлы CalcClass.dll, AnalaizerClass.dll

      1. Сообщения об ошибках, выдаваемые программой (коды ошибок)

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.



    1. Описание файлов, входящих в пакете калькулятора

CalcClass.dll – библиотека, в которой реализованы все необходимые математические функции.

AnalaizerClass.dll – модуль, в котором реализован синтаксический разбор выражения, а также его вычисление.

calc.exe – графическая оболочка, главный модуль.


    1. Интерфейс пользователя

С одной стороны – это спецификация, и в ней не указывают конкретный вид программы, с другой – конкретный же продукт имеется.


Клавиши «1» «2» «3» «4» «5» «6» «7» «8» «9» «0» «/» «*» «-» «+» «mod» «(» «)» – вводят соответствующий символ в поле выражение. Клавиша «Сброс» очищает поле «Выражение», клавиша «Стереть» удаляет последний введенный символ. Клавиша «=» начинает выполнение вычислений. «MR», «M+» и «MC» управляют памятью калькулятора, «+/-» — триггер унарного плюса/унарного минуса.


  1. Описание архитектуры

Как уже отмечалось выше, в архитектуре системы выделено 3 модуля. Каждый из модулей занимается определенной задачей. Соответственно, Система – это взаимодействие этих 3-х модулей. Рассмотрим их подробнее.

  1. Модуль математических операций (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



  1. Модуль анализа и вычисления выражений

Состоит из следующих методов и свойств:

///

/// позиция выражения, на которой отловлена синтаксическая ошибка (в

случае ловли на уровне выполнения - не определяется)

///


private static int erposition = 0;

///

/// Входное выражение

///


public static string expression = "";

///

/// Показывает, есть ли необходимость в выводе сообщений об ошибках.

В случае консольного запуска программы это значение - false.

///


public static bool ShowMessage = true;
///

/// Проверка корректности скобочной структуры входного выражения

///


/// true - если все нормально, false - если есть

ошибка


/// метод бежит по входному выражению, символ за символом анализируя

его и считая количество скобочек. В случае возникновения

/// ошибки возвращает 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()


  1. Модуль графического интерфейса – обеспечивает управление системы в графической форме. Основные функции этого модуля – ввод и вывод данных.



Взаимодействие модулей показано на рисунке:



  1. Функциональные требования




    1. Требования к программе




      1. Калькулятор должен выполнять следующие арифметические операции: сложение, вычитание, умножение, нахождение частного, нахождение остатка. Спецификацию на них см. 3.2.

      2. Калькулятор должен поддерживать работу с целыми числами в пределах от -2147483648 до 2147483647 (в дальнейшем MININT и MAXINT). В случае выхода за эти пределы должно выдаваться сообщение об ошибке Error 06.

      3. Калькулятор должен иметь память на одно целое число, а также возможность выводить это число на экран, сбрасывать его значение на 0 и прибавлять к нему любое другое число, введенное в поле ввода.

        1. При нажатии на клавишу M+ к числу, записанному в память, прибавляется число, записанное в поле «Результат». При этом на сложения накладываются ограничения из 3.2.1.

        2. Если в поле “Результат” записан код ошибки, то при нажатии на клавишу M+ должно выдаваться сообщение «Невозможно преобразовать к числу».

        3. При нажатии на кнопку MC число в памяти обнуляется.

        4. При нажатии на кнопку MR число из памяти приписывается в конец выражения в строке «Выражение».

      4. Калькулятор должен предоставлять возможность пользователю работать с операциями унарного плюса и унарного минуса.

        1. Если между нажатиями на кнопку <+/-> проходит менее 3 секунд, то введенный оператор меняется на противоположный.

        2. Если между нажатиями на кнопку <+/-> проходит более 3 секунд, то к выражению дописывается знак «-».

      5. Калькулятор должен иметь графический интерфейс, содержащий кнопки с цифрами и арифметическими операциями, кнопкой равенства, кнопками работы с памятью, кнопками редактирования скобочек и кнопками сброса, переключателем унарного минуса/унарного плюса, текстовыми полями для ввода выражения и вывода результата.

      6. При нажатии на клавишу калькулятор должен проводить вычисления выражения.

      7. При нажатии на клавишу программа должна прекращать свою работу.

      8. В случае неверно построенного вычисляемого выражения или несоответствия его требованиям 3.2 в текстовое окно результат должно выводиться соответствующие сообщение (см 2.2.3)




    1. Арифметические операции

      1. Сложение

        1. Для чисел, каждое из которых меньше либо равно MAXINT и больше либо равно MININT, функция суммирования должна возвращать правильную сумму с точки зрения математики.

        2. Для чисел, сумма которых больше чем MAXINT и меньше чем MININT, а также в случае, если любое из слагаемых больше чем MAXINT или меньше чем MININT, программа должна выдавать ошибку Error 06(см 2.2.3).

      2. Вычитание

        1. Для чисел, каждое из которых меньше либо равно MAXINT и больше либо равно MININT, функция вычитания должна возвращать правильную разность с точки зрения математики.

        2. Для чисел, разность которых больше чем MAXINT и меньше чем MININT, а также в случае, если любое из чисел больше чем MAXINT или меньше чем MININT, программа должна выдавать ошибку Error 06(см 2.2.3).

      3. Умножение

        1. Для чисел, произведение которых меньше либо равно MAXINT и больше либо равно MININT, функция умножения должна возвращать правильное произведение с точки зрения математики.

        2. Для чисел, произведение которых больше чем MAXINT и меньше чем MININT, а также в случае, если любой из множителей больше чем MAXINT или меньше чем MININT, программа должна выдавать ошибку Error 06(см 2.2.3).

      4. Нахождение частного

        1. Для чисел, меньших либо равных MAXINT и больших либо равных MININT , частное которых меньше либо равно MAXINT и больше либо равно MININT и делитель не равен 0, функция деления должна возвращать правильное частное с точки зрения математики.

        2. Для чисел, частное которых больше чем MAXINT и меньше чем MININT, а также в случае, если любое из чисел больше чем MAXINT или меньше чем MININT, и для делителя, не равного 0, программа должна выдавать ошибку Error 06(см 2.2.3).

        3. Если делитель равен 0, программа должна выдавать ошибку Error 09.

      5. Деление с остатком

        1. Для чисел, меньших либо равных MAXINT и больших либо равных MININT, остаток которых меньше либо равен MAXINT и больше либо равен MININT и делитель не равен 0, функция деления должна возвращать правильный остаток с точки зрения математики.

        2. Для чисел, остаток которых больше чем MAXINT и меньше чем MININT, а также в случае, если любое из чисел больше чем MAXINT или меньше чем MININT, и для делителя, не равного 0, программа должна выдавать ошибку Error 06(см 2.2.3).

        3. Если делитель равен 0, программа должна выдавать ошибку Error 09.

      6. Унарный плюс \ минус

        1. Для чисел, меньших либо равных MAXINT и больших либо равных MININT, операция унарного плюса / минуса должна возвращать число соответствующего знака.

        2. Для чисел, больших MAXINT или меньших MININT, функция должна выдавать ошибку Error 06(см 2.2.3).




    1. Дополнительные требования к входному выражению

      1. Максимальное суммарное число операторов и чисел – 30.

      2. Максимальная глубина вложенности скобочной структуры – 3.

      3. В качестве унарного минуса используется символ «m» , в качестве унарного плюса — «p».

      4. Для операции нахождения частного – «/», для нахождения остатка — «mod».

      5. Между операторами скобками и числами может быть любое количество пробелов.

      6. Разрешается использовать лишь скобки вида «(» и «)».

      7. Максимальная длина выражения – 65535 символов.

скачати

© Усі права захищені
написати до нас