面向对象课程设计_第1页
面向对象课程设计_第2页
面向对象课程设计_第3页
面向对象课程设计_第4页
面向对象课程设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 面向对象的编程技术面向对象的编程技术 课程设计报告 学学 号号 姓姓 名名 班班 级级 指指导导教教师师 2 用用 VC 制作多功能计算器制作多功能计算器 1 功能说明功能说明 计算器的设计按软件工程的方法进行 系统具有良好的界面 必要的交互信息 简约美观的效果 使用人员能快捷简单地进行操作 即可单击按钮进行操作 即时准确地获得需要的计算的结果 充分降低了数字计算的难度和节约了时间 对人们的生活有一定的帮助 1 包含的功能有 加 减 乘 除运算 开方 求倒数等功能 2 计算器上加 减 乘 除为一个控件数组 数字 0 9 和其余的为单一的控 件 3 给对话框添加菜单 4 输入的原始数据 运算中间数据和结果都显示在窗口顶部的同一个标签中 5 实现对话框的扩展功能 6 计算功能基本上是用系统内部函数 7 程序可以能自动判断输入数据的正确性 保证不出现多于一个小数点 以 0 开头等不正常现象 8 AC 按钮可以清除所有已输入的数据从头计算 BACK 按钮对操作数进行 退位 功能模块的实现 1 首先 添加一个高级编辑控件类 在此类的基础上实现高级编辑控件 在 EditResult 中设置编辑框的显示文本 在 strResult 中将其显示出来 2 其次 实现主对话框界面功能 主要是加载菜单资源和对话框扩展功能的实 现 在 CCalculatorDlg OnPaint 函数中设定对话框的初始大小与位置 可以在 这个对话框中进行窗口风格修改 位置设置等操作 2 需求分析需求分析 本软件主要用于计算机 windows 2000 XP 以上版本的用户的使用 这次课程设 计一般是实现简单计算器的功能 要程序能实现 加 减 乘 除 开方 倒 数等运算功能 还要实现数据的输入 输出 计算 显示及程序退出等功能 另外还可以实现多种科学计算的功能 如 三角函数的计算 对数指数的计算 3 等等 3 窗体设计窗体设计 利用 MFC AppWinzard 生成计算器应用程序框架具体步骤如下 1 执行 VC 程序 选择文件 新建命令 弹出新建对话框 单击工程标签 转到工 程选项卡 选择 MFC AppWizard exe 选项 然后在工程名称文本框中输入 Calculator 在位置文本框是指项目的本地路径 2 单击确定按钮 弹出 MFC 应用程序向导 步聚 1 对话框 选中基本对话框按 钮 如图所示 3 单击下一步按钮 弹出 MFC 应用程序向导 步聚 2 对话框 如图所示 4 单击下一步按钮 弹出 MFC 应用程序向导 步聚 3 对话框 如图所示 4 5 单击下一步按钮 弹出 MFC 应用程序向导 步聚 4 对话框 如图所示 单击 完成按钮 创建框架 4 编辑资源编辑资源 1 1 编辑对话框及控件资源编辑对话框及控件资源 利用 Visual C 提供的资源编辑器对对话框资源进行编辑 删除对话框中 默认的 OK 和 Cancel 按钮 添加一个编辑控件 其控件 ID 为 IDC EDIT RESULT 添加若干按钮控件 其 ID 如表 4 1 所示 表 4 1 按钮控件资源清单 按钮名称按钮 ID用途 0IDC NUM 0按键 0 1IDC NUM 1按键 1 2IDC NUM 2按键 2 3IDC NUM 3按键 3 4IDC NUM 4按键 4 5IDC NUM 5按键 5 5 6IDC NUM 6按键 6 7IDC NUM 7按键 7 8IDC NUM 8按键 8 9IDC NUM 9按键 9 IDC DOT小数点 IDC EQUAL求值 IDC ADD加号 IDC DEC减号 IDC MUT乘号 IDC DIV除号 ACIDC AC清屏 sqrtBTN 17开方 cotIDC COT余切 sinIDC SIN正弦 cosIDC COS余弦 tanIDC TAN正切 x 2IDC X2平方 x 3IDC X3立方 x yIDC POW以 X 为底的 y 次 幂 lnIDC LN以 e 为底的对数 logIDC LOG对数 IDC NEGATIVE正负号 BACKIDC BACK退操作数 n IDC Nn 的阶层 添加完 对话框的效果图如下所示 6 2 2 编辑菜单资源编辑菜单资源 在 Visual C 中的工作区工具栏中 选中 ResourceView 选项卡 在其中 的 Menu 项上右击 在弹出的快捷菜单中选择插入命令 如图下图所示 3 建立类向导 建立类向导 单击查看 类向导建立操作数类 如下图 用同样的方法建立 jisuanqi 类 7 5 结构化程序代码结构化程序代码 myCal h 头文件 define PI 3 141592653 define e 2 718281828183 using namespace std class Caozuo public Caozuo name pm 0 index 0 Caozuo CString name int pm int index name name pm pm index index CString GetName return name int GetPM return pm int GetIndex return index private CString name 运算符名称 int pm 几目运算符 int index 对应运算符的下标 extern enum Compare class jisuanqi public jisuanqi double StringToDouble CString str Compare GetPriority int preop int postop double CalculateAll double Calculate void InitStack void Pushzifu Caozuo myop 8 void PushOpnd double mynum CString GetResult private 采用栈来对数字和字符操作 stack zifu 运算符栈 stack opnd 数字栈 myCal cpp 文件 include stdafx h include myCal h include math h define PI 3 141592653 enum Compare H L E U H 代表优先级高 L 代表优先级低 E 代表优先级相 同 U 表示不知道 Compare op 17 17 sin cos tan cot ln log sqrt H H L L L L L L H L L L L L H H L L L L L L H L L L L L H H H H L L L L H L L L L L H H H H L L L L H L L L L L sin H H H H L L L L H H L L L L cos H H H H L L L L H H L L L L tan H H H H L L L L H H L L L L cot H H H H L L L L H H L L L L L L L L L L L L E L L L L L H H H H L L L L H H L L L L ln H H H H L L L L H L L L L L log H H L L L L L L H L L L L L H H H H U U U U H H U H H U sqrt H H H H L L L L H L L L L L x2 H H H H L L L L H H L L L L 9 x3 H H H H L L L L H H L L L L Caozuo zifus 17 Caozuo 2 0 2 为双目运算符 0 为其在数组 op 17 17 中的位置 Caozuo 2 1 Caozuo 2 2 Caozuo 2 3 Caozuo sin 1 4 1 为单目运算符 4 为其在数组 op 17 17 中的位置 Caozuo cos 1 5 Caozuo tan 1 6 Caozuo cot 1 7 Caozuo 0 8 0 既不为双目运算符 也不为单目运算符 作为结束的标志 Caozuo 2 9 Caozuo ln 1 10 Caozuo log 2 11 Caozuo 1 12 Caozuo sqrt 1 13 Caozuo x2 1 14 Caozuo x3 1 15 Compare jisuanqi GetPriority int preop int postop 比较操作符的优先级 return op preop postop void jisuanqi InitStack 清空两个栈 while zifu empty zifu pop while opnd empty opnd pop 10 zifu push zifus 8 初始化 optr 将 放入栈中 double jisuanqi StringToDouble CString str if str IsEmpty return 0 0 str 为空 返回 0 str TrimLeft 去除左空格 str TrimRight 去除右空格 int i 0 double rate 10 0 itemp 0 0 if str GetAt 0 处理负号 i for iGetPriority zifu top GetIndex myop GetIndex H 前一个符号比后一个符号优先级高 opnd push this Calculate zifu push myop 前一个符号入栈 else zifu push myop 对于单目运算符入栈作特别处理 opnd push this Calculate void jisuanqi PushOpnd double mynum opnd push mynum double jisuanqi Calculate double a b 定义两个操作数 CString zifuName 定义运算符字符串 获取运算符 zifuName zifu top GetName switch zifu top GetPM case 0 12 a 0 b 0 break case 1 a opnd top 弹出数字 opnd pop b 0 break case 2 b opnd top opnd pop a opnd top opnd pop break 弹出符号 zifu pop if zifuName return a b 加运算 else if zifuName return a b 减运算 else if zifuName return a b 乘运算 else if zifuName return a b 除运算 else if zifuName sin a a PI 180 将弧度转化为度 求 sin return sin a else if zifuName cos 13 a a PI 180 将弧度转化为度 求 cos return cos a else if zifuName tan a a PI 180 将弧度转化为度 求 tan return tan a else if zifuName cot a a PI 180 将弧度转化为度 求 cot return 1 0 tan a else if zifuName return pow a b 求 x 的 y 次方 else if zifuName x2 return pow a 2 else if zifuName x3 return pow a 3 else if zifuName ln return log a log e 求 ln else if zifuName log return log b log a 求 log else if zifuName sqrt 求开方 return sqrt a else if zifuName n 的阶乘 if a 0 int i for i a 1 i 1 i 14 a i return a else return 1 else return 0 0 CString jisuanqi GetResult CString str str Format lf opnd top return str double jisuanqi CalculateAll while zifu top GetName opnd push this Calculate 前一个符号比后一个符号优先级高 压入栈 if opnd empty 数字栈为空 返回 0 return 0 else return opnd top CalculatorDlg h 头文件定义如下保护型成员 protected jisuanqi mc 定义计算器类的对象 bool OperatorPressed 用于对等于号的控制 false 则输出结果 15 bool Restarted 用于对输入数字控制 ture 输入对应数字 CalculatorDlg cpp 各按键函数 void CCalculatorDlg OnEqual 等号 UpdateData TRUE if OperatorPressed false mc PushOpnd mc StringToDouble m strResult mc CalculateAll m strResult mc GetResult UpdateData FALSE void CCalculatorDlg OnNum1 数字 1 UpdateData TRUE if OperatorPressed true Restarted true m strResult 1 else m strResult 1 OperatorPressed false Restarted false UpdateData FALSE void CCalculatorDlg OnNum0 数字 0 UpdateData TRUE if OperatorPressed true Restarted true m strResult 0 else m strResult 0 OperatorPressed false 16 Restarted false UpdateData FALSE void CCalculatorDlg OnNum2 数字 2 UpdateData TRUE if OperatorPressed true Restarted true m strResult 2 else m strResult 2 OperatorPressed false Restarted false UpdateData FALSE void CCalculatorDlg OnNum3 UpdateData TRUE if OperatorPressed true Restarted true m strResult 3 else m strResult 3 OperatorPressed false Restarted false UpdateData FALSE void CCalculatorDlg OnNum4 UpdateData TRUE if OperatorPressed true Restarted true m strResult 4 17 else m strResult 4 OperatorPressed false Restarted false UpdateData FALSE void CCalculatorDlg OnNum5 UpdateData TRUE if OperatorPressed true Restarted true m strResult 5 else m strResult 5 OperatorPressed false Restarted false UpdateData FALSE void CCalculatorDlg OnNum6 UpdateData TRUE if OperatorPressed true Restarted true m strResult 6 else m strResult 6 OperatorPressed false Restarted false UpdateData FALSE void CCalculatorDlg OnNum7 18 UpdateData TRUE if OperatorPressed true Restarted true m strResult 7 else m strResult 7 OperatorPressed false Restarted false UpdateData FALSE void CCalculatorDlg OnNum8 UpdateData TRUE if OperatorPressed true Restarted true m strResult 8 else m strResult 8 OperatorPressed false Restarted false UpdateData FALSE void CCalculatorDlg OnNum9 UpdateData TRUE if OperatorPressed true Restarted true m strResult 9 else m strResult 9 OperatorPressed false Restarted false UpdateData FALSE 19 void CCalculatorDlg OnPow 求 x 的 y 次方 UpdateData TRUE mc PushOpnd mc StringToDouble m strResult mc Pushzifu zifus 9 m strResult mc GetResult UpdateData FALSE OperatorPressed true void CCalculatorDlg OnSin 求 sin UpdateData TRUE mc PushOpnd mc StringToDouble m strResult mc Pushzifu zifus 4 m strResult mc GetResult UpdateData FALSE OperatorPressed true void CCalculatorDlg OnTan 求 tan UpdateData TRUE mc PushOpnd mc StringToDouble m strResult mc Pushzifu zifus 6 m strResult mc GetResult UpdateData FALSE OperatorPressed true void CCalculatorDlg OnNegative 正负号互换 20 UpdateData TRUE if m strResult GetAt 0 m strResult m strResult Mid 1 else m strResult m strResult UpdateData FALSE void CCalculatorDlg OnMut 乘 UpdateData TRUE mc PushOpnd mc StringToDouble m strResult mc Pushzifu zifus 2 m strResult mc GetResult UpdateData FALSE OperatorPressed true void CCalculatorDlg OnLog 求 log UpdateData TRUE mc PushOpnd mc StringToDouble m strResult mc Pushzifu zifus 11 m strResult mc GetResult UpdateData FALSE OperatorPressed true void CCalculatorDlg OnLn 求 ln UpdateData TRUE mc PushOpnd mc StringToDouble m strResult mc Pushzifu zifus 10 21 m strResult mc GetResult UpdateData FALSE OperatorPressed true void CCalculatorDlg OnDiv 除 UpdateData TRUE mc PushOpnd mc StringToDouble m strResult mc Pushzifu zifus 3 m strResult mc GetResult UpdateData FALSE OperatorPressed true void CCalculatorDlg OnDot 点 UpdateData TRUE m strResult UpdateData FALSE void CCalculatorDlg OnDec 减 UpdateData TRUE mc PushOpnd mc StringToDouble m strResult mc Pushzifu zifus 1 m strResult mc GetResult UpdateData FALSE OperatorPressed true void CCalculatorDlg OnCot 22 UpdateData TRUE mc PushOpnd mc StringToDouble m strResult mc Pushzifu zifus 7 m strResult mc GetResult UpdateData FALSE OperatorPressed true void CCalculatorDlg OnAdd 加 UpdateData TRUE mc PushOpnd mc StringToDouble m strResult mc Pushzifu zifus 0 m strResult mc GetResult UpdateData FALSE OperatorPressed true void CCalculatorDlg OnCos 求 cos UpdateData TRUE mc PushOpnd mc StringToDouble m strResult mc Pushzifu zifus 5 m strResult mc GetResult UpdateData FALSE OperatorPressed true void CCalculatorDlg OnAc 清零 Restarted true mc InitStack m strResult 0 0 23 UpdateData FALSE void CCalculatorDlg OnBack 单步退位 UpdateData TRUE if m strResult 0 else m strResult 0 0 UpdateData FALSE void CCalculatorDlg OnN n 的阶乘 UpdateData TRUE mc PushOpnd mc StringToDouble m strResult mc Pushzifu zifus 12 m strResult mc GetResult UpdateData FALSE OperatorPressed true void CCalculatorDlg OnSqrt 开方 UpdateData TRUE mc PushOpnd mc StringToDouble m strResult mc Pushzifu zifus 13 m strResult mc GetResult UpdateData FALSE OperatorPressed true 24 void CCalculator

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论