计算器课程设计计算器程序设计.docx
- 文档编号:9539418
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:25
- 大小:68.67KB
计算器课程设计计算器程序设计.docx
《计算器课程设计计算器程序设计.docx》由会员分享,可在线阅读,更多相关《计算器课程设计计算器程序设计.docx(25页珍藏版)》请在冰豆网上搜索。
计算器课程设计计算器程序设计
课程设计报告
课程名称:
计算器程序设计
系部:
电气与信息工程学院
专业班级:
通信09102班
学生姓名:
指导教师:
完成时间:
2010/9/25
报告成绩:
评阅意见:
评阅教师日期
计算器程序设计
第一章综述
1.1课题的现实意义
现实学习生活中,常会遇到一些数目较大数据繁杂的数值运算,徒手运算起来很困难,这时候我们就必须用到计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。
人们对计算的要求不断提高,普通的功能简单的仅能进行四则运算的计算工具已经不能满足需要,需要一种能进行多种计算。
现在已经有一些功能较为强大、涵盖面较广的计算软件,而且各种平台的小工具仍不断出现。
这些大大方便了我们的生活给我们更多的选择和实现方式。
这个程序可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。
并且操作简单、界面清晰、灵活、实用、方便等要求出发,它所能完成的主要计算功能有以下几个方面:
加法,减法,乘法,除法,求幂,求模,求平方根,求Sin,求Cos,求Log10。
计算器的设计使我们所学到的c语言知识在现实中得到检验!
信息时代是科技和经济发展的产物,软件产业是信息时代的产物,它在我们的生活工作中发挥着越来越大的作用,计算器的设计对我们知识的掌握有很大的作用,更能方便他人,可行性很强!
1.2硬件环境
一台完整的电脑,包括键盘、鼠标,最小硬盘空间1GHz
<1>386,486,586及兼容机.640K基本内存;
<2>1M以上扩充内存,10M以上的显示内存.
1.3软件环境
开发环境:
本系统的设计采用的是TC语言开发
WindowsXPsp2操作系统,TurboC2.0汉化版,WPSword
第二章程序的作用及设计目的
2.1程序的功能作用
计算器是Windows操作系统提供的一个附件功能许多人用VisualBasicVisualC++等编制计算器,由于这些程序提供了控件所以实现相对容易。
TurboC没有控件,但我们可以利用它所具有的函数模仿画出其界面,实现计算器的基本功能,进行浮点数加、减、乘、除、乘方和求模运算。
2.2程序设计目的
通过本程序训练读者程序设计的基本技能,掌握字符串的表示方法和字符串函数的功能、TurboC图形操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示。
第三章程序分析和设计
实现计算器功能,首先是输出计算器图形样式,然后是通过按键的方式实现数值运算。
所以程序主要由两大部分实现,一部分功能是显示计算器,一部分是实现计算功能显示。
计算器是在屏幕上显示图形,TurboC提供了PC系统环境下扩充的屏幕和图形支持系统,利用此系统提供的字符屏幕处理函数和图形系统的有关信息及函数即可很好地实现。
计算功能主要要解决的是接收按键信息的处理,要进行识别,如果按键是数字符号,要将其转变为操作数,如果是运算操作符,则进行相应的处理。
3.1主界面
首先是画一个带标题calculator的窗口,窗口为一白色边框,窗口中最上面是一个绿色光条,此光条上显示数字和运算结果,光条下有20个红色边框的灰色矩形块模拟命令按钮按钮,上面显示有数字和运算符号,并且在按钮上有图形光,标通过移动光标键移动到所需位置,按回车键即选择了相应的符号。
主界面如图2-1。
所示光标移动到字符Q上,
按回车键结束运算.
3.2设计思路
(1)main()主函数
设置了程序的流程,首先初始化图形系统,然后调用计算器computer()函数进行计算,当从计算器程序返回时,关闭图形系统,结束程序。
(2)initialize()初始化函数
TurboC通常的工作方式是字符文本模式,要显示图形,调用图形函数,则必须进入图形工作方式,应首先调用函数initgraph(&GraphDriver,&GraphMode,"")初始化图形系统,并装入相应的图形驱动器。
该函数把由GraphDriver所指向的图形驱动器代码装入内存。
如果图形驱动器未装入内存,图形函数将不能操作图形函数所用的屏显模式由GraphMode所指向的整数值确定。
该函数的第三个参数为图形驱动器的路径,设为空串表示在当前工作路径上寻找。
图形驱动器包含在.BGI文件中,且必须在该系统下是可用的,.BGI程序在Turbo的目录下。
用DETECT自动检测目前系统屏显硬件的类型,并且选用最大分辨率的屏显模式。
初始化后将一些信息保存在相应的变量中,以备后用。
如果图形初始化失败,则程序结束。
为了方便设计计算器界面,在这个函数中,获取了图形屏幕的最大尺寸以及纵横比。
(3)mwindow()主窗口函数
设置视口大小为当前窗口的一半,然后调用画边框函数drawboder()画出边框。
本程序视口设置在左上角位置,读者可以自行计算将视口设在屏幕中央,同时将计算函数中的图形输出做相应的调整。
(4)drawboder()画边框函数
通过函数getviewsettings(&vp)把有关当前视口的信息装入由vp所指向的结构中。
vp
是structviewporttype类型,其结构定义如下:
structviewporttype
{
intleft,top,right,bottom;
intclip;
}
域left、top、right、bottom中存放视口左上角和右下角的坐标。
当clip为0时不进行对超出视口边界输出的剪裁,否则,执行剪裁以防止超出边界。
字符屏幕操作和图形函数的核心是窗口,它是屏幕的活动部分,在这个活动窗口中将显示输出。
TurboC在字符屏幕和图形系统之间用了稍微不同的术语,以保持两个系统的独立。
字符屏幕的函数提供了窗口(Window),而图形系统提供了视口(Viewport),但概念是一样的,但是当屏幕用字符模式时,左上角坐标为(1,1),而在图形状态下,左上角坐标为(0,0)。
根据视口坐标,利用画矩形函数rectangle()画出边框线。
本程序视口设置在屏幕的左上角位置,我们可以自行计算将视口设在屏幕中央,同时将计算器函数中的图形输出做相
应的调整。
(5)computer()计算器函数
该函数是本程序的主要函数,其流程是先调用mwindow()函数显示一白色边框的窗口,再在窗口中显示计算器,然后接收按键进行运算。
为了布局合理、操作方便要根据窗口大小设计按钮的大小和位置。
读取当前窗口的大小后,设置了两个单位变量width和height,图形显示以这两个变量为计算单位,布局如图2-2所示。
图中的符号按钮利用函数setfillstyle()设置用淡绿色实体填充模式,然后用bar()函数画一个二维矩形条,setcolor()函数设置边框线颜色,rectangle()函数画一个矩形边框线,利用outtextxy()函数将预先存储在str1中的字符串中的字符输出,因为outtextxy()输出的是字符串,所以先利用函数sprintf()将要输出的字符写入字符数组str2,转变为字符串,然后输出。
界面设置好后,首先在第一个按钮位置显示光标,此时可以移动和按下光标,当按下Alt+X键时可以结束程序,否则执行循环判断移动的是哪个光标键,变量m和n记录光标位置,光标移动某个位置按回车后则程序判断所按的字符进行相应的处理:
1.当所选为数字或小数点,则先判断是否为负数,如果是负数则将符号连接到字符串中,否则只连接所选的数字或小数点,并显示数据。
2.当所选为“-”时先判断有无操作数,没有则为负数,做负数标记,否则是做减法,做减法标志,并将当前的操作数保存
3.当所选为”+”,“*”,“/”,“^”,”%”,时处理方式一样均是先保存第一个操
作数,做运算标志。
准备接受第二个操作数
4.当所选为“=”时,根据运算符号标志值act进行相应的运算,将结果显示。
5.当所选为“c”时,表示清零,所以将第一和第二操作数均置0。
6.当所选为“Q”时,则运算结束。
数据和结果的显示仍然是用outtextxy()函数,并且利用填充二维矩形条覆盖前一次的
输出.
(6)arrow()设计图形鼠标函数
由于在图形方式下,光标是不可见的,所以为了能正确地选择按钮,自己设计一个光标图形。
方法是用fillpoly(8,raw)画一个由raw所指向的数组中定义的8个x、y坐标点所围成的封闭图形。
用当前填充模式和颜色对该形状进行填充后形状像鼠标,利用函数imagesize()测试图像大小,分配内存区域,将图像保存,通过图像的读取函数getimage()和putimage()以及图像算子异或XOR_PUT操作实现光标图像的显示和隐藏,同一位置两次异或,图像就消去了。
(7)specialkey()读取特殊键函数
利用函数bioskey
(1)读取用户所按键的信息,intbioskey(intcmd)函数原型在bios.h中,功能是完成直接键盘操作。
如果cmd是0,bioskey()返回下一个在键盘键入的值(它将等待到按下一个键)。
它返回一个16位的二进制数,包括两种不同的值。
当按下”普通键”时,它的低8位数存放该字符的ASCII码;对于“特殊键”,低8位为0。
“特殊键”包括箭头键、功能键等高8位字节存放该键的扫描码,所以程序中用到了语句key=bioskey(0),表示返回下一个在键盘上按下的键,并保存在变量key中,key=key&0xff?
key&0xff:
key>>8,对所按的键进行判断,如果key&0xff为真,即低8位不为0,则说明按下的是普通键,因为0xff16进制数代表的二进制码高8位为0,低8位为1。
和0相与,结果为0,和1相与,结果保持原数。
这样就将低8位,也就是该字符的ASCII码值赋给key,如果key&0xff为假,即低8位为0,说明按下的是特殊键,将key右移8位后,也就是将其高8位值赋给key。
cmd如果是1,bioskey()查询是否按下了一个键,当按下一个键时返回非0值,否则返回0值,所以用while(bioskey
(1)==0)语句等待按键。
(8)程序的运行和退出
1.运行
通过TubroC安装路径找到TC2.0文件夹中的tc.exe文件,双击该文件,即可进入TC2.0环境。
2.退出
退出TC可以按F10键进入主菜单,选择File菜单下的Quit命令,再按回车键即可退出TC环境。
(也可以在TC环境下直接按Alt+X键退出程序。
这是TC环境下的热键)
第四章程序测试
程序调试是指对程序的查错和排错。
为了便于查错、阅读,在设计该程序的过程中我们采用了结构化程序方法编辑,添加了尽可能多的注释,这就为接下来的调试过程带来了很多方便。
经过仔细检查之后进行上机调试。
进行编译,如果在编译和连接过程中发现错误,屏幕上显示了出错信息,根据提示找到出错的位置,加以改正,再进行编译……如此反复,直到顺利通过编译和连接为止。
在本次实习过程中碰到的编译、连接的错误主要有:
缺少变量定义,定义位置不正确、语法错误、转义字符漏用、逻辑错误等。
4.1系统测试
系统测试结果如下:
输出:
错误C:
\jisuanqibyjzj.TXT183:
未定义的符号'LEFT'在Run函数中
错误C:
\jisuanqibyjzj.TXT183:
需要用常量表达式在Run函数中
错误:
C:
\jisuanqibyjzj.TXT393:
’main’的宣告;
开始编译文件:
C:
jisuanqibyjzj.TXT
4.2调试
根据电脑所给的提示出现语法错误,缺少变量的定义大多的语法错误在通过书本参考下能够修改。
主要是平时看书不仔细、不太注意而产生的。
如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式与使用的情况不太注意而造成不匹配;还有漏掉形参的定义是值不能传递等等。
这些语法错误有信息框的提示一般是能够排除的。
另外还有部分注释的位置也错了,最重要的是逻辑上的错误,一般电脑不容易发现。
所以更要对程序仔细的检查。
经认真修改之后重新保存文件。
4.3错误原因分析一
缺少变量定义,定义位置不正确
由于该程序相对来讲稍有些长,前后有些变量不容易联系起来,但是在错误信息的提示下一般还是很容易找到。
不过需要注意的是在定义的时候有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。
为减少这样的错误我后来还是用不同的变量名来表示,结果引起的那些错误解决了。
例如:
未定义voidmwindow(char*header);/*窗口函数*/或mwindow("Calculator");/*显示主窗口*/,所以输出voidmwindow(char*header)中就有错误,因为缺少定义。
语法错误
大多的语法错误在通过书本参考下能够修改。
主要是平时缺乏锻炼、不太注意而产生的。
如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式
4.4错误原因分析二
注释的位置
程序设计中在注释的时候不能同我们平常写字一样随心所欲,我们应该注意注释的格式。
注释中不能含有c语言可执行的语句!
逻辑错误
编译、连接的成功并不意味着程序的最终成功。
逻辑上的错误机器不易检查出来,这时需要对数据结果进行分析。
这种错误的查找是最难的,需要有相当的耐心和细心去把问题找出来。
这也是本次程序编辑过程中碰到的最大的难题。
往往运行之后得不到另人满意的结果,此时解决的方法一则用“分段检查”的方法,在程序的不同位置设几个printf函数语句,输出有关变量的值,逐段往下检查,对检查出的错误进行修改,当调试完毕将设置的printf都删去。
若在程序中找不到问题,则再来考虑算法是否逻辑严谨,再进行修改。
如此循环往复,直到最后程序运行成功。
在本次程序编辑过程中,我就是常遇到编译能通过,能够运行程序,但是总在输入、删除等操作完之后再想去看数据文件中存在的数据记录的时候,却一条记录也显示不出来,可能是对n变量的定义或使用出错了,于是在每个主要函数的操作过程中添加了printf语句用来显示n的变化,在执行某个函数前添加插入语句显示n的起始值,在执行完该个函数后再添加插入语句显示此时n的结果值,观察n的变化是否正确,如果错误了,也就说明该函数编写过程有错。
诸如这样的调试方法,不断缩小检查范围,最后将错误找到,进行修改。
所以到最后我找到了错误,及时改正,终于把程序完成了,一切功能显示正常。
第五章用户使用说明书
5.1运行TurboC程序进入计算器界面
通过他Tubroc的路径找到TC文件夹
找到TC文件夹中的tc.exe文件,并用鼠标双击该文件名
进入TC环境。
打开jisuanqibyjzj.c文件
5.2计算器的使用
基本使用:
用→←↑↓控制鼠标图形移动,当移动到相应得按钮时按回车键输入当前数字或执行对应的函数。
加法:
输入一个被加数数,按“+”,输入被加数,按“=”,输出结果。
减法:
输入被减数数,按“-”,输入减数,按“=”,输出结果。
乘法:
输入一个数,按“*”,输入另个数,按“=”,输出结果。
除法:
输入一个被除数,按“+”,输入另个除数,按“=”,输出结果。
求x的y次方:
输入数x,按“^”,输入数y,按“=”,输出结果。
5.3退出程序
退出TC可以按F10键进入主菜单,选择File菜单下的Quit命令,再按回车键即可退出TC环境。
(也可以在TC环境下直接按Alt+X键退出程序。
这是TC环境下的热键)
第六章心得体会及总结
经过了一个星期的c语言程序设计终于在老师的细心指导和同学的热情帮助下基本完成了计算器课题的设计修改任务,虽然有些地方不尽如人意但是初步达到了对自己的要求。
刚开始设计的时候找不到头绪,不知道该从哪里下手,通过向同学询问和向老师寻求帮助找走进了设计的门槛。
通过网上查找到很多成功的计算器程序,通过对那些已经成功地程序进行分析找到自己的设计思路,制定设计流程。
并通过比较各种程序了解各个程序的利弊,从而明确自己计算器的设计方向和如何通过技术手段达到自己的目的。
万事开头难,可是对于并不是很熟悉的c语言在下面的工作中困难处处能遇见.通过查找c语言教材去图书馆查找相关的资料和同学一起讨论终于把一个个棘手的陌生的问题解决。
测试阶段中发现了几处错误导致程序不能编译,通过耐心的分析源代码终于编好了一个完整无误的程序。
编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还必须强破自己坚持下去,按照老师所说的模块化思想,分部分的进行编写。
而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。
所以认真仔细就是非常重要的了。
在这次的c语言程序设计实习中遇到了现实编程中必然见到的问题通过这些问题的解决积累了编程的实践经验。
在实际的编程操作中发现自己c语言知识的不足,加深了对c语言的理解。
在学习之余体验到收获的感觉。
同时认识到程序员的工作并不是我们想象的那么简单轻松的,在现在的编程中要有足够的耐心和热情。
通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。
在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!
附:
源程序
#include
#include
#include
#include
#include
#include
#include
#include
#include
#defineUP0x48/*光标上移键*/
#defineDOWN0x50/*光标下移键*/
#defineLEFT0x4b/*光标左移键*/
#defineRIGHT0x4d/*光标右移键*/
#defineENTER0x0d/*回车键*/
void*rar;/*全局变量,保存光标图象*/
structpalettetypepalette;/*使用调色板信息*/
intGraphDriver;/*图形设备驱动*/
intGraphMode;/*图形模式值*/
intErrorCode;/*错误代码*/
intMaxColors;/*可用颜色的最大数值*/
intMaxX,MaxY;/*屏幕的最大分辨率*/
doubleAspectRatio;/*屏幕的像素比*/
voiddrawboder(void);/*画边框函数*/
voidinitialize(void);/*初始化函数*/
voidcomputer(void);/*计算器计算函数*/
voidchangetextstyle(intfont,intdirection,intcharsize);/*改变文本样式函数*/
voidmwindow(char*header);/*窗口函数*/
intspecialkey(void);/*获取特殊键函数*/
intarrow();/*设置箭头光标函数*/
/*主函数*/
intmain()
{
initialize();/*设置系统进入图形模式*/
computer();/*运行计算器*/
closegraph();/*系统关闭图形模式返回文本模式*/
return(0);/*结束程序*/
}
/*设置系统进入图形模式*/
voidinitialize(void)
{
intxasp,yasp;/*用于读x和y方向纵横比*/
GraphDriver=DETECT;/*自动检测显示器*/
initgraph(&GraphDriver,&GraphMode,"");
/*初始化图形系统*/
ErrorCode=graphresult();/*读初始化结果*/
if(ErrorCode!
=grOk)/*如果初始化时出现错误*/
{
printf("GraphicsSystemError:
%s\n",
grapherrormsg(ErrorCode));/*显示错误代码*/
exit
(1);/*退出*/
}
getpalette(&palette);/*读面板信息*/
MaxColors=getmaxcolor()+1;/*读取颜色的最大值*/
MaxX=getmaxx();/*读屏幕尺寸*/
MaxY=getmaxy();/*读屏幕尺寸*/
getaspectratio(&xasp,&yasp);/*拷贝纵横比到变量中*/
AspectRatio=(double)xasp/(double)yasp;/*计算纵横比值*/
}
/*计算器函数*/
voidcomputer(void)
{
structviewporttypevp;/*定义视口类型变量*/
intcolor,height,width;
intx,y,x0,y0,i,j,v,m,n,act,flag=1;
floatnum1=0,num2=0,result;/*操作数和计算结果变量*/
charcnum[5],str2[20]={""},c,temp[20]={""};
charstr1[]="1230.456+-789*/Qc=^%";/*定义字符串在按钮图形上显示的符号*/
mwindow("Calculator");/*显示主窗口*/
color=7;/*设置灰颜色值*/
getviewsettings(&vp);/*读取当前窗口的大小*/
width=(vp.right+1)/10;/*设置按钮宽度*/
height=(vp.bottom-10)/10;/*设
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算器 课程设计 程序设计