c课程设计---用vc制作多功能计算器(编辑修改稿)内容摘要:
oid OnDisplay(LPCTSTR lpszStr)。 //设置编辑控件显示文本 protected: //{{AFX_MSG(CAvEdit) Afx_msg void OnPaint()。 //WM_ON_PAINT 消息的响应函数 //}}AFX_MSG 图 410 添加成员变量 (2)添加编辑控件代码 在 OnDisplay 函数中设置编辑框的显示文本。 实现代码如下: m_Caption = lpszStr。 OnDraw()。 在 OnPaint 函数中调用自定义函数 OnDraw。 实现代码如下: CPaintDC dc(this)。 // device context for painting OnDraw()。 在 OnDraw 函数中,在编辑控件客户区域内绘制文本。 首先,得到编辑控件客户区的矩形域;其次,得到编辑控件客户区的设备环境变量;接着,用指定的画刷填充客户区,并且用指定的颜色绘制显示文本。 效 果如图 411 所示,其代码如附录 2 所示。 图 411 运行结果 对话框界面设计 对主对话框添加成员变量和函数。 主要成员变量: // 头文件 CButton m_DspStatic。 CAdvEdit m_DspEdit。 //显示计算结果的编辑框 CMenu* m_Menu。 //对话框菜单按钮 BOOL m_IsExtend。 //标志对话框是否已扩展 主要成员函数: // 头文件 //{{AFX_VIRTUAL(CCalculatorDlg) Protected: virtual void DoDataExchange(CDataExchange*pDX)。 //数据交换函数 //}}AFX_VIRTUAL virtual BOOL OnInitDialog()。 //虚函数,可覆盖用来进行用户初始化操作 virtual void OnOK()。 //虚函数,覆盖用来屏蔽 Enter 操作 //{{AFX_MSG(CCalculatorDlg) //响应消息 ON_WM_CTLCOLOR,用以修改对话框及其控件颜色 afx_msg HBRUSH OnCtlColor(CDC*Pdc,CWnd*pWnd,UINT nCtlColor)。 afx_msg void OnPaint()。 //响应消息 WM_ON_PAINT afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct)。 //响应消息 WM_ON_CREATE //}}AFX_MSG 除以上主要成员外,还要对每个按钮控件定义一个 CAdvButton 的对象与之相关联 ,并为每个按钮控件建军立一个成员函数来响应其 EN_CLICKED 消息。 如图 412 所示: 图 412 为按钮控件添加消息响应 (1)加载菜单资源 在 节中,已经为工程新建了一个菜单资源 IDR_MENU,现将其添加到计算器对话框上。 利用 CMenu 类的LoadMenu 函数,将菜单资源加载到内存中。 再调用 SetMenu 函数,将菜单添加到对话框上,代码如附录 3 所示。 如图 413 所示: 图 413 运行结果 (2)关联控件与对象 在 CCalculatorDlg 类的声明 中,已经为编辑框、静态框及每一个按钮声明了相应类型的对象与之对应。 但这些控 件与对象的关联工作是在 DoDataExchange 函数中 DDX_Control 宏来完成的。 图 414 关联控件与对象 (3)实现对话框扩展功能 首先在 CCalculatorDlg::OnCreate 函数中,设定对话框的初始大小与位置。 实现代码如下: CRect rect。 GetWindowRect(amp。 rect)。 //得到对话框的窗口区域矩形 //指定窗口大小与位置 :宽为 186 像素 ,高度为 245 像素 SetWindowPos(amp。 wndTop,0,0,186,245,SWP_NOMOVE|SWP_NOZORDER)。 其次,添加菜单项 ID_EXTEND 的响应函数 OnExtend。 在 OnExtend 函数中,首先判断当前对话框状态,即是否已经被扩展。 如果对话框已被扩展,则收缩对话框。 首先得到对话框的当前位置,将其指定为新的宽度,但高度维持不变。 再将其中的编辑控件和编辑控件外的静态框收缩到合理位置。 最后将菜单项 ID_EXTENDR 的显示文本设置为“扩展”,将表示对话框是否扩展标识变量 m_IsExtend 设置为 FALSE。 如果对话框为 非扩展,则扩展对话框。 首先得到对话框的当前位置,将其指定为新的宽度,但高度不变。 再将其中的编辑控件和编辑控件外的静态框收缩到合理的位置。 最后将菜单项 ID_EXTEND 的显示文本设置为“收缩”,将表示对话框是否扩展的标识变量 m_IsExtend 设置为 TURE,实现代码如附录 3 所示。 效果如图 415 和 416 所示: 图 415 扩展图 图 416 收缩图 (4)屏蔽 Enter 键 直到现在为止,虽然计算器的界面已经完成。 但是,它还有一个缺陷:当 Enter 键按下时,对话框应付突然关掉。 这是因为对话框默认具有 焦点的控件是 OK 键,当 Enter 键按下时,框架会自动执行当前拥有焦点的控件的响应函数,所以对话框自然就关闭了。 要屏蔽这一功能,只要执行下面的代码就可以。 void CCalculatorDlg::OnOK() { //CDialog::OnOK()。 //屏蔽掉此句代码 } (5)添加背景图 为对话框添加背景图,以增加界面的美观性。 首先为工程添加一幅位图资源,以作为对话框的背景。 然后加入一个 Static 控件,将其 Type 属性设为 Bitmap,并为 Image 属性选择位图资源,如图 417 所示。 图 417 添加位图 参数设置后对话框的外观如图 418 所示。 图 418 运行结果图 数值计算功能的实现 具体功能的实现首先添加成员变量。 该计算器中所有的运算都是二元运算,即需要两个操作数,一个二元运算操作符。 所以必须声明两个浮点数,分别用来表示初始操作数和结果操作数,同时,必须声明两个字符串类型的变量,分别用来显示初始操作数。 还需要一个整形变量来记录当前运算符,以及一个整形变量来记录当前小数点按钮是否被单击过。 实现代码如下: // 头文件 private: char m_buffer[100]。 //用来存贮需要显示的数字 CString m_StrBegin。 //记录初始操作数的字符串 float DtoR。 // double m_end。 //记录结果操作数 double m_begin。 //记录初始操作数 int m_bit。 //记录运算符 int m_IsCheckPoint。 //判断是否按下了小数点符号 ,当其为 0 时,表示没有按下 当数字键 0— 9 被单击时,则将当前所按键加到初始操作数末尾,并将初始操作数显示出来。 以数字键盘被单击为例,实现代 码如下: //以按键 0 的响应为例,其余 0— 9 的响应完全类似 m_StrBegin = m_StrBegin+0。 if (!m_IsCheckPoint) //如果小数点按下了 (m_StrBegin+.)。 else //如果小数点没有按下 (m_StrBegin)。 当小数点键被单击时,首先判断小数点键是否已经被单击过,以及当前初始操作数字符串是否为空。 如果小数 点键没有被单击过,而且当前初始操作数字符串不为空,则将小数点追加到初始操作数末尾,并且修改小数点标识m_IsCheckPoint 为 TRUE。 实现代码如下: if (!m_IsCheckPoint amp。 amp。 m_StrBegin != ) //如果小数点没有按下 ,且字符不为空 { m_StrBegin = m_StrBegin+.。 (m_StrBegin)。 //显示文本 m_IsCheckPoint = true。 //改变标识 } 当清除键 CE 被单击时,则对所有的成员变量进行初始化。 清除小数点标识,将保存初始操作数和结果操作数的字符串清空,将保存初始操作数和结果操作数的浮点数清 0,将当前操作符清 0。 实现代码如下: m_IsCheckPoint = false。 //消除小数点按下标记 m_StrBegin =。 m_begin =。 //清 0 m_end =。 //清 0 m_bit = 0。 //当前操作符为无效操作 当任何一个运算符键被单击时,首先根据当前运算符计算运算结果,再修改记录当前运算符的变量的值。 以加号键被按下为例,实现代码如下: //以加号为例,其余的操作符也采用类似操作 Result()。 //计算运算结果 m_bit = 1。 //设置当前运算类型; 1 代表加法运算 计算器的核心运算函数 —— Result。 在 Result 中,首先将记录当前操作数的字符串中保存的字符串转化为浮点数;其次根据当前操作符的类型,选择适当的运算操作;再将记录结果操作数的浮点变量中的值转化为字 符串,并显示在结果编辑框中。 Result 函数实现代码如附录 3 所示。 5 程序结果的演示 测试的研究与选择 测试过程中要判断测试是否成功,要分析程序界面的变化和计算数据的结果是否正确以及各功能键是否能正常使用。 测试环境 测试环境如下: 测试系统 : Windows XP 测试工具 : Visual Studio C++ 实例测试结果 首先,在运行界面测试简单运算是否能正常运算,输入“ 34+87=”见结果图 51 所示,观察计算结果是否正确属实 图 51“ 34+78=” 的运行 结果 其次,展开计算器,选中“度数”输入“ 30”单击“ sin”观察结果,见图 52 所示 图 52“ sin30176。 ” 的运行结果 最后,选中“弧度”输入“ 15”单击“ sin”观察结果,见图 53 所示。c课程设计---用vc制作多功能计算器(编辑修改稿)
相关推荐
类层次中各个类的描述(包括属性和方法); ( 4) 完成类层次中各个成员函数的定义; ( 5) 完成系统的应用模块; ( 6) 功能 调试; ( 7) 完成系统总结报告以及系统使用说明书。 : ( 8) 只能使用 C/C++语言,源程序要有适当的注释,使程序容易阅读 ( 9) 至少采用文本菜单界面(如果能采用图形菜单界面更好) ( 10) 学生可自动增加新功能模块 2 总体设计 杂志订阅管理系统
**\n。 cout\n\n\n。 cout\t\t 功能菜单 \n\n。 cout\t(1) 信息录用 \n。 cout\t(2) 添加物品信息 \n。 cout\t(3) 显示物品信息 \n。 cout\t(4) 查找物品信息 \n。 cout\t(5) 删除物品信息 \n。 cout\t(6) 保存物品信息 \n。 cout\t(7) 退出 \n。 cout\n 请输入 1 或 2 或 3
//商品信息录入 void Alter()。 //商品信息修改 void list()。 //商品信息显示 void Display()。 float Checkout(int quantity)。 //单个商品小结 void Total()。 //总计 void buy()。 //商品买入 tong类 析构函数 商品 信息录入 (Set) 商品信息修改(Alter) 商品信息显示(list)
程序总体流程图 : 一元多项式简单计算器 菜单选项 加法 减法 输出一元多项式 创建一元多项式 5 各个模块的功能 : 菜单选项:使用户创建一元多项式及选择运算方式; 加法 : 使用户创建的一元多项式相加并输出结果; 减法:使用户创建的一元多项式相减并输出结果; 、数据结构设计 数据结构设计: Head。 头指针 结点 1 结点 2。 表尾 类设计: struct Node { float
return () != ()。 } bool operator= (const fraction amp。 lhs, const fraction amp。 rhs) //重载 =判断前分数是否大于等 //于后分数 { return () = ()。 } bool operator= (const fraction amp。 lhs, const fraction amp。 rhs) //重载
jects that make up a DataSet. Releasing memory is the GC39。 s responsibility. Because the .NET Framework designers did not need to free these objects, the plicated web of object references did not