- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Calclator设计文档
一、整体设计
【View层】:负责接收用户输入、将用户的输入序列传给controller层,然后等待controller返回要回显的东西(可以是正在输入的一串数字,也可以是中间结果)。
【Controller层】:负责接收view传来的输入(字符序列),并根据序列特征进行解析(是否根据优先级计算某部分中间结果,是否是异常的不该回显的符号等),如果要计算中间结果就交给module层计算并等待其返回,最后将要回显的字符序列回传给view。
【Module层】:负责接收来自controller的计算任务,进行各种一次运算(加、减、乘、除、单目运算等),将计算结果迅速返回给controller(如果是不可能的计算任务,比如div 0,得返回特定的错误符号)。
用户输入
Module(专职计算)
Controller(解析序列)
View
接收输入的单个符号 回传需要显示的东西
接收计算任务 回传计算结果(必要时是错误符号)
二、接口设计
1、Controller
class CalculatorControl
{
public:
CalculatorControl(ICalculatorModel *pCalculatorModel);
~CalculatorControl(void);
//接收用户指令
string ReceiveCommand(COMMAND stCommand);
//设置计算器的模式
void SetCalculatorForm(CALCULATOR_FORM emStatus);
//获取计算器的模式
CALCULATOR_FORM GetCalculatorForm(void);
//获取用于View显示的数据
string GetStringToDisplay(void);
protected:
//初始化
void InitControl();
//获取数字按键对应的string
string GetOperatorNumber(OPERATOR_SET emOperator);
//获取操作符的优先级
int GetOperatorPriority(OPERATOR_SET emOperator);
//处理不同的指令
void DisposeCommand(COMMAND stCommand);
//检测操作符栈中是否存在指定符号
bool CheckOperatorInStack(OPERATOR_SET emOperator);
CALC_RESULT_STATUS DoBinOperate(string strErrMsg);
CALC_RESULT_STATUS DoUnaryOperate(string strErrMsg);
void PushToOperatorStack(OPERATOR_SET emOperator);
void PushToOperandStack(string strOperand);
CALC_RESULT_STATUS ProcBinOperator(OPERATOR_SET emBinOp);
CALC_RESULT_STATUS ProcUnrayOperator(OPERATOR_SET emUnrayOp);
void ProcLeftBracket(void);
CALC_RESULT_STATUS ProcRightBracket(void);
private:
//操作数栈
vectorstring m_vectorOperandStack;
//操作符栈
vectorOPERATOR_SET m_vectorOperatorStack;
//记录上次操作:,操作数栈;,操作符栈;,尚未入栈的操作数
CONTROL_STATUS m_emControlStatus;
//记录最后一次运算的右操作数
string m_strLastRightOperand;
//记录最后一次运算的操作符
OPERATOR_SET m_emLastOperator;
//尚未入栈的操作数
string m_strInputOperand;
//尚未入栈操作数的状态
INPUT_STATUS m_emInputStatus;
//计算器的模式:,标准模式;,科学模式
CALCULATOR_FORM m_emCalculatorStatus;
//数字按键与string对照表
OperatorNumberMap m_mapO
文档评论(0)