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 /// /// слагаемое
Используется также глобальная переменная: /// /// Последнее сообщение об ошибке. /// Поле и свойство для него /// privatestaticstring _lastError = "";
publicstaticstring lastError Модуль анализа и вычисления выражений
Состоит из следующих методов и свойств: /// /// позиция выражения, на которой отловлена синтаксическая ошибка (в случае ловли на уровне выполнения - не определяется) /// privatestaticint erposition = 0; /// ///Входное выражение /// publicstaticstring expression = "";
/// /// Показывает, есть ли необходимость в выводе сообщений об ошибках. В случае консольного запуска программы это значение - false. /// publicstaticbool ShowMessage = true; /// /// Проверка корректности скобочной структуры входного выражения /// ///true - если все нормально, false- если есть ошибка /// метод бежит по входному выражению, символ за символом анализируя его, и считая количество скобочек. В случае возникновения /// ошибки возвращает false а в erposition записывает позицию, на которой возникла ошибка. publicstaticbool CheckCurrency()
/// /// Форматирует входное выражение, выставляя между операторами пробелы и удаляя лишние, а также отлавливает неопознанные операторы, следит за концом строки /// а также отлавливает ошибки на конце строки /// ///конечную строку или сообщение об ошибке, начинающиеся со спец. символа & publicstaticstring Format()
/// /// Создает массив, в котором располагаются операторы и символы, представленные в обратной польской записи (безскобочной) /// На этом же этапе отлавливаются почти все остальные ошибки (см. код). По сути - это компиляция. /// ///массив обратной польской записи publicstatic System.Collections.ArrayList CreateStack()
/// /// Вычисление обратной польской записи /// ///результат вычислений или сообщение об ошибке publicstaticstring RunEstimate()
/// /// Метод, организующий вычисления. По очереди запускает CheckCorrncy, Format, CreateStack и RunEstimate /// /// publicstaticstring Estimate()
Модуль графического интерфейса – обеспечивает управление системы в графической форме. Основные функции этого модуля – ввод и вывод данных.