VC 课程设计___简单计算器的设计

合集下载

课程设计报告模板及示例

课程设计报告模板及示例

课程设计报告C++课程设计:简单计算器学院计算机与通信工程专业名称物联网工程班级学号学生姓名指导教师敬茂华2013年月日设计要求:设计一基于Windows的应用程序,使其能完成简单的计算功能。

计算功能包括:加、减、乘、除、求余数、求阶乘、指数运算、程序界面自己设计目录1 基本功能描述 (1)2 设计思路 (1)3 软件设计 (4)3.1设计步骤 (4)3.2界面设计 (5)3.3关键功能的实现 (11)4 结论与心得体会 (12)5 参考文献 (12)6 附录 (13)6.1调试报告 (13)6.2测试结果 (13)6.3关键源代码 (15)简单计算器1 基本功能描述简单计算器包括双目运算和单目运算功能。

双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,阶乘,对数,开方,倒数等运算。

可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。

出现错误会给出相应提示,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项。

2 设计思路如图是整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。

子程序开始时m_num为零。

按下数字按钮后,判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。

回到总流程图中,输完第一个操作数后,若按下双目运算符,则把m_num存入num2,按下输入第二个操作数并算出结果。

若按下的是单目运算符,则直接对其处理得出结果。

若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。

算出后把结果保存至num2。

若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。

输入数据子函数N图1 输入数据子函数流程图图2 简单计算器总流程图3 软件设计3.1 设计步骤打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名zhoutong及其所在位置,点击确定,如图3所示。

用MFC制作简易计算器

用MFC制作简易计算器

面向对象编程技术课程设计课题名称:用VC++制作简单计算器用VC++制作简单计算器简述:该课程设计将实现一个简单计算器。

其类似于Windows附件中自带的计算器。

这个计算器可以实现简单的四则运算功能,而且具有简洁大方的图文外观。

系统具有良好的界面和必要的交互信息。

即时准确地获得需要的计算的结果,充分降低了数字计算的难度,从而节约了时间,对人们的生活有一定的帮助。

在课程设计中,程序设计设计语言采用Visual C++,在程序设计中,采用了面向对象解决问题的方法。

课题背景计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除简单运算的工具。

要实现计算功能,可以用VC++的知识编写程序来解决此问题。

该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度。

该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。

功能说明系统具有良好的界面;必要的交互信息;简约美观的效果。

使用人员能快捷简单地进行操作。

可单机按钮进行操作即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

(1)包含的功能有:加、减、乘、除;(2)计算器上数字分为显示区,可以显示用户所点击的按键,最后显示结果;按键区,可以让用户选择所需的数字以及小数点;功能区,该区域提供用户所需的运算按钮;(3)计算功能基本上是用系统内部函数;(4)“AC”按钮可以清除所有已输入的数据从头计算;(5)“DEL”按钮可以删除所输入的最后以为数字;编辑资源创建步骤新建一个MFC基于对话框的工程VC++对话框界面右击按钮,修改按钮的属性建立类向导最后点击Edit Code就可以添加代码对其它按钮的操作与之类似,对编辑框的“建立类向导”有点区别,这里不附详细步骤代码展示“1”按钮对应的代码void CMyDlg::OnButton1(){UpdateData(1);if(pass1==1 )m_str="1";else m_str+="1";pass1=0;UpdateData(0);}“2”按钮对应的代码void CMyDlg::OnButton2(){UpdateData(1);if(pass1==1 )m_str="2";else m_str+="2";pass1=0;UpdateData(0);}“3”按钮对应的代码void CMyDlg::OnButton3(){UpdateData(1);if(pass1==1 )m_str="3";else m_str+="3";pass1=0;UpdateData(0);}“4”按钮对应的代码void CMyDlg::OnButton3(){UpdateData(1);if(pass1==1 )m_str="4";else m_str+="4";pass1=0;UpdateData(0);}“5、6、7、8、9、0”按钮对应的代码与“1、2、3、4”按钮对应的代码相近“=”按钮对应的代码void CMyDlg::Onresult(){UpdateData(1);int i,z,s,j,x=0,y=1,t,m=1;char b[10];double rate=10.0,itemp=0.0,a[20];for(i=0;i<20;i++)a[i]=1000000.0;for(i=0;i<10;i++)b[i]=' ';z=0;for(i=0;i<m_str.GetLength();i++) {if(isdigit(m_str.GetAt(i))){if(rate==10.0){ itemp=itemp*rate+(m_str.GetAt(i)-'0');if(i==m_str.GetLength()-1)a[z]=itemp;}else{itemp=itemp+rate*(m_str.GetAt(i)-'0');rate=rate/10;if(i==m_str.GetLength()-1)a[z]=itemp;}}else if(m_str.GetAt(i)=='.')rate=0.1;else if(m_str.GetAt(i)=='+') {a[z]=itemp;itemp=0;z++;b[z]='+';z++;rate=10.0;}else if(m_str.GetAt(i)=='-') {a[z]=itemp;itemp=0;z++;b[z]='-';z++;rate=10.0;}else if(m_str.GetAt(i)=='*')a[z]=itemp;itemp=0;z++;b[z]='*';z++;rate=10.0;}else if(m_str.GetAt(i)=='/'){a[z]=itemp;itemp=0;z++;b[z]='/';z++;rate=10.0;}}s=z;for(j=0;j<=s;j++){if(b[j]=='/'){a[j+1]=1/a[j+1];b[j]='*';}}for(j=0;j<=s;j++){if(b[j]=='*'){if(j-t==2){a[t-m]=a[t-m]*a[j+1];m=m+2;}elsea[j-1]=a[j-1]*a[j+1];a[j+1]=1000000.0;b[j]=' ';t=j;}}for(j=0;j<=s;j++){if(a[j]!=1000000.0) //如果a[i]的值不为0.0a[x]=a[j]; //把a[i]的值赋给a[x] x+=2; //x自加2}if(b[j]!=' ') //如果b[i]的值不为空格{b[y]=b[j]; //把b[i]的值赋给b[y]y=y+2; //y自加2}}for(j=0;j<=y-2;j++) {if(b[j]=='+') //如果b[i]等于加号a[0]=a[0]+a[j+1];else if(b[j]=='-') //如果b[i]等于减号a[0]=a[0]-a[j+1];}m_str.Format("%1f",a[0]);UpdateData(0);}“+”按钮对应的代码void CMyDlg::Onadd(){UpdateData(1);m_str+="+";UpdateData(0);}“-”按钮对应的代码void CMyDlg::Onjian(){UpdateData(1);m_str+="-";UpdateData(0);}“*”按钮对应的代码void CMyDlg::Oncheng(){UpdateData(1);m_str+="*";UpdateData(0);}“/”按钮对应的代码void CMyDlg::Onchu(){UpdateData(1);m_str+="/";UpdateData(0);}“AC”按钮对应的代码void CMyDlg::Onac(){UpdateData(1);m_str="0";pass1=1;UpdateData(0);}“DEL”按钮对应的代码void CMyDlg::Ondel(){UpdateData(1);if(m_str!="0" && m_str.GetLength()>1)m_str=m_str.Left(m_str.GetLength()-1);else{m_str="0";}UpdateData(0);}“.”按钮对应的代码void CMyDlg::Onpoint(){UpdateData(1);if(pass1==1)m_str=".";elsem_str+=".";pass1=0;UpdateData(0);}效果图。

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)函数。

C语言简单计算器的编写课程设计

C语言简单计算器的编写课程设计

C语言简单计算器的编写课程设计This model paper was revised by the Standardization Office on December 10, 20202013-2014学年第二学期《高级语言程序设计》课程设计报告题目:简单计算器专业:数字媒体技术班级:13级1班姓名:邢洪波指导教师:王辉成绩:计算机与信息工程系二0一四年二月二十日1设计内容及要求1.1 利用本学期所学的《C语言程序设计》课程,运用相关知识,查阅相关资料,编写C语言程序,设计一个简单计算器,要求编写的简单计算器能够模拟windows系统的计算器,用户能够用键盘输入相关数据,能够进行简单的加、减、乘、除运算,并且在程序运行过程中能够正常的退出程序。

在计算器程序运行中,输入数据时如果遇到输入错误的情况,能够能过键盘上的退格键进行删除,并且重新输入正确的数据。

在数据输入完成后,如果需要放弃本次计算操作,可以利用程序中设置好的按键进行清零,并为下一次运算作准备。

1.2 运用相关知识,查阅相关资料,编写一个简单的计算器,能够实现简单的基本的加减乘除运算,在计算器工作时用户能利用键盘或鼠标进行相应操作。

程序基本功能要求实现完整,并有简单的验证。

程序还须有符合标准的程序设计报告。

2概要设计2.1系统流程图2.1 系统流程图2.2主要功能表2.2 主要功能表3设计过程或程序代码#include<stdio.h>#include<math.h>#include<malloc.h> /*malloc的头文件代表在内存中开辟存储空间*/double jisuan(char a[]){int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0; /*定义整型变量i,j,k,m,n,cnt,t1,t2,t3*/char nibo[50],zhan2[50];/*定义字符型数组*/double x,n,l,z=0,zhan3[50]; /*定义双精度变量x,n,l,z,zhan3[50]*/typedef struct /*表示可以用con定义结构体变量*/{double d1;int d2;}dd;typedef struct{dd data[50];int top;}zhan1;zhan1 *shu; /*定义指针变量*/shu=(zhan1 *)malloc(sizeof(zhan1));shu->top=0;while(a[i]!='\0') /*外循环是用while语句*/{if(a[i]>='0'&&a[i]<='9') /*内循环使用if-else语句*/{z=0;j=i+1;while(a[j]>='0'&&a[j]<='9') /*内循环使用各种循环语句的嵌套*/{j++;}j--;for(k=i;k<=j;k++){z=z*10+a[k]-'0';}j=j+1;x=z;if(a[j]=='.'){l=1;i=j+1;j=i+1;while(a[j]>='0'&&a[j]<='9') /*内循环使用各种循环语句的嵌套*/{j++;}j--;for(k=i;k<=j;k++){n=pow(0.1,l);l=l+1;x=x+n*(a[k]-'0');}i=j+1;}else i=j;shu->data[++shu->top].d1=x;shu->data[shu->top].d2=++cnt;nibo[++t1]='0'+shu->data[shu->top].d2;nibo[t1+1]='\0';}else if(a[i]=='('){zhan2[++t2]=a[i];i++;}else if(a[i]==')'){j=t2;while(zhan2[j]!='('){nibo[++t1]=zhan2[j];nibo[t1+1]='\0';j--;}t2=j-1;i++;}else if(a[i]=='+') /*对加法的定义*/{while(t2>0&&zhan2[t2]!='(') /*定义当加号和括号同时出现时*/{nibo[++t1]=zhan2[t2];/*将zhan2[t2]赋给nibo[++t2]*/nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}else if(a[i]=='-') /*对减法的定义*/{if(a[i-1]=='$'){a[0]='0';i=0;}else if(a[i-1]=='('){a[i-1]='0';a[i-2]='(';i=i-2;t2--;}else{while(t2>0&&zhan2[t2]!='(') /*对括号的定义*/{nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}}else if(a[i]=='*'||a[i]=='/') /*对乘法和除法的定义*/{while(zhan2[t2]=='*'||zhan2[t2]=='/'||zhan2[t2]=='^'||zhan2[t2]=='#') /*逻辑运算*/{nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}else if(a[i]=='^'||a[i]=='#') /*逻辑运算中的或运算*/ {while(zhan2[t2]=='^'||zhan2[t2]=='#'){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}}while(t2>0){nibo[++t1]=zhan2[t2]; /*将的zhan2[t2]值赋给nibo[++t1]*/nibo[t1+1]='\0'; /*碰到'\0'结束部分程序的运算*/t2--;}j=1;t3=0;while(j<=t1){if(nibo[j]>='0'&&nibo[j]!='^'&&nibo[j]!='#'){for(i=1;i<=shu->top;i++){if((int)(nibo[j]-'0')==shu->data[i].d2){m=i;break;}}zhan3[++t3]=shu->data[m].d1;}else if(nibo[j]=='+') /*对加法的定义*/{zhan3[t3-1]=zhan3[t3-1]+zhan3[t3];t3--;}else if(nibo[j]=='-') /*对减法的定义*/{zhan3[t3-1]=zhan3[t3-1]-zhan3[t3];t3--;}else if(nibo[j]=='*') /*对乘法的定义*/{zhan3[t3-1]=zhan3[t3-1]*zhan3[t3];t3--;}else if(nibo[j]=='/') /*对除法的定义*/{zhan3[t3-1]=zhan3[t3-1]/zhan3[t3];t3--;}else if(nibo[j]=='^') /*对乘方的定义*/{zhan3[t3-1]=pow(zhan3[t3-1],zhan3[t3]);t3--;}else if(nibo[j]=='#') /*对开方的定义*/{zhan3[t3]=sqrt(zhan3[t3]);}j++;}return zhan3[t3];/*返回值*/}void main(){for(;;){char x,a[50];double jieguo;int i=0;a[0]='$';printf("#表示开方,^表示乘方(支持负数)\n");/*对乘方和开方的定义*/printf("请输入表达式无需输入 = 号直接回车可输出答案退出请输入q \n\n");scanf("%c",&x);if(x=='q') break;while(x!='\n') /*碰到'\0'结束部分程序的运算*/{a[++i]=x;scanf("%c",&x);}a[i+1]='\0';jieguo=jisuan(a);printf("\n");printf("结果为:%lf",jieguo);printf("\n\n\n");printf("退出请输入q 继续请直接输入\n\n");}}4设计结果与分析系统测试结果如下:根据电脑所给的提示出现语法错误,缺少变量的定义大多的语法错误在通过书本参考下能够修改。

简单计算器程序设计

简单计算器程序设计

课程名称编译原理实验名称简单计算器程序设计姓名学号专业班级实验日期成绩指导老师(①实验目的②实验原理③主要仪器设备④实验内容与步骤⑤实验数据记录与处理⑥实验结果分析⑦问题建议) 1.实验目的(1)加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用;(2)熟悉Microsoft V isual C++6.0 的运行环境。

(3)通过此次实验熟悉自己的编程能力。

2.实验要求所做出的计算器代码不仅能够实验简单的加减乘除运算,而且还必须能够实现对表达式的操作。

3.实验环境本次实验在vc6.0环境下编译通过。

4.设计思想和原理(1)定义部分:定义常量、变量、数据结构;(2)初始化:设立LR(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等);(3)控制部分:从键盘输入一个表达式符号串;(4)利用LR(1)分析算法进行表达式处理:根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息.5.程序源代码#include<stdio.h>#include<iostream.h>#include<stdlib.h>#include<string.h>#include<ctype.h>typedef float DataType;typedef struct{DataType *data;int max;int top;}Stack;void SetStack(Stack *S,int n){S->data=(DataType*)malloc(n*sizeof(DataType));if(S->data==NULL){printf("overflow");exit(1);}S->max=n;S->top=-1;}void FreeStack(Stack *S){free(S->data);}int StackEmpty(Stack *S){if(S->top==-1)return(1);return(0);}DataType Peek(Stack *S){if(S->top==S->max-1){printf("Stack is empty!\n");exit(1);}return(S->data[S->top]);}void Push(Stack *S,DataType item){if(S->top==S->max-1){printf("Stack is full!\n");exit(1);}S->top++;S->data[S->top]=item;}DataType Pop(Stack *S){if(S->top==-1){printf("Pop an empty stack!\n");exit(1);}S->top--;return(S->data[S->top+1]);}typedef struct{char op;int inputprecedence;int stackprecedence;}DataType1;typedef struct{DataType1 *data;int max;int top;}Stack1;void SetStack1(Stack1 *S,int n){S->data=(DataType1*)malloc(n*sizeof(DataType1));if(S->data==NULL){printf("overflow");exit(1);}S->max=n;S->top=-1;}void FreeStack1(Stack1 *S){free(S->data);}int StackEmpty1(Stack1 *S){if(S->top==-1)return(1);return(0);}DataType1 Peek1(Stack1 *S){if(S->top==S->max-1){printf("Stack1 is empty!\n");exit(1);}return(S->data[S->top]);}void Push1(Stack1 *S,DataType1 item) {if(S->top==S->max-1){printf("Stack is full!\n");exit(1);}S->top++;S->data[S->top]=item;}DataType1 Pop1(Stack1 *S){if(S->top==-1){printf("Pop an empty stack!\n");exit(1);}S->top--;return(S->data[S->top+1]);}DataType1 MathOptr(char ch){DataType1 optr;optr.op=ch;switch(optr.op){case'+':case'-':optr.inputprecedence=1;optr.stackprecedence=1;break;case'*':case'/':optr.inputprecedence=2;optr.stackprecedence=2;break;case'(':optr.inputprecedence=3;optr.stackprecedence=-1;break;case')':optr.inputprecedence=0;optr.stackprecedence=0;break;}return(optr);}void Evaluate(Stack *OpndStack,DataType1 optr) {DataType opnd1,opnd2;opnd1=Pop(OpndStack);opnd2=Pop(OpndStack);switch(optr.op){case'+':Push(OpndStack,opnd2+opnd1);break;case'-':Push(OpndStack,opnd2-opnd1);break;case'*':Push(OpndStack,opnd2*opnd1);break;case'/':Push(OpndStack,opnd2/opnd1);break;}}int isoptr(char ch){if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='(') return(1);return(0);}void Infix(char *str){int i,k,n=strlen(str);char ch,numstr[10];DataType opnd;DataType1 optr;Stack OpndStack;Stack1 OptrStack;SetStack(&OpndStack,n);SetStack1(&OptrStack,n);k=0;ch=str[k];while(ch!='=')if(isdigit(ch)||ch=='.'){for(i=0;isdigit(ch)||ch=='.';i++){numstr[i]=ch;k++;ch=str[k];}numstr[i]='\0';opnd= atof(numstr);Push(&OpndStack,opnd);}elseif(isoptr(ch)){optr=MathOptr(ch);while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence) Evaluate(&OpndStack,Pop1(&OptrStack));Push1(&OptrStack,optr);k++;ch=str[k];}else if(ch==')'){optr=MathOptr(ch);while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence) Evaluate(&OpndStack,Pop1(&OptrStack));Pop1(&OptrStack);k++;ch=str[k];}while(!StackEmpty1(&OptrStack))Evaluate(&OpndStack,Pop1(&OptrStack));opnd=Pop(&OpndStack);cout<<"你输入表达式的计算结果为"<<endl;printf("%-6.2f\n",opnd);FreeStack(&OpndStack);FreeStack1(&OptrStack);}void main(){cout<<"请输入你要计算的表达式,并以“=”号结束。

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);}四:测试到此软件设置完成,运行看看。

C语言编程-简单的计算器

double jieguo;
int i=0;
a[0]='$';
printf("请输入表达式,退出请输入q:\n\n");
scanf("%c",&x);
if(x=='q') break;
while(x!='\n')
{
a[++i]=x;
scanf("%c",&x);
}
a[i+1]='\0';
jieguo=jisuan(a);
}
j=j+1;
x=z;
if(a[j]=='.')
{
l=1;
i=j+1;
j=i+1;
while(a[j]>='0'&&a[j]<='9')
{j++;}
j--;
for(k=i;k<=j;k++)
{
n=pow(0.1,l);
l=l+1;
x=x+n*(a[k]-'0');
}
i=j+1;
}
else i=j;
shu.data[++shu.top].d1=x;
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
}
else if(a[i]=='*'||a[i]=='/')

简单计算器c++课程设计报告书

简单计算器1 基本功能描述简单计算器包括双目运算符和单目运算符。

双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦、阶乘、对数、开方、倒数等运算。

可对输入任意操作数包含小数和整数及正数和负数进行以上的所有运算并能连续运算。

出现错误会给出提示,同时包含清除、退格、退出功能以及有与所有按钮相对应的菜单项。

2 设计思路如图1,是输入数据子函数的流程图。

打开计算器程序,输入数据,判断此次输入之前是否有数字输入,如果有,则在之前输入的数字字符后加上现有的数字字符;如果没有,则直接使编辑框显示所输入的数字字符。

判断是否继续键入数字,如果是,则继续进行前面的判断,如果否,则用UpdateData(FALSE)刷新显示。

如图2,是整个计算器的流程图。

对于输入的算式,判断运算符是双目运算符还是单目运算符。

如果是双目运算符,则把操作数存入数组a[z+2]中,把运算符存入b[z+1]中;如果是单目运算符,则把字符串转化为可计算的数字,再进行计算。

下面判断运算符是否合法,如果合法,则将结果存入a[0],不合法,则弹出对话框,提示错误。

结束程序。

图2 简单计算器总流程图3 软件设计3.1设计步骤打开Microsoft Visual C++6.0,在文件中点击新建,在弹出框选择MFC AppWizard[exe]工程,输入工程名及其存储路径,点击确定,如图3所示。

图3 新建MFC AppWizard[exe]工程将弹出MFC AppWizard-step1对话框,选择基本对话框,点击完成,如图4所示。

图4 基本对话框这样,MFC AppWizard就建立了一个基于对话窗口的程序框架,如图5所示。

图5 新建的对话框3.2界面设计1、创建控件在图5所示的Resoure View选项卡中打开Dialog资源组,双击IDD_LUXIAOYING_DIALOG,在右边的窗口中显示出待编辑的对话框。

开始摆放控件,包括编辑框和按钮的创建。

简单计算器的设计与实现

C/C++程序设计课程设计设计说明书简单计算器的设计与实现学生姓名学号班级成绩指导老师计算机科学与技术系2010年11月22日C/C++程序设计课程设计评阅书课程设计任务书2010—2011学年第一学期专业:计算机科学与技术学号:姓名:课程设计名称: C/C++程序设计课程设计设计题目:简单计算器的设计与实现完成期限:自2010 年 11月 15 日至 2010 年 11 月 26 日共2 周设计内容及要求:要求用C/C++语言设计一个简易的计算器程序,对输入的数据进行加、减、乘、除、开平方等操作。

设计要求及功能如下:1.阐述设计思想,画出流程图;2.实现功能:(1)对输入的数据进行加法运算;(2)对输入的数据进行减法运算;(3)对输入的数据进行乘法运算;(4)对输入的数据进行除法运算;(5)对输入的数据进行开平方根运算。

最终设计成果形式为:1.编写好的程序;2.撰写课程设计说明书一份,打印并装订成册。

指导教师(签字):教研室主任(签字):批准日期:年月日摘要设计了一个简单的计算器程序,该计算器具有简单的四则混合运算以及复杂的数学表达式的功能。

该计算器采用VC++作为软件开发环境,采用算数表达式处理算法来实现加、减。

乘、除四则混合运算。

操作简单,界面清晰,易于用户使用,容易被他们所接受的。

关键词:计算器;VC++;数学表达式目录1课题描述 (1)2问题分析和任务制定 (2)3详细设计 (3)3.1头文件设计 (3)3.2简单计算器的设计与实现函数设计 (3)4 程序调试与测试 (8)4.1主界面测试 (8)4.2基本功能的测试 (8)5结果分析 (12)总结 (13)参考文献 (14)1课题描述该课程设计需要用C/C++设计一个简单的计算器程序,对输入的数据进行简单的加、减、乘、除、开平方等操作。

设计功能如下:实现功能:(1)对输入的数据进行加法运算;(2)对输入的数据进行减法运算;(3)对输入的数据进行乘法运算;(4)对输入的数据进行除法运算;(5)对输入的数据进行开平方运算。

C语言简单计算器的编写课程设计

2013-2014学年第二学期《高级语言程序设计》课程设计报告题目:简单计算器二01在计算器程序运行中,输入数据时如果遇到输入错误的情况,能够能过键盘上的退格键进行删除,并且重新输入正确的数据。

在数据输入完成后,如果需要放弃本次计算操作,可以利用程序中设置好的按键进行清零,并为下一次运算作准备。

1.2 运用相关知识,查阅相关资料,编写一个简单的计算器,能够实现简单的基本的加减乘除运算,在计算器工作时用户能利用键盘或鼠标进行相应操作。

程序基本功能要求实现完整,并有简单的验证。

程序还须有符合标准的程序设计报告。

2 概要设计2.1系统流程图2.23设计过程或程序代码#include<stdio.h>#include<math.h>#include<malloc.h> /*malloc的头文件代表在内存中开辟存储空间*/double jisuan(char a[]){定义字量表示可以用{}dd;{*/shu=(zhan1 *)malloc(sizeof(zhan1));shu->top=0;while(a[i]!='\0') /*外循环是用while语句*/{if(a[i]>='0'&&a[i]<='9') /*内循环使用if-else语句*/{z=0;j=i+1;while(a[j]>='0'&&a[j]<='9') /*内循环使用各种循环语句的嵌套*/{j++;}j--;for(k=i;k<=j;k++){z=z*10+a[k]-'0';}{内循环 {}else i=j;shu->data[++shu->top].d1=x;shu->data[shu->top].d2=++cnt;nibo[++t1]='0'+shu->data[shu->top].d2;nibo[t1+1]='\0';}else if(a[i]=='('){zhan2[++t2]=a[i];i++;}else if(a[i]==')'){j=t2;while(zhan2[j]!='('){nibo[++t1]=zhan2[j];}}else/*{定义当加{将}}else if(a[i]=='-') /*对减法的定义*/{if(a[i-1]=='$'){a[0]='0';i=0;}else if(a[i-1]=='('){a[i-1]='0';a[i-2]='(';i=i-2;t2--;}else{*/{}}}*/{逻辑 {}zhan2[++t2]=a[i];i++;}else if(a[i]=='^'||a[i]=='#') /*逻辑运算中的或运算*/{while(zhan2[t2]=='^'||zhan2[t2]=='#'){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}}while(t2>0){值赋给t2--;}{{{{}}}else if(nibo[j]=='+') /*对加法的定义*/{zhan3[t3-1]=zhan3[t3-1]+zhan3[t3];t3--;}else if(nibo[j]=='-') /*对减法的定义*/{zhan3[t3-1]=zhan3[t3-1]-zhan3[t3];t3--;}else if(nibo[j]=='*') /*对乘法的定义*/{zhan3[t3-1]=zhan3[t3-1]*zhan3[t3];}义{}*/ {}对开方的{}j++;}return zhan3[t3]; /*返回值*/}void main(){for(;;){char x,a[50];double jieguo;int i=0;a[0]='$';printf("#表示开方,^表示乘方(支持负数)\n"); /*对乘方和开方的定义*/printf("请输入表达式无需输入 = 号直接回车可输出答案退出请输入q \n\n"); scanf("%c",&x);if(x=='q') break;while(x!='\n') /*碰到'\0'结{}}}4等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档