logo资料库

课程设计报告+源码--计算器(C++).doc

第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
资料共21页,剩余部分请下载后查看
C O N T E N T S  程序设计内容与要求……… ………………… ……………………………1  程序设计环节…… ………………………………………………………… 1  程 序 介 ………………………………………………………………1  程 序 基 本 实 现 路…………… ………………………… ……………2 简 思  程序主要代码…………………………………… ………… …………2  变 量 初 值… …………………………………………………………2  主 要 实 现 始 代
码……………………………………… …………………3  心 得 会……………………………………………… ……………………17  参 考 料…………………………………………………………… ………18  程 序 界 图…………………………………………………… ……………19 W i n d o w s 程 序 课 程 设 计 课程设计题目: 设计一个简单的计算器应用程序 一、设计目标与内容: 1. 了解 Windows 编程的基础知识,掌握 MFC 应用程序的基本知识; 体 资 面 1
2. 基本掌握面向对象程序设计的基本思路和方法; 3. 掌握用 VC++开发应用程序的的一般步骤和方法; 4. 能够利用所学的基本知识,设计一个简单的计算器应用程序,实现基本的加、减、乘、除、求平方根等基本运算(必须实现 的功能),实现求角度的正弦、余弦、正切,实现求指数、自然对数、常用对数等基本运算(这部分功能选做)。 5. 在程序中注意处理数据和运算符的输入,计算结果的显示。 二,设计要求: 1. 用 VC++进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释; 2. 提交设计报告一份(课程设计任务书、目录、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。 三.程序设计环节: 1. 程序简介: 本程序在 VS.NET2005 的 c++语言中的 MFC 开发制作,经测试(使用动态 dll 库)在同等环境(VS.NET2005)下可以正常运 行执行文件完成计算器功能。使用静态 dll 库时候,不改变执行程序路径可以正常运行,但移动到其他位置的执行文件运行会缺 少 3D 按钮效果,其他功能不变。 但在 VC6.0 和.NET2003 环境下不能直接使用(提示缺少库文件)。解决办法是使用 installshield 制作软件安装包。在没有装 有 VS.NET2005 的机器上可以用安装包安装该计算器,该安装包会在桌面放置一程序快捷方式和卸载图标。本软件不写注册表。 2. 程序基本实现思路: 1 当前输入的数据,和数据处理过程均由变量 n 完成。因为最多是 2 元运算,另设一变量 n_2 表示第 2 个数,需要时 由 n_2=n 赋值。 2 数字录入部内容相似,首先建立一个函数 inum(),负责处理所输入的数字,按下相应数字键时候,调用 inum()完成 数字的输入和显示。 3 数据计算部分.由函数 operation(char ope),通过选择所按下的运算符(该函数的变量)来完成相应的计算并显示。 由于运算符分为单元运算和双元 所以具有类似性,分开处理。 4 小数输入。按下小数点后,变量 setxiaoshu=true,激活小数输入功能。inum()做出输入小数的判断并输出预期数。 5 正负号的改变可以通过每按下该键后执行 n=-n 来执行。对于负数的录入功能,也由 inum()做出判断,完成正确的负 数录入过程。 2
6 等号的实现调用 operation(operate),完成相应运算。 7 删除一个字符,用 n=long(n/10)的思路来完成,由于 long 的范围,所以删除只能实现 10 位以内的删除。 8CE 和 C 键。CE 负责清楚欲输入的第 2 个数据的相关变量,C 清空所有变量,重置计算器。 3. 根据上述设想编写程序,主要代码如下: 变量初始值(dlg.cpp 文件): #include "stdafx.h" #include "计算器.h" #include "计算器 Dlg.h" #include "math.h" #include "time.h" #include "stdlib.h" #ifdef _DEBUG #define new DEBUG_NEW #endif C 计算器 Dlg::C 计算器 Dlg(CWnd* pParent /*=NULL*/) //可以不用 ,屏蔽srand() : CDialog(C 计算器 Dlg::IDD, pParent) , n(0) , setxiaoshu(false) , xiaoshui(0) , innum(0) , n_2(0) , operate(0) , setnew(false) BEGIN_MESSAGE_MAP(C 计算器 Dlg, CDialog) 3
……. //系统消息和控件的函数 主要实现代码:(dlg.cpp 文件)://注:下面所有控件名称使用加粗字体和下划线表示该按键 void C 计算器 Dlg::OnPaint() { //重写OnPaint(),实现,界面颜色的改变 // //控制随机函数rand()的取值时间(间隔1s 左右更新值),后来为实现每次按键都变色把这句去掉了 int c_r,c_g,c_b,c; srand(time(0)); c_r=rand()%256; c_g=rand()%256; c_b=rand()%256; c=rand()%4; if (IsIconic()) { //3 个变量分别代表R/G/B // rand()%256 代表变量取值为0-255 之间的整数,下同 //c=0-3,即分为4 种情况,分别绘制不同的颜色方案.实现更多色彩. CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else 4
{ //蓝色渐变,其他两种颜色随机 if (c==0) { CPaintDC dc(this); CRect rc; GetClientRect(&rc); int nHeight=rc.Height(); for(int i=0;nHeight>=0;nHeight--,i++) { CPen pen; pen.CreatePen(PS_SOLID,1,RGB(c_r,c_g,i)); CPen *pOldPen=dc.SelectObject(&pen); dc.MoveTo(rc.left,i); dc.LineTo(rc.right,i); dc.SelectObject(pOldPen); pen.DeleteObject(); //绿色渐变, 其他两种颜色随机 } } else if(c==1) { CPaintDC dc(this); CRect rc; GetClientRect(&rc); int nHeight=rc.Height(); for(int i=0;nHeight>=0;nHeight--,i++) { CPen pen; pen.CreatePen(PS_SOLID,1,RGB(c_r,i,c_b)); 5
CPen *pOldPen=dc.SelectObject(&pen); dc.MoveTo(rc.left,i); dc.LineTo(rc.right,i); dc.SelectObject(pOldPen); pen.DeleteObject(); //红色渐变, 其他两种颜色随机 } } else if(c==2) { CPaintDC dc(this); CRect rc; GetClientRect(&rc); int nHeight=rc.Height(); for(int i=0;nHeight>=0;nHeight--,i++) { CPen pen; pen.CreatePen(PS_SOLID,1,RGB(i,c_g,c_r)); CPen *pOldPen=dc.SelectObject(&pen); dc.MoveTo(rc.left,i); dc.LineTo(rc.right,i); dc.SelectObject(pOldPen); pen.DeleteObject(); //都不渐变,所有随机 } } else { CPaintDC dc(this); CRect rc; 6
GetClientRect(&rc); int nHeight=rc.Height(); for(int i=0;nHeight>=0;nHeight--,i++) { CPen pen; pen.CreatePen(PS_SOLID,1,RGB(c_r,c_g,c_r)); CPen *pOldPen=dc.SelectObject(&pen); dc.MoveTo(rc.left,i); dc.LineTo(rc.right,i); dc.SelectObject(pOldPen); pen.DeleteObject(); } } } } void C 计算器 Dlg::OnBnClickedButton31() // 控件pi 对应的函数 按键pi 的处理 n=3.14159265358979; UpdateData(false); Invalidate(); // 把pi 值3.14159265358979 赋给n //重新执行OnPaint()函数实现每一次按键,界面自动变色.下面各控件对应函数也调用这函数,如控件对应函数 //没有直接显示,就是在被调用的函数中有该函数 } ////////////////////////////////////////以下部分处理方式相似(数字录入)////////////////// void C 计算器 Dlg::OnBnClickedButton0() { //控件0 对应的函数.调用inum()产生预期的数.包括整数/小数/正数/负数.下面1 - 9 同 按键0 的处理 if (setnew) C 计算器 Dlg::OnBnClickedButton23(); else Invalidate(); // setnew 为true,清除所有控制变量, 在上次计算出结果后 innum=0; // 把0 赋给变量inum,执行相应的+++- //可以不用按C 键清除直接按数字键开始下一个运 7
分享到:
收藏