《2022年2022年计算器的程序设计 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年计算器的程序设计 .pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、摘要计算器(calculator;counter)一般是指“电子计算器”,该名词由日文传入中国。计算器能进行数学运算的手持机器,拥有集成电路芯片,但结构简单,比现代电脑结构简单得多,可以说是第一代的电子计算机(电脑),且功能也较弱,但较为方便与廉价,可广泛运用于商业交易中,是必备的办公用品之一。本课程设计将实现一个简单计算器。其类似于 Windows 附件中自带的计算器。这个计算器不仅实现了简单的四则运算功能,还实现了高级的科学计算功能,而且具有简洁大方的图文外观。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性使用人员能快捷简单地进行操作。即时准确地获得需要的计
2、算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。在课程设计中,系统开发平台为Windows 2000XP,程序设计设计语言采用Visual C+,在程序设计中,采用了结构化与面向对象两种解决问题的方法。关键词程序设计;计算器;MFC;按钮控件名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 14 页 -目录1 需求分析.31.1 需求概述.31.2 需求环境.31.3 功能描述.32 概要设计.32.1 程序功能模块.32.2 程序流程图.32.3 数据结构的设计.4详细设计 .4系统的实现.4窗体设计.44.2 编辑资源.5结束语 .7参考文献 .7名师
3、资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 14 页 -1 需求分析1.1 需求概述本软件主要用于计算机windows 2000/XP 以上版本的用户的使用,这次课程设计一般是实现简单计算器的功能。要程序能实现:加,减,乘,除,开方,倒数等运算功能;还要实现数据的输入,输出,计算,显示及程序退出等功能。另外还可以实现多种科学计算的功能,如:三角函数的计算,弧度与角度间的转换,对数指数的计算等等。1.2 需求环境本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:硬件要求:一台计算机。软件配置:WINDOWS、C/VC+6.0。1.3 功能描述(1)正确的显示输入的数值(包括
4、正负数值);(2)正确的计算加、减、乘、除、乘方等基本运算;(3)熟练掌握控件消息的处理、传递;(4)帮助信息(包括对系统功能说明、使用说明、使用注意事项等)。2 概要设计2.1 程序功能模块2.2 程序流程图名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 14 页 -程序流程图2.3 数据结构的设计详细设计系统的实现窗体设计利用 MFC AppWinzard 生成计算器应用程序框架具体步骤如下:(1)执行 VC 程序,选择 File|New 命令,弹出 New 对话框.单击 Projects标签,转到 Projects选项卡,选择 MFC AppWizard(exe)选项,然后
5、在 Project name文本框中输入 Calculator。Lacation 文本框是指项目的本地路径。(2)单击 OK 按钮,弹出 MFC AppWinzard_Step1 对话框。选中单选按钮,如图所示。(3)单击 Next 按钮,弹出 MFC AppWinzard_Step2 of4 对话框,如图所示。(4)单击 Next 按钮,弹出 MFC AppWinzard_Step3 of4 对话框,如图所示。判断数据处理数据加、减乘、除乘方计算结果显示结果用户输入名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 14 页 -(5)单击 Next 按钮,弹出 MFC AppWin
6、zard_Step4 of4 对话框,如图所示。单击 Finish 按钮,创建框架。4.2 编辑资源(1)编辑对话框及控件资源利用 Visual C+提供的资源编辑器对对话框资源进行编辑。删除对话框中默认的 OK 和 Cancel按钮。添加一个Edit 控件,其控件 ID 为 IDC_DSPEDIT。添加若干按钮控件,其ID 如表 4-1 所示。表 4-1 按钮控件资源清单按钮名称按钮 ID 用途0 BTN_0 按键 0 1 BTN_1 按键 1 2 BTN_2 按键 2 3 BTN_3 按键 3 4 BTN_4 按键 4 5 BTN_5 按键 5 6 BTN_6 按键 6 7 BTN_7 按
7、键 7 8 BTN_8 按键 8 9 BTN_9 按键 9。BTN_10 小数点=BTN_11 求值+BTN_12 加号-BTN_13 减号*BTN_14 乘号/BTN_15 除号CE BTN_16 清屏Sqrt BTN_17 开方1/x BTN_18 倒数xy BTN_24 以 X 为底的 y次幂名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 14 页 -/+BTN_29 正负号10 x BTN_30 10 的 x 次方添加 2 个单选按钮,按钮资源清单如下表 4-2 单选按钮控件资源清单控件名设置 ID DEGREE BTN_DEGREE RADIAN BTN_RAD 添加
8、4 个静态框,将编辑控件,普通计算,高级计算分别分组。其效果如图4-1所示。图编辑对话框资源名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 14 页 -结束语在课程设计的实践中,学到很多有用的知识,也积累了不少宝贵的经验。课程设计是以一个计算器的实现为基础,掌握一个基于对话框的应用程序的编程方法以及对话框常用控件的高级编程。在课程设计中我了解到到对话框应用程序的编程模式、改变按钮的客户区形状、在按钮客户区内作图及对话框的扩展等知识。在此期间,遇上了不少的技术难题,但是经过努力,通过查找资料,难题还是一个个被解决了,我从中学到了许多课堂上没学到的东西,这使得我很高兴。经过设计的各个
9、环节,从中学到了很多,锻炼了自己系统的设计的能力,从系统的需求到系统的功能,到系统的测试,到系统的发布,可以掌握到一个完全的过程,这样对我们以后在工作中或学习中得到很好的锻炼,为用VC+编辑软件奠定基础。本系统适合于运行在Microsoft Windows 的各个版本下,包括Windows98、Windows Me、Windows2000、Windows XP 等系统平台下。当然,本论文所采取的解决问题的方法并不是非常完善的,在今后的学习、工作中,将继续研究并改进。参考文献1 严华峰.Visual C+课程设计案例精编.北京:中国水利水电出版社,2002 2 张宏军,党留群,赵天巨 Visua
10、l C+6.0 编程案例精解北京:电子工业出版社,2005 3 郑阿奇,丁有和 Visual C+教程北京:机械工业出版社,2006 4 谭浩强,C程序设计,清华大学出版社5 刘振安,孙忱,刘燕君,C程序设计课程设计,机械工业出版社6 汪诗林,数据结构算法与应用,机械工业出版社源代码#include /*DOS接口函数*/#include /*数学函数的定义*/#include /*屏幕操作函数*/#include /*I/O函数*/名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 14 页 -#include /*库函数*/#include /*变量长度参数表*/#include
11、 /*图形函数*/#include /*字符串函数*/#include /*字符操作函数*/#define UP 0 x48/*光标上移键*/#define DOWN 0 x50/*光标下移键*/#define LEFT 0 x4b/*光标左移键*/#define RIGHT 0 x4d/*光标右移键*/#define ENTER 0 x0d/*回车键*/void*rar;/*全局变量,保存光标图象*/struct palettetype palette;/*使用调色板信息*/int GraphDriver;/*图形设备驱动*/int GraphMode;/*图形模式值*/int ErrorC
12、ode;/*错误代码*/int MaxColors;/*可用颜色的最大数值*/int MaxX,MaxY;/*屏幕的最大分辨率*/double AspectRatio;/*屏幕的像素比*/void drawboder(void);/*画边框函数*/void initialize(void);/*初始化函数*/void computer(void);/*计算器计算函数*/void changetextstyle(int font,int direction,int charsize);/*改变文本样式函数*/void mwindow(char*header);/*窗口函数*/int specia
13、lkey(void);/*获取特殊键函数*/int arrow();/*设置箭头光标函数*/*主函数*/int main()initialize();/*设置系统进入图形模式*/computer();/*运行计算器*/closegraph();/*系统关闭图形模式返回文本模式*/return(0);/*结束程序*/*设置系统进入图形模式*/void initialize(void)int xasp,yasp;/*用于读 x 和 y 方向纵横比*/GraphDriver=DETECT;/*自动检测显示器*/initgraph(&GraphDriver,&GraphMode,);/*初始化图形系统
14、*/ErrorCode=graphresult();/*读初始化结果*/if(ErrorCode!=grOk)/*如果初始化时出现错误*/printf(Graphics System Error:%sn,名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 14 页 -grapherrormsg(ErrorCode);/*显示错误代码*/exit(1);/*退出*/getpalette(&palette);/*读面板信息*/MaxColors=getmaxcolor()+1;/*读取颜色的最大值*/MaxX=getmaxx();/*读屏幕尺寸*/MaxY=getmaxy();/*读屏幕
15、尺寸*/getaspectratio(&xasp,&yasp);/*拷贝纵横比到变量中*/AspectRatio=(double)xasp/(double)yasp;/*计算纵横比值*/*计算器函数*/void computer(void)struct viewporttype vp;/*定义视口类型变量*/int color,height,width;int x,y,x0,y0,i,j,v,m,n,act,flag=1;float num1=0,num2=0,result;/*操作数和计算结果变量*/char cnum5,str220=,c,temp20=;char str1=1230.45
16、6+-789*/Qc=%;/*定义字符串在按钮图形上显示的符号*/mwindow(Calculator);/*显示主窗口*/color=7;/*设置灰颜色值*/getviewsettings(&vp);/*读取当前窗口的大小*/width=(vp.right+1)/10;/*设置按钮宽度*/height=(vp.bottom-10)/10;/*设置按钮高度*/x=width/2;/*设置 x 的坐标值*/y=height/2;/*设置 y 的坐标值*/setfillstyle(SOLID_FILL,color+3);bar(x+width*2,y,x+7*width,y+height);/*画
17、一个二维矩形条显示运算数和结果*/setcolor(color+3);/*设置淡绿颜色边框线*/rectangle(x+width*2,y,x+7*width,y+height);/*画一个矩形边框线*/setcolor(RED);/*设置颜色为红色*/outtextxy(x+3*width,y+height/2,0.);/*输出字符串 0.*/x=2*width-width/2;/*设置 x 的坐标值*/y=2*height+height/2;/*设置 y 的坐标值*/for(j=0;j4;+j)/*画按钮*/for(i=0;i=x0+6*width)/*如果右移,移到尾,则移动到最左边字符
18、位置*/x=x0;m=0;else x=x+width+width/2;m+;/*否则,右移到下一个字符位置*/if(v=LEFT)/*左移箭头时新位置计算*/if(x=x0)x=x0+6*width;m=4;/*如果移到头,再左移,则移动到最右边字符位置*/else 名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 14 页 -x=x-width-width/2;m-;/*否则,左移到前一个字符位置*/if(v=UP)/*上移箭头时新位置计算*/if(y=7*height)y=y0;n=0;/*如果移到尾,再下移,则移动到最上边字符位置*/else y=y+height+hei
19、ght/2;n+;/*否则,移到下边一个字符位置*/putimage(x,y,rar,XOR_PUT);/*在新的位置显示光标箭头*/c=str1n*5+m;/*将字符保存到变量c 中*/if(isdigit(c)|c=.)/*判断是否是数字或小数点*/if(flag=-1)/*如果标志为-1,表明为负数*/strcpy(str2,-);/*将负号连接到字符串中*/flag=1;/*将标志值恢复为 1*/sprintf(temp,%c,c);/*将字符保存到字符串变量temp 中*/strcat(str2,temp);/*将 temp 中的字符串连接到str2 中*/setfillstyle(
20、SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,str2);/*显示字符串*/if(c=+)num1=atof(str2);/*将第一个操作数转换为浮点数*/名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 14 页 -strcpy(str2,);/*将 str2 清空*/act=1;/*做计算加法标志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*
21、width/2,3*height/2);outtextxy(5*width,height,0.);/*显示字符串*/if(c=-)if(strcmp(str2,)=0)/*如果 str2 为空,说明是负号,而不是减号*/flag=-1;/*设置负数标志*/else num1=atof(str2);/*将第二个操作数转换为浮点数*/strcpy(str2,);/*将 str2 清空*/act=2;/*做计算减法标志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);/*画矩
22、形*/outtextxy(5*width,height,0.);/*显示字符串*/if(c=*)num1=atof(str2);/*将第二个操作数转换为浮点数*/strcpy(str2,);/*将 str2 清空*/act=3;/*做计算乘法标志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,0.);/*显示字符串*/if(c=/)num1=atof(str2);/*将第二个操作数转换为浮点数*/strcpy(str2
23、,);/*将 str2 清空*/act=4;/*做计算除法标志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,0.);/*显示字符串*/if(c=)num1=atof(str2);/*将第二个操作数转换为浮点数*/strcpy(str2,);/*将 str2 清空*/act=5;/*做计算乘方标志值*/setfillstyle(SOLID_FILL,color+3);/*设置用淡绿色实体填充*/名师资料总结-精品资料欢
24、迎下载-名师精心整理-第 12 页,共 14 页 -bar(2*width+width/2,height/2,15*width/2,3*height/2);/*画矩形*/outtextxy(5*width,height,0.);/*显示字符串*/if(c=%)num1=atof(str2);/*将第二个操作数转换为浮点数*/strcpy(str2,);/*将 str2 清空*/act=6;/*做计算模运算乘方标志值*/setfillstyle(SOLID_FILL,color+3);/*设置用淡绿色实体填充*/bar(2*width+width/2,height/2,15*width/2,3*
25、height/2);/*画矩形*/outtextxy(5*width,height,0.);/*显示字符串*/if(c=)num2=atof(str2);/*将第二个操作数转换为浮点数*/switch(act)/*根据运算符号计算*/case 1:result=num1+num2;break;/*做加法*/case 2:result=num1-num2;break;/*做减法*/case 3:result=num1*num2;break;/*做乘法*/case 4:result=num1/num2;break;/*做除法*/case 5:result=pow(num1,num2);break;
26、/*做 x 的 y 次方*/case 6:result=fmod(num1,num2);break;/*做模运算*/setfillstyle(SOLID_FILL,color+3);/*设置用淡绿色实体填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);/*覆盖结果区*/sprintf(temp,%f,result);/*将结果保存到 temp 中*/outtextxy(5*width,height,temp);/*显示结果*/if(c=c)num1=0;/*将两个操作数复位0,符号标志为 1*/num2=0;flag=1;strcp
27、y(str2,);/*将 str2 清空*/setfillstyle(SOLID_FILL,color+3);/*设置用淡绿色实体填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);/*覆盖结果区*/outtextxy(5*width,height,0.);/*显示字符串*/if(c=Q)exit(0);/*如果选择了 q 回车,结束计算程序*/putimage(x,y,rar,XOR_PUT);/*在退出之前消去光标箭头*/return;/*返回*/名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 14 页 -/*窗口
28、函数*/void mwindow(char*header)int height;cleardevice();/*清除图形屏幕*/setcolor(MaxColors-1);/*设置当前颜色为白色*/setviewport(20,20,MaxX/2,MaxY/2,1);/*设置视口大小*/height=textheight(H);/*读取基本文本大小*/settextstyle(DEFAULT_FONT,HORIZ_DIR,1);/*设置文本样式*/settextjustify(CENTER_TEXT,TOP_TEXT);/*设置字符排列方式*/outtextxy(MaxX/4,2,header
29、);/*输出标题*/setviewport(20,20+height+4,MaxX/2+4,MaxY/2+20,1);/*设置视口大小*/drawboder();/*画边框*/void drawboder(void)/*画边框*/struct viewporttype vp;/*定义视口类型变量*/setcolor(MaxColors-1);/*设置当前颜色为白色*/setlinestyle(SOLID_LINE,0,NORM_WIDTH);/*设置画线方式*/getviewsettings(&vp);/*将当前视口信息装入vp 所指的结构中*/rectangle(0,0,vp.right-v
30、p.left,vp.bottom-vp.top);/*画矩形边框*/*设计鼠标图形函数*/int arrow()int size;int raw=4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4;/*定义多边形坐标*/setfillstyle(SOLID_FILL,2);/*设置填充模式*/fillpoly(8,raw);/*画出一光标箭头*/size=imagesize(4,4,16,16);/*测试图象大小*/rar=malloc(size);/*分配内存区域*/getimage(4,4,16,16,rar);/*存放光标箭头图象*/putimage(4,4,rar,XOR_PUT);/*消去光标箭头图象*/return 0;/*按键函数*/int specialkey(void)int key;while(bioskey(1)=0);/*等待键盘输入*/key=bioskey(0);/*键盘输入*/key=key&0 xff?key&0 xff:key8;/*只取特殊键的扫描值,其余为0*/return(key);/*返回键值*/名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 14 页 -