计算器实验报告

合集下载

计算器 实验报告

计算器 实验报告

计算器实验报告计算器实验报告引言:计算器是一种广泛应用于日常生活和工作中的电子设备。

它的出现极大地方便了人们的计算工作,提高了计算的准确性和效率。

本实验旨在深入了解计算器的原理和工作方式,并通过实际操作,探索计算器的功能和使用方法。

一、计算器的原理和结构计算器是一种基于数字电路和逻辑电路的电子设备。

它主要由处理器、显示屏、键盘和电源等组成。

处理器是计算器的核心部件,负责执行各种计算操作。

显示屏用于显示计算结果和输入的数据。

键盘则用于输入数字和操作符。

电源为计算器提供电能。

二、计算器的基本功能1. 四则运算:计算器可以进行加、减、乘、除等基本的四则运算。

用户只需按下相应的数字和操作符键,计算器即可自动完成计算,并在显示屏上显示结果。

2. 百分数计算:计算器还可以进行百分数的计算。

用户只需输入百分数和相应的操作符,计算器将自动将百分数转换为小数,并进行计算。

3. 平方根和乘方计算:计算器还具备开平方根和乘方的功能。

用户只需按下相应的键,输入要计算的数字,计算器将自动进行计算,并在显示屏上显示结果。

4. 括号和优先级计算:计算器支持括号和优先级计算。

用户可以使用括号来改变计算的顺序,并通过设置优先级来控制计算的顺序。

三、计算器的使用方法1. 数字输入:用户可以通过按下相应的数字键来输入数字。

计算器一般有0到9的数字键,用户可以按下多次来输入多位数。

2. 操作符输入:计算器一般有加、减、乘、除等操作符键。

用户可以按下相应的操作符键来输入操作符。

3. 清除和删除:计算器一般有清除和删除键。

用户可以使用清除键来清除计算器的显示屏和内存中的数据。

删除键则用于删除输入的数字和操作符。

4. 计算结果:用户可以按下等号键来计算结果。

计算器将根据输入的数字和操作符进行计算,并在显示屏上显示结果。

四、实验过程和结果在实验中,我们使用了一款普通的计算器进行操作。

首先,我们按下数字键输入了一组数字,然后按下操作符键进行四则运算。

简单计算器实验报告

简单计算器实验报告

简单计算器实验报告简单计算器实验报告引言:在现代社会,计算器已经成为人们生活中不可或缺的工具之一。

无论是在学校、办公室还是家庭,计算器都扮演着重要的角色。

本实验旨在设计和构建一个简单的计算器,并通过实验验证其功能和准确性。

实验步骤:1. 设计计算器的外观和功能:我们首先对计算器进行了外观设计,选择了简洁、易于使用的界面。

然后确定了计算器的基本功能,包括加法、减法、乘法和除法。

2. 选择合适的硬件和软件:为了构建计算器,我们选择了合适的硬件和软件。

硬件方面,我们选用了一块Arduino开发板、液晶显示屏和按键。

软件方面,我们使用了Arduino编程语言。

3. 连接硬件和编写代码:我们将液晶显示屏和按键与Arduino开发板连接起来,并编写了相应的代码。

代码中包括了计算器的逻辑运算和界面显示。

4. 测试计算器的功能和准确性:在完成硬件连接和代码编写后,我们对计算器进行了测试。

我们输入了一系列的算术表达式,包括简单的加减乘除运算,以及复杂的多步运算。

通过与手动计算的结果进行对比,我们验证了计算器的功能和准确性。

实验结果:经过多次测试,我们的计算器表现出了良好的功能和准确性。

无论是简单的加法还是复杂的多步运算,计算器都能够正确地给出结果。

液晶显示屏清晰地显示了算术表达式和计算结果,而按键的响应速度也非常迅速。

讨论:虽然我们的计算器在功能和准确性方面表现出色,但仍有一些改进的空间。

首先,我们可以增加更多的功能,如开方、求余等。

其次,我们可以改进界面设计,使其更加美观和易于使用。

此外,我们还可以考虑加入更强大的处理器和更大的内存,以提高计算器的性能。

结论:通过本次实验,我们成功设计和构建了一个简单的计算器,并验证了其功能和准确性。

计算器在各种算术运算中表现出色,并且具有清晰的界面和快速的响应速度。

然而,我们也意识到计算器仍有改进的空间,包括增加更多功能和改进界面设计。

总的来说,本次实验为我们深入了解计算器的原理和构造提供了宝贵的经验。

简单计算器实验报告

简单计算器实验报告

简单计算器实验报告
《简单计算器实验报告》
实验目的:通过使用简单计算器进行数学运算,探究其在日常生活中的实际应用价值。

实验材料:简单计算器、纸笔
实验步骤:
1. 使用简单计算器进行加法、减法、乘法和除法运算,记录运算过程和结果。

2. 尝试使用计算器进行复杂运算,如求平方根、求倒数等。

3. 计算器的功能和使用方法的讨论。

实验结果:
通过实验,我们发现简单计算器在日常生活中有着非常重要的应用价值。

它可以帮助我们快速准确地进行数学运算,节省时间和精力。

同时,计算器还具有一些高级的功能,如求平方根、求倒数等,这些功能在科学计算和工程计算中也具有很大的作用。

结论:
简单计算器是我们日常生活中必不可少的工具之一,它的实际应用价值是非常高的。

通过这次实验,我们更加深入地了解了计算器的功能和使用方法,对于我们的学习和工作都有着重要的帮助。

通过这次实验,我们不仅对计算器有了更深入的了解,也增加了对数学运算的兴趣,希望我们在日常生活中能够更加灵活地运用计算器,提高我们的数学运算能力。

计算器设计实验报告

计算器设计实验报告

计算器设计实验报告指导老师:张永安组长:潘文帅成员:宋王庆郭肖男常跃计算器设计实验报告一、实验目的1、通过实验了解计算器的程序代码。

2、能看懂计算器的电路原理图。

3、锻炼学生的动手实践能力。

二、实验内容设计一个简易的计算器,完成0~9999整数的一次加减乘除运算,减法运算结果可以实现计算结果的负数显示,除法运算结果为0~999并保留两位小数。

三、实验设备四、实验说明1.计算器电板图2.计算器引脚原理图3.程序代码/*************************************************程序名称:计算器设计功能:完成0~9999整数的一次加减乘除运算,减法运算结果可以实现计算结果的负数显示,除法运算结果为0~999并保留两位小数,按键音,设有清零键,首位零不显示,其它的显示"E"**************************************************/#include<AT89X51.H>unsigned char code XIANSHI[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40}; unsigned char code XIANSHIXIAOSHUDIAN[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};//带小数点//unsigned char code XIANSHIWRONG[]={0x00,0x00,0x00,0x00,0x79};//错误时的显示// unsigned char code SAOMIAO[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共阴极扫描码表格//unsigned char DANYUAN[8]={0,0,0,0,0,0,0,0};unsigned long CUNZHI;unsigned long SHU[2]={0,0};unsigned char k,key,m,n;/*************************************************SIGN 存运算符(+、-、*、/)FLAG 用第几个数组,(出现非运算符前为0,出现运算符后为1)WRONG 输入多于4个时错误标志位(0对、1错)COUNT 输入0~9数字的个数SIZE 减数大于被减数时为1SIGNCOUNT 输入运算符的个数XIAOSHU 存一位小数的值DIVKEY 运算除法时置为1**************************************************/unsigned char SIGN,FLAG,WRONG,COUNT,SIZE,SIGNCOUNT,XIAOSHU[2],DIVKEY;/*************************************************程序名称:显示程序入口参数:无功能:实现将CUNZHI中的值进行动态数码显示局部变量:i,j,q全局变量:CUNZHI,DANYUAN[0],DANYUAN[1],DANYUAN[2],DANYUAN[3] 所用端口功能:P1口送显示码P2口公共端扫描返回值:无**************************************************/void disp(void){ unsigned char i,j,p,q;/**************错误时的显示*************/if(WRONG==1){ for(i=0;i<5;i++){ P1=XIANSHIWRONG[i];P2=SAOMIAO[i];for(j=6;j>0;j--) //动态显示延时程序//for(q=248;q>0;q--);}}else{ if(DIVKEY==1){ DANYUAN[0]=XIAOSHU[1];DANYUAN[1]=XIAOSHU[0];DANYUAN[2]=CUNZHI%10;DANYUAN[3]=CUNZHI/10%10;DANYUAN[4]=CUNZHI/100%10;DANYUAN[5]=CUNZHI/1000%10;for(p=5;p>2;p--){ if(DANYUAN[p]==0)DANYUAN[p]=16;else break;}for(i=0;i<5;i++){ if(i==2) //倒数第三位为小数位//{ P1=XIANSHIXIAOSHUDIAN[DANYUAN[i]];}else{P1=XIANSHI[DANYUAN[i]];}P2=SAOMIAO[i];for(j=6;j>0;j--) //动态显示延时程序//for(q=248;q>0;q--);}}else{DANYUAN[0]=CUNZHI%10;DANYUAN[1]=CUNZHI/10%10;DANYUAN[2]=CUNZHI/100%10;DANYUAN[3]=CUNZHI/1000%10;/*******************首位为零不显示*************/for(p=3;p>0;p--) //首位为零不显示//{ if(DANYUAN[p]==0)DANYUAN[p]=16;else break;}/**************为负数时的显示*****************/if(SIZE==1) //为负数第五位数码管显示"-"//{ DANYUAN[4]=17;}else //第五位数码管不显示//{ DANYUAN[4]=16;}for(i=0;i<5;i++){ P1=XIANSHI[DANYUAN[i]];P2=SAOMIAO[i];for(j=6;j>0;j--) //动态显示延时程序//for(q=248;q>0;q--);}}}}/**************************************************程序名称:处理程序入口参数:key功能:实现加减乘除运算全局变量:key、CUNZHI、SHU[0]、SHU[1]、FLAG、SIGN返回值:无**************************************************/void CHULI(key){unsigned char i,j;/*****************声音“嘀”*****************/TR0=1;for(i=200;i>0;i--) //延时100ms//for(j=248;j>0;j--);TR0=0;/*****************************************/if(key==15) //按键为清除键//{ CUNZHI=0;SHU[0]=0;SHU[1]=0;COUNT=0;WRONG=0;SIZE=0;SIGNCOUNT=0;XIAOSHU[0]=0;XIAOSHU[1]=0;DIVKEY=0;}else if((key>=0)&&(key<=9)) //按键为数字键// { COUNT++; //按下的数字键的次数///*****************加权运算*****************/SHU[FLAG]=SHU[FLAG]*10+key; //加权运算//CUNZHI=SHU[FLAG];}else if((key>=10)&&(key<=13)) //按键为运算键//{ SIGNCOUNT++;SIGN=key;FLAG++;COUNT=0;}else if(key==14) //按键为等于键//{ switch(SIGN){ case 10:CUNZHI=SHU[0]+SHU[1];break;case 11:{ if(SHU[0]>SHU[1]){ CUNZHI=SHU[0]-SHU[1];}else{ SIZE=1;CUNZHI=SHU[1]-SHU[0];}}break;case 12:CUNZHI=SHU[0]*SHU[1];break;case 13:DIVKEY=1;CUNZHI=SHU[0]*100/SHU[1];XIAOSHU[1]=CUNZHI%10;XIAOSHU[0]=CUNZHI/10%10;CUNZHI/=100;if(CUNZHI>999){ WRONG=1;}break;}}if((COUNT==5)||(SIGNCOUNT>1)||(CUNZHI>9999)) //输入数字键大于5时将WRONG置1//{ WRONG=1;}}/**************************************************程序名称:键盘扫描入口参数:无功能:进行键盘扫描全局变量:k局部变量:i,j调用函数:CHULI(key)返回值:无**************************************************/void JIANPAN(void){ unsigned char i,j;P3=0xff;P3_4=0; //扫描P3.4这条线上的四个按键//k=P3;k=k&0x0f;if(k!=0x0f) //看P3.4这条线上是否真的有按键按下//{ for(i=20;i>0;i--) //延时一段时间//for(j=248;j>0;j--);k=P3; //再判断一次//k=k&0x0f;if(k!=0x0f){ switch(k) //通过可能发生的四种可能比较看是哪个按键按下//{ case 0x0e:key=0;break;case 0x0d:key=4;break;case 0x0b:key=8;break;case 0x07:key=12;break;}k=P3;k=k&0x0f;while(k!=0x0f){ k=P3;k=k&0x0f;}CHULI(key);}}P3=0xff;P3_5=0; //扫描P3.5这条线上的四个按键// k=P3;k=k&0x0f;if(k!=0x0f) //看P3.5这条线上是否有按键按下// { for(i=20;i>0;i--) //延时等待//for(j=248;j>0;j--);k=P3; //再看一次//k=k&0x0f;if(k!=0x0f){ switch(k) //通过比较看是P3.5这条线上的哪一个按键按下// { c ase 0x0e:key=1;break;case 0x0d:key=5;break;case 0x0b:key=9;break;case 0x07:key=13;break;}k=P3;k=k&0x0f;while(k!=0x0f){ k=P3;k=k&0x0f;}CHULI(key);}}P3=0xff; //扫描P3.6这条线上的四个按键是否按下//P3_6=0;k=P3;k=k&0x0f;if(k!=0x0f){ for(i=20;i>0;i--)for(j=248;j>0;j--);k=P3;k=k&0x0f;if(k!=0x0f){ switch(k){ case 0x0e:key=2;break;case 0x0d:key=6;break;case 0x0b:key=10;break;case 0x07:key=14;break;}k=P3;k=k&0x0f;while(k!=0x0f){ k=P3;k=k&0x0f;}CHULI(key);}}P3=0xff; //扫描P3.7这条线上的四个按键是否按下//P3_7=0;k=P3;k=k&0x0f;if(k!=0x0f){ for(i=20;i>0;i--)for(j=248;j>0;j--);k=P3;k=k&0x0f;if(k!=0x0f){ switch(k){ case 0x0e:key=3;break;case 0x0d:key=7;break;case 0x0b:key=11;break;case 0x07:key=15;break;}k=P3;k=k&0x0f;while(k!=0x0f){ k=P3;k=k&0x0f;}CHULI(key);}}}/**************************************************程序名称:主程序功能:实现计算器加减乘除运算并显示全局变量:CUNZHI、FLAG、SIGN调用函数:disp()、JIANPAN()返回值:无***************************************************/void main(void){ TMOD=0X02;ET0=1;EA=1;TR0=0;TH0=(256-200)%256;TL0=(256-200)/256;CUNZHI=0;FLAG=0;SIGN=0;WRONG=0;SIZE=0;XIAOSHU[0]=0;while(1){ d isp();JIANPAN();}}/**************************************************定时中断***************************************************/void t0(void) interrupt 1 using 1{ P0_0=~P0_0;}五、实验结果首先按复位键,输入想要计算的数,进行四则运算(+ - * /)操作完成0~9999整数的一次加减乘除运算,减法运算结果可以实现计算结果的负数显示,除法运算结果为0~999并保留两位小数,按键音,设有清零键,首位零不显示,其它的显示“E”运算错误或计算延迟则有警报声提示。

C#计算器实验报告

C#计算器实验报告

C#计算器实验报告班级:2010134学号:*********姓名:***一实验目的和要求设计一个简单计算器,具有一般计算功能,能进行基本的加减乘除运算,还具有求根号,倒数等功能。

特点是能进行不同进制的运算和不同进制间的转换。

主要的工作主要是操作数与被操作数进行简单的加、减、乘、除运算来完成基本的,而且还可以进行简单的科学运算例如计算一个数的平方、开方、正弦、余弦、log、ln等操作还可以计算面积、周长、体积和表面积等。

通过新的技术和新方法来实现计算功能显示界面为Windows From窗体。

二功能模块设计标准计算器通过Windows Form窗体中的对应按钮接受用户输入数据提交对应的方法中来完成相应的功能计算再将结果显示在显示框内。

显示界面为Windows From窗体。

下面是一个简单的计算器的基本功能:1加法两个数据进行加操作可以为小数。

2减法两个数据进行减操作可以为负数相减。

3乘法两个数相乘4除法两个数相除5 倒数可以求得一个数的倒数6开方开方后的结果可以精确到16位。

科学计算器1平方接收的数相乘结果保留一位小数。

2立方接收的数相乘两次3正弦正弦结果精确度同开方。

4余弦余弦结果精确度同上。

5 LogLog运算精确到16位。

6 Ln以e为底的对数。

7 二进制二进制数的运算8 八进制八进制数的运算9 十进制十进制数的运算11 十六进制十六进制的运算12 倒数可以求得一个数的倒数13 开方开方后的结果可以精确到16位。

14 颜色可以选择输入字体的颜色三设计界面标准型科学型四详细设计过程(一)打开VS2010创建项目(二)界面设计1.进入界面2.菜单设计(1)选择VS201的菜单栏中的“视图|工具箱”单击,调出工具箱(出现在VS用户区左侧。

(2)在工具箱中选择“菜单和工具栏|MenuStrip”,拖到程序界面用户区,并根据自己的喜好在“属性窗口”(可以使用“视图|属性窗口”调出,一般在用户区右下角)设置菜单栏宽度、颜色等。

计算器黑盒测试实验报告

计算器黑盒测试实验报告

西实科技验报算告?实验名称计算器黑盒测试I实验地点____________________实验日期_______________指导教师__________________学生班级________________学生姓名__________________学生学号_________________提交日期软件教研室制一、测试目的设计测试用例、使用各种测试方法进行计算器的测试,并对测试结果进行分析二、测试内容1•软件说明:实现一个小的计算器程序,只需要完成加、减、乘、除运算,设计测试用例,并对测试结果进行分析,同时计算器运行稳定。

2、设计测试用例3、执行测试4、测试结果分析5、源代码三、测试步骤(一)、计算器界面2、设计测试用例(1)等价类测试:1、4个等价类测试用例的分析过程如下:2、对应测试的结果分析: 整型:1.加(55+50)2.减(78-24)3.乘(15*25)4.除(36/4)小数1.加(25.3+12.7)2.减(14.3-11.7)3.乘(25.6*12.8)4.除(50.2/20.7)负数6.加-20+-217.减(-15)-(-14)8.乘-12*-129.除-16/-5(其中算式写法错误导致正常运算错误)无效输入1.加(E1+t2):程序中无效数字无法正常输入,程序无法进行。

2.减(G4-k5)程序中无效数字无法正常输入,程序无法进行。

(同上)3.乘(I5*l6)程序中无效数字无法正常输入,程序无法进行。

(同上)4.除(Ff/se)程序中无效数字无法正常输入,程序无法进行。

(同上)简易计食器1、计算器4个标准等价类测试用例的分析过程如下:测试用例被加数加数预期输出Testi 0 10 正常运算Test2 1 10 正常运算Test3 40 10 正常运算Test4 55.5 10 正常运算Test5 -70 10 正常运算Test6 10 10 正常运算Test7 101 10 正常运算Test8 10 0 不能运算Test9 10 1 正常运算Test10 10 40 正常运算Testil 10 55.5 正常运算Test12 10 -78 正常运算Test13 10 100 正常运算2、对应测试与结果:测试结果运算均属正常,对应的部分的示图如下:Testi结果:Test2结果:Test3结果:Test4结果:Test5结果:Test6结果:减法:1、计算器4个标准等价类测试用例的分析过程如下:2、对应测试与结果:测试结果运算均属正常,对应的部分的示图如下:Testi结果:Test3结果:Test4结果:Test5结果:Test6结果:乘法1、计算器42、对应测试与结果:测试结果运算均属正常,对应的部分的示图如下:Testi结果:Test3结果:Test4结果:Test5结果:Test6结果:除法1、计算器4个标准等价类测试用例的分析过程如下:测试用例被除数除数预期输出Test2结果:Test3结果:Test8结果:附录:源代码CCalculateDlg::CCalculateDlg(CWnd* pParent /*=NULL*/):CDialog(CCalculateDlg::IDD, pParent){//{{AFX_DATA_INIT(CCalculateDlg)m_parameter = 0.0;//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);CalculatePara = 0;CalculateResult = 0;Ispoint = false;Sumpoint = 0;} void CCalculateDlg::DoDataExchange(CDataExchange* pDX)CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CCalculateDlg)DDX_Text(pDX, IDC_EDIT, m_parameter);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CCalculateDlg, CDialog)//{{AFX_MSG_MAP(CCalculateDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_clear, Onclear)ON_BN_CLICKED(IDC_calculate, Oncalculate)ON_BN_CLICKED(IDC_para1, Onpara1)ON_BN_CLICKED(IDC_para2, Onpara2)ON_BN_CLICKED(IDC_para3, Onpara3)ON_BN_CLICKED(IDC_para4, Onpara4)ON_BN_CLICKED(IDC_para5, Onpara5)ON_BN_CLICKED(IDC_para6, Onpara6)ON_BN_CLICKED(IDC_para7, Onpara7)ON_BN_CLICKED(IDC_para8, Onpara8)ON_BN_CLICKED(IDC_para9, Onpara9)ON_BN_CLICKED(IDC_para0, Onpara0)ON_BN_CLICKED(IDC_point, Onpoint)ON_BN_CLICKED(IDC_minus, Onminus)ON_BN_CLICKED(IDC_plus, Onplus)ON_BN_CLICKED(IDC_subtrack, Onsubtrack)ON_BN_CLICKED(IDC_multiply, Onmultiply)ON_BN_CLICKED(IDC_divide, Ondivide)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////// // CCalculateDlg message handlersBOOL CCalculateDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a control}void CCalculateDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.void CCalculateDlg::OnPaint(){if (IsIconic())CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icon dc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags // the minimized window.HCURSOR CCalculateDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CCalculateDlg::Onclear(){UpdateData(true);m_parameter = 0;CalculatePara = 0;CalculateResult = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code herevoid CCalculateDlg::Oncalculate(){UpdateData(true);CalculatePara = m_parameter;switch(CalculateExpre){case'+':CalculateResult += CalculatePara;m_parameter = CalculateResult;break;case,-':CalculateResult -= CalculatePara;m_parameter = CalculateResult;break;case,*,:CalculateResult *= CalculatePara;m_parameter = CalculateResult;break;case,/':if (CalculatePara){CalculateResult /= CalculatePara;m_parameter = CalculateResult;}else{m_parameter = 0;MessageBox(”除数不能为零!”);} break;}// TODO: Add your control notification handler code hereCalculatePara = 0;CalculateResult = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);}void CCalculateDlg::Onpara1(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 1;}else{CalculatePara = m_parameter + 1/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara2(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 2;elseCalculatePara = m_parameter + 2/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara3(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 3;}else{CalculatePara = m_parameter + 3/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara4(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 4;}elseCalculatePara = m_parameter + 4/pow(10,Sumpoint);Sumpoint++;m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara5(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 5;}else{CalculatePara = m_parameter + 5/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara6(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 6;}else{CalculatePara = m_parameter + 6/pow(10,Sumpoint);Sumpoint++;m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara7(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 7;}else{CalculatePara = m_parameter + 7/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara8(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 8;}else{CalculatePara = m_parameter + 8/pow(10,Sumpoint);Sumpoint++;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara9(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 9;}else{CalculatePara = m_parameter + 9/pow(10,Sumpoint);Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onpara0(){UpdateData(true);if (!Ispoint){CalculatePara = m_parameter*10 + 0;}else{Sumpoint++;}m_parameter = CalculatePara;UpdateData(false);// TODO: Add your control notification handler code here void CCalculateDlg::Onpoint(){Ispoint = true;Sumpoint = 1;// TODO: Add your control notification handler code here}void CCalculateDlg::Onminus(){UpdateData(true);m_parameter = 0 - m_parameter;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onplus(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre = '+';m_parameter = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onsubtrack(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre =m_parameter = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Onmultiply(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre = '*';m_parameter = 0;Ispoint = false;Sumpoint = 0;UpdateData(false);// TODO: Add your control notification handler code here }void CCalculateDlg::Ondivide(){UpdateData(true);CalculateResult = m_parameter;CalculateExpre = '/';m_parameter = 0;Ispoint = false;UpdateData(false);// TODO: Add your control notification handler code here。

计算器实验报告

计算器实验报告

计算器实验报告一,实验目的1、学习按键扫描及LED数码管显示的设计方法。

2、设计任务及要求利用实验平台上8个LED数码管,设计可以通过键盘输入,并能显示输入相对应的数字、能够进行加,减,乘,除准确的基本运算、能够进行3位或3位的以上的乘,除运算.二,实验要求基本要求:1、可以通过键盘输入,并能显示输入相对应的数字.2、能够进行加,减,乘,除准确的基本运算、3、能够进行3位或3位的以上的乘,除运算.三,实验基本原理利用单片机实现简单计算器的加减乘除,通过键盘输入数据并在数码管上显示出数据,然后按下加减乘除任意一个键,再输入第二个数并显示,再按下等于号时,执行第一次输入的数与第二个数的加减乘除函数,并显示出最终结果。

四,实验设计分析针对要实现的功能,采用AT89S52单片机进行设计,AT89S52 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚结构。

这样,既能做到经济合理又能实现预期的功能。

在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。

程序可分为按键扫描、数码管显示输入数据、加减乘除函数,延时程序等。

运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。

首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。

这是前期准备工作。

第二部分是硬件部分:依据想要的功能分块设计设计,比如输入需要键盘扫描,输出需要显示驱动电路和数码管电路等。

第三部分是软件部分:先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。

第四部分是软件画图部分:设计好电路后进行画图,包括电路图和仿真图的绘制。

计算器实验报告

计算器实验报告

题目:界面计算器学生姓名:专业:学号:指导老师:1.实验目的:设计一个简单的计算器程序,实现简单的计算功能。

2.实验内容:(1)体系设计:程序是一个简单的计算器,能正确输入数据,能实现加、减、乘、除等算术运算,运算结果能正确显示。

(2)设计思路:1)先在Visual C++ 6.0中建立一个MFC工程文件,名为calculator;2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和单选框;3)设计按钮,并修改其相应的ID与Caption;4)选择和设置各控件的单击鼠标事件;5)为编辑框添加double类型的关联变量m_edit1;6)在calculatorDlg.h中添加math.h头文件,然后添加public成员;7)打开calculatorDlg.cpp文件,在构造函数中,进行成员初始化和完善各控件的响应函数代码.3.程序调试4.附录添加的public成员:double tempvalue; //存储中间变量double result; //存储显示结果的值int sort; //判断后面是何种运算:1.加法2.减法 3.乘法 4.除法int append; //判断后面是否添加数字成员初始化:CCalculatorDlg::CCalculatorDlg(CWnd* pParent/*=NULL*/): CDialog(CCalculatorDlg::IDD, pParent){//{{AFX_DATA_INIT(CCalculatorDlg)m_edit1 = 0.0;//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);tempvalue=0;result=0;sort=0;append=0;}各控件响应函数代码:void CCalculatorDlg::OnButton1() //按钮“1”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+1;m_edit1=result;append=0;UpdateData(FALSE);void CCalculatorDlg::OnButton2() //按钮“2”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+2;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton3() //按钮“3”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+3;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton4() //按钮“4”// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+4;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton5() //按钮“5”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+5;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton6() //按钮“6”{// TODO: Add your control notification handler codehereif(append==1)result=0;result=result*10+6;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton7() //按钮“7”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+7;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton8() //按钮“8”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+8;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton9() //按钮“9”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+9;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnBUTTONzero() //按钮“0”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+0;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnBUTTONequal() //按钮“=”{// TODO: Add your control notification handler code hereswitch(sort){case 1:result=result+tempvalue;break;case 2:result=tempvalue-result;break;case 3:result=result*tempvalue;break;case 4:result=tempvalue/result;break;}m_edit1=result;sort=0;append=1;UpdateData(FALSE);}void CCalculatorDlg::OnBUTTONclean() //按钮“C”{// TODO: Add your control notification handler code heretempvalue=0;result=0;m_edit1=0.0;UpdateData(FALSE);}void CCalculatorDlg::OnBUTTONplus() //按钮“+”{// TODO: Add your control notification handler code heresort=1;tempvalue=result;m_edit1=0;append=1;}void CCalculatorDlg::OnBUTTONminus() //按钮“-”{// TODO: Add your control notification handler code heresort=2;tempvalue=result;m_edit1=0;append=1;}void CCalculatorDlg::OnBUTTONmulti() //按钮“*”{// TODO: Add your control notification handler code heresort=3;tempvalue=result;m_edit1=0;append=1;}void CCalculatorDlg::OnBUTTONdiv() //按钮“/”{// TODO: Add your control notification handler code heresort=4;tempvalue=result;m_edit1=0;append=1;}10。

计算器-MFC程序实验报告

计算器-MFC程序实验报告

题目:计算器编程实验一、目的:编写一个程序实现+、-、*、/、sqrt、x^n基本运算,同时有清除和归零的功能。

二、程序说明:(1)符号说明:SR[20]:是用来存储输入字符串的变量;SR1[20]:为第一个字符为’0’,其余都为’’的字符串变量,当按清零健时赋给SR[20]变量,实现SR[20]“清零”;NUM1:是存储输入的数值变量;NUM2:是用来存储第一个输入的数值变量,因为每一步计算都是两个数,在第一个输入结束后NUM1的只赋给NUM2,而NUM1继续储存新输入的数值;STNUM:是没有小数点的数值变量,于是实际进行计算的值只需将这个数除以10的小数点位数次方即可;FUHAO:是表示符号的数值变量,1、2、3、4、5、6分别表示+、—、*、/、x^n、sqrt;WEICOUNT:是表示输入的字符串的位数;DIANCOUNT:表示输入的“.”次数;FUCOUNT:表示输入符号(即+、-、*等)的次数;AFDIAN:表示输入的数字在小数点后的第几位,即相当于计算小树位数;m_S:表示计算结果的变量,勇于输出结果;(2)程序运行过程:①点击数字时,SR[WEICOUNT++]=”输入数字的字符”并输出;STNUM=10*STNUM+所输数字的大小;如果DIANCOUNT=1,则NUM1=STNUM/pow(10,AFDIAN++);否则就NUM1=STNUM;这样就能将有无小数点的情况进行判断而且计算出来;②点击符号(+、-、*、/、x^n、sqrt),SR[WEICOUNT++]=”输入符号的字符”并输出;NUM2=NUM1,NUM1=0,这样就相当于将第一个值付给了NUM2,同时STNUM=0,所以在输入数的时候又可以重新给NUM1赋值,减少了变量的数量。

同时将符号所对应的数赋给FUHAO以并在“=”时用;并且DIANCOUNT=0;这样新输入的书又可以继续输入小数点了;③点击“.”时,SR[WEICOUNT++]=”.”并输出;DIANCOUNT=1;这样后面如果再输入数就可以检测出是小数所以通过①就可以得到正确的结果;④点击“=”时,根据FUHAO的值来判定符号并进行运算赋给m_S并输出,其中NUM2是第一个输入的数的值,NUM1是第二个输入的数的值;之后并STNUM=0,NUM1=1;这样就相当于把上一步计算的结果当做了下一步计算的第一个值,实现了多步连续计算;于此同时将DIANCOUNT=0,AFDIAN=1,以致在后面的计算中仍能继续正常输出;⑤点击“清零”时,m_S=0;使输出结果的编辑框显示0;strcpy(SR,SR1),并输出SR,实现了输入编辑框显示0;WEICOUNT=0,DIANCOUNT=0;用于后面的继续输出;⑥点击“清除”时,SR[--WEICOUNT]=' ';输出字符串SR;STNUM=(int) STNUM/10;这样就实现了将之前的数去掉最后一个数字的作用,再用 DIANCOUNT=1?来判断,如果是就NUM1=STNUM/pow(10,AFDIAN),否则NUM1=STNUML来实现对小数点的清除。

计算器设计实验报告

计算器设计实验报告

计算器设计实验报告《计算器设计实验报告》摘要:本实验旨在设计一个简单的计算器,并测试其功能和准确性。

实验过程中,我们使用了基本的电子元件和逻辑门电路来实现计算器的各种功能。

经过测试,我们发现设计的计算器能够准确地进行加减乘除等运算,并且在使用过程中表现稳定可靠。

通过本实验,我们对计算器的设计和原理有了更深入的了解,并且掌握了一定的电子电路设计和测试技能。

引言:计算器是现代生活中不可或缺的工具,它能够帮助人们进行各种数学运算,提高工作和学习效率。

在本实验中,我们将设计一个简单的计算器,并测试其功能和准确性。

通过这个实验,我们可以更深入地了解计算器的原理和设计,为今后的电子电路设计和实验打下基础。

材料和方法:1. 电子元件:逻辑门、电阻、电容、LED等2. 电路板和连接线3. 电源和示波器4. 计算器设计图纸和电路原理图实验步骤:1. 根据设计图纸和电路原理图,连接各种电子元件,组装成一个计算器电路。

2. 使用电源给电路供电,并使用示波器测试电路的输出波形和稳定性。

3. 进行加减乘除等运算测试,记录计算器的准确性和稳定性。

4. 对计算器进行长时间稳定性测试,观察其在长时间使用中的表现。

实验结果:经过测试,我们发现设计的计算器能够准确地进行加减乘除等运算,并且在使用过程中表现稳定可靠。

电路的输出波形清晰,没有明显的波动和噪声。

在长时间稳定性测试中,计算器表现良好,没有出现明显的故障和失效现象。

讨论:通过本实验,我们对计算器的设计和原理有了更深入的了解,并且掌握了一定的电子电路设计和测试技能。

在今后的学习和工作中,我们可以根据这些知识和技能,设计和制作更复杂和功能更强大的计算器和其他电子设备。

结论:本实验设计了一个简单的计算器,并测试了其功能和准确性。

经过测试,我们发现设计的计算器能够准确地进行加减乘除等运算,并且在使用过程中表现稳定可靠。

通过这个实验,我们对计算器的设计和原理有了更深入的了解,并且掌握了一定的电子电路设计和测试技能。

计算器实验报告

计算器实验报告

实验一计算器的制作一.实验要求1.参照Windows系统提供的计算器功能,制作一个自己的计算器,至少能完成数据的加减乘除的基本功能。

2.控件的焦点以及Tab键的设置和使用3.多个控件(按钮)事件的共享4.键盘的事件的应用二.设计思路1、首先要考虑将输入的内容在textbox上显示出来。

所以整个过程采用全局变量input来记录用户输入的内容(计算器的按键输入或者键盘输入)。

然后再将input的内容显示到textbox上。

2、接下来就是怎么去将用户的输入变成数字和运算符的问题了。

本实验的计算器有“普通运算”和“科学运算”之分。

所以在计算的时候需要判断是哪一种运算,用radioButton.Checked来判断。

3、如果是普通的运算,“+”、“-”、“*”、“/”的优先级一样,所以算法比较简单,只需要将input字符串的内容分割成运算符和数字,然后再push到两个不同的栈中。

其中数字要先转换为double类型,再存入到栈中。

4、如果是科学运算,则需要按照来“+”、“-”、“*”、“/”的优先级来进行运算。

我是运用堆栈来实现的。

算法如下:每当用户点击“+”、“-”、“*”、“/”中的任何一个键时,则进行判断,如果是“*”、“/”,则将“*”、“/”之前的一个数变成double类型,然后再存入栈中。

然后设置乘号的标识符flag1为true,或者设置除号的标识符flag2为true。

如果用户点击的是“+”、“-”,则先判断flag1,flag2是否为true,如果为true,则从栈中pop一个数,然后与当前用户输入的数进行计算,然后再push到栈中,并把“+”、“-”也存入到另一个栈中;如果为false,则将“+”、“-”之前的一个数变为double,然后存入栈中,把“+”、“-”也存入到另一个栈中。

5、当用户点击“=”号的时候,则对两个栈进行运算。

由于实验还要求可以支持键盘输入。

所以需要对Input进行判断。

计算器实验报告

计算器实验报告

Check(); UpdateData(false); } if(m_flag==4) { temp=temp/atof(m_s); m_s.Format("%lf",temp); Check(); UpdateData(false); } } 响应按钮清零‘CE’ void CCyyJSQDlg::OnCe() { m_s=" "; UpdateData(false); } 响应按钮乘‘*’ void CCyyJSQDlg::OnMul() { m_flag=3; UpdateData(true); temp=atof(m_s); m_s=" "; UpdateData(false); } 响应按钮除‘/’ void CCyyJSQDlg::OnDiv() { m_flag=4; UpdateData(true); temp=atof(m_s); m_s=" "; UpdateData(false); } 响应按钮倒数‘1/x’ void CCyyJSQDlg::OnDaoshu()
图所示。 (3)单击Next按钮,弹出MFC AppWinzard_Step2 of4对话框,如图所示。 (4)单击Next按钮,弹出MFC AppWinzard_Step3 of4对话框,如图所示。 (5)单击Next按钮,弹出MFC AppWinzard_Step4 of4
对话框,如图所示。单击Finish按钮,创建框 架。
{ UpdateData(true); temp=atof(m_s); m_s.Format("%lf",temp*atof(m_s)/100);
UpdateData(false); } 响应按钮清零‘C’ void CCyyJSQDlg::OnC() {

简易计算器实验报告

简易计算器实验报告

简易计算器实验报告一、实验目的本次实验的目的是设计并实现一个简易计算器,能够进行基本的四则运算(加、减、乘、除),以及处理括号的优先级运算,提高对程序设计和逻辑思维的理解与应用能力。

二、实验原理1、四则运算的优先级规则在数学运算中,先计算括号内的表达式,然后按照先乘除后加减的顺序进行计算。

乘除法的优先级高于加减法,如果在同一级运算中,按照从左到右的顺序进行。

2、数据结构的选择使用栈(Stack)数据结构来存储操作数和运算符。

栈具有先进后出的特点,非常适合处理表达式中的括号和优先级。

3、算法思路首先,将输入的表达式进行解析,将数字和运算符分别存储到不同的栈中。

然后,根据运算符的优先级进行计算,将计算结果重新压入栈中,直到表达式计算完毕。

三、实验设备及环境1、编程工具:选择了 Python 语言作为主要的编程工具,使用PyCharm 集成开发环境进行代码编写和调试。

2、操作系统:Windows 10 操作系统。

四、实验步骤1、定义数据结构定义两个栈,一个用于存储操作数(operandStack),一个用于存储运算符(operatorStack)。

2、表达式解析遍历输入的表达式字符串,将数字转换为整数并压入操作数栈,将运算符压入运算符栈。

遇到左括号直接压入运算符栈,遇到右括号则进行括号内的运算。

3、运算处理当运算符栈不为空时,取出栈顶的运算符和两个操作数进行计算。

根据运算符的优先级进行相应的运算,将结果压入操作数栈。

4、最终结果当表达式解析完毕后,操作数栈中的唯一元素即为表达式的计算结果。

五、代码实现```pythonclass SimpleCalculator:def __init__(self):selfoperandStack =selfoperatorStack =def calculate(self, expression):for char in expression:if charisdigit():selfoperandStackappend(int(char))elif char in '+/()':if char =='(':selfoperatorStackappend(char)elif char ==')':while selfoperatorStack-1!='(':operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackpop()else:while selfoperatorStack and selfhasHigherPrecedence(selfoperatorStack-1, char):operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackappend(char)while selfoperatorStack:operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)return selfoperandStackpop()def hasHigherPrecedence(self, op1, op2):if op1 in '/' and op2 in '+':return Trueelif op1 in '+' and op2 in '+':return Falseelif op1 in '/' and op2 in '/':return Falsereturn Falsedef performOperation(self, operand1, operand2, operator):if operator =='+':return operand1 + operand2elif operator =='':return operand1 operand2elif operator =='':return operand1 operand2elif operator =='/':if operand2 == 0:raise ValueError("除数不能为 0")return operand1 / operand2if __name__ =="__main__":calculator = SimpleCalculator()expression ="2 + 3 (4 1) / 2"result = calculatorcalculate(expression)print("计算结果:", result)```六、实验结果与分析1、测试用例及结果输入表达式:"2 + 3 4",计算结果:14输入表达式:"(2 + 3) 4",计算结果:20输入表达式:"5 2 3",计算结果:-1输入表达式:"10 / 2 + 1",计算结果:62、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。

简易计算器设计实验报告

简易计算器设计实验报告

简易计算器设计实验报告一.设计任务及要求1.1实验任务:根据计算器的原理设计一个具有加减乘除功能的简易计算器。

如:5+3*4/8=4。

1.2 实验基本要求:(1)实现最大输入两位十进制数字的四则运算(加减乘除)。

(2)能够实现多次连算(无优先级,从左到右计算结果)。

如:12+34*56-78/90+9=36(3)最大长度以数码管最大个数为限,溢出报警。

二.实验设计方案(1)用QuartusII的原理图输入来完成系统的顶层设计。

(2)用VHDL编写以及直接拖模块来各功能模块。

(3)通过2个脉冲分别实现个位数和十位数的输入。

(4)通过选择每次的输出数值,将输出值反馈到运算输入端(4)通过除法运算实现十六进制到十进制的转换输出。

其具体实现流程图如下:三系统硬件设计FPGA:EP2C5T144C8目标板及相应外围硬件电路。

(从略)四系统软件设计1.数据输入模块原理:用VHDL创建模块,通过两个脉冲分别对两个数码管进行输入控制,再通过相应运算模块将两个独立数据转化成两位十进制数字。

2.运算模块原理:用VHDL创建模块,四种运算同步运行,通过按键加、减、乘、除选择输出对应的计算结果,当按键等号来时,将所得结果反馈给运算模块输入端。

具体实现代码见附录二。

3.输出模块原理:用VHDL创建模块,通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据,并且通过除法模块将十六进制转化为十进制。

当输出结果溢出是LED0亮,同时数码管显示都为零。

部分实现见附录二。

五实验调试输入数据12,再按加法键,输入第二个数字25,按等号键,数码管显示37;按灭加法、等号键,输入第二个数据2,依次按等号键,减法键,数码管显示35;同上,按灭减法键、等号键,输入第三个数据7,依次按等号键,除法键,数码管显示5;按灭除法键、等号键,输入第四个数据99,依次按等号键,乘法键,数码管显示495,按灭乘法键、等号键,当前显示为99,依次按等号键、乘法键,数码管显示49005,同上进行若干次之后,结果溢出,LED0亮,同时数码管显示都为零。

计算器实验报告

计算器实验报告

实验一计算器的制作一.实验要求1.参照Windows系统提供的计算器功能,制作一个自己的计算器,至少能完成数据的加减乘除的基本功能。

3.多个控件〔按钮〕事件的共享二.设计思路1、首先要考虑将输入的内容在textbox上显示出来。

所以整个过程采用全局变量input来记录用户输入的内容〔计算器的按键输入或者键盘输入〕。

然后再将input的内容显示到textbox上。

2、接下来就是怎么去将用户的输入变成数字和运算符的问题了。

本实验的计算器有“普通运算”和“科学运算”之分。

所以在计算的时候需要判断是哪一种运算,用radioButton.Checked来判断。

3、如果是普通的运算,“+”、“-”、“*”、“/”的优先级一样,所以算法比较简单,只需要将input字符串的内容分割成运算符和数字,然后再push到两个不同的栈中。

其中数字要先转换为double类型,再存入到栈中。

4、如果是科学运算,则需要按照来“+”、“-”、“*”、“/”的优先级来进行运算。

我是运用堆栈来实现的。

算法如下:每当用户点击“+”、“-”、“*”、“/”中的任何一个键时,则进行判断,如果是“*”、“/”,则将“*”、“/”之前的一个数变成double类型,然后再存入栈中。

然后设置乘号的标识符flag1为true,或者设置除号的标识符flag2为true。

如果用户点击的是“+”、“-”,则先判断flag1,flag2是否为true,如果为true,则从栈中pop一个数,然后与当前用户输入的数进行计算,然后再push到栈中,并把“+”、“-”也存入到另一个栈中;如果为false,则将“+”、“-”之前的一个数变为double,然后存入栈中,把“+”、“-”也存入到另一个栈中。

5、当用户点击“=”号的时候,则对两个栈进行运算。

由于实验还要求可以支持键盘输入。

所以需要对Input进行判断。

因为如果是键盘输入,input的值为空,所以需要先把textbox中的内容读取进来,然后再进行判断,分割成数字和运算符,然后再分别存入到两个栈中。

计算器_实验报告

计算器_实验报告

一、实验目的1. 熟悉计算器的基本原理和设计方法。

2. 掌握计算器程序的设计与实现。

3. 提高编程能力和软件工程实践能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse三、实验内容1. 计算器界面设计2. 计算器功能实现3. 计算器测试与优化四、实验步骤1. 计算器界面设计(1)创建一个Java项目,命名为“Calculator”。

(2)在项目中创建一个名为“CalculatorFrame”的类,继承自JFrame。

(3)在“CalculatorFrame”类中,创建一个JPanel作为计算器的面板,命名为“calculatorPanel”。

(4)在calculatorPanel中,添加一个JTextField作为显示输入和计算结果的文本框,命名为“resultField”。

(5)添加一个JButton数组,作为计算器的按钮,包括数字按钮、运算符按钮和功能按钮。

(6)为每个按钮设置事件监听器,实现按钮点击事件。

2. 计算器功能实现(1)在“CalculatorFrame”类中,定义一个私有成员变量,用于存储当前输入的字符串。

(2)为每个按钮的事件监听器添加逻辑,实现以下功能:- 数字按钮:将按钮对应的数字字符串添加到当前输入字符串中。

- 运算符按钮:将当前输入字符串、运算符和下一个输入字符串组合成一个表达式,并计算结果。

- 功能按钮:实现计算器的其他功能,如清除、求倒数、开平方等。

(3)计算结果存储在resultField中。

3. 计算器测试与优化(1)对计算器进行测试,确保所有功能正常运行。

(2)优化计算器的性能,提高计算速度。

(3)美化计算器界面,提高用户体验。

五、实验结果与分析1. 实验结果成功设计并实现了一个具有基本功能的计算器,界面简洁、操作方便。

2. 实验分析(1)通过学习计算器的基本原理和设计方法,掌握了计算器程序的设计与实现。

计算器实验报告

计算器实验报告

计算器实验报告计算器实验报告引言:计算器是一种现代化的数学工具,它的出现极大地方便了人们的生活和工作。

本实验旨在通过对计算器的研究和实践,了解其原理和功能,并对其性能进行评估。

一、计算器的原理和功能计算器是一种能够进行数学运算的电子设备。

它基于数字电路和微处理器技术,通过输入数据和运算符号,能够进行加减乘除等基本运算,同时还具备一些高级功能,如开方、取余、百分比等。

二、计算器的基本操作1. 开机与关机:按下计算器上的电源按钮,即可启动计算器。

在使用结束后,长按电源按钮即可关闭计算器。

2. 数字输入:计算器通常配备有0-9的数字键,通过按下相应的数字键,可以输入需要计算的数字。

3. 运算符输入:计算器上通常还有加减乘除等运算符号键,通过按下相应的运算符键,可以选择所需的运算方式。

4. 结果显示:计算器的显示屏会实时显示输入的数字和运算结果。

三、计算器的性能评估1. 精确度:计算器的精确度是评估其性能的重要指标之一。

通过进行一系列精确度测试,比较计算器的计算结果与实际值的差异程度,可以评估其精确度水平。

2. 反应速度:计算器的反应速度是指在输入数据后,计算器进行计算并显示结果的时间。

通过对不同计算器的反应速度进行对比,可以评估其性能优劣。

3. 功能完整性:计算器的功能完整性是指计算器是否具备基本的数学运算功能,并能够满足用户的需求。

通过测试计算器的各项功能,如开方、取余、百分比等,可以评估其功能完整性。

4. 电池寿命:对于便携计算器而言,电池寿命是一个重要的考量因素。

通过测试计算器在不同使用情况下的电池寿命,可以评估其续航能力。

结论:通过本次实验,我们对计算器的原理和功能有了更深入的了解。

计算器作为一种重要的数学工具,不仅能够进行基本的数学运算,还具备多种高级功能。

通过评估计算器的性能指标,我们可以选择适合自己需求的计算器。

计算器的发展将进一步推动数学学科的发展,为人们的生活和工作提供更多便利。

参考文献:无。

大一计算机实验报告

大一计算机实验报告

大一计算机实验报告实验名称,基于Python的简单计算器设计与实现。

实验目的,通过本次实验,掌握Python语言的基本语法和逻辑结构,了解简单的用户交互与数据处理,培养编程思维和解决问题的能力。

实验内容,设计一个简单的计算器程序,能够实现基本的加减乘除运算,具有用户友好的交互界面。

实验过程与结果:首先,我们需要明确计算器的基本功能和界面设计。

在Python中,我们可以使用tkinter库来实现图形用户界面。

通过tkinter库,我们可以轻松地创建按钮、标签和输入框,实现用户与程序的交互。

其次,我们需要考虑计算器的逻辑实现。

我们可以使用Python的基本数学运算符来实现加减乘除功能,同时需要考虑用户输入的合法性和错误处理。

接下来,我们开始编写代码。

首先,我们创建一个窗口,并在窗口中添加按钮和输入框,设计好用户界面。

然后,我们编写计算器的逻辑实现部分,包括用户输入的获取和处理,运算结果的显示等。

最后,我们进行测试。

我们输入不同的数值和运算符,测试计算器的功能是否正常,同时也需要测试一些边界情况和异常输入,确保程序的稳定性和健壮性。

通过以上步骤,我们成功实现了一个简单的计算器程序。

用户可以通过界面输入数字和运算符,程序能够正确地进行运算,并将结果显示在界面上。

实验总结与心得:通过本次实验,我深刻地理解了Python语言的基本语法和逻辑结构,掌握了tkinter库的基本使用方法,提高了编程能力和解决问题的能力。

同时,我也意识到编程的重要性和乐趣,希望在以后的学习和工作中能够更加深入地探索编程的世界。

在实验中遇到的困难和问题,我通过查阅资料和向同学请教,最终都得到了解决。

我相信,在未来的学习和工作中,只要保持耐心和勇气,就能够克服各种困难,不断提升自己的能力。

总之,本次实验让我收获颇丰,对计算机编程有了更深入的了解,也对自己未来的学习和职业规划有了更清晰的认识。

我会继续努力学习,不断提升自己,成为一名优秀的计算机专业人才。

大学大学计算机实验报告实验报告

大学大学计算机实验报告实验报告

大学计算机实验报告实验一:计算器设计实验目的本实验的主要目的是让学生能够够了解计算器的基本原理和结构,学会利用各种键盘实现各类功能,并且能够熟练掌握计算器的基本操作和输入语法。

同时,在本实验过程中,学生还可以通过实践发现计算机中各种错误信息,加深对计算机错误处理的认识与理解。

实验内容本实验主要涉及以下内容:1.计算器的结构和原理。

2.利用各键盘实现计算器的各种功能。

3.计算器的基本操作和输入语法。

4.计算机错误的处理与研究。

实验步骤1.分析计算器的结构和原理,写出计算器的结构图和研究计算器基本原理。

2.编写程序,实现计算器的基本功能,包括加、减、乘、除、取模、求幂等。

3.研究计算器的基本操作,包括输入数字、符号、运算结果、清除结果、重置操作等。

4.记录计算过程、错误信息等,深化对计算机错误的认识与理解。

实验数据分析在本次实验过程中,我们实现了计算器的基本功能,并且也对计算器的基本操作有了更深入的了解。

在输入数字和符号时,我们需要按照一定的语法和操作,输入符号和数字的结构相对比较简单,重要的是输入语法,比如加号+,减号-,乘号*,除号/等等。

在进行计算器功能操作的过程中,我们还需要对计算过程进行记录,以便在出现错误时及时进行处理和分析,比如出现除数为零的情况,计算过程出现错误的信息等等。

实验总结通过本次实验,我们深入了解了计算器的基本结构和原理,掌握了计算器的基本操作和输入语法,加深了对计算机错误处理的认识与理解。

在今后的学习和实践中,我们将进一步完善和扩展计算器的功能,并且不断探索计算器在计算机应用中的广泛应用价值。

计算器设计实验报告

计算器设计实验报告

一、实验目的1. 熟悉数字电路的基本原理和设计方法。

2. 培养学生的动手能力和创新意识。

3. 设计并实现一个功能齐全的计算器。

二、实验原理计算器是一种常见的电子设备,其核心部件为运算单元。

本实验通过设计并实现一个计算器,使学生掌握以下原理:1. 按键扫描电路:用于读取按键信息。

2. 数据存储电路:用于存储输入的数值和运算符。

3. 运算电路:根据输入的运算符进行相应的运算。

4. 显示电路:用于显示运算结果。

三、实验仪器与材料1. 数字电路实验箱2. 计算器原理图3. 连接导线4. 按键5. LED显示器6. 电阻、电容等元件四、实验步骤1. 按键扫描电路设计(1)设计按键扫描电路原理图,包括按键、电阻、二极管等元件。

(2)根据原理图,搭建实验电路,并进行调试。

2. 数据存储电路设计(1)设计数据存储电路原理图,包括寄存器、计数器等元件。

(2)根据原理图,搭建实验电路,并进行调试。

3. 运算电路设计(1)设计运算电路原理图,包括加法器、减法器、乘法器、除法器等元件。

(2)根据原理图,搭建实验电路,并进行调试。

4. 显示电路设计(1)设计显示电路原理图,包括LED显示器、译码器等元件。

(2)根据原理图,搭建实验电路,并进行调试。

5. 整体电路设计(1)根据以上四个部分的设计,设计整体电路原理图。

(2)根据原理图,搭建实验电路,并进行调试。

五、实验结果与分析1. 按键扫描电路按键扫描电路能够正确读取按键信息,实现按键功能。

2. 数据存储电路数据存储电路能够存储输入的数值和运算符,为后续运算提供数据支持。

3. 运算电路运算电路能够根据输入的运算符进行相应的运算,实现加、减、乘、除等基本运算。

4. 显示电路显示电路能够将运算结果正确显示在LED显示器上。

5. 整体电路整体电路能够实现计算器的功能,满足实验要求。

六、实验总结1. 通过本次实验,掌握了数字电路的基本原理和设计方法。

2. 提高了动手能力和创新意识,培养了团队协作精神。

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

实验二、巩固Java基础一、实验目的1)巩固Java语言进行结构化程序设计基本概念。

2)巩固Java语言进行面向对象程序设计基本概念。

3)能够应用面向对象程序设计思想解决实际问题。

二、实验内容1)创建学生类Student来完成下面问题。

(1)创建类Student,包括属性学号no、姓名name和年龄age,且都是private 类型;(2)声明一个构造方法,以初始化对象的所有的域;(3)声明获得各属性(学号、姓名和年龄)的各个方法;(4)声明设置各属性(学号、姓名和年龄)的各个方法;(5)声明一个public型的toString方法,将该类所有域信息组合成一个字符串;(6)声明统计创建Student对象的个数的成员变量count和得到Student对象的个数的方法。

在主类中使用Student类创建两个Student对象,输出对象所有域信息;修改其姓名和年龄,并显示。

public class Student {//无参构造函数public Student(){}//有参构造函数public Student(String no, String name, int age){this.no = no;this.age = age; = name;}private String no; //学号private String name;//名称private int age;//年龄public String getNo() {return no;}public void setNo(String no) {this.no = no;}public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//-----------------------------Set 跟Get 方法end ------------------//重写toString方法@Overridepublic String toString() {return "我的名字叫:".concat(name).concat(",学号是:").concat(no).concat(",今年").concat(age+"岁了!");}//程序入口public static void main(String[] args) {//学生对象1stu = new Student("00001", "小明", 18);System.out.println(stu.toString());//学生对象2stu = new Student("00002", "小花", 22);System.out.println(stu.toString());}}三、需求分析该计算器程序除了具备加减乘除基本的功能外还有重置功能 ce,程序里面实现了事件监听接口,该程序只能实现一些基本的加减乘除运算。

计算器的基本功能:1、加法运算:用数字按钮和“+”按钮进行运算;2、减法运算:用数字按钮和“-”按钮进行运算;3、乘法运算:用数字按钮和“*”按钮进行运算;4、除法运算:用数字按钮和“/”按钮进行运算;5、开根运算:用数字按钮和“sqrt”按钮进行运算;6、返回上一级键实现;7、清零键C按钮实现。

四、系统设计功能函数说明actionPerformed 将每个组件都添加事件响应。

具体的事件响应操作将在其他的类中逐一实现。

jbInit() 对程序进行初始化并设置大小,名字,布局方式handleReset()类实现C、CE、backspace按钮的复位操作handleNumber() 字符串输入控制类完成简单计算器的设计与实现。

图形界面如下图所示:系统界面如下图所示五、源程序运行正常,可以实现计算器的“+”“—”“*”“/”等运算功能。

/* 一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。

但还不支持键盘操作。

*/ package sy;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;//创建Calculate类继承swing包里的JFrame类用于显示界面里标签、按钮和文本字段public class Calculate extends JFrame {private String front = "",behind = "";//分别用于记录加减乘除运算符之前之后输入的内容private String op; //用于记录运算符private String re;//用于存储运算结果的字符串格式private boolean flag = false; //用于记录是否按下了运算符private boolean flag1 = false;//用于判断是否输入了点运算符private double result;//用于存储运算结果private boolean flag2 = false;//用于判断是否输入了数字private boolean flag3 = false;//用于判断是否按下了等号运算符//swing包中对窗体中具有相同逻辑功能的组件进行组合的类JPanel contentPane; /** 计算器上的键的显示名字创建对象并实例化*/JTextField txtResult = new JTextField("0");JButton btnNull = new JButton("sqrt");//新建一个按钮显示为sqrtJButton btnFour = new JButton("4");//新建一个按钮显示为4JButton btnFive = new JButton("5");//新建一个按钮显示为5JButton btnSix = new JButton("6");//新建一个按钮显示为6JButton btnDecrease = new JButton("-");//新建一个按钮显示为-JButton btnBegin = new JButton("C");//新建一个按钮显示为cJButton btnOne = new JButton("1");//新建一个按钮显示为1JButton btnTwo = new JButton("2");//新建一个按钮显示为2JButton btnThree = new JButton("3");//新建一个按钮显示为3JButton btnMultiply = new JButton("*");//新建一个按钮显示为*JButton btnCancel = new JButton("←");//新建一个按钮显示为←JButton btnZero = new JButton("0");//新建一个按钮显示为0JButton btnMinus = new JButton("+/-");//新建一个按钮显示为+/-JButton btnPoint = new JButton(".");//新建一个按钮显示为.JButton btnDivide = new JButton("/");//新建一个按钮显示为/JButton btnEqual = new JButton("=");//新建一个按钮显示为=JButton btnIncrease = new JButton("+");//新建一个按钮显示为+JButton btnSeven = new JButton("7");//新建一个按钮显示为7JButton btnEight = new JButton("8");//新建一个按钮显示为8JButton btnNine = new JButton("9");//新建一个按钮显示为9//用try,catch抛出错误,监视所有又可能发生异常的代码public Calculate() {try {setDefaultCloseOperation(EXIT_ON_CLOSE);//用户单击窗口的关闭按钮时程序执行的操作jbInit();} catch (Exception exception) {exception.printStackTrace();} }//建立一个私有的jbinit类对程序进行初始化并设置大小,名字,布局方式private void jbInit() throws Exception {contentPane = (JPanel) getContentPane();contentPane.setLayout(null); //设置布局方式null就是默认为流式布局this.setResizable(false);//窗口大小不可改变setSize(new Dimension(400, 300)); //设置大小位置在屏幕(400, 300)坐标处显示计算setTitle("计算器");//设置标题txtResult.setEnabled(false); // 设置控件是否可用txtResult.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));txtResult.setEditable(false);// 不允许修改结果文本框txtResult.setHorizontalAlignment(SwingConstants.RIGHT);//文本框内容右对齐txtResult.setBounds(new Rectangle(33, 19, 310, 34));//自己制定位置坐标长宽(33,39)310 34btnNull.setBounds(new Rectangle(298, 70, 46, 37));btnNull.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12));//设置字体//btnNull.addActionListener(newFrameCalculate_btnNull_actionAdapter(t his);btnFour.setBounds(new Rectangle(33, 120, 46, 37));btnFour.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnFive.setBounds(new Rectangle(101, 120, 46, 37));btnFive.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnSix.setBounds(new Rectangle(167, 119, 46, 37));btnSix.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnDecrease.setBounds(new Rectangle(234, 120, 46, 37));btnDecrease.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));btnBegin.setBounds(new Rectangle(298, 121, 46, 37));btnBegin.setFont(new java.awt.Font("Dialog", Font.PLAIN, 15));btnBegin.addActionListener(newCalculate_btnBegin_actionAdapter(t his));btnOne.setBounds(new Rectangle(33, 172, 46, 37));btnOne.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));btnTwo.setBounds(new Rectangle(101, 172, 46, 37));btnTwo.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));btnThree.setBounds(new Rectangle(167, 172, 46, 37));btnThree.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));btnMultiply.setBounds(new Rectangle(234, 172, 46, 37));btnMultiply.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));btnCancel.setBounds(new Rectangle(298, 172, 46, 37));btnCancel.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12));btnCancel.addActionListener(newCalculate_btnCancel_actionAdapter(this));btnZero.setBounds(new Rectangle(33, 222, 46, 37));btnZero.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));//加载数字0-9的监听事件在进行某一个操作的时候触发某项功能btnZero.addActionListener(newCalculate_btnZero_actionAdapter(this)); btnOne.addActionListener(newCalculate_btnZero_actionAdapter(this)); btnTwo.addActionListener(newCalculate_btnZero_actionAdapter(this)); btnThree.addActionListener(newCalculate_btnZero_actionAdapter(this)); btnFour.addActionListener(newCalculate_btnZero_actionAdapter(this)); btnFive.addActionListener(newCalculate_btnZero_actionAdapter(this)); btnSix.addActionListener(newCalculate_btnZero_actionAdapter(this)); btnSeven.addActionListener(newCalculate_btnZero_actionAdapter(this)); btnEight.addActionListener(newCalculate_btnZero_actionAdapter(this)); btnNine.addActionListener(newCalculate_btnZero_actionAdapter(this));btnMinus.setBounds(new Rectangle(101, 222, 46, 37));btnMinus.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10)); btnMinus.addActionListener(newCalculate_btnMinus_actionAdapter(this)) ;btnPoint.setBounds(new Rectangle(167, 222, 46, 37));btnPoint.setFont(new java.awt.Font("Dialog", Font.PLAIN, 30)); btnPoint.setHorizontalTextPosition(SwingConstants.CENTER);btnPoint.addActionListener(newCalculate_btnPoint_actionAdapter(this));btnDivide.setBounds(new Rectangle(234, 222, 46, 37));btnDivide.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnEqual.setBounds(new Rectangle(298, 222, 46, 37));btnEqual.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));btnEqual.addActionListener(newCalculate_btnEqual_actionAdapter(this));btnIncrease.setBounds(new Rectangle(234, 70, 46, 37)); btnIncrease.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));//加载加减乘除运算符的监听事件btnIncrease.addActionListener(newCalculate_btnIncrease_actionAdapter(this)); btnDecrease.addActionListener(newCalculate_btnIncrease_actionAdapter(this)); btnMultiply.addActionListener(newCalculate_btnIncrease_actionAdapter(this)); btnDivide.addActionListener(newCalculate_btnIncrease_actionAdapter(this)); btnSeven.setBounds(new Rectangle(33, 70, 46, 37));btnSeven.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnEight.setBounds(new Rectangle(101, 70, 46, 37));btnEight.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20)); btnNine.setBounds(new Rectangle(167, 70, 46, 37));btnNine.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));//存放报表内容的容器contentPane.add(btnFive);contentPane.add(btnSix);contentPane.add(btnDecrease);contentPane.add(btnBegin);contentPane.add(btnOne);contentPane.add(btnTwo);contentPane.add(btnThree);contentPane.add(btnMultiply);contentPane.add(btnCancel);contentPane.add(btnMinus);contentPane.add(btnPoint);contentPane.add(btnDivide);contentPane.add(btnEqual);contentPane.add(btnEight);contentPane.add(btnNine);contentPane.add(btnFour);contentPane.add(btnSeven);contentPane.add(btnIncrease);contentPane.add(btnNull);contentPane.add(txtResult);contentPane.add(btnZero);}public void btnZero_actionPerformed(ActionEvent e) {if (flag) { //如果刚刚按下了运算符txtResult.setText("");if (flag1) {//判断之前是否输入了点运算符txtResult.setText("0." + e.getActionCommand());flag1 = false;} else {txtResult.setText(e.getActionCommand());}flag2 = true;} else {int num = txtResult.getText().indexOf(".");if (num < 0 && !txtResult.getText().equals("0")) {txtResult.setText(txtResult.getText() +e.getActionCommand());} else if (num < 0 && txtResult.getText().equals("0")) { txtResult.setText(e.getActionCommand());} else if (num >= 0 && txtResult.getText().equals("0")) { txtResult.setText("0." + e.getActionCommand());} else if (num >= 0 && !txtResult.getText().equals("0")) {txtResult.setText(txtResult.getText() + e.getActionCommand());}}flag = false;flag3=false;}public void btnIncrease_actionPerformed(ActionEvent e) {if(flag3){txtResult.setText(txtResult.getText());op = e.getActionCommand(); //得到刚刚按下的运算符front = txtResult.getText(); //记录加减乘除运算符之前输入的内容}else if (flag2) {ActionEvent ee = new ActionEvent("qq", 1, "pp");btnEqual_actionPerformed(ee);op = e.getActionCommand(); //得到刚刚按下的运算符front = re;flag2 = false;} else {front = txtResult.getText(); //记录加减乘除运算符之前输入的内容op = e.getActionCommand(); //得到刚刚按下的运算符}flag3=false;flag = true; //记录已经按下了加减乘除运算符的其中一个}public void btnEqual_actionPerformed(ActionEvent e) {if(!flag3)//未曾按下等于运算符behind = txtResult.getText();elsefront = re;try {double a1 = Double.parseDouble(front);double b1 = Double.parseDouble(behind);if (op == "+") {result = a1 + b1;} else if (op == "-") {result = a1 - b1;} else if (op == "*") {result = a1 * b1;} else {result = a1 / b1;}Double r = new Double(result);re = r.toString(result);txtResult.setText(re);} catch (ArithmeticException ce) {txtResult.setText("除数不能为零");} catch (Exception ee) {}if (!flag3)flag3 = true;}public void btnPoint_actionPerformed(ActionEvent e) {int num=txtResult.getText().indexOf(".");if(num<0 && !flag)txtResult.setText(txtResult.getText()+e.getActionCommand());if(flag)flag1=true;}public void btnBegin_actionPerformed(ActionEvent e) {//清零运算符事件处理flag=false;flag1=false;flag2=false;flag3=false;front="";behind="";re="";txtResult.setText("0");}public void btnMinus_actionPerformed(ActionEvent e) {//取反运算符事件处理if(txtResult.getText().equals("0")){//如果文本框内容为0txtResult.setText(txtResult.getText());}else if(txtResult.getText().indexOf("-")>=0){//若文本框中含有负号 String a=txtResult.getText().replaceAll("-","");txtResult.setText(a);}else if(flag){txtResult.setText("0");}else{txtResult.setText("-"+txtResult.getText()) }}public void btnCancel_actionPerformed(ActionEvent e) {//退格事件处理方法String str=txtResult.getText();if(str.length() == 1){//如文本框中只剩下最后一个字符,将文本框内容置为0txtResult.setText("0");}if(str.length()>1){str=str.substring(0,str.length()-1);txtResult.setText(str);} }public static void main(String[] args){Calculate fc = new Calculate();fc.setSize(400,310);fc.setLocation(200,150);fc.setVisible(true);}}class Calculate_btnCancel_actionAdapter implements ActionListener { private Calculate adaptee;Calculate_btnCancel_actionAdapter(Calculate adaptee) {this.adaptee = adaptee;}public void actionPerformed(ActionEvent e) {adaptee.btnCancel_actionPerformed(e);}}class Calculate_btnMinus_actionAdapter implements ActionListener { private Calculate adaptee;Calculate_btnMinus_actionAdapter(Calculate adaptee) {this.adaptee = adaptee;}public void actionPerformed(ActionEvent e) {adaptee.btnMinus_actionPerformed(e);}}class Calculate_btnBegin_actionAdapter implements ActionListener {private Calculate adaptee;Calculate_btnBegin_actionAdapter(Calculate adaptee) {this.adaptee = adaptee;}public void actionPerformed(ActionEvent e) {adaptee.btnBegin_actionPerformed(e);}}class Calculate_btnPoint_actionAdapter implements ActionListener {private Calculate adaptee;Calculate_btnPoint_actionAdapter(Calculate adaptee) {this.adaptee = adaptee;}public void actionPerformed(ActionEvent e) {adaptee.btnPoint_actionPerformed(e);}}class Calculate_btnEqual_actionAdapter implements ActionListener {private Calculate adaptee;Calculate_btnEqual_actionAdapter(Calculate adaptee) {this.adaptee = adaptee;}public void actionPerformed(ActionEvent e) {adaptee.btnEqual_actionPerformed(e);}}class Calculate_btnIncrease_actionAdapter implements ActionListener { private Calculate adaptee;Calculate_btnIncrease_actionAdapter(Calculate adaptee) {this.adaptee = adaptee;}public void actionPerformed(ActionEvent e) {adaptee.btnIncrease_actionPerformed(e);}}class Calculate_btnZero_actionAdapter implements ActionListener {private Calculate adaptee;Calculate_btnZero_actionAdapter(Calculate adaptee) {this.adaptee = adaptee;}public void actionPerformed(ActionEvent e) {adaptee.btnZero_actionPerformed(e);}}六、调试过程中的问题计算器的界面多功能还应该更完善。

相关文档
最新文档