C++ 用VC 编写计算器程序

合集下载

简易计算器C语言代码

简易计算器C语言代码

简易计算器C语言代码 Last updated on the afternoon of January 3, 2021简易四则运算计算器计算机工具地历史而言,中国古代最早采用地一种计算工具叫筹策,又叫做算筹,这种算筹多用竹子制成,也有用木头,兽骨充当材料的,大约270枚一束,放在布袋里可随身携带。

直到今天仍在使用的住算盘,是中国古代计算工具领域中的另一项发明明代时的住算盘已经与现代的住算盘几乎相同。

17世纪初,西方国家的计算工具有了较大的发展。

英国数学家纳尔发现了“纳皮尔算筹”;英国牧师奥却德发明了圆柱形对数计算尺,这种计算尺不仅能做加减乘涂,乘方和开方运算,甚至可以计算三角函数,指数函数和对数函数。

这些计算工具不仅带动了计算的发展,也为现代计算器发展尊定了良好的基础,成为现代社会应用广泛的计算工具,如手机,操作系统上附带的多功能计算器。

项目设计目的掌握模块的划分;掌握结构体定义;掌握栈的操作;掌握函数的定义;掌握栈的基本操作;掌握VC的基本绘图库;掌握鼠标的响应操作;目设计内容设计一个含有界面的计算器,输入一个包含括号的表达式,使用栈数据类型实现整数的四则运算操作,开方运算。

项目设计要求根据分析,系统要求实现以下几点基本功能:可通过按钮输入数字、运算符;能通过按钮实现退格、清除功能;实现加、减、乘、除、开方运算功能;实现括号运算;显示运算结果;良好的交互界面。

项目详细设计功能模块图根据系统功能要求,主要含有四大模块,分别是计算器界面设计模块、计算器按键控制模块、四则混合运算模块、计算器记忆处理模块。

计算器界面设计模块:调用VC图形系统函数和字符函数画出计算器的界面,包括24个按钮和一个文本输入框。

计算机按键控制模块:计算器通过键盘按键值的判断,执行相应的操作,如接收数字输入等。

计算器计算处理模块。

计算处理模块主要完成可以包括括号的表达式运算,运算包括加,减,乘,除、开方。

计算处理模块在按键控制模块中被调用执行。

c面向对象程序设计MFC简单计算器实验报告

c面向对象程序设计MFC简单计算器实验报告

c面向对象程序设计M F C简单计算器实验报告Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#计算机与信息工程学院《程序设计基础》课程设计报告题目名称:60.编写一个能实现简单功能的计算器学生姓名:刘沛东学生学号:专业班级:电子信息工程(1)班指导教师:高攀1 课程设计的题目编写一个能实现简单功能的计算器2 题目要求1. 有一个计算器图形。

2. 能实现加、减、乘、除及乘方的运算。

3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色例如:输入数字1 时,在计算器图形上的1键变为红色。

4. 屏幕、图形颜色、形状自定3 总体设计总体框架图1 系统框架系统功能说明在VC++中绘制计算器界面,各控件的设置对0~9控件设定相应的ID和其他属性:图2 “1”控件设置对“+、-、*、\”控件设定相应的ID和其他属性:图2 “+”控件设置对其它控件设定相应的ID和其他属性:图3 其它控件设置主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。

拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。

4 程序详细设计系统主调模块图5 程序流程图各模块详细设计建立的变量,控件的命名,对应的消息处理函数对应表double poz; 按钮的处理函数void CCalcDlg::OnPt(){point_flag=TRUE; && buffer[i+1]==0)之前那位}m_Dis=strtod(buffer,NULL);整个大的程序的实现分8个功能,每个功能都通过一个相应的函数来实现.在调试时分别进行调试,使得调试更方便些.在编写各个函数只是按着题目要求的去完成,后来经指导老师指导后,发现了很多自己欠缺的地方,又一次将程序整体进行调试.最后把程序完善了许多。

用c语言设计一个多功能计算器

用c语言设计一个多功能计算器

用C语言设计一个多功能计算器实现功能:1)具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。

依次输入第一个运算数、运算符(+,-,*,/),第二个运算数,然后输出结果。

结果可以作为下一个运算的第一运算数。

按‘C’清屏,按‘X’退出。

例如:输入:2+5输出:72)实现单运算符表达式计算的功能。

输入的操作数可以包含整数或浮点数。

如果遇到错误的表达式,应输出错误提示信息。

输入表达式如下:例如:输入:2+5输出:7目录摘要 (1)第一章引言 (3)1.1 计算器概述 (3)第二章设计任务及要求 (5)2.1 设计任务 (5)2.2 设计要求 (6)第三章计算器硬件设计 (7)3.1 方案说明 (7)3.2 设计单片机主体电路图 (8)第四章软件设计 (9)4.1 模块介绍 (9)4.2 程序流程图 (10)4.3 程序部分 (11)第五章总结 (16)参考文献 (17)摘要:[目录]一、课程设计题目及任务要求二、设计思路三、部分程序介绍四、程序框图五、汇编程序六、参考资料[原文]一、课程设计题目及任务要求请设计十进制加减法计算器。

要求能(不同时)显示3位输入和4位输出。

二、设计思路1、操作显示设备显示设备采用八片七段共阴极LED显示器,共设置16 个键,其中数字键0~9 共十个,接下来依次是加号键、减号键、等于号、清除键。

操作设备是两行八列共16键的简单键盘。

第一行从左至右分别为0、1、2、3、4、5、6、7,第二行分别为8、9、A(+)、B(-)、C(=)、D(清除键)、E (清除键)、F(清除键),“清除键”表示程序初始化,为下次输入准备。

2、程序实现功能(1)十进制加减法计算:输入范围为(1~999),该程序输入两个定点数,每个3位,输出4位;A为加,B为减,C为等于,输出为四位计算结果。

数据输入采用规范化输入,即必须输入3个数才算完成一个运算数的输入,两个运算数之间输入运算符A或者B,输入完成按C显示计算结果;(2)计算机复位功能:DEF均为清零重启,任何时候按下DEF中一个将重新开始;三、部分程序介绍(1)主程序(START)程序开始运行初始化程序,设置输入输出口PA、PB、PC,扫描键盘,输入两个待求数据和运算符,存入寄存器,等待输入等号同时显示第二个数,运行计算程序,并将计算结果分离,输出到显示器;(2)读键子程序(RD_KB)程序分别扫描两行键盘,若有键按下则通过移位的方式计算键码;若无键按下,则将键码缓存设置为10H,判断后进行相应的跳转。

计算器编程c语言

计算器编程c语言

计算器编程 c语言用C语言设计计算器程序源代码#include <dos.h> /*DOS接口函数*/#include <math.h> /*数学函数的定义*/#include <conio.h> /*屏幕操作函数*/函数*/#include <stdio.h> /*I/O#include <stdlib.h> /*库函数*/变量长度参数表*/#include <stdarg.h> /*图形函数*/#include <graphics.h> /*字符串函数*/#include <string.h> /*字符操作函数*/#include <ctype.h> /*#define UP 0x48 /*光标上移键*/#define DOWN 0x50 /*光标下移键*/#define LEFT 0x4b /*光标左移键*/#define RIGHT 0x4d /*光标右移键*/#define ENTER 0x0d /*回车键*/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(void); /*改变文本样式函数*/ void changetextstyle(int font, int direction, int charsize); /*窗口函数*/void mwindow(char *header); /*/*获取特殊键函数*/int specialkey(void) ;设置箭头光标函数*//*int arrow();/*主函数*/int main(){设置系统进入图形模式 */initialize();/*运行计算器 */computer(); /*系统关闭图形模式返回文本模式*/closegraph();/*/*结束程序*/return(0);}/* 设置系统进入图形模式 */void initialize(void){int xasp, yasp; /* 用于读x和y方向纵横比*/GraphDriver = DETECT; /* 自动检测显示器*/initgraph( &GraphDriver, &GraphMode, "" );/*初始化图形系统*/ErrorCode = graphresult(); /*读初始化结果*/如果初始化时出现错误*/if( ErrorCode != grOk ) /*{printf("Graphics System Error: %s\n",显示错误代码*/grapherrormsg( ErrorCode ) ); /*退出*/exit( 1 ); /*}getpalette( &palette ); /* 读面板信息*/MaxColors = getmaxcolor() + 1; /* 读取颜色的最大值*/MaxX = getmaxx(); /* 读屏幕尺寸 */MaxY = getmaxy(); /* 读屏幕尺寸 */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 cnum[5],str2[20]={""},c,temp[20]={""};定义字符串在按钮图形上显示的符号 char str1[]="1230.456+-789*/Qc=^%";/**/mwindow( "Calculator" ); /*显示主窗口 */设置灰颜色值*//*color = 7;getviewsettings( &vp ); /* 读取当前窗口的大小*/width=(vp.right+1)/10; /* 设置按钮宽度 */设置按钮高度 */height=(vp.bottom-10)/10 ; /*/*设置x的坐标值*/x = width /2;设置y的坐标值*/y = height/2; /*setfillstyle(SOLID_FILL, color+3);bar( x+width*2, y, x+7*width, y+height );/*画一个二维矩形条显示运算数和结果*/setcolor( color+3 ); /*设置淡绿颜色边框线*/rectangle( x+width*2, y, x+7*width, y+height );/*画一个矩形边框线*/设置颜色为红色*/setcolor(RED); /*输出字符串"0."*/outtextxy(x+3*width,y+height/2,"0."); /*/*设置x的坐标值*/x =2*width-width/2;设置y的坐标值*/y =2*height+height/2; /*画按钮*/for( j=0 ; j<4 ; ++j ) /*{for( i=0 ; i<5 ; ++i ){setfillstyle(SOLID_FILL, color);setcolor(RED);bar( x, y, x+width, y+height ); /*画一个矩形条*/rectangle( x, y, x+width, y+height );sprintf(str2,"%c",str1[j*5+i]);/*将字符保存到str2中*/outtextxy( x+(width/2), y+height/2, str2);移动列坐标*/x =x+width+ (width / 2) ;/*}y +=(height/2)*3; /* 移动行坐标*/x =2*width-width/2; /*复位列坐标*/}x0=2*width;y0=3*height;x=x0;y=y0;gotoxy(x,y); /*移动光标到x,y位置*/显示光标*/arrow(); /*putimage(x,y,rar,XOR_PUT);m=0;n=0;设置str2为空串*/strcpy(str2,""); /*当压下Alt+x键结束程序,否则执行下面的循环while((v=specialkey())!=45) /**/{当压下键不是回车时*/while((v=specialkey())!=ENTER) /*{putimage(x,y,rar,XOR_PUT); /*显示光标图象*/if(v==RIGHT) /*右移箭头时新位置计算*/if(x>=x0+6*width)如果右移,移到尾,则移动到最左边字符位置*//*{x=x0;m=0;}else{x=x+width+width/2;m++;否则,右移到下一个字符位置*/} /*if(v==LEFT) /*左移箭头时新位置计算*/if(x<=x0){x=x0+6*width;m=4;} /*如果移到头,再左移,则移动到最右边字符位置*/else{x=x-width-width/2;m--;} /*否则,左移到前一个字符位置*/if(v==UP) /*上移箭头时新位置计算*/if(y<=y0){y=y0+4*height+height/2;n=3;} /*如果移到头,再上移,则移动到最下边字符位置*/else{y=y-height-height/2;n--;} /*否则,移到上边一个字符位置*/if(v==DOWN) /*下移箭头时新位置计算*/if(y>=7*height){ y=y0;n=0;} /*如果移到尾,再下移,则移动到最上边字符位置*/else{y=y+height+height/2;n++;} /*否则,移到下边一个字符位置*/putimage(x,y,rar,XOR_PUT); /*在新的位置显示光标箭头*/ }将字符保存到变量c中*/c=str1[n*5+m]; /*判断是否是数字或小数点*/if(isdigit(c)||c=='.') /*{如果标志为-1,表明为负数*/if(flag==-1) /*{将负号连接到字符串中*/strcpy(str2,"-"); /*flag=1;} /*将标志值恢复为1*/将字符保存到字符串变量temp中*/ sprintf(temp,"%c",c); /*将temp中的字符串连接到str2中*/strcat(str2,temp); /*setfillstyle(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); /*将str2清空*/strcpy(str2,""); /*做计算加法标志值*/act=1; /*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=='-'){如果str2为空,说明是负号,而不是减号*/ if(strcmp(str2,"")==0) /*设置负数标志*/flag=-1; /*else{将第二个操作数转换为浮点数*/num1=atof(str2); /*将str2清空*/strcpy(str2,""); /*act=2; /*做计算减法标志值*/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=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,""); /*将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); /*将str2清空*/strcpy(str2,""); /*做计算乘方标志值*/act=5; /*设置用淡绿色实体填充*/ 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=6; /*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=='='){将第二个操作数转换为浮点数*/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; /*做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); /*将结果保存到temp中*/sprintf(temp,"%f",result); /*outtextxy(5*width,height,temp); /*显示结果*/}if(c=='c'){num1=0; /*将两个操作数复位0,符号标志为1*/num2=0;flag=1;strcpy(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."); /*}如果选择了q回车,结束计算程序*/if(c=='Q')exit(0); /*}putimage(x,y,rar,XOR_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 );/*设置文本样式*/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, NORM_WIDTH );/*设置画线方式*/将当前视口信息装入vp所指的结构中*/getviewsettings( &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); /*分配内存区域*/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); /*键盘输入*/只取特殊键的扫描值,其余为0*/ key=key&0xff? key&0xff:key>>8; /*return(key); /*返回键值*/}。

VC计算器-小闹钟-通讯录设计(含源文件)

VC计算器-小闹钟-通讯录设计(含源文件)

面向对象Windows程序设计选题:计算器、小闹钟、通讯录学号:姓名:院(系):信息工程学院专业:信息完成日期:指导老师:老师题目一:利用MFC框架编写简易计算器一.需求分析即要实现简单计算器的功能,包括加、减、乘、除等运算功能,还要实现数据的输入、输出、计算、显示及程序退出等功能。

二.总体设计1.程序的创建.使用软件Visual C++ 6.0.,首先,新建一个MFC 基于对话框的工程。

点击文件-新建,在工程选项卡里选择MFC AppWizard[exe],给工程命名Jisuan。

点击确定。

创建一个基于对话框的应用程序。

2.界面的设计按如图所示向对话框添加控件,且按如图所示一样排版。

4.为控件添加成员变量和消息处理函数为IDC_FIRNUM 增加一个变量,点Add Variable…,我们为它增加一个 float 型的变量,命名为m_Firnum。

给第二个编辑框增加float变量m_Secnum。

第三个编辑框增加float变量m_Result。

按ctrl+w选择第一个选项卡 Message Maps,从IDs 中选择IDC_JIA,即加这个按钮,从 Messages 中选择 BN_CLICKED,即当被单击的时候,然后点 AddFunction…为其添加函数然后弹出对话框,为函数命名,选择默认即可,点击OK。

同样为-,*,/添加一样的响应函数。

结果如图:三、编程说明与实现添加如下代码:void CJisuanDlg::OnJia(){// TODO: Add your control notification handler code hereUpdateData(true);m_Result=m_Firnum+m_Secnum;UpdateData(false);}void CJisuanDlg::OnJian(){// TODO: Add your control notification handler code hereUpdateData(true);m_Result=m_Firnum-m_Secnum;UpdateData(false);}void CJisuanDlg::OnCheng(){// TODO: Add your control notification handler code hereUpdateData(true);m_Result=m_Firnum*m_Secnum;UpdateData(false);}void CJisuanDlg::OnChu(){// TODO: Add your control notification handler code hereUpdateData(true);m_Result=m_Firnum/m_Secnum;UpdateData(false);}这里有一个UpdateData(Bool)函数。

基于vc++mfc的科学计算器程序实验报告

基于vc++mfc的科学计算器程序实验报告

实验报告课程名称:windows软件开发实习实验项目:科学计算器工业大学实验报告(适用计算机程序设计类)专业班级:软件1006 学号:101201622 :鑫可实验名称:附件A 工业大学实验报告(适用计算机程序设计类)专业班级:软件1006 学号:101201622 :鑫可实验步骤或程序:一、关于Visual C++:Visual C++6.0由Microsoft开发, 它不仅是一个C++ 编译器,而且是一个基于Windows 操作系统的可视化集成开发环境(integrated development environment,IDE)。

Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。

这些组件通过过一个名为Developer Studio的组件集成为和谐的开发环境。

Microsoft的主力软件产品。

Visual C++是一个功能强大的可视化软件开发工具。

自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。

虽然微软公司推出了Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。

所以实际中,更多的是以Visual C++6.0为6平台。

Visual C++6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。

比如,它允许用户进行远程调试,单步执行等。

还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。

其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。

这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。

二、设计要点1、基本要求:设计的系统界面要美观大方,操作合理,有必要的提示。

VC6.0制作简易计算器MFC[整理]

VC6.0制作简易计算器MFC[整理]

1、单击File(文件)菜单,选中New(新建),创建新工程。

2、选择工程栏中MFC AppWizard[exe]应用程序,并命名工程名称为calculator.(如图)3、选择MFC应用程序为“基于对话框”类型,其他选项默认。

单击完成(如图)4、修改界面。

经过前3步骤,VC6.0生成的工作界面如图所示。

先将对话框中的“TODO:在这里设置对话控制”静态文字控件和“确定”按钮控件删除,再使用工具箱将界面拖动控件修改为如图所示的界面。

该图所示是使用工具箱的控件拖放制作的计算器初始界面。

由于这些控件都有默认的名字,所以我们要对控件进行改名,右击Button1按钮,选中Properties(属性)选项以修改控件的属性,如图所示。

在弹出的对话框中,将Button1按钮的Caption(标题)属性修改为“+”,此时初始界面同时变成相应的“+”如下图所示。

修改后的界面如图所示,控件的Caption属性就是控件显示出来的值。

按照前文所讲述的方式,将界面上的按钮控件和静态文本控件的Caption属性都做相应的修改,修改后的界面如图所示。

5、为Edit(编辑)控件添加类的成员变量。

首先,右击Edit控件,选择ClassWizard(建立类向导)选项,如下图所示。

在弹出的对话框中,选择上方MemberVariables选项卡,选中DIC_EDIT1,然后单击单击右侧的Add Variable按钮,如图所示。

单击Add Variable按钮后会跳出,如图所示的对话框,该对话框是设置成员变量的命名和数据类型,在此可以命名为m_data1.注意:控件的ID只是标记一个控件,程序中不能直接控制ID,只能通过修改变量来改变控件的状态。

00相应的,再将另外两个Edit控件命名,本项目就将这3个Edit控件命名为:●IDC_EDIT1:m_data1,类型为double.●IDC_EDIT2:m_data2,类型为double.●IDC_EDIT3:m_result,类型为double.6、添加按钮控件的消息处理函数。

VC程序设计任务书及标准封面

VC程序设计任务书及标准封面

武汉科技大学机械自动化学院2009.9任务一开发一个计算器程序1. 软件功能与目标开发一个计算器软件,要求是基于对话框的应用程序,至少具有加、减、乘、除四个基本功能。

在此基础上扩展平方、开方、三角函数等功能。

2. 具体要求(1)使用Visual C++ 的MFC开发一个基于对话框的应用程序软件;(2)要有数据输入和结果显示窗口(或者数据的输入和显示共用一个窗口);(3)对话框字体采用“楷体”小四号字体;(4)窗口要有“最小化”按钮,同时屏蔽掉“最大化”按钮;(5)界面上设置一个按钮,点击后弹出一个消息窗口,显示软件开发者的姓名、班级、学号等信息,按钮位置自定;(6)要求界面美观、操作方便,风格自定。

3. 软件设计说明书撰写要求软件设计说明书应按规定要求和格式撰写。

(1)软件目标:说明所开发软件的目标和具体功能;(2)软件设计:基于何种模式开发;基本操作流程;何种界面风格;软件功能模块等简要说明;(3)实现过程:根据照软件开发的过程按步骤分条叙述,界面上设置的控件应说明其控件ID号,主要属性,对应的变量名称与类型;自定义的函数、消息映射等应说明;实现过程中的主要代码应列出;(可参考上课所讲例题的流程)(4)软件界面:给出1~2幅软件最终界面截屏图片。

4. 软件提交存档将最终软件源程序与可执行文件打包后统一提交至任课老师处。

任务二开发一个画图程序1. 软件功能与目标开发一个画图软件,要求是基于单文档或多文档的应用程序,能绘制点、直线、矩形、圆、椭圆等基本几何图形。

在此基础上扩展多边形、扇形、贝赛尔曲线以及文字输出等功能。

2. 具体要求(1)使用Visual C++ 的MFC开发一个基于单文档或多文档的应用程序软件;(2)(可选项)如果是多文档,要求具有切分窗口,其中一侧窗口为数据显示及输入窗口,另一侧窗口为图形显示窗口,且两个窗口的大小均能动态改变;(3)程序要能够绘制点、直线、矩形、圆、椭圆等基本几何图形;(4)既可以从菜单中点击子菜单项来绘制图形,也可以从对应的工具栏按钮中点击按钮进行绘制;(5)在状态栏中显示当前操作命令;(6)在程序“帮助”菜单的“About”对话框中用静态文本控件显示软件开发者的姓名、班级、学号等信息;(7)要求界面美观、操作方便,界面风格自定。

VC++制作一个入门的计算器软件

VC++制作一个入门的计算器软件

VC++整理入门计算器本文档是运用VC++6.0整理一个入门计算器的过程。

由于时间和知识技能原因,只能简单的做一个入门级的计算器(只实现加减乘除功能),以后的内容再追加。

一、建立工程启动VC++6.0,然后“文件”新建一个工程,选择“MFC AppWizard(exe)”选项,输入工程名,确定。

(如下图)弹出“MFC应用程序向导-步骤1”选择“基本对话框”,语言选“中文”,点击完成。

在弹出的控件界面,把按钮先删除。

二、设计计算器界面根据自己的喜好设计计算器的界面,(下图是我设计的简易的界面)。

用控件里面的布局计算器的界面,修改按钮显示,先右击要修改的按钮,选择“属性”,修改对应的“标题”。

按钮设计好之后,设置对应的类,加减乘除四个运算符分别如下设置,右击选“建立类向导”,在“Message Maps”选项内,选对应的“IDC_BUTTON1”,设置Messages:BN_CLICKED,然后“Add Function”,一次选择其他三个按钮,按确定。

(如下图)编辑框如下类,同样是右击编辑框,右击选“建立类向导”,选择第二个选项,选择IDC_EDIT1,然后选Add Variable...,在弹出的对话框中名字中输入m_num1,类型选数字Double,对应设置剩下的编辑框,然后确定。

下一步是输入代码。

三、代码的输入双击“+”按钮,然后点击确定,在对应的代码语句中输入下面的语句:void CMyDlg::OnButton1(){UpdateData(1);m_num3=m_num1+m_num2;UpdateData(0);}双击“-”按钮,然后点击确定,在对应的代码语句中输入下面的语句:void CMyDlg::OnButton2(){UpdateData(1);m_num3=m_num1-m_num2;UpdateData(0);}双击“X”按钮,然后点击确定,在对应的代码语句中输入下面的语句:void CMyDlg::OnButton3(){UpdateData(1);m_num3=m_num1*m_num2;UpdateData(0);}双击“/”按钮,然后点击确定,在对应的代码语句中输入下面的语句:void CMyDlg::OnButton4(){UpdateData(1);if(m_num2==0)MessageBox("除数不能为0,请重新输入除数!");elsem_num3=m_num1/m_num2;UpdateData(0);}四:测试到此软件设置完成,运行看看。

简单计算器程序操作步骤

简单计算器程序操作步骤

简单计算器程序操作步骤一、建立”D\ajsq”文件夹二、用VC6编写“简单计算器程序”1、启动VC6,创建“简单计算器程序”工程。

选择D:\asjq,工程名:jsq,选择基于对话框,下一步,完成。

(介绍:类卡、文件卡、资源卡,代码提示工具卡两个,安装visual assist X)2、设计主界面对话框:IDD_JSQ_DIALOG,删除自生成的控件,添加三个Edit Box文本编辑框控件、一个Button按钮控件。

(1)对EDIT查看属性、增加、关联变量:右击EDIT1,选属性,查看ID号为:IDC_EDIT1。

增加、关联变量,右击EDIT1,建立类向导,选成员变量,选中IDC_EDIT1,单击增加变量,名称:m_a,value:float,单击OK。

右击EDIT2,选属性,查看ID号为:IDC_EDIT2。

增加、关联变量,右击EDIT2,建立类向导,选成员变量,选中IDC_EDIT2,单击增加变量,名称:m_b,value:float,单击OK。

右击EDIT3,选属性,查看ID号为:IDC_EDIT3。

增加、关联变量,右击EDIT3,建立类向导,选成员变量,选中IDC_EDIT3,单击增加变量,名称:m_c,value:float,单击OK。

(2)对BUTTON1修改属性和增加消息映射响应函数:右击BUTTON1,选属性,查看ID号为:IDC_BUTTON1,修改标题为:add;增加消息映射响应函数,右击,建立类向导,选中Message Maps,选中IDC_BUTTON1,选中BN_CLICKED,单击Add Function,名称:OnButton1,单击OK。

单击edit code,编写代码:BUTTON1的OnButton1的代码.txt。

UpdateData(true); //从控件得到值赋给变量,给m_a=5;m_b=8;m_c=0;m_c=m_a+m_b; // m_c=13;UpdateData(false); //从变量值给控件显示,文本框分别显示:5,8,13;三、操作使用所编写的“简单计算器程序”F7,Ctrl+F51。

用c语言编写的计算器源代码

用c语言编写的计算器源代码

作品:科学计算器作者:欧宗龙编写环境:vc++6.0语言:c#include"stdafx.h"#include<stdio.h>#include<windows.h>#include<windowsx.h>#include"resource.h"#include"MainDlg.h"#include<math.h>#include<string.h>#definePI3.141593BOOLA_Op=FALSE;BOOLWINAPIMain_Proc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam) {switch(uMsg){HANDLE_MSG(hWnd,WM_INITDIALOG,Main_OnInitDialog);HANDLE_MSG(hWnd,WM_COMMAND,Main_OnCommand);HANDLE_MSG(hWnd,WM_CLOSE,Main_OnClose);}returnFALSE;}BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam){returnTRUE;}voidTrimNumber(chara[])//判断并删除小数点后无用的零{for(unsignedi=0;i<strlen(a);i++){if(a[i]=='.'){for(unsignedj=strlen(a)-1;j>=i;j--){if(a[j]=='0'){a[j]='\0';}elseif(a[j]=='.'){a[j]='\0';}elsebreak;}}}}doubleOperate(charOperator,doublen1,doublen2)//判断符号,进行相应的运算{if(Operator=='0'){}if(Operator=='+'){n2+=n1;}if(Operator=='-'){n2=n1-n2;}if(Operator=='*'){n2*=n1;}if(Operator=='/'){n2=n1/n2;}if(Operator=='^'){n2=pow(n1,n2);}return n2;}////////////////////////////////////////////////voidIntBinary(chara[],intn){if(n>1)IntBinary(a,n/2);sprintf(a,"%s%i",a,n%2);}voiddecimal(chara[],doublem){if(m>0.000001){m=m*2;sprintf(a,"%s%d",a,(long)m);decimal(a,m-(long)m);}}voidBinary(chara[],doubleNum){charDecP[256]="";doublex,y;double*iptr=&y;x=modf(Num,iptr);decimal(DecP,x);IntBinary(a,(int)y);strcat(a,".");strcat(a,DecP);}////////////////////////////////////voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify) {staticDELTIMES=0;staticcharstr[256];staticcharOperator='0';staticdoubleRNum[3];switch(id){caseIDC_BUTTONN1://数字1{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"1");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN2://数字2{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"2");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN3://数字3{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"3");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN4://数字4{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"4");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN5://数字5{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"5");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN6://数字6{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"6");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN7://数字7{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"7");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN8://数字8{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"8");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN9://数字9{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"9");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;caseIDC_BUTTONN0://数字0{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));strcat(str,"0");SetDlgItemText(hwnd,IDC_EDIT,str);RNum[1]=atof(str);A_Op=FALSE;}break;case{if(A_Op){SetDlgItemText(hwnd,IDC_EDIT,NULL);}GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));if(DELTIMES==0){strcat(str,".");}DELTIMES++;SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=FALSE;}break;caseIDC_BUTTONADD://加法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='+';DELTIMES=0;A_Op=TRUE;}break;caseIDC_BUTTONSUB://减法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);DELTIMES=0;A_Op=TRUE;Operator='-';}break;caseIDC_BUTTONMUL://乘法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='*';DELTIMES=0;A_Op=TRUE;}break;caseIDC_BUTTONDIV://除法运算{RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='/';DELTIMES=0;A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='^';DELTIMES=0;}break;caseIDC_BUTTONPI://圆周率PI,弧度{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));if(atof(str)!=0){RNum[2]=atof(str)*PI;sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);}else{sprintf(str,"%f",PI);SetDlgItemText(hwnd,IDC_EDIT,str);}A_Op=TRUE;}break;caseIDC_BUTTONSQRT://开根号{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=sqrt(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONSIN://三角函数sin函数{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=sin(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=cos(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=tan(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONSQ://平方{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=atof(str)*atof(str);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=atof(str)*atof(str)*atof(str);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=exp(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=pow(10,atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONLN://lnx{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=log(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONLOG10://log10{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=log10(atof(str));sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;caseIDC_BUTTONBINARY://十进制转换为二进制{chara[256]="";GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[2]=atof(str);Binary(a,RNum[2]);strcpy(str,a);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);A_Op=TRUE;}break;case{DELTIMES=0;Operator='0';RNum[0]=RNum[1]=RNum[2]=0;memset(str,0,sizeof(str));SetDlgItemText(hwnd,IDC_EDIT,NULL);A_Op=FALSE;}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));inti=strlen(str);str[i-1]='\0';SetDlgItemText(hwnd,IDC_EDIT,str);}break;case{GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str));RNum[1]=atof(str);RNum[0]=RNum[1];RNum[1]=RNum[2];RNum[2]=Operate(Operator,RNum[1],RNum[0]);sprintf(str,"%f",RNum[2]);TrimNumber(str);SetDlgItemText(hwnd,IDC_EDIT,str);Operator='0';DELTIMES=0;}break;default:break;}}voidMain_OnClose(HWNDhwnd){EndDialog(hwnd,0);}本人拙作,如有不足之处请谅解。

C语言实现简单计算器程序

C语言实现简单计算器程序

C语⾔实现简单计算器程序这两天在看⼀个C语⾔写的计算器程序,做了不少的功夫,跟着作者⼀步步的进⾏完善,了解了许多细节性的东西,在此⾃⼰做个总结,加深⾃⼰对程序的印象,也算是梳理。

在该计算器程序,能进⾏加减乘除、sin、cos、exp等操作,同时能进⾏数值保存功能。

⽽该计算器使⽤逆波兰表⽰法。

即所有运算符都跟在操作数的后⾯,⽐如下列表达式:(1 - 2) * (4 + 5)采⽤逆波兰表⽰法表⽰为:1 2 - 4 5 + *逆波兰表达法中不需要圆括号,只要知道每个运算符需要⼏个操作数就不会引起歧义。

计算器程序实现很简单,具体原理如下:while(/* 下⼀个运算符或操作数不是⽂件结束指⽰符 */)if(/* 是数 */)/* 将该数压⼊到栈中 */else if (/* 是运算符 */)/* 弹出所需数⽬的操作数 *//* 执⾏运算 *//* 将结果压⼊到栈中 */else if (/* 是换⾏符 */)/* 弹出并打印栈顶的值 */else/* 出错 */在程序设计中,使⽤模块化思想,getop函数来进⾏读⼊,该函数返回⼀个标识,⽤来标识读⼊的是什么类型。

主循环体中根据该标识执⾏相应的动作。

以下是该程序:(我将所有函数和变量放在同⼀⽂件)#include <stdlib.h>#include <stdio.h>#include <string.h>#define MAXOP 100#define NUMBER '0' //标识读⼊的是数字#define NAME 'n' //标识读⼊的是字符串(函数名或⾮法字符串)#define ALPHA 26int getop(char []);void push (double); //压栈double pop(void); //出栈void clear(void); //清空栈void mathfnc(char []); //执⾏相应的数学函数sin、cos、exp等int main(void){int type;int i, var = 0;double op1, op2,v;char s[MAXOP];double variable[ALPHA];for (i = 0; i < ALPHA; i++) //初始化⽤于保存数值的变量数组variable[i] = 0.0;while ((type = getop(s)) != EOF) //读取输⼊{switch (type){case NUMBER:push (atof(s));break;case NAME:mathfnc(s);break;case '+':push (pop() + pop());break;case '*':push (pop() * pop());break;case '-':op2 = pop();push (pop() - op2);break;case '/':op2 = pop();if (op2 != 0.0)push (pop() / op2);elseprintf ("error: zero divisor\n");break;case '%':op2 = pop();if (op2 != 0.0)push (fmod(pop(), op2));elseprintf ("error: zero divisor\n");break;case '?': //打印栈顶元素op2 = pop();printf ("\t%.8g\n", op2);push (op2);break;case '=': //保存数值pop();if (var >= 'A' && var <= 'Z')variable[var - 'A'] = pop();elseprintf ("error: no variable name\n");break;case 'c':clear();break;case 'd': //复制栈顶元素op2 = pop();push(op2);push(op2);break;case 's': //交换栈元素op1 = pop();op2 = pop();push(op1);push(op2);case '\n':v = pop(); //v保存最后的⼀次结果printf ("\t%.8g\n", v);break;default:if (type >= 'A' && type <= 'Z')push(variable[type - 'A']);else if (type == '@') //输⼊的字符@表⽰最近⼀次结果值 push(v);elseprintf ("error: unknown command %s\n", s);break;}var = type;}return 0;}/* ----------------------------------------------------------- */#define MAXVAL 100int sp = 0; //标识栈顶double val[MAXVAL];void push(double f){if (sp < MAXVAL)val[sp++] = f;elseprintf ("error: stack full, can't push %g\n", f);}double pop(void){if (sp > 0)return val[--sp];else{printf ("error: statck empty\n");return 0.0;}}void clear(void){sp = 0;}void mathfnc (char s[]){double op2;if (strcmp (s, "sin") == 0)push(sin(pop()));else if(strcmp (s, "cos") == 0)push(cos(pop()));else if(strcmp (s, "exp") == 0)push(exp(pop()));else if(strcmp (s, "pow") == 0){op2 = pop();push (pow(pop(), op2));}elseprintf ("error: %s not supported\n", s);}/* ----------------------------------------------------------- */#include <ctype.h>int getch(void);void ungetch(int);int getop(char s[]){int i, c;while ((s[0] = c = getch()) == ' ' || c == '\t') //过滤开头的空⽩字符;s[1] = '\0';i = 0;if (islower(c)) //判断是否为⼩写字母,也即读取由⼩写字母组成的字符串 {while (islower(s[++i] = c = getch()));s[i] = '\0';if (c != EOF)ungetch(c);if (strlen (s) > 1)return NAME;elsereturn c;}if (!isdigit(c) && c != '.' && c != '-')return c;if (c == '-') //⽤于判断是负数还是减操作{if (isdigit(c = getch()) || c == '.')s[++i] = c;else{if (c != EOF)ungetch(c);return '-';}}if (isdigit(c)) //收集整数部分while (isdigit(s[++i] = c = getch()));if (c == '.') //收集⼩数部分while (isdigit(s[++i] = c = getch()));s[i] = '\0';if (c != EOF)ungetch(c);return NUMBER;}/* ----------------------------------------------------------- *//** 引⽤以下两个函数是因为:程序不能确定它已经读⼊的输⼊是否⾜够 ** 除⾮超前多读⼊⼀些输⼊,在本程序中,读⼊⼀些字符合成⼀个数字 ** 所以在看到第⼀个⾮数字字符之前,已经读⼊的数的完整性是不能确定的* 由于程序要超前读⼊⼀个字符,这样就导致最后⼜⼀个字符不属于当前所要读⼊的数*/#define BUFSIZE 100char buf[BUFSIZE];int bufp = 0;int getch(void){return (bufp > 0) ? buf[--bufp] : getchar();}void ungetch (int c){if (bufp >= BUFSIZE)printf ("ungetch: too many characters\n");elsebuf[bufp++] = c;}该程序虽然简单,但是还是存在⼀些⼩⼩的问题,⽐如没有数据时进⾏pop的话,会打印栈中⽆数据同时返回数值0.0,在循环体中许多执⾏操作会将该数值保存到栈中,之后打印该值,⽤户体验度⽐较差。

VC++MFC计算器课程设计

VC++MFC计算器课程设计

Windows程序设计作业报告设计题目:MFC计算器系别:信息与自动化工程专业:电子与通信工程姓名:高小雨学号:2013704011一、设计目的及要求1.1设计目的能够熟练掌握MFC中的各个控件,消息的处理与添加,能够独立完成一些简单的算法,并且能够具体实现一些功能,真正可以利用功能比较强大的MFC 编译出较好的程序代码。

本设计完成的是一个具有比较齐全运算功能的计算器。

1.2设计要求利用Microsoft Visual C++的MFC制作一个多功能计算器,要求:(1)能够实现最基本的加、减、乘、除四则基本运算;(2)添加了计算类型,分别是弧度制、度数制;(3)界面有正负、清空、等于方便用户计算使用;(4)重点是此计算器具有倒数、多次方、开方、三角函数、反三角函数、指数、阶乘等高级运算。

1.3软件、硬件环境本程序采用Microsoft Visual C++6.0的英文版本进行编译。

VisualC++6.0是Microsoft公司推出的基于Windows操作系统的可视化C++编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上支持标准C/C++规范,但仍有相当多的编程人员使用VisualC++6.0进行应用系统的开发。

二、课程设计步骤2.1 Windows消息处理机制的理解首先编写程序需要对Windows程序的消息处理机制有个比较清晰的了解。

Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。

2.2界面的设计仿照Windows附件里面的计算器,在Dialog视图中画好界面,主要使用的菜单中的相关控件,并合理布置各个按钮的位置,使界面更加整洁。

在各个控件的属性里依次定义好名称,之后屏幕显示的就是如图一样的可视计算器界面:三、课程设计内容3.1 概要设计依次将各个功能按钮设置相关的ID和控件类,一下为各类按键的一个举例,以下为数字0的属性设置,及其ID和标题名称,其余数字键属性设置与其相似。

C语言计算器代码

C语言计算器代码
printf("西安工程大学计算机01班...本程序目标:简单计算器\n\n");Sleep(1000);
printf("小组组长:");Sleep(1000);
puts("尹化荣\n");Sleep(300);
printf("小组成员:");Sleep(300);
printf("尹化荣,");Sleep(300);
{
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );
}
void hidden()//隐藏光标
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
//------------------------------------------------------------------||
//迷宫游戏,所有声明:
#define Height 23 //迷宫的高度,必须为奇数
#define Width 39 //迷宫的宽度,必须为奇数
#define Wall 1
double jiafa(double a,double b);
double jianfa(double a,double b);
double chengfa(double a,double b);
double chufa(double a,double b);
intqiuyu(int a,int b);
CONSOLE_CURSOR_INFO cci;

单利复利计算器程序1.02.03.0[合]之C语言

单利复利计算器程序1.02.03.0[合]之C语言

单利复利计算器程序1.02.03.0[合]之C语⾔本程序⽤C语⾔编写~~~1.计算:本⾦为100万,利率或者投资回报率为3%,投资年限为30年,那么,30年后所获得的利息收⼊:按复利计算公式来计算就是:1,000,000×(1+3%)^301 void Compounding(){2 int n,k;3 double F,P;4 float i;5 printf("|-----------------------------------------|\n");6 printf(" 请输⼊你所存⼊的本⾦:");7 scanf("%lf",&P);8 printf("|-----------------------------------------|\n");9 printf(" 请输⼊你所存的年利率⽐:");10 scanf("%f",&i);11 printf("|-----------------------------------------|\n");12 printf(" 请输⼊你所存的年限:");13 scanf("%d",&n);14 printf("|-----------------------------------------|\n");15 printf(" 请输⼊你所存的复利次数:");16 scanf("%d",&k);17 printf("|-----------------------------------------|\n");18 F=P*pow(i/k+1,k*n);19 printf("\n通过复利存款,你所获得的⾦额为:%.4lf\n\n",F);20 }客户提出:2.如果按照单利计算,本息⼜是多少呢?void Simple_Interested(){int n;double F,P;float i;printf("|-----------------------------------------|\n");printf(" 请输⼊你所存⼊的本⾦:");scanf("%lf",&P);printf("|-----------------------------------------|\n");printf(" 请输⼊你所存的周期利息:");scanf("%f",&i);printf("|-----------------------------------------|\n");printf(" 请输⼊你所存的周期数:");scanf("%d",&n);printf("|-----------------------------------------|\n");F=P*(1+i*n);printf("\n通过单利存款,你所获得的⾦额为:%.4lf\n\n",F);}3.假如30年之后要筹措到300万元的养⽼⾦,平均的年回报率是3%,那么,现在必须投⼊的本⾦是多少呢? 1void Count_Deposit(){2double F,P1,P2;3float i1,i2;4int n1,n2,k;5 printf("\n请输⼊你希望获得的最终⾦额为:");6 scanf("%lf",&F);7 printf("\n请输⼊<<复利>>存款的信息\n");8 printf("|-----------------------------------------|\n");9 printf(" 请输⼊你所存的年利率⽐:");10 scanf("%f",&i1);11 printf("|-----------------------------------------|\n");12 printf(" 请输⼊你所存的年限:");13 scanf("%d",&n1);14 printf("|-----------------------------------------|\n");15 printf(" 请输⼊你所存的复利次数:");16 scanf("%d",&k);17 printf("|-----------------------------------------|\n");18 P1=F/pow(i1/k+1,k*n1);19 printf("\n通过复利存款,你所需要的存款⾦额为:%lf\n\n",P1);2021 printf("请输⼊<<单利>>存款的信息\n");22 printf("|-----------------------------------------|\n");23 printf(" 请输⼊你所存的周期利息:");24 scanf("%f",&i2);25 printf("|-----------------------------------------|\n");26 printf(" 请输⼊你所存的周期数:");27 scanf("%d",&n2);28 printf("|-----------------------------------------|\n");29 P2=F/(1+i2*n2);30 printf("\n通过单利存款,你所需要的存款⾦额为:%lf\n\n",P2);31 }此部分通过单利和复利的计算得到计算结果!4.利率这么低,复利计算收益都这么厉害了,如果拿100万元去买年报酬率10%的股票,若⼀切顺利,过多长时间,100万元就变成200万元呢?void Count_Time(){double a,c;float b;int d;printf("|-----------------------------------------|\n");printf(" 请输⼊你所存⼊的本⾦:");scanf("%lf",&a);printf("|-----------------------------------------|\n");printf(" 请输⼊你所存的报酬率:");scanf("%f",&b);printf("|-----------------------------------------|\n");printf(" 到最后期望的⾦额:");scanf("%.4lf",&c);printf("|-----------------------------------------|\n");d=72/b;printf("\n通过复利的股票型存款,得到期望⾦额⼤概所需要的年份:%d\n\n",d);}第四第五个部分是通过 72法则来计算的!5.如果我希望在⼗年内将100万元变成200万元,应该找到报酬率在多少的投资⼯具来帮助我达成⽬标?如果想在5年后本⾦翻倍,报酬率就应⾄少为多少才⾏呢?1void Count_Precent()2 {3double a,c;4float b;5int d;6 printf("|-----------------------------------------|\n");7 printf(" 请输⼊你所存⼊的本⾦:");8 scanf("%lf",&a);9 printf("|-----------------------------------------|\n");10 printf(" 请输⼊你所存的存款时长:");11 scanf("%d",&d);12 printf("|-----------------------------------------|\n");13 printf(" 到最后期望的⾦额:");14 scanf("%.4lf",&c);15 printf("|-----------------------------------------|\n");16 b=72/d;17 printf("\n通过复利的股票型存款本⾦翻倍的报酬率为:%f%%\n\n",b);1819 }6.如果每年都将积蓄的3万元进⾏投资,每年都能获得3%的回报,然后将这些本利之和连同年⾦再投⼊新⼀轮的投资,那么,30年后资产总值将变为多少?如果换成每⽉定投3000呢?1void Count_Contiune()2 {3double a,c;4float b;5int d;6 printf("|-----------------------------------------|\n");7 printf(" 请输⼊你所存⼊的本⾦:");8 scanf("%lf",&a);9 printf("|-----------------------------------------|\n");10 printf(" 请输⼊你所存的报酬率:");11 scanf("%f",&b);12 printf("|-----------------------------------------|\n");13 printf(" 请输⼊你所存的存款时长:");14 scanf("%d",&d);15 printf("|-----------------------------------------|\n");16 c=a*pow(1+b,d);17 printf("\n你所获得的总⾦额是:%.4lf\n\n",c);18 }最后的这个就是银⾏投资的红利再投!再续8. 如果向银⾏贷款10万元,年利率6.5%,期限为10年,那么每⽉等额本息还款多少?(算复利条件下等额还款⾦额) 1void Count_PayMon(){2double a,c;3float b;4int d;5 printf("|-----------------------------------------|\n");6 printf(" 请输⼊你所贷款⾦额:");7 scanf("%lf",&a);8 printf("|-----------------------------------------|\n");9 printf(" 请输⼊你所贷款的年利率:");10 scanf("%f",&b);11 printf("|-----------------------------------------|\n");12 printf(" 请输⼊你贷款的还款时长(⽉):");13 scanf("%d",&d);14 printf("|-----------------------------------------|\n");15 c=a*(b*pow(1+b,d))/(pow(1+b,d)-1);16 printf("\n你每⽉等额本息还款是:%.4lf\n\n",c);17 }本次的复利计算程序⽤的是VC6.0⼯具代码量为约170⾏⽤时:两⼩时。

(完整word版)VC++简单科学计算器设计

(完整word版)VC++简单科学计算器设计

简单科学计算器设计VC++课程设计报告简单科学计算器设计一、设计任务1.选题意义此题选择意义在于引导学生学会设计简单的科学计算器,进一步掌握Visual C++应用程序。

统计学习面向对象编程思想,了解MFC架构,逐步熟悉可视化编程环境Visual C++,并在此环境下设计并实现一个简单计算器系统。

该计算器应能实现如下功能:1)、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方等简单计算2)、科学计算函数,包括正弦、余弦、正切、余切、开方、对数、指数等函数运算3)、具备历史计算的记忆功能。

2.设计目标使计算器含有以下功能:(1)、基本运算功能:可以进行加、减、乘、除等基本运算。

(2)、数制转换功能:可以一次完成二进制转十进制、十进制转二进制、八进制转二进制等运算。

(3)、三角函数运算功能:可以一次完成三角函数之间的计算,求正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)等函数的值。

(4)、对数、指数运算功能:可以一次求的对数函数(log、ln)、指数函数(exp)等函数的运算。

(5)、删除功能:可以在输入错误时删除已输入的数值。

(6)、归零功能:可以在计算完成后清空编辑框中的已有数值。

二、程序设计与实现1.程序结构本计算器首先是通过在计算器的界面上按下相应的按钮,来进行基本的加,减,乘,除等基本运算,计算器还能够进行平方运算,求平方根运算,乘方运算,三角函数运算(包括正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)),对数函数(ln、log),指数函数(exp),幂函数(x~)和进制转换(包括二进制转十进制、十进制转二进制和八进制转二进制)等运算。

以下是本计算器的运算流程图:2. 设计步骤:(1) 创建一个基于对话框的应用程序。

(2) 利用资源编辑器编辑对话框资源,及设计计算器界面并修改对话框各按钮的ID 属性和Caption 属性。

用c语言编写计算器

用c语言编写计算器
疑问:为什么不能像MessageBox一样把字符串做为返回值返回呢???
这就涉及到C语言中函数返回指针的问题了
int i=20;
char cStr[3];
itoa(i,cStr,10);
char* f1()
{
return "adsfadsfasd";
}
在函数内部返回函数内构建的指针有可能出现数据混乱.
DWORD dwMydrivers;
dwMydrivers = GetLogicalDrives();
TCHAR cDrivers[256];
itoa(dwMydrivers,cDrivers,2); //转换为字符串
strrev(cDrivers); //反转字符串
(8)思考:这个计算两个数的和程序有什么缺陷?没有阻止用户输入非数字
(9)作业:做一个面积计算器,用户输入半径,在另外一个文本框中显示面积。
5、得到系统中有哪些逻辑驱动器
DWORD GetLogicalDrives(VOID);
返回值的二进制位标志着存在哪些驱动器。其中,位0设为1表示驱动器A存在于系统中;位1设为1表示存在B驱动器;以次类推。
编辑Main_OnCommand方法:
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_BTNHELLO:
MessageBox(NULL,TEXT("世界你好"),TEXT("问好"),MB_OK);
{
switch(id)
{
case IDC_OK:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

IDC_Exit OnExit
5
01. 12
微机上机报告
控件:
ID:IDC_RADIO1 IDC_RADIO2 IDC_SIN IDC_ARCSIN IDC_COS IDC_TAN 消息函数: OnRadio1 OnRadio2 OnSin OnArcsin OnCos OnTan
控件:
ID:IDC_ARCCOS IDC_ARCTANV IDC_EXP IDC_SQRT IDC_LN IDC_LOG 消息函数: OnArccos OnArctan OnExp OnSqrt OnLn OnLog
及角度制数据的三角计算。 2.2、注意事项:
使用除法计算时应注意不能使被除数为 0,否则会出错:
出现此错误时只需点击确定即可继续之前的计算。 在使用三角函数时应先确定所输入的数据是角度制还是弧度
制的数据,否则计算器会跳出提醒框,如下所示:
2
01. 12
微机上机报告
而计算反三角函数时只能计算弧度制数据得到角度制结果:
m_Edit1.ReplaceSel(" ");
Num=' ';
result=0;
control=0;
UpdateData(FALSE);
}
计算的实现,
按钮下程序代码的实现:
void CCalculatorDlg::OnAdd()
//加法运算
{
// TODO: Add your control notification handler code here
{
if(sub==0)
{
MessageBox("除数不能为 0!请重新输入.");
char ed[50];
_gcvt(result,50,ed);
m_Edit1.SetWindowText(ed);
Num=' ';
control=0;
//control 回到初值
return;
}
else
{result=result/sub;break;}
还有可用于清楚文本框的数据; 数学函数计算区:主用可实现基本常用的数学函数的计算,包括
常用的三角函数和反三角函数以及 e 指数、开平方和以 e 和 10 为
1
01. 12
微机上机报告
底对数的计算。
2.计算器的操作说明及注意事项
2.1、基本操作: 使用计算器进行基本数据计算时通过键盘及基本计算区的按钮输 入数据,然后根据计算需要点击“+、-、*、/”按钮,然后点击”=” 按钮得出计算结果。若需使用函数计算时,可先输入数据,然后 点击对应使用函数的按钮即可得出结果。特别的,对于三角函数 的计算时,可点击单选框“弧度制”、“角度制”以实现弧度制
在【工程】选项卡中选择【MFC AppWizard】应用程序类型,工程 文件名为 Calculator。单击确定后选择【基本对话】建立基本对 话框应用程序。
1.2、添加控件,设计界面 界面设计如下所示:
4
01. 12
微机上机报告
2. 控件 ID 及变量
控件:
ID: IDC_NUM1 消息函数: OnNum1
//control 赋初值
void CCalculatorDlg::OnSubtract()
//减法运算
{
// TODO: Add your control notification handler code here
char cs[30];
double sub;
m_Edit1.GetWindowText(cs,30);
数字输入按钮下函数的实现
以下是数字键 的函数的代码,其余以此类推
void CCalculatorDlg::OnNum1()
{
// TODO: Add your control notification handler code here
CString t;
GetDlgItem(IDC_NUM1)->GetWindowText(t); //获取按钮的数字
double result=0;//存放结果数据,赋初值 0,得出结果后清 0
int control=0; //用于判断是何种运算,注意得出结果后清 0
const double pi=3.14159265358979323846; //圆周率的值
int math=0; 3) 控件函数代码的实现
//用于区分弧度制和角度制
t=Num+t;
//字符串连接
m_Edit1.SetWindowText(t);//在编辑框中显示
Num=t;
6
01. 12
}
微机上机报告
退格键 及清屏键
函数代码的实现
void CCalculatorDlg::OnBackspace()
//退格
{
Num=Num.Left(Num.GetLength()-1);
//使 Num 的长度减 1
m_Edit1.SetWindowText(Num);
}
void CCalculatorDlg::OnClear1()
//清楚屏幕
{
// TODO: Add your control notification handler code here
m_Edit1.SetSel(0,-1);
//乘法运算
{
// TODO: Add your control notification handler code here
char cs[30];
double sub;
m_Edit1.GetWindowText(cs,30);
sub=atof((LPCTSTR)cs);
switch(control)
char cs[30];
double sub;
m_Edit1.GetWindowText(cs,30);
sub=atof((LPCTSTR)cs);
switch(control)
//每次计算之前前进行之前的运算
{
case 0: result=sub;break;
//第一个数应存储
case 1: result=result+sub;break;
在使用常用函数进行计算时应特别注意所输入的数应满足 函数的定义域,使函数有意义,否则会出错:
另注:当所得数据很小时会以科学计数法的形式输出: 3
01. 12
微机上机报告
其中 e-002 即表示×10-2。
二、MFC 编程的实现
1. 计算器主界面的设计
1.1、建立对话框 1. 启动 Visual C++ 6.0 集成开发环境 2. 创建对话框类型应用程序
case 2: result=result-add;break;
case 3: result=result*add;break;
case 4:
{
if(add==0)
{
MessageBox("除数不能为 0!请重新输入.");
char ed[50];
_gcvt(result,50,ed);
m_Edit1.SetWindowText(ed);
char cs[30];
double add;
m_Edit1.GetWindowText(cs,30);
add=atof((LPCTSTR)cs);
switch(control)
//每次计算之前前进行之前的运算
{
case 0: result=add;break;
//第一个数应存储
case 1: result=result+add;break;
case 2: result=result-sub;break;
case 3: result=result*sub;break;case 4:{源自if(sub==0){
MessageBox("除数不能为 0!请重新输入.");
char ed[50];
_gcvt(result,50,ed);
m_Edit1.SetWindowText(ed);
}
}
control=3;
char ed[50];
_gcvt(result,50,ed);
m_Edit1.SetWindowText(ed);
Num=' ';
9
01. 12
微机上机报告
}
void CCalculatorDlg::OnDivision()
//除法运算
{
// TODO: Add your control notification handler code here
7
01. 12
微机上机报告
Num=' '; control=0; return; } else {result=result/add;break;} } } control=1; char ed[50]; _gcvt(result,50,ed); m_Edit1.SetWindowText(ed); Num=' '; UpdateData(FALSE); }
//control 回到初值
return;
}
else
{result=result/sub;break;}
}
8
01. 12
微机上机报告
} control=2; char ed[50]; _gcvt(result,50,ed); m_Edit1.SetWindowText(ed);
Num=' ';
}
void CCalculatorDlg::OnMulptiply()
相关文档
最新文档