当前位置:文档之家› 简单计算器可视化程序编程

简单计算器可视化程序编程

简单计算器可视化程序编程
简单计算器可视化程序编程

简单计算器

一、基本功能描述二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算

科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行

以角度、弧度两种方式实现上述部分函数

具备历史计算的记忆功能

对不正确的表达式能指出其错误原因

二、流程图

输入数据子函数

图1 输入数据子函数流程图

图2

三、设计步骤

打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名Calculter及其所在位置,点击确定,如图3所示。

图3 新建MFC AppWizard[exe]工程

将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成,如图4所示。

图4 基本对话框

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

图5 新建的对话框

四、界面设计

1、创建控件

在图5所示的Resoure View选项卡中打开Dialog资源组,双击IDD_CALCULATOR_DIALOG,在右边的窗口中显示出待编辑的对话框。开始摆放控件,包括编辑框和按钮的创建。按钮的创建

1)在图5中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图6所示,在该对话框中输入ID属性。

图6 Edit属性对话框

2)在图3中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push Button属性对话框,如图7所示,在该对话框中输入控件的ID值和标题属性。

图7 Push Button属性

按照上面的操作过程编辑其他按钮和编辑框等对象的属性。

表1 各按钮和编辑框等对象的属性

完成后界面如图8所示。

图8 计算器界面五、计算器源程序代码

// Calculation.cpp: implementation of the CCalculation class.

//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "Calculator.h"

#include "Calculation.h"

#include "math.h"

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

#define FUNCNUM 15 //函数个数

#define CONSTNUM 11 //常数个数

#define PI 3.14159

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

CCalculation::CCalculation()

{

//初始化函数和常数

m_bDegree=0;

m_nOutputFlag=0;

opt[0]="e^";

opt[1]="ch";

opt[2]="sqr";

opt[3]="sh";

opt[5]="cos";

opt[6]="sin";

opt[7]="tan";

opt[8]="ln";

opt[9]="abs";

opt[10]="at";

opt[11]="as";

opt[12]="ac";

opt[13]="th";

opt[14]="cot";

opt2[0]='^';

opt2[1]='/';

opt2[2]='*';

opt2[3]='%';

opt2[4]='+';

opt2[5]='-';

m_strConValue[1]="9.80665"; m_strConName[1]="GG";

m_strConValue[2]="(8.988*10^9)"; m_strConName[2]="EF";

m_strConValue[3]="0.02241383"; m_strConName[3]="VM";

m_strConValue[4]="(1.380662*10^(-23))"; m_strConName[4]="BC";

m_strConValue[5]="8.3144"; m_strConName[5]="MG";

m_strConValue[6]="(6.6720*10^(-11))"; m_strConName[6]="GR";

m_strConValue[7]="(6.022045*10^23)"; m_strConName[7]="NA";

}

CCalculation::~CCalculation()

{

}

bool CCalculation::IsDigital(CString str)

{

while(str.GetAt(0)=='-') str.Delete(0);

for(int i=0;i

for(i=0;i<6;i++) if(str.Find(opt2[i])!=-1) return 0;

return 1;

}

CString CCalculation::NtoS(double d)

{

int decimal, sign;

char *buffer;

buffer = _ecvt( d, 16, &decimal, &sign );

CString str=buffer;

if(decimal>=0 && decimal<=16) str.Insert(decimal,".");

else if(decimal>16)

{

for(int i=str.GetLength();i

else

{

for(int i=0;i<-decimal;i++) str.Insert(0,"0");

str.Insert(0,".");

}

if(sign==1) str.Insert(0,"-");

return str;

}

double CCalculation::StoN(CString str)

{

char *stopstring;

double x;

x = strtod( str.GetBuffer(0), &stopstring );

m_strTmp=stopstring;

return x;

}

CString CCalculation::TwoE(CString strExp)

{

double x2,y,x1=StoN(strExp);

strExp=m_strTmp;

char op=strExp.GetAt(0);

strExp.Delete(0);

x2=StoN(strExp);

if(m_strTmp!="") return "ERROR_"+m_strTmp+"未知符号_";

if(op=='+') {y=x1+x2;}

else if(op=='*') {y=x1*x2;}

else if(op=='-') {y=x1-x2;}

else if(op=='^') {y=pow(x1,x2);}

else if(op=='/') {y=x1/x2;}

else if(op=='%') {y=fmod(x1,x2);}

else return "ERROR_"+m_strTmp+"未知运算符_";

return NtoS(y);

}

CString CCalculation::SingleE(CString op,double dx)

{

if(op=="ln")

{

return NtoS(log(dx));

}

else if(op=="log")

{

return NtoS(log10(dx));

}

return NtoS(sqrt(dx));

}

else if(op=="e^")

{

return NtoS(exp(dx));

}

else if(op=="abs")

{

return NtoS(fabs(dx));

}

else if(op=="ac")

{

return NtoS(acos(dx)); }

else if(op=="as")

{

return NtoS(asin(dx));

}

else if(op=="at")

{

return NtoS(atan(dx));

}

if(m_bDegree) dx=dx*PI/180; if(op=="tan")

{

return NtoS(tan(dx));

}

else if(op=="sin")

{

return NtoS(sin(dx));

}

else if(op=="cos")

{

return NtoS(cos(dx));

}

else if(op=="cot")

{

return NtoS(1/tan(dx)); }

else if(op=="sh")

{

return NtoS(sinh(dx));

}

return NtoS(cosh(dx));

}

else if(op=="th")

{

return NtoS(sinh(dx)/cosh(dx));

}

else if(op=="exp")

{

return NtoS(pow(10,dx));

}

return "ERROR"+op+"_未知函数_";

}

int CCalculation::LocateLBra(CString strExp)

{

int len=strExp.GetLength();

int pos=-1;

for(int i=0;i

{

if(pos>=0 && strExp.GetAt(i)==')') break;

if(strExp.GetAt(i)=='(')

{

pos=i;

}

}

return pos;

}

void CCalculation::DelBracket(CString *strExp)

{

int pos=LocateLBra(*strExp);

int i,len=strExp->GetLength();

if(pos==-1) {*strExp="ERROR_无效表达式_";return;}

for(i=pos;iGetAt(i)==')') break;

CString str;

str=strExp->Mid(pos+1,i-pos-1);

MultiE(&str);

strExp->Delete(pos,i-pos+1);

strExp->Insert(pos,str);

}

void CCalculation::MultiE(CString *strExp)

{

if(strExp->IsEmpty()) *strExp="ERROR_函数表达式为空_";

if(IsDigital(*strExp)) {return;}

while(1)/*处理所有的一元运算*/

for(int i=0;i

{

int pos=strExp->Find(opt[i]);

if(pos!=-1)

{

CString str=strExp->Right(strExp->GetLength()-pos-opt[i].GetLength());

double dx=StoN(str);

if(m_strTmp==str) {*strExp="ERROR"+str+"_无法识别的函数_";return;}

strExp->Delete(pos,strExp->GetLength()-pos);

*strExp+=SingleE(opt[i],dx)+m_strTmp;

MinusMinus(strExp);

if(pos>=1)

{

char ch=strExp->GetAt(pos-1);

if(ch>=48 && ch<=57)

{*strExp="ERROR_缺少二元运算符_";return;}

}

break;

}

}

if(i==FUNCNUM) break;

}

//按运算符优先级处理二元运算

int pos=-1;

while(1)

{

pos=strExp->Find('^');

if(pos==-1) break;

else Calcu(strExp,pos);

}

while(1)

{

pos=strExp->Find('/');

if(pos==-1) break;

else Calcu(strExp,pos);

}

while(1)

{

pos=strExp->Find('*');

if(pos==-1) break;

else Calcu(strExp,pos);

}

while(1)

{

if(pos==-1) break;

else Calcu(strExp,pos);

}

pos=0;

if(strExp->GetAt(0)=='-' ||strExp->GetAt(0)=='+') strExp->Insert(0,"0"); while(1)

{

int tmpos=strExp->Right(strExp->GetLength()-pos).Find('-');

if(tmpos==-1) break;

else pos+=tmpos;

if(pos==0 && strExp->GetAt(pos+1)=='-' || pos>0)

{

if(strExp->GetAt(pos+1)=='+')

{

strExp->Delete(pos+1);

pos=0;

continue;

}

/*********处理连减(如:----1)的情况***********/

int nCount=0;

while(1)

{

if(++pos>0)

{

if(strExp->GetAt(pos)!='-') break;

else nCount++;

}

else break;

}

if(nCount>0)

{

strExp->Delete(pos-nCount-1,nCount+1);

if(nCount%2==0) strExp->Insert(pos-nCount-1,"-");

else if(pos-nCount-1>0) strExp->Insert(pos-nCount-1,"+");

pos=0;

continue;

}

else pos--;

/***********************************************/

if(pos>0 && strExp->GetAt(pos-1)=='+')

{

pos++;

continue;

}

}

else pos++;

}

pos=0;

while(1)

{

pos=strExp->Find('+');

// int tmpos=strExp->Right(strExp->GetLength()-pos).Find('+');

if(pos==-1) break;

// else pos+=tmpos;

if(pos==0 && strExp->GetAt(pos+1)=='+' || pos>0)

{

/*********处理连加(如:++++1)的情况***********/

int nCount=0;

while(1)

{

if(++pos>0)

{

if(strExp->GetAt(pos)!='+') break;

else nCount++;

}

else break;

}

if(nCount>0)

{

strExp->Delete(pos-nCount-1,nCount+1);

strExp->Insert(pos-nCount-1,"+");

pos=0;

continue;

}

else pos--;

/***********************************************/

Calcu(strExp,pos);

}

else pos++;

}

}

void CCalculation::Calcu(CString *strExp,int pos)

{

char ch;

for(int j=pos-1;j>=0;j--)

{

ch=strExp->GetAt(j);

if(ch=='+' ||ch=='-' ||ch=='*'||ch=='/' ||ch=='%' ||ch=='^' )

if(j==0 && ch!='-') {*strExp="ERROR_缺少参数_";return;}

if(j==0 && ch=='-') j=-1;//防止把负号误判为减号

else if(j>0 && ch=='-' && !IsDigital(strExp->Mid(j-1,1))) j--;

break;

}

}

for(int k=pos+1;kGetLength();k++)

{

ch=strExp->GetAt(k);

if(ch=='+' ||ch=='-' ||ch=='*'||ch=='/' ||ch=='%' ||ch=='^' )

{

if(ch=='-' && k>pos+1) break;

if(ch=='-' && k>0 && IsDigital(strExp->Mid(k+1,1)) ) k++;

else break;

}

}

CString strExp2=strExp->Mid(j+1,k-j-1);

*strExp=strExp->Left(j+1)+TwoE(strExp2)+strExp->Right(strExp->GetLength()-k);

if(strExp->Find("#IN")!=-1) {*strExp="ERROR_结果有溢出或值域越界_";return;} if(!SynRes(strExp)) {*strExp="ERROR_缺少运算符_";return;}

MinusMinus(strExp);

}

CString CCalculation::MainPro(CString strExp)

{

if(strExp.IsEmpty()) return "表达式不能为空";

Macro(&strExp);

strExp.MakeLower(); //表达式全部小写

/**********给表达式加上保护括号************/

strExp.Insert(0,"(");

strExp+=")";

/******************************************/

int pos=strExp.Find(" ");

int n=BraCheck(strExp);

CString str;

str.Format("%d",abs(n));

if(n==1) strExp+=")";

else if(n==-1) strExp.Insert(0,"(");

else if(n>0) return "缺少"+str+"个右括号";

else if(n<0) return "缺少"+str+"个左括号";

while(pos!=-1) //去掉表达式中的空格符

{

strExp.Delete(pos);

pos=strExp.Find(" ");

}

Hex2Dec(&strExp); //将表达式中的十六进制数转换成十进制

Bin2Dec(&strExp); //将表达式中的二进制数转换成十进制

while(!IsDigital(strExp))

{

DelBracket(&strExp);

if(!SynRes(&strExp)) return strExp;

}

if(!SynRes(&strExp)) return strExp;

else return ModiResult(strExp);

}

void CCalculation::Macro(CString *strExp)

{

int pos;

for(int i=0;i

{

pos=strExp->Find(m_strConName[i]);

while(pos!=-1)

{

strExp->Delete(pos,m_strConName[i].GetLength());

strExp->Insert(pos,m_strConValue[i]);

if(pos>=1)

{

char ch=strExp->GetAt(pos-1);

if(ch>=48 && ch<=57 || ch==41)

{*strExp="缺少二元运算符";return;}

}

pos=strExp->Find(m_strConName[i]);

}

}

}

CString CCalculation::ModiResult(CString strRes)

{

if(strRes.Find("#IN")!=-1) return "结果有溢出或值域越界";

/*****************去掉保护括号**********************/

if(strRes.GetAt(0)=='(') strRes.Delete(0);

if(strRes.GetAt(strRes.GetLength()-1)==')') strRes.Delete(strRes.GetLength()-1);

/***************************************************/

int pos=strRes.Find(".");CString str="";

if(pos!=-1)

{

if(pos==0) strRes="0"+strRes;

else if(strRes.GetAt(0)=='-' && strRes.GetAt(1)=='.') strRes.Insert(1,"0");

}

if(pos>16)

strRes.Delete(pos);

strRes.Insert(1,".");

str.Format("%d",pos-1);

str=" E"+str;

}

pos=strRes.Find(".");

if(pos==0 || pos==1 && strRes.GetAt(0)=='0')

{

for(int i=pos+1;i

{

if(strRes.GetAt(i)!='0') break;

}

if(i>4)

{

str.Format(" E-%d",i-2);

strRes.Delete(pos,i-1);

strRes.Insert(1,".");

}

}

strRes=strRes.Left(pos+16)+str;//截取小数点后16位return strRes;

}

bool CCalculation::SynRes(CString *strExp)

{

int pos=strExp->Find("ERROR");

if(pos!=-1)

{

pos=strExp->ReverseFind('_');

strExp->Delete(pos,strExp->GetLength()-pos);

pos=strExp->ReverseFind('_');

strExp->Delete(0,pos+1);

return 0;

}

return 1;

}

void CCalculation::MinusMinus(CString *strExp)

{

int pos=strExp->Find("--");

if(pos!=-1)

{

strExp->Delete(pos,2);

strExp->Insert(pos,"+");

if(strExp->GetAt(0)=='+') strExp->Delete(0);

}

int CCalculation::BraCheck(CString str)

{

int lb=0,rb=0,len=str.GetLength();

for(int i=0;i

{

if(str.GetAt(i)=='(') lb++;

else if(str.GetAt(i)==')') rb++;

}

return lb-rb;

}

void CCalculation::Oct2Dec(CString *strExp)

{

int len,i,index,pos=strExp->Find("xo");

CString strTmp,strDF;

char ch;

double dx;

while(pos!=-1)

{

dx=0;strTmp="";strDF="";

strExp->Delete(pos,2);

for(i=pos-1;i>=0;i--)

{

ch=strExp->GetAt(i);

if(ch==56 || ch==57 || ch>=97 && ch<=102)

{

*strExp="ERROR_八进制数越界_";

return;

}

if(ch>=48 && ch<=55 ||ch==46)

{

strTmp.Insert(0,strExp->Mid(i,1));

strExp->Delete(i);

}

else break;

}

if(i==pos-1) {*strExp="ERROR_缺少二元运算符_";return;}

index=i;

pos=strTmp.Find(".");

if(pos!=-1)

{

strDF=strTmp.Right(strTmp.GetLength()-pos-1);

strTmp.Delete(pos,strTmp.GetLength()-pos);

}

strTmp.MakeReverse();

for(i=0;i

{

ch=strTmp.GetAt(i);

dx+=(ch-48)*pow(8,i);

}

len=strDF.GetLength();

for(i=0;i

{

ch=strDF.GetAt(i);

dx+=(ch-48)*pow(8,-i-1);

}

strTmp=NtoS(dx);

strExp->Insert(index+1,strTmp);

pos=strExp->Find("xo");

}

}

void CCalculation::Hex2Dec(CString *strExp)

{

int len,i,index,pos=strExp->Find("xh");

CString strTmp,strDF;

char ch;

double dx;

while(pos!=-1)

{

dx=0;strTmp="";strDF="";

strExp->Delete(pos,2);

for(i=pos-1;i>=0;i--)

{

ch=strExp->GetAt(i);

if(ch>=48 && ch<=57 || ch>=97 && ch<=102 ||ch==46)

{

strTmp.Insert(0,strExp->Mid(i,1));

strExp->Delete(i);

}

else break;

}

if(i==pos-1) {*strExp="ERROR_缺少二元运算符_";return;}

index=i;

pos=0;

for(i=0;i

{

if(strTmp.GetAt(i)=='.') pos++;

if(pos>1) {*strExp="ERROR_缺少二元运算符_";return;} }

if(pos!=-1)

{

strDF=strTmp.Right(strTmp.GetLength()-pos-1);

strTmp.Delete(pos,strTmp.GetLength()-pos);

}

strTmp.MakeReverse();

len=strTmp.GetLength();

for(i=0;i

{

ch=strTmp.GetAt(i);

if(ch>=48 && ch<=57)//该数在0~9之间

{

dx+=(ch-48)*pow(16,i);

}

else if(ch>=97 && ch<=102)//该数在a~f之间

{

dx+=(ch-87)*pow(16,i);

}

}

len=strDF.GetLength();

for(i=0;i

{

ch=strDF.GetAt(i);

if(ch>=48 && ch<=57)//该数在0~9之间

{

dx+=(ch-48)*pow(16,-i-1);

}

else if(ch>=97 && ch<=102)//该数在a~f之间

{

dx+=(ch-87)*pow(16,-i-1);

}

}

strTmp=NtoS(dx);

strExp->Insert(index+1,strTmp);

pos=strExp->Find("xh");

}

}

void CCalculation::Bin2Dec(CString *strExp)

{

int len,i,index,pos=strExp->Find("xb");

CString strTmp,strDF;

char ch;

double dx;

while(pos!=-1)

dx=0;strTmp="";strDF="";

strExp->Delete(pos,2);

for(i=pos-1;i>=0;i--)

{

ch=strExp->GetAt(i);

if(ch>=50 && ch<=57 || ch>=97 && ch<=102)

{

*strExp="ERROR_二进制数越界_";

return;

}

if(ch=='0' || ch=='1' ||ch==46)

{

strTmp.Insert(0,strExp->Mid(i,1));

strExp->Delete(i);

}

else break;

}

if(i==pos-1) {*strExp="ERROR_缺少二元运算符_";return;}

index=i;

pos=strTmp.Find(".");

if(pos!=-1)

{

strDF=strTmp.Right(strTmp.GetLength()-pos-1);

strTmp.Delete(pos,strTmp.GetLength()-pos);

}

strTmp.MakeReverse();

len=strTmp.GetLength();

for(i=0;i

{

ch=strTmp.GetAt(i);

dx+=(ch-48)*pow(2,i);

}

len=strDF.GetLength();

for(i=0;i

{

ch=strDF.GetAt(i);

dx+=(ch-48)*pow(2,-i-1);

}

strTmp=NtoS(dx);

strExp->Insert(index+1,strTmp);

pos=strExp->Find("xb");

}

}

void CCalculation::Dec2Hex(CString *strExp/*strExp须为数字*/)

bool bMinus=0;

if(strExp->GetAt(0)=='-')

{

bMinus=1;

strExp->Delete(0);

}

int pos=strExp->Find('.');

CString str,strDec;

int nDecInt;

double dDec;

if(pos!=-1)

{

strDec=strExp->Left(pos);

nDecInt=atoi(strDec.GetBuffer(0));

strDec=strExp->Right(strExp->GetLength()-pos); }

else

{

nDecInt=atoi(strExp->GetBuffer(0));

}

strExp->Empty();

while(nDecInt!=0)

{

int nTmp=nDecInt%16;

if(nTmp==10) str="a";

else if(nTmp==11) str="b";

else if(nTmp==12) str="c";

else if(nTmp==13) str="d";

else if(nTmp==14) str="e";

else if(nTmp==15) str="f";

else str.Format("%d",nTmp);

nDecInt/=16;

strExp->Insert(0,str);

}

*strExp+=".";

if(pos!=-1)

{

dDec=StoN(strDec);

int nCount=0;

while(dDec!=0)

{

dDec*=16;

int nTmp=dDec;

if(nTmp==10) str="a";

C语言课程设计 简单计算器程序

课程设计名称:C语言课程设计课程设计题目:简单计算器程序

目录 第1章需求分析 (1) 1.1设计要求 (1) 1.2任务 (1) 第2章总体设计 (2) 2.1设计简介及设计方案论述 (2) 2.2功能模块层次图 (2) 第3章详细设计 (3) 3.3由(后缀)逆波兰表达式计算中缀表达式原理 (8) 3.3.1算法描述 (8) 第4章调试分析 (10) 4.1程序设计中所遇到的错误及犯错的原因 (10) 4.2错误的解决方法 (10) 第5章用户手册 (11) 总结 (15) 参考文献 (16) 附录(程序清单) (17)

第1章需求分析 1.1 设计要求 (1)用 C 语言数据结构实现程序设计; (2)利用结构体、栈、进行相关信息处理; (2)系统的各个功能模块要求用函数的形式实现; (4)界面简单,可操作性高。 1.2任务 (1)定义一个结构体类型数组,输入0~9 及+、--、*等符号的信息,将其信息存储起来; (2)输入简单的加减乘除算术计算式,并在屏幕上显示逆波兰(后缀式)表达式和计算结果; (3)编写代码; (4)程序分析与调试。 说明: 本课程设计将实现一个简单计算器。在功能上尽量模仿windows 的计算器。系统界面不做牵制要求。该程序能实现标准型中+、-、*、/、(、)、.、的混合运算表达式(一般意义上的中缀表达式),将其转换成逆序波兰表达式(后缀表达式)并计算输出结果。在进行运算后可以选择继续运算或者结束当前运算。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

第2章 总体设计 2.1设计简介及设计方案论述 逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相 关的两个运算对象之间,所以,这种表示法也称为中缀表达式。波兰逻辑学家 J.Lukasiewicz 于 1929 年提出了另一种表示表达式的方法。按此方法,每一运算符都置 于其运算对象之后,故称为后缀表达式。 后缀表达式的优点是显而易见的, 编译器在处理时候按照从左至右的顺序读取逆波 兰表达式,遇到运算对象直接压入堆栈,遇到运算符就从堆栈提取后进的两个对象进行计算,这个过程正好符合了计算机计算的原理。后缀表达式比前缀表达式更加易于转换,并且它的最左面一定为数字,这一点在实 际编程的时候就会体会到它的好处了。 逆波兰表达式有一个更大的优点,就是拆括号,根据运算符的级别将中缀表达式转 换成逆波兰表达式后,运算顺序就已经替代了运算符的级别,这样也避免了括号提高运 算级别的特殊处理。 2.2功能模块层次图 将算术表达式转化为逆波兰表达式 计算逆波兰表达式的值 简单计算器 表 达 式 格 式 转 换 系统 求 值 计 算 系 统

模拟简单计算器实训

苏州市职业大学 课程设计说明书 名称___模拟简单计算器_______________ 2011 年12月26 日至2011年12月31 日共1 周 院系__ 计算机工程系 班级10嵌入式 姓名 系主任____李金祥 教研室主任刘文芝 指导教师徐丽华、刘文芝

目录 一.课程设计的目的与要求 (2) 1.课程设计的目的 (2) 2.课程设计的要求 (2) 二.题目说明 (2) 2.1开发背景 (3) 2.2 开发工具介绍 (4) 2.3 小组成员分工 (4) 三.硬件方案 (5) 3.1硬件设计 (5) 3.2电路原理图 (7) 四.软件设计 (8) 4.1 模块划分 (8) 4.2 模块结构图 (9) 4.3 液晶显示模块 (9) 4. 4 定时器模块 (6) 五.运行结果分析与系统改进 (10) 六.遇到的问题和解决方法 (11) 七.课程设计总结 (11) 八.参考文献 (11)

一.课程设计的目的与要求 1.课程设计的目的 《单片机原理与应用》是一门专业技术基础课,是一门实践性很强的课,单片机课程设计要求将所学的理论知识通过实践加强理解和认识,提高学生们对单片机的认识,同时提高同学们的设计能力和实践动手能力。 同时《单片机原理与应用》也是一门应用性很强的专业课,其理论与实践技能是从事嵌入式专业技术工作的人员所不可少的。本次课程设计选择AW60实验板进行模拟应用设计与开发,要求学生掌握使用 C 语言进行单片机程序设计和调试的方法,提高综合运用所学的理论知识独立分析和解决问题的能力。同时也为了提高学生的学习能力,锻炼同学之间的合作能力。 2.课程设计的要求 在本课程设计过程中要求学生:重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;按照课程设计的题目要求,独立地完成各项任务,不允许相互抄袭;按时到机房上机,并接受教师的检查。 认真编写课程设计报告。 课程设计可以由2~4名同学合作完成一个课题。全体成员应共同完成选题,确定设计思想,进行功能模块划分,然后由组长为各成员分配任务。 整个设计期间,组长负责协调工作。各小组成员明确自己的任务后,应独立完成设计、编码和调试。 课题设计完成后,小组成员要理解同组其他成员设计的源程序,熟练操作本组设计,各自完成课程设计说明书。 1、对系统进行功能需求分析; 2、设计合理的模块结构和系统框架; 3、编程简练,程序功能齐全,能正确运行; 4、说明书、流程图要清楚; 5、课题完成后必须按要求提交课程设计报告;

简易计算器的设计与实现

沈阳航空航天大学 课程设计报告 课程设计名称:单片机系统综合课程设计课程设计题目:简易计算器的设计与实现 院(系): 专业: 班级: 学号: 姓名: 指导教师: 完成日期:

沈阳航空航天大学课程设计报告 目录 第1章总体设计方案 (1) 1.1设计内容 (1) 1.2设计原理 (1) 1.3设计思路 (2) 1.4实验环境 (2) 第2章详细设计方案 (3) 2.1硬件电路设计 (3) 2.2主程序设计 (7) 2.2功能模块的设计与实现 (8) 第3章结果测试及分析 (11) 3.1结果测试 (11) 3.2结果分析 (11) 参考文献 (12) 附录1 元件清单 (13) 附录2 总电路图 (14) 附录3 程序代码 (15)

第1章总体设计方案 1.1 设计内容 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除1位无符号数字的简单四则运算,并在6位8段数码管上显示相应的结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的8751单片机,输入采用4×4矩阵键盘。显示采用6位8段共阳极数码管动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,最终选用汇编语言进行编程,并用protel99se涉及硬件电路。 1.2 设计原理 在该课程设计中,主要用到一个8751芯片和串接的共阳数码管,和一组阵列式键盘。作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。 1)提出方案 以8751为核心,和数码管以及键盘用实验箱上已有的器件实现计算器的功能。 2) 总体方案实现 (1)要解决键值得读入。先向键盘的全部列线送低电平,在检测键盘的行线,如果有一行为低电平,说明可能有按键按下,则程序转入抖动检测---就是延时10ms再读键盘的行线,如读得的数据与第一次的相同,说明真的有按键按下,程序转入确认哪一键按下的程序,该程序是依次向键盘的列线送低电平,然后读键盘的行线,如果读的值与第一次相同就停止读,此时就会的到键盘的行码与列码

简单的四则运算计算器程序

简单的四则运算计算器程序

注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。 2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。

附件:程序源代码 // sizheyunsuan.cpp : Defines the entry point for the console application. #include #include const int MAX=100; class Operand{ private: double operS; public: Operand(){} Operand(double opers){ operS=opers; } void set(double opers){ operS=opers; } double get() { return operS;} }; class Operator{ private: char operF; int priority; public: Operator(){} Operator(char operf) { operF=operf; switch(operf) { case'(':priority=-1;break; case'+':priority=0;break; case'-':priority=0;break; case'*':priority=1;break; case'/':priority=1;break; case')':priority=2;break; } } void set(char operf){ operF=operf; } char get(){ return operF;} int getpriority(){ return priority; } };

java编写的简单的计算器程序

计算器 项目内容:编写一个Applet,模仿windows附件所带计算器的功能,可以帮助用户完成计算功能,具体如下图所示。 项目要求:使用图形的方式借助窗口、菜单、按钮等标准界面元素和鼠标操作,来帮助用户方便地向计算机系统发出命令,启动操作,并将系统运行的结果同样以图形的方式显示给用户,这样更加直观和生动; 1.Applet容器中组件的添加与设置,包括面板以及菜单的使用; 2.容器中组件的布局管理; 3.Java核心包中数组、数学计算类的使用; 4.异常的处理; 5.事件处理模型中的三类对象的使用: 1.Event-事件,用户对界面操作在java语言上的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。 2.Event Source-事件源,事件发生的场所,通常就是各个组件,例如按钮Button。 3.Event handler-事件处理者,接收事件对象并对其进行处理的对象。 6.程序中事件处理的流程:

1.计算流程的细化 参考代码: import .*;

import .*; import .*; import import import public class Calculator implements ActionListener { #############"); dd(panel); panel1 = new JPanel(); panel2 = new JPanel(); (new BorderLayout()); 键入计算的第一个数字。\n"); ("2. 单击“+”执行加、“-”执行减、“*”执行乘或“/”执行除。\n"); ("3. 键入计算的下一个数字。\n"); ("4. 输入所有剩余的运算符和数字。\n"); ("5. 单击“=”。\n"); aboutCal = new JMenuItem(" 关于计算器(A)"); (this);

最新计算机模拟试卷操作题答案

模拟卷1 三、简答题: 1、外存存储器有哪些?内存分哪两种?P13、15 答:外存存储器包括软盘、硬盘、光盘、U盘等。内存分只读存储器ROM和随机存取存储器RAM。 2、计算机网络的分类(按网络覆盖的范围)?P230 答:局域网、城域网、广域网和互联网。 3、常见的视频文件格式有哪些(至少四种)?P343-344 答:视频格式有:.avi格式、.mpg格式、.rm格式和.mov格式。 4、Windows操作题目(写出关键步骤) (1)在桌面上建立AA文件夹,在AA文件夹建立一个名为“JSB”的快捷方式,该快捷方式所指向的对象为“记事本”程序。(记事本程序的文件为 “C:\WINDOWS\system32\notepad.exe”) 步骤:在桌面空白处右击—选择新建文件夹,重命名为“AA”,打开“AA”文件夹,右击选择创建快捷方式,在“浏览”中找到 “C:\WINDOWS\system32\notepad.exe”,点下一步,名称输入“JSB”,完成即可。 (2)将CC文件夹中的“Excel”和“Word ”两个文件夹复制到AA文件夹中,并将“Excel”改名为“TEST”,并将其设置为隐藏属性。 步骤:打开“cc”文件夹,按住“ctrl”键选中“excel”和“word”两个文件夹,右击选择“复制”,打开“AA”文件夹,右击粘贴。在“excel”文件上右击,重命名为“TEST”,右击选择属性,在常规选项卡中,将属性改为“隐藏”。 5、WORD操作题目(6分) (1)修改Word文档中的文字字符的字体、颜色、大小,可以使用哪两种不同的方法实现?P90 答:通过“格式”工具栏和通过菜单“格式”—“字体”命令。 (2)修改文档中的首行缩进2个字符,有哪两种方法实现?P91 答:方法一:选中待修改的文档,把窗口上方的标尺左上的那个小三角往右方移动两个字符的距离,即可。 方法二:选中待修改的文档,右击——段落,在对话框内,特殊格式选择首行缩进,度量值输入2字符,即可。 (3)Word中的哪些对象可以图文混排的? 答:图片、图形,艺术字、文本框等(不确定) 6、EXCEL题目(6分) (1)列举几种Excel中的函数?p156 答:有数学(数值计算)函数、统计函数、逻辑函数、日期与时间函数、财务函数、文本函数等。 (2)列举几种对工作表的操作有哪些?p151 答:选择工作表插入工作表删除工作表移动和复制工作表重命名工作表

简单计算器的设计与实现

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)

MFC做的一个简单的计算器

目录 一.设计题目。 (1) 二.设计目的和内容。 (1) 三.基本功能描述。 (2) 四.设计思路。 (2) 五.软件设计:设计步骤、界面设计、关键功能的实现。 (3) a)设计步骤。 (3) b)界面设计。 (4) c)关键功能的实现。 (5) 六.附录。 (8) 一.设计题目。 小型计算器程序的编写. 二.设计目的和内容。 【设计目的】 1学习Visual C++的MFC开发程序的步骤。 2综合运用所学的类、继承和多态的知识。 3进一步掌握程序的调试方法。 【设计内容】 1利用MFC的向导,创建基于对话框的应用程序,添加按钮、编辑框等控件; 第1页

2实现算术加、减、乘、除等运算; 3选做:三角函数的运算、对数运算、指数运算、进制转换等。 三.基本功能描述。 具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。依次输入第一个运算数、运算符(+,-,*,/)、第二个运算数,然后输出结果,按‘C E’键清屏。 四.设计思路。 a)首先考虑对所有按键分为两类,数字类和符号类。0,1,2,3,4,5,6,7,8,9为 数字类,+,-,*,/为符号类。数字在计算过程中最多需要保存两个,所以定义了两个double型变量num1和num2来进行存储,符号需要一个char型变量cal来存储。 b)为显示数字的编辑框设立一个double型的关联变量m_Num,为显示符号的编 辑框设立一个CString型的关联变量m_result,设立一个int型的小数点标志dotflag,设立一个int型的键入数字标志numflag,设立一个long型的小数部分权值quan,最后为了防止用户输入错误,设立一个判断输入是否为数字的int型标志mark。 c)然后考虑到在计算过程中num1和num2的储存状态有三种,num1==0和 num2==0,也就是程序开始运行还没有开始录入数字的状态;num1!=0和num2==0,也就是第一个数字已经录入,第二个数字还没有录入的状态这时候把m_Num的值赋给num1,m_Num归零;num1!=0和num2!=0,把m_Num的值赋给num2,m_Num归零,令m_Num等于num1和num2合并后的值。

java简单计算器源代码

简单计算器代码 package calcultorthree; import java.awt.BorderLayout;//导入边界布局管理器类 import java.awt.GridLayout;//导入网格布局管理器类 import java.awt.TextField;//导入文本区域类 import java.awt.event.ActionEvent;//导入事件类 import java.awt.event.ActionListener;//导入事件监听者类 import javax.swing.JButton;//导入按钮类 import javax.swing.JFrame;//导入窗体 import javax.swing.JPanel;//导入面板 /** *本例实现了简单计算器代码,具备加减乘除和正弦功能,旨在抱砖引玉。熟悉java的同学,可以在此基础上实现更复杂的功能。 * @author Fjsh */ public class CalcultorThree { //新建对象,在构造函数中进行初始化 JFrame frame;//新建窗体对象 JButton buttonzero,buttondot,buttonequal;//新建按钮“0”“.”“=” JButton buttonplus,buttonminus,buttonmultiple,buttondevision, buttonsin,buttontozero;//新建按钮“+”“-”“*”“/”“sin”和归零按钮JButton buttonone,buttontwo,buttonthree,buttonfour,buttonfive,buttonsix, buttonseven,buttoneight,buttonnine;//新建数字按钮“0”“1”“2”“3”“4”“5”“6”“7”“8”“9” JPanel panelwest,panelcenter,paneleast;//新建三个面板 TextField tf;//新建文本区域对象 public CalcultorThree(){ //初始化对象 tf=new TextField(30);//构造空文本字段,字符宽度为30 frame =new JFrame("CalculatorThree");//构造窗体对象,名称为“CalculatorThree”

第02讲 简易计算器的设计

第02讲计算器 2.1 计算器简介 大家都知道,计算器是日常生活中不可缺少的一个工具,在Microsoft的Windows操作系统中,附带了一个计算器程序,有标准型和科学型两种模式。Windows XP下的标准型和科学型计算器程序分别如图2-1和图2-2所示。 图2-1 Windows XP下的标准型计算器 图2-2 Windows XP下的科学型计算器 Windows操作系统下附带的计算器程序功能相当的强大,本课我们将模仿Windows的计算器,使用Visual C# 2005开发平台开发一个功能相对简单的计算器应用程序,它能完成加、减、乘、除运算。 接下来详细的介绍简易计算器的设计方法和步骤。

2.2 界面设计及属性设置 用户界面设计是软件开发中非常重要的一个部分,用户界面的好坏直接影响软件的质量,本节将介绍如何设计简易计算器的用户界面以及界面上各控件的属性设置。 2.2.1 界面设计 打开Visual Studio 2005开发工具,新建一个Windows应用程序,然后在窗体上依次放置1个TextBox和17个Button控件,如图2-1所示(设置好属性后)。 图2-1 计算器用户界面 2.2.2 属性设置 窗体和各控件的属性设置如表2-1所示。 表2-1 窗体和各控件的属性

2.3 编写代码 本程序需要用到一些公共变量,例如用来接收操作数、运算结果,判断输入的是否为小数等,因此首先在代码的通用段声明以下变量: //****************************************************************** double num1, num2, result; // 操作数及运算结果 bool decimalFlag = false; // 判断输入的是否为小数 string myOperator; // 操作类型 //******************************************************************

单片机简易计算器设计

单片机简易计算器设计 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

一、设计要求 1.设计4*4的键盘,其中10个数字键0~9,其余6个为“+”“-”“*”“/”“=”和“C” 2.设计2位LED接口电路 3.实现1位数的简单运算 二、硬件系统设计 1、LED接口电路 简易计算器需要2位8段码LED显示电路。用8031单片机经8255A扩展2位8段码LED显示器,用8255A的A口作为段码(字形代码)数据口,PB0和PB1作为位控制端口。在位控制口加集电极开路的反相高压驱动器74LS06以提供驱动LED显示器所需的足够大的电流,然后接至各数码显示器的共阴极端。同理,在段码数据口集电极开路的正相高压驱动器74LS07提供足够大的电流,然后接到数码显示器的各段。逻辑电路结构如下:

2、键盘接口电路 简易计算器需要4*4的行列式键盘。用8031单片机经8255A扩展4*4行列式键盘,8255A的B口和C口用于扩展键盘接口,B口高4位作为输出口,C口低4位作为输入口。逻辑电路结构如下: 3、计算器逻辑电路图 将LED接口电路和键盘接口电路结合到一起就是简易计算器的逻辑电路图,如下: 三、软件设计 1、LED显示程序设计 LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED显示器,器排列形状如下图所示:

为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字0~9的共阴极字形代码如下表: 0~9七段数码管共阴级字形代码 2位LED显示的程序框图如下: 2、读键输入程序设计 为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。为了得到被按键的键码,现使用行扫描法识别按键。其程序框图如下: 3、主程序设计 (1)数值送显示缓冲程序设计 简易计算器所显示的数值最大位两位。要显示数值,先判断数值正负,如果是负值,则符号位显示“-”,然后将数值除以10,余数送显最最低位,判断商是否为0,若为0则返回,若不为0,则将商除以10,将余数送显高位。程序框图如下: (2)运算主程序设计

android开发计算器设计开发报告

Xx大学计算机与电子 信息学院《移动编程 技术》安卓程序开发 设计报告---简单计算 器 《安卓开发》程序设计报告 题目简单计算器开发 专业(班级) 网工111班 姓名张波波 学号952937885(qq) 指导教师赵(老师) 日期2014.5.7

目录 一、设计说明: (3) 1.设计内容:Android简单应用程序开发,简单计算器。 (3) 2程序说明: (3) 二、开发环境: (3) 三、概要设计: (3) 3.1 系统的总体 (3) 四、程序流程和系统功能设计 (4) 4.1程序流程设计 (4) 4.2.系统功能设计 (5) 4.3基于Android平台系统具体设计 (6) 4.3.1 总体模块详细设计 (6) 4.3.2 输入模块详细设计 (6) 4.3.3 显示模块详细设计 (7) 4.3.4 计算模块详细设计 (7) 五、计算器系统实现 (8) 5.1 Android应用程序构成 (8) 六、截图说明 (9) 1、图标 (9) 2界面 (10) 3运算界面 (11) 4错误输入 (11) 5设计平台界面 (12) 6签名导出apk (12) 七、总结 (13)

课程设计任务书 一、设计说明: 1.设计内容:Android简单应用程序开发,简单计算器。 2程序说明: 1、计算器界面友好,方便使用。 2、具有基本的加、减、乘、除功能,还有+—、开方、平方功能。 3、能够判断用户输入运算数是否正确。 4、 4、支持小数运算。 5、具有退格功能,能够删除最后一个输入,ce。 6、具有清除功能,删除所有,c。 7、具有结果存储功能,能够显示存储器状态,支持触屏手机。 8、支持最低版本2.0,最高版本4.4。开发时为4.2 二、开发环境: 开发环境:本系统是采用Eclipse+EclipseMe+JDK+ADT作为开发平台。事实上为了节约时间就直接用Google公司安给的直接绑定好的adt-bundle-windows-x86_64开发,只需要配置下环境变量,无需要关联等操作。 三、概要设计: 3.1 系统的总体 整个程序基于android技术开发,出总体模块外主要分为输入模块、显示模块以及计算模块(包括一些其她功能)这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最

简易计算器

单片机十进制加法计算器设计 摘要 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计 算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用4×4矩阵键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C 语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。 引言 十进制加法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减乘除

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阳极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单..................................

java编写简单计算器源代码

import javax.swing.*; import java.awt.event.*; import java.awt.*; import https://www.doczj.com/doc/8e4661327.html,ng.Math; class ring extends JFrame implements ActionListener { //定义成员变量: //JFrame frame;//定义一个窗口类; JTextField text;//定义一个文本框类; JLabel label;//定义一个标签类; JPanel p1,p2,p3,p4,p5,p6;//定义面板类; String s1,s,s2;//定义三个字符串变量; int count=0; JButton a1,a2,a3,a4,a5,a6,b1,b2,b3,b4,b5,b6,c1,c2,c3,c4,c5,c6,d1,d2,d3,d4 ,d5,d6; //ring的构造函数; ring() { this.setTitle("计算器"); // super("计算器"); JMenuBar menubar1=new JMenuBar();//新建菜单条; this.setJMenuBar(menubar1); JMenu menu1=new JMenu("编辑(E)"); JMenu menu2=new JMenu("查看(V)"); JMenu menu3=new JMenu("帮助(H)"); menubar1.add(menu1); menubar1.add(menu2); menubar1.add(menu3); JMenuItem item1=new JMenuItem("复制(c) ctrl+c"); JMenuItem item2=new JMenuItem("粘贴(p) ctrl+v"); JMenuItem item3=new JMenuItem("标准型(T)"); JMenuItem item4=new JMenuItem("科学型(s)"); JMenuItem item5=new JMenuItem("数字分组(I)"); JMenuItem item6=new JMenuItem("帮助主题(H)"); JMenuItem item7=new JMenuItem("关于计算机(A)"); menu1.add(item1); menu1.add(item2); menu2.add(item3); menu2.add(item4); menu2.add(item5); menu3.add(item6);

项目一 简易计算器

项目一简易计算器 项目要求: C语言具有功能强大,灵活,可移植性好等特点,可用其开发各类应用系统。本项目要求用C语言完成一个简易计算器的开发。相关要求如下: 1.能够实现两个数的算术运算功能(加、减、乘、除)。即依次输入第一个操作数、运算符、第二个操作数,然后输出运算结果。 例如:输入:2 + 5 输出:2+5=7 2.能实现单运算符表达式运算功能。 例如:输入:13*8 输出:13*8=104 3.开发工具与运行环境。 ●操作系统:windows xp/2000/ME等。 ●开发工具:VC++ 6.0。 4.附加功能。 ●实现各类进制之间的转换,输入/输出格式根据个人理解确定; ●带函数功能; ●良好的操作界面与提示信息。 教学目标: 1.能力目标。

●进一步熟悉自顶向下,逐步细化的程序设计方法; ●掌握结构化程序开发过程。 2.知识目标。 ●函数的定义、说明、调用方法; ●局部变量、全局变量的概念。 3.核心能力目标。 ●成员之间的交流沟通能力; ●成员之间的协调配合意识与能力。 教学方法: 1.直观教学法。将需要完成的简易计算器展示给各位同学,演示各项功能。启发学生思考系统的整体结构与模块划分和各个功能的实现方法,调动学生学习的积极性与主动性。 2.学法。(1)模仿练习;(2)通过网络查找其它计算器的功能及实现方法,小组讨论改善系统功能,力求实现更多的功能。 课时及教学环境: 1.课时:课内8+课外8; 2.教学环境:机房+网络。 项目实施前准备: 复习C语言的基本数据类型,运算符,表达式,基本语句,上网查找与计算器相关的资料,了解软件系统开发的过程。 引导文(函数): 函数是实现模块化设计的基础,C语言中用函数来实现模块功能。C语言函数分为两

模拟计算器程序-课程设计

模拟计算器 学生姓名:**** 指导老师:**** 摘要本课程设计的课题是设计一个模拟计算器的程序,能够进行表达式的计算,并且表达式中可以包含Abs()和Sqrt()运算。在课程设计中,系统开发平台为Windows ,程序设计设计语言采用C++,程序运行平台为Windows 或*nix。本程序的关键就是表达式的分离和处理,在程序设计中,采用了将输入的中缀表达式转化为后缀表达式的方法,具有可靠的运行效率。本程序做到了对输入的表达式(表达式可以包含浮点数并且Abs()和Sqrt()中可以嵌套子表达式)进行判定表达式是否合法并且求出表达式的值的功能。经过一系列的调试运行,程序实现了设计目标,可以正确的处理用户输入的表达式,对海量级数据都能够通过计算机运算快速解决。 关键词C++程序设计;数据结构;表达式运算;栈;中缀表达式;后缀表达式;字符串处理;表达式合法判定;

目录 1 引言 (3) 1.1课程设计目的 (3) 1.2课程设计内容 (3) 2 设计思路与方案 (4) 3 详细实现 (5) 3.1 表达式的合法判定 (5) 3.2 中缀表达式转化为后缀表达式 (5) 3.3 处理后缀表达式 (7) 3.4 表达式嵌套处理 (8) 4 运行环境与结果 (9) 4.1 运行环境 (9) 4.2 运行结果 (9) 5 结束语 (12) 参考文献 (13) 附录1:模拟计算器源程序清单 (14)

1 引言 本课程设计主要解决的是传统计算器中,不能对表达式进行运算的问题,通过制作该计算器模拟程序,可以做到快速的求解表达式的值,并且能够判定用户输入的表达式是否合法。该模拟计算器的核心部分就在用户输入的中缀表达式的转化,程序中用到了“栈”的后进先出的基本性质。利用两个“栈”,一个“数据栈”,一个“运算符栈”来把中缀表达式转换成后缀表达式。最后利用后缀表达式来求解表达式的值。该算法的复杂度为O(n),能够高效、快速地求解表达式的值,提高用户的效率。 1.1课程设计目的 数据结构主要是研究计算机存储,组织数据,非数值计算程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。学习数据结构是为了将实际问题中涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。 模拟计算器程序主要利用了“栈”这种数据结构来把中缀表达式转化为后缀表达式,并且运用了递归的思想来解决Abs()和Sqrt()中嵌套表达式的问题,其中还有一些统计的思想来判定表达式是否合法的算法。 1.2课程设计内容 本次课程设计为计算器模拟程序,主要解决表达式计算的问题,实现分别按表达式处理的过程分解为几个子过程,详细的求解过程如下:1 用户输入表达式。 2 判定表达式是否合法。 3 把中缀表达式转化为后缀表达式。 4 求出后缀表达式的结果。 5 输出表达式的结果。通过设计该程序,从而做到方便的求出一个表达式的值,而不需要一步一步进行运算。

简易计算器课程设计

评阅教师评语:课程设计成绩 考勤成绩 实做成绩 报告成绩 总评成绩指导教师签名: 课程设计报告 论文题目基于ARM的简易计算器设计 学院(系):电子信息与自动化学院 班级:测控技术与仪器 学生姓名:同组同学: 学号:学号: 指导教师:杨泽林王先全杨继森鲁进时间:从2013年 6 月10 日到2013年 6 月28 日 1

目录 1、封面—————————————————————P1 2、目录—————————————————————P2 3、前言—————————————————————P3 4、关键字————————————————————P3 5、原理与总体方案————————————————P3 6、硬件设计———————————————————P6 7、调试—————————————————————P10 8、测试与分析——————————————————P11 9、总结—————————————————————P13

10、附件—————————————————————P14 前言 近几年,随着大规模集成电路的发展,各种便携式嵌入式设备,具有十分广阔的市场前景。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。在嵌入式系统中,数据和命令通过网络接口或串行口经过ARM程序处理后,或显示在LCD上,或传输到远端PC上。 本文通过周立功的LPC2106芯片完成的简易计算器,正是对嵌入式应用的学习和探索。 一、摘要: 计算器一般是指“电子计算器”,是能进行数学运算的手持机器,拥有集成电路芯片。对于嵌入式系统,以其占用资源少、专用性强,在汽车电子、航空和工控领域得到了广泛地应用。本设计就是先通过C语言进行相应程序的编写然后在ADS中进行运行最后导入PROTUES进行仿真。最后利用ARM中的LPC2106芯片来控制液晶显示器和4X4矩阵式键盘,从而实现简单的加、减、乘、除等四则运算功能。 关键字:中断,扫描,仿真,计算 二、原理与总体方案: 主程序在初始化后调用键盘程序,再判断返回的值。若为数字0—9,则根据按键的次数进行保存和显示处理。若为功能键,则先判断上次的功能键,根据代号执行不同功能,并将按键次数清零。程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;若有键按下则得其键值,并通过查表转换为数字0—9和功能键与清零键的代号。最后将计算结果拆分成个、十、百位,再返回主程序继续检测键盘并显示;若为清零键,则返回主程序的最开始。 电路设计与原理:通过LPC2106芯片进行相应的设置来控制LCD显示器。 而通过对键盘上的值进行扫描,把相应的键值通过MM74C922芯片进行运算从而

C编写简易计算器附源代码超详细

超详细 一、因为计算器设计的控件太多,不便使用控制台应用程序完成,所以这里 使用Windows窗体应用程序,并命名为Calc,如下图所示: 二、向窗体中拖入需要的控件,如下图所示: (完成效果图) 结果显示区(作者博客左边的文本框)是TextBox控件,并修改其name为txtShow,按键0~9为Button控件,并将其name分别修改为btn_0、btn_1、btn_2、btn_3、btn_4、btn_5、btn_6、btn_7、btn_8、btn_9;按键【负数】的name值修改为btn_sign,按键【.】的name修改为btn_dot,按键【+-*/】的name值分别修改为btn_add、btn_sub、btn_mul、btn_div,按键【=】的name值修改为btn_equ,按键【倒数】的name值修改为btn_rev,按键【平方】的name值修改为btn_sqr,按键【开方】的name值修改为btn_sqrt。右边的计算器图片空间是PictureBox,作者博客控件是LinkLabel,可以不添加,以上所有控件均可按照需求添加,只保留自己需要的按钮控件和textbox控件即可。 三、代码部分(含解释),采用switch多分支语句编写 using System; using System.Drawing; using System.Collections; using https://www.doczj.com/doc/8e4661327.html,ponentModel; using using System.Data; namespace Calc { ///

///温柔一刀C#简易计算器的实现 /// publicclass CalcForm:Form { private Button btn_0; private Button btn_1; private Button btn_2; private Button btn_3;

用JAVA编写计算器程序(模拟Windows计算器)

用JAVA编写计算器程序(模拟Windows计算器) import java.awt.*; import java.awt.event.*; public class Calculation extends WindowAdapter implements ActionListener { double dResult=0; double dNowInput=0; double dMemory; int n=0; //记载小数位数 int nOperation=1; // 记录运算符类型 int nBitsNum=0; //记录总共输入的位数 boolean alreadyHaveDot=false; //已经有小数点? boolean keyAvailable=true; boolean alreadyClickedEqueal=false; //是否按下过"="? boolean isTempNowInput=false; //是否在计算出结果后直接按运算符将结果赋给了当前输入值? Frame f; Panel p1,p2,p3,p4,p5,p6; TextField tf1,tf2; Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0; Button bDiv,bSqrt,bMulti,bMinus,bPercent,bPlus,bReciprocal,bEqual,bDot,bNegative; Button bBackspace,bCE,bC,bMR,bMS,bMC,bM; public void display() { f=new Frame("计算器"); f.setSize(280,213);

相关主题
文本预览
相关文档 最新文档