计算器的设计及工作源代码

上传人:无*** 文档编号:213920098 上传时间:2023-05-27 格式:PDF 页数:8 大小:1.49MB
收藏 版权申诉 举报 下载
计算器的设计及工作源代码_第1页
第1页 / 共8页
计算器的设计及工作源代码_第2页
第2页 / 共8页
计算器的设计及工作源代码_第3页
第3页 / 共8页
资源描述:

《计算器的设计及工作源代码》由会员分享,可在线阅读,更多相关《计算器的设计及工作源代码(8页珍藏版)》请在装配图网上搜索。

1、计算器的设计及工作源代码Sinclude /*D0S 接口函数*/#include /*数学函数的定义*/Sinclude /*屏幕操作函数*/#include /*I/0 函数*/#include /*库函数*/Winclude /*变量长度参数表*/#include /*图形函数*/#include /*字符串函数*/include /*字符操作函数*/#define UP 0 x48/*光标上移键*/#define DOWN 0 x50/*光标下移键*/Sdefine LEFT 0 x4b/*光标左移键*/#define RIGHT 0 x4d/*光标右移键*/define ENTER

2、OxOd/*回车键*/void*rar;/*全局变量,保存光标图象*/struct palettetype palette;/*使用调色板信息*/int GraphDriver;/*图形设备驱动*/int GraphMode;/*图形模式值*/int ErrorCode;/*错误代码*/int MaxColors;/*可用颜色的最大数值*/int MaxX,MaxY;/*屏幕的最大分辨率*/double AspectRatio;/*屏幕的像素比*/void drawboder(void);/*画边框函数*/void initialize(void);/*初始化函数*/void computer

3、(void);/*计算器计算函数*/void changetextstyle(int font,int direction,int charsize);/*改变文本样式函数*/void mwindow(char*header);/*窗口函数*/int specialkey(void);/*获取特殊键函数*/int arrov();/*设置箭头光标函数*/*主函数*/int main()initialize();/*设置系统进入图形模式*/computer。;/*运行计算器*/closegraph();/*系统关闭图形模式返回文本模式*/return(0);/*结束程序*/)/*设置系统进入图形

4、模式*/void initialize(void)|int xasp,yasp;/*用于读x 和 y 方向纵横比*/GraphDriver=DETECT;/*自动检测显示器*/i n i t g r a p h(f e G r a p h D r i v e r,f e G r a p h M o d e,);/*初始化图形系统*/E r r o r C o d e =g r a p h r e s u l t ();/*读初始化结果*/i f(E r r o r C o d e !=g r O k )/*如果初始化时出现错误*/(p r i n t f(G r a p h i c s S y

5、 s t e m E r r o r:%s n”,g r a p h e r r o r m s g (E r r o r C o d e );/*显示错误代码*/e x i t (1 );/*退出*/)g e t p a l e t t e(f e p a l e t t e );/*读面板信息*/M a x C o l o r s =g e t m a x c o l o r ()+1;/*读取颜色的最大值*/M a x X =g e t m a x x ();/*读屏幕尺寸*/M a x Y =g e t m a x y ();/*读屏幕尺寸*/g e t a s p e c t r a

6、 t i o(&x a s p,&y a s p );/*拷贝纵横比到变量中*/A s p e c t R a t i o =(d o u b l e)x a s p/(d o u b l e)y a s p;/*计算纵横比值*/*计算器函数*/v o i d c o m p u t e r(v o i d)(s t r u c t v i e w p o r t t y p e v p;/*定义视口类型变量*/i n t c o l o r,h e i g h t,w i d t h;i n t x,y,x O,y O,i,j,v,m,n,a c t,f l a g=l;f l o a t

7、n u m l=0,n u m 2=0,r e s u l t;/*操作数和计算结果变量*/c h a r c n u m 5 ,s t r 2 2 0 =,c,t e m p 2 0 =;c h a r s t r 1 =1 2 3 0.4 5 6+-7 8 9*/Q c=;/*定义字符串在按钮图形上显示的符号*/m w i n d o w(C a l c u l a t o r );/*显示主窗口*/c o l o r =7;/*设置灰颜色值*/g e t v i e w s e t t i n g s(&v p );/*读取当前窗口的大小*/w i d t h=(v p.r i g h

8、t+l)/1 0;/*设置按钮宽度*/h e i g h t=(v p.b o t t o m-1 0)/1 0 ;/*设置按钮高度*/x =w i d t h /2;/*设置x的坐标值*/y =h e i g h t/2;/*设置y的坐标值*/s e t f i l l s t y l e(S O L I D _ F I L L,c o l o r+3);b a r(x+w i d t h*2,y,x+7*w i d t h,y+h e i g h t );/*画一个二维矩形条显示运算数和结果*/s e t c o l o r (c o l o r+3 );/*设置淡绿颜色边框线*/r e

9、c t a n g l e(x+w i d t h*2,y,x+7*w i d t h,y+h e i g h t );/*画一个矩形边框线*/s e t c o l o r (R E D);/*设置颜色为红色*/o u t t e x t x y (x+3*w i d t h,y+h e i g h t/2,0.);/*输出字符串 0.*/x =2*w i d t h-v i d t h/2;/*设置 x 的坐标值*/y =2*h e i g h t+h e i g h t/2;/*设置 y 的坐标值*/f o r(j=0 ;j&l t;4 ;+j )/*画按钮*/f o r(i=0 ;i&

10、l t;5 ;+i )(s e t f i l l s t y l e(S O L I D F I L L,c o l o r);s e t c o l o r (R E D);b a r (x,y,x+w i d t h,y+h e i g h t );/*画一个矩形条*/r e c t a n g l e(x,y,x+w i d t h,y+h e i g h t );s p r i n t f(s t r 2,%c ,s t r l j*5+i );/*将字符保存到s t r 2 中*/o u t t e x t x y(x+(w i d t h/2),y+h e i g h t/2,s

11、 t r 2);x =x+w i d t h+(w i d t h /2);/*移动列坐标*/)y +=(h e i g h t/2)*3;/*移动行坐标*/x =2*w i d t h-w i d t h/2;/*复位列坐标*/x 0=2*w i d t h;y 0=3*h e i g h t;x=x O;y=y O;g o t o x y(x,y);/*移动光标到x,y 位置*/a r r o w ();/*显示光标*/p u t i m a g e (x,y,r a r,X O R _ P U T);m=0;n=0;s t r c p y (s t r 2,);/*设置 s t r 2

12、为空串*/w h i l e(v 二 s p e c i a l k e y ()!=4 5)/*当压下A l t+x 键结束程序,否则执行下面的循环*/(w h i l e(v=s p e c i a l k e y ()!=E N T E R)/*当压下键不是回车时*/(p u t i m a g e(x,y,r a r,X O R P U T);/*显示光标图象*/i f(v=R I G H T)/*右场箭头时新位置计算*/i f(x&g t;=x 0+6*w i d t h)/*如果右移,移到尾,则移动到最左边字符位置*/x=x 0;m=0;)e l s e(x=x+w i d t h

13、+w i d t h/2;m+;/*否则,右移到下一个字符位置*/i f(v=L E F T)/*左移箭头时新位置计算*/i f(x&l t;=x O)x=x 0+6*w i d t h;m=4;/*如果移到头,再左移,则移动到最右边字符位置*/e l s e(x=x-w i d t h-w i d t h/2;m-;/*否则,左移到前一个字符位置*/i f(v=U P)/*上移箭头时新位置计算*/i f(y&l t;=y O)(y=y 0+4*h e i g h t+h e i g h t/2;n=3;/*如果移到头,再上移,则移动到最下边字符位置*/e l s ey=y-h e i g h

14、 t-h e i g h t/2;n一;/*否则,移到上边一个字符位置*/i f(v=D O W N)/*下移箭头时新位置计算*/i f(y&g t;=7*h e i g h t)(y=y O;n=0;/*如果移到尾,再下移,则移动到最上边字符位置*/e l s e(y=y+h e i g h t+h e i g h t/2;n+;/*否则,移到下边一个字符位置*/p u t i m a g e (x,y,r a r,X O R _ P U T);/*在新的位置显示光标箭头*/)c=s t r l n*5+m ;/*将字符保存到变量c中*/i f(i s d i g i t(c)|c=.)/*

15、判断是否是数字或小数点*/(i f(f l a g=-l)/*如果标志为T,表明为负数*/(str c p y(str 2,;/*将负号连接到字符串中*/f l a g=l;/*将标志值恢复为1*/sp r i n tf (tem p,%c ,c);/*将字符保存到字符串变量tem p中*/str c a t(str 2,tem p);/*将tem p中的字符串连接到str 2中*/setf i l l sty l e(S OLID FILL,c o l o r+3);b a r(2*w i dth+w i dth/2,h ei g h t/2,1 5*w i dth/2,3*h ei g h

16、 t/2);o u ttex tx y (5*w i dth,h ei g h t,str 2);/*显示字符串*/i f (c=,+,)(n u m l=a to f (str 2);/*将第一个操作数转换为浮点数*/str c p y (str 2,;/*将 str 2 清空*/a c t=l;/*做计算加法标志值*/setf i l l sty l e(S OLID_ FILL,c o l o r+3);b a r(2*w i dth+w i dth/2,h ei g h t/2,1 5*w i dth/2,3*h ei g h t/2);o u ttex tx y (5*w i dth

17、,h ei g h t,0.);/*显示字符串*/i f(c=-)(i f (str c m p(str 2,)=0)/*如果str 2为空,说明是负号,而不是减号*/f l a g=-l;/*设置负数标志*/el se(n u m l=a to f (str 2);/*将第二个操作数转换为浮点数*/str c p y (str 2,;/*将 str 2 清空*/a c t=2;/*做计算减法标志值*/setf i l l sty l e(S OLID_ FILL,c o l o r+3);b a r (2*w i dth+w i dth/2,h ei g h t/2,1 5*w i dth/

18、2,3*h ei g h t/2);/*画矩形*/o u ttex tx y (5*w i dth,h ei g h t,0.);/*显示字符串*/)i f (c=*,)(n u m l=a to f (str 2);/*将第二个操作数转换为浮点数*/str c p y (str 2,;/*将 str 2 清空*/a c t=3;/*做计算乘法标志值*/setf i l l sty l e(S OLID_ FILL,c o l o r+3);b a r(2*w i dth+w i dth/2,h ei g h t/2,1 5*w i dth/2,3*h ei g h t/2);o u ttex

19、 tx y (5*w i dth,h ei g h t,0.);/*显示字符串*/)i f (c=,/)(n u m l=a to f (str 2);/*将第二个操作数转换为浮点数*/str c p y (str 2,;/*将 str 2 清空*/a c t=4;/*做计算除法标志值*/setf i 1 Isty l e(S OLID_ FILL,c o l o r+3);b a r(2*w i dth+w i dth/2,h ei g h t/2,1 5*w i dth/2,3*h ei g h t/2);o u ttex tx y (5*v i dth,h ei g h t,0.);/*

20、显示字符串*/i f(c=)n u m l=a to f (str 2);/*将第二个操作数转换为浮点数*/str c p y (str 2,;/*将 str 2 清空*/a c t=5;/*做计算乘方标志值*/setf i 1 Isty l e(S OLID_ FILL,c o l o r+3);/*设置用淡绿色实体填充*/b a r (2*w i dth+w i dth/2,h ei g h t/2,1 5*w i dth/2,3*h ei g h t/2);/*画矩形*/o u ttex tx y (5*w i dth,h ei g h t,0.);/*显示字符串*/)i f(c=%)(

21、n u m l=a to f (str 2);/*将第二个操作数转换为浮点数*/str c p y (str 2,;/*将 str 2 清空*/a c t=6;/*做计算模运算乘方标志值*/setf i 1 1 sty l e(S OLID_ FILL,c o l o r+3);/*设置用淡绿色实体填充*/b a r (2*w i dth+w i dth/2,h ei g h t/2,1 5*w i dth/2,3*h ei g h t/2);/*画矩形*/o u ttex tx y (5*w i dth,h ei g h t,0.);/*显示字符串*/)i f (c=,=)(n u m 2=

22、a to f (str 2);/*将第二个操作数转换为浮点数*/sw i tc h (a c t)/*根据运算符号计算*/c a se 1 :r esu l t=n u m l+n u m 2;b r ea k;/*做加法*/c a se 2:r esu 1 t=n u m 1 -n u m 2;b r ea k;/*做减法*/c a se 3:r esu l t=n u m l*n u m 2;b r ea k;/*做乘法*/c a se 4:r esu l t=n u m l/n u m 2;b r ea k;/*做除法*/c a se 5:r esu l t=p o w(n u m l,

23、n u m 2);b r ea k;/*做 x 的 y 次方*/c a se 6:r esu l t=f m o d(n u i n l)n u m 2);b r ea k;/*做模运算*/setf i 1 1 sty l e(S OLID_ FILL,c o l o r+3);/*设置用淡绿色实体填充*/b a r (2*w i dth+w i dth/2,h ei g h t/2,1 5*w i dth/2,3*h ei g h t/2);/*覆盖结果区*/sp r i n tf (tem p,V,r esu l t);/*将结果保存到 tem p 中*/o u ttex tx y (5*

24、w i dth,h ei g h t,tem p);/*显示结果*/)i f (c=c)(n u m l=0;/*将两个操作数复位0,符号标志为1*/n u m 2=0;f l a g=l;str c p y (str 2,;/*将 str 2 清空*/setf i l l sty l e(S OLID_ FILL,c o l o r+3);/*设置用淡绿色实体填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);/*覆盖结果区*/outtextxy(5*width,height,0.);/*显示字符串*/)if(c=Q)exit(O)

25、;/*如果选择了 q 回车,结束计算程序*/)put image(x,y,rar,X0R_PUT);/*在退出之前消去光标箭头*/return;/*返回*/)/*窗口函数*/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 )

26、;/*设置文本样式*/settextjustify(CENTER_TEXT,TOP_TEXT);/*设置字符排列方式*/outtextxy(MaxX/4,2,header);/*输出标题*/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,

27、NORM_WIDTH);/*设置画线方式*/getviewsettings(&vp);/*将当前视口信息装入vp所指的结构中*/rectangle(0,0,vp.right-vp.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)

28、;/*测试图象大小*/rar=malloc(size);/*分配内存区域*/getimage(4,4,16,16,rar);/*存放光标箭头图象*/put image(4,4,rar,XOR_PUT);/*消去光标箭头图象*/r etu r n 0;)/*按键函数*/i n t sp ec i a l k ey (v o i d)(i n t k ey;w h i l e(b i o sk ey (l)=0);/*等待键盘输入*/k ey=b i o sk ey (0);/*键盘输入*/k ey=k ey&0 x f f?k ey&Ox f f:k ey&g t;&g t;8;/*只取特殊键的扫描值,其余为0*/r etu r n (k ey);/*返回键值*/)

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!