计算器制作实验报告

合集下载

计算器实习报告

计算器实习报告

计算器实习报告计算器实习报告终于走进了大学生活的最后阶段,大学生活马上就要结束了,我们要证明一下自己所学的知识能不能在社会上派上用场,毕业实习就是最好证明自己的方法。

实习是我们从大学走向社会的第一步,为了是让我们今后走向工作岗位后能很快地适应。

实习的方法有很多,可以到各公司去工作实习,也可以在学校里用自己所学的东西做出点实际的东西来。

我的实习就是在学校里用Delphi做了一个简单的程序。

程序虽然小但很实用,就是做一个简单的计算器。

计算器是大家在日常生活中经常用到的,其功能也越来越强大。

在我看来Delphi是一种功能很强大的开发工具,不论是从程序语言结构的严谨性,还是从模块功能的完整性来看都不次与C++。

Delphi语言的结构很有条理,思路很清晰,让人看了一目了然,而且语法结构也很简单,程序设计相对容易。

在日常的数据库管理工作中,Delphi起了很的大的作用,所以对Delphi的学习对我们今后的工作是相当重要的。

Delphi是我最近才开始学的,有很多语句我用的不是很熟练,有的跟本就不会用。

虽然是做一个小小的计算器,但还是困扰了我很长时间。

只能请教懂Delphi的同学和知道老师了。

最后做出的计算器外观是不怎么好看,功能也只有四则运算,但我觉得已经很欣慰了。

不关怎么说毕竟我付出了劳动。

下面是我做的计算器的界面:其源代码如下:unitUnit1; interf-aceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,Buttons,StdCtrls,ExtCtrls;typeTForm1=class( TForm)Panel1:TPanel;Panel2:TPanel;SpeedButton7:TSpeedButton;S peedButton8:TSpeedButton;SpeedButton9:TSpeedButton;SpeedButto n13:TSpeedButton;SpeedButton4:TSpeedButton;SpeedButton5:TSpee dButton;SpeedButton6:TSpeedButton;SpeedButton12:TSpeedButton; SpeedButton1:TSpeedButton;SpeedButton2:TSpeedButton;SpeedButt on3:TSpeedButton;SpeedButton11:TSpeedButton;SpeedButton14:TSp eedButton;SpeedButton15:TSpeedButton;SpeedButton10:TSpeedButt on;StaticText1:TStaticText;SpeedButton0:TSpeedButton;SpeedBut ton16:TSpeedButton;SpeedButton17:TSpeedButton;GroupBox1:TGrou pBox;procedureSpeedButton1Click(Sender:TObject);procedureForm Create(Sender:TObject);procedureSpeedButton11Click(Sender:TOb ject);procedureSpeedButton15Click(Sender:TObject);procedureSp eedButton16Click(Sender:TObject);procedureSpeedButton17Click( Sender:TObject);private{Privatedeclarations}public{Publicdecl arations}end;varForm1:TForm1;restart:Boolean;isfirst:Boolean; fir_num,sec_num:String;sign:integer;result:real;save:String;i mplementation{$R*.dfm}functioncount(sign:integer):real;beginc asesignof1:result:=strtofloat(fir_num)+strtofloat(sec_num);//为加号时2:result:=strtofloat(fir_num)-strtofloat(sec_num);//为减号时3:result:=strtofloat(fir_num)*strtofloat(sec_num);//为乘号时4:begintryresult:=strtofloat(fir_num)/strtofloat(sec_num);//为除号时exceptShowMessage('错误!');form1.close;end;//除数为0时,做出异常处理end; end;end;procedureTForm1.SpeedButton1Click(Sender:TObject);vari:integer; beginifrestartthen//如果是重新开始输入,则清除原来的操作数,并设置isfirst为Truebeginisfirst:=True;fir_num:='';sec_num:='';restart:=False ;end;ifisfirstthen//如果是第一个操作数beginif(senderasTSpeedButton).Caption='.'then//如果输入的是小数点beginif(strlen(pChar(fir_num)) =0)then//如果第一个操作数并未输入fir_num:='0.'elsefori:=1tostrlen(pChar(fir_num))doiffir_num[i ]='.'thenexit;//如果第一个中已含有小数点而又输入小数点,则退出end;if(strlen(pChar(fir_num)) 0)and(fir_num[1]='0')then//如果最高位为0beginif((senderasTSpeedButton).Caption='.')thenfir_num:='0.' elsebeginifstrlen(pChar(fir_num)) 1then//如果是小数,则继续输入fir_num:=fir_num+(senderasTSpeedButton).Captionelsefir_num:=( senderasTSpeedButton).Caption;//如果不是小数,则去掉最高位的0end; endelsefir_num:=fir_num+(senderasTSpeedButton).Caption;StaticTex t1.Caption:=fir_num;end elsebeginif(senderasTSpeedButton).Caption='.'then//如果第二个操作数并未输入beginif(strlen(pChar(sec_num))=0)thensec_num:='0.'elsefori:=1tostrlen(pChar(sec_num))doifsec_num[i]='.'thenexit;//如果第二个中已含有小数点而又输入小数点,则退出end;if(strlen(pChar(sec_num))0)and(sec_num[1]='0')then//如果最高位为0beginif((senderasTSpeedButton).Caption='.')thensec_num:='0.' elsebeginifstrlen(pChar(sec_num)) 1then//如果是小数,则继续输入sec_num:=sec_num+(senderasTSpeedButton).Captionelsesec_num:=( senderasTSpeedButton).Caption;//如果不是小数,则去掉最高位的0end; endelsesec_num:=sec_num+(senderasTSpeedButton).Caption;StaticTex t1.Caption:=sec_num;end;end;procedureTForm1.FormCreate(Sender :TObject);beginStaticText1.Caption:='0.';//设置StaticText1初始显示为0.restart:=False;Isfirst:=True;fir_num:='';sec_num:='';end;procedureTForm1.SpeedButton11Click(Sender:TObject);begini f(fir_num '')and(sec_num '')then//如果两各操作数都不为空beginresult:=count(sign);//调用函数,返回计算结果fir_num:=floattostr(result);sec_num:='';StaticText1.Caption:= floattostr(result);end;sign:=(senderasTSpeedButton).Tag;isfir st:=False;restart:=False;end;procedureTForm1.SpeedButton15Cli ck(Sender:TObject);beginif(sec_num '')then//如果第二个操作数不为空则返回结果beginresult:=count(sign);fir_num:='';fir_num:=fir_num+floatto str(result);StaticText1.Caption:=floattostr(result);sec_num:='';end;restart:=true;end;procedureTForm1.SpeedButton16Click(S ender:TObject);beginrestart:=True;fir_num:='';sec_num:='';sel f.StaticText1.Caption:='0.';end;procedureTForm1.SpeedButton17 Click(Sender:TObject);begin Close; end; end.根据计算器的原理对各按键的功能进行设置,如名称,属性,事件等。

简单计算器实验报告

简单计算器实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

简易计算器实验报告

简易计算器实验报告

简易计算器实验报告简易计算器实验报告引言:计算器是我们日常生活中常用的工具之一。

它可以帮助我们进行简单的数学运算,提高计算的效率。

在本次实验中,我们将设计并制作一台简易计算器,通过实践来掌握计算器的原理和工作原理。

实验目的:1. 了解计算器的基本原理和工作原理;2. 掌握计算器的设计和制作方法;3. 提高动手能力和创造力。

实验材料:1. 电路板;2. 按键;3. LED显示屏;4. 电容;5. 电阻;6. 电源。

实验步骤:1. 连接电路板和电源,确保电路板能够正常工作;2. 将按键连接到电路板上,用于输入数字和运算符;3. 连接LED显示屏,用于显示计算结果;4. 添加电容和电阻,用于控制电路的稳定性和电流;5. 调试电路,确保计算器能够正确运行。

实验结果:经过一番调试,我们成功制作出了一台简易计算器。

它可以进行基本的加减乘除运算,并且在LED显示屏上显示结果。

通过按键输入数字和运算符,我们可以进行各种运算,从而得到我们想要的结果。

这台计算器虽然简单,但是它的实用性和便携性都非常高。

实验分析:在本次实验中,我们主要学习了计算器的基本原理和工作原理。

计算器是通过按键输入数字和运算符,然后经过电路的计算和控制,最终在显示屏上显示结果。

在电路中,电容和电阻的作用是为了保证电路的稳定性和电流的控制。

通过这个实验,我们更加深入地了解了计算器的内部结构和工作原理。

实验总结:通过本次实验,我们成功制作了一台简易计算器,并且对计算器的原理和工作原理有了更深入的了解。

实验过程中,我们不仅提高了动手能力和创造力,还培养了解决问题的能力。

计算器作为一种常见的工具,它的设计和制作过程并不复杂,但是它的实用性和便携性却非常高,为我们的生活带来了很大的便利。

未来展望:通过这次实验,我们对计算器的原理和工作原理有了初步的了解。

在未来,我们可以进一步深入研究计算器的更高级功能和更复杂的电路设计。

同时,我们也可以将这种简易计算器的设计思想应用到其他领域,如电子设备、机器人等,从而提高我们的创造力和创新能力。

大学计实验报告算机

大学计实验报告算机

大学计实验报告算机一、引言计算机实验是大学计算机专业主要的实践环节之一,旨在培养学生动手能力和解决实际问题的能力。

本实验报告将介绍我在大学计算机实验课程中进行的一项实验项目,以及实验过程中的设计思路、实验方法和实验结果等。

二、实验目的本次实验的目的是设计一个简单的计算器程序,实现基本的四则运算功能。

通过这个实验,我们将学习和掌握编程语言中的基本语法、算法设计和软件开发流程等知识。

三、实验环境和工具本次实验的环境是使用C++编程语言,在Windows操作系统下进行开发。

我们使用了Visual Studio代码编辑器和编译器。

四、实验内容我们的计算器程序需要满足以下要求:1.可以进行两个整数之间的加、减、乘、除运算;2.能够处理异常输入,例如除数为0;3.对用户的输入进行合法性检查,确保输入的是数字或者合法的运算符;4.提供友好的用户界面,即使是非技术人员也能够使用;5.可以进行多次计算,直到用户主动选择退出。

五、实验设计为了实现上述要求,我们按照以下步骤进行实验设计:1.设计程序的整体架构,确定分为输入、处理和输出三个模块;2.编写输入模块的代码,读取用户的输入并进行合法性检查;3.编写处理模块的代码,根据用户输入的运算符进行相应的运算;4.编写输出模块的代码,将计算结果显示在用户界面上;5.测试程序是否能够正确处理各种输入情况,并进行错误输入的异常处理。

六、实验步骤1.创建一个新的C++项目,并设置好相关的编译选项;2.编写程序的主要逻辑,包括输入、处理和输出模块;3.编写输入模块的代码,根据用户的输入进行合法性检查;4.编写处理模块的代码,根据运算符进行相应的运算;5.编写输出模块的代码,打印出计算结果;6.进行功能测试和异常输入测试,确保程序的正确性和鲁棒性;7.对程序进行性能测试,评估程序的性能。

七、实验结果经过多次测试和调试,我们的计算器程序能够正确处理各种输入情况,并能够返回正确的计算结果。

c语言实验报告计算器

c语言实验报告计算器

c语言实验报告计算器C 语言实验报告计算器一、实验目的本次 C 语言实验的主要目的是通过编写程序实现一个简单的计算器功能,加深对 C 语言基本语法、数据类型、控制结构和函数的理解和运用,提高编程能力和解决实际问题的能力。

二、实验要求1、实现基本的四则运算(加、减、乘、除)功能。

2、能够处理用户输入的合法表达式,并输出计算结果。

3、具备错误处理能力,如除数为 0 、输入不合法等情况。

三、实验环境本次实验使用的编程环境是 Visual Studio Code,编译器为 GCC。

四、算法设计与思路(一)整体思路首先,需要从用户那里获取输入的表达式。

然后,对表达式进行解析和计算。

在计算过程中,需要根据运算符的优先级进行相应的运算。

为了实现这个过程,可以使用栈来存储运算符和操作数。

(二)具体算法1、定义一个栈来存储运算符,另一个栈来存储操作数。

2、逐字符读取输入的表达式。

如果是数字字符,则将其转换为数字并压入操作数栈。

如果是运算符,则根据运算符的优先级进行处理。

如果当前运算符的优先级高于栈顶运算符的优先级,则将其压入运算符栈。

否则,从操作数栈中弹出两个操作数,从运算符栈中弹出一个运算符,进行相应的运算,并将结果压入操作数栈。

3、当表达式读取完毕后,依次从运算符栈和操作数栈中弹出元素进行计算,直到运算符栈为空,此时操作数栈中的唯一元素即为表达式的计算结果。

五、代码实现```cinclude <stdioh>include <stdlibh>include <ctypeh>//定义栈的最大容量define MAX_SIZE 100//定义操作符栈typedef struct {char itemsMAX_SIZE;int top;} OperatorStack;//定义操作数栈typedef struct {double itemsMAX_SIZE;int top;} OperandStack;//初始化操作符栈void initOperatorStack(OperatorStack stack) {stack>top =-1;}//初始化操作数栈void initOperandStack(OperandStack stack) {stack>top =-1;}//判断操作符栈是否为空int isOperatorStackEmpty(OperatorStack stack) {return stack>top ==-1;}//判断操作数栈是否为空int isOperandStackEmpty(OperandStack stack) {return stack>top ==-1;}//操作符入栈void pushOperator(OperatorStack stack, char op) {if (stack>top < MAX_SIZE 1) {stack>items++stack>top = op;} else {printf("Operator stack overflow!\n");exit(1);}}//操作数入栈void pushOperand(OperandStack stack, double num) {if (stack>top < MAX_SIZE 1) {stack>items++stack>top = num;} else {printf("Operand stack overflow!\n");exit(1);}}//操作符出栈char popOperator(OperatorStack stack) {if (!isOperatorStackEmpty(stack)){return stack>itemsstack>top;} else {printf("Operator stack underflow!\n");exit(1);}}//操作数出栈double popOperand(OperandStack stack) {if (!isOperandStackEmpty(stack)){return stack>itemsstack>top;} else {printf("Operand stack underflow!\n");exit(1);}}//获取操作符的优先级int getPriority(char op) {switch (op) {case '+':case '':return 1;case '':case '/':return 2;default:return -1;}}//计算表达式double calculate(char expression) {OperatorStack opStack;OperandStack numStack; initOperatorStack(&opStack);initOperandStack(&numStack);int i = 0;while (expressioni!='\0'){if (isdigit(expressioni)){double num = 0;while (isdigit(expressioni)){num = num 10 +(expressioni '0');i++;}if (expressioni ==''){double fraction = 01;i++;while (isdigit(expressioni)){num +=(expressioni '0') fraction; fraction /= 10;i++;}}pushOperand(&numStack, num);} else if (expressioni =='('){pushOperator(&opStack, expressioni);i++;} else if (expressioni ==')'){while (opStackitemsopStacktop!='('){double num2 = popOperand(&numStack);double num1 = popOperand(&numStack);char op = popOperator(&opStack);if (op =='+'){pushOperand(&numStack, num1 + num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op =='/'){if (num2 == 0) {printf("Division by zero!\n");exit(1);}pushOperand(&numStack, num1 / num2);}}popOperator(&opStack);i++;} else {while (!isOperatorStackEmpty(&opStack) &&getPriority(opStackitemsopStacktop) >= getPriority(expressioni)){double num2 = popOperand(&numStack);double num1 = popOperand(&numStack);char op = popOperator(&opStack);if (op =='+'){pushOperand(&numStack, num1 + num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op =='/'){if (num2 == 0) {printf("Division by zero!\n");exit(1);}pushOperand(&numStack, num1 / num2);}}pushOperator(&opStack, expressioni);i++;}}while (!isOperatorStackEmpty(&opStack)){double num2 = popOperand(&numStack);double num1 = popOperand(&numStack);char op = popOperator(&opStack);if (op =='+'){pushOperand(&numStack, num1 + num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op =='/'){if (num2 == 0) {printf("Division by zero!\n");exit(1);}pushOperand(&numStack, num1 / num2);}}return popOperand(&numStack);}int main(){char expression100;printf("Enter an expression: ");scanf("%s", expression);double result = calculate(expression);printf("Result: %f\n", result);return 0;}```六、实验结果与分析(一)测试用例及结果以下是一些测试用例及其对应的结果:1、输入:"2 + 3",输出:50000002、输入:"5 2",输出:30000003、输入:"3 4",输出:120000004、输入:"6 / 2",输出:30000005、输入:"2 + 3 4",输出:140000006、输入:"(2 + 3) 4",输出:200000007、输入:"5 / 0",输出:Division by zero!(二)结果分析从测试结果来看,程序能够正确计算基本的四则运算表达式,包括有括号的情况。

嵌入式--计算器--实验报告

嵌入式--计算器--实验报告

嵌入式--计算器--实验报告本页仅作为文档页封面,使用时可以删除This document is for reference only-rar21year.March计算器设计实验报告一、实验设计主要分工04009320 文斌:算法设计,LCD显示。

04** 张希:界面(按钮控件)设计,文件内容读取。

共同调试、完善设计。

二、程序设计实现功能效果(1)支持整数、小数基本加减乘除运算;(2)有优先级的判别计算。

优先级由高到低一次为括号运算、乘除运算、加减运算。

(3)支持键盘输入和触摸屏输入;(4)能读取指定目录下文本内容(内容为计算表达式)并计算得出结果,将内容和结果显示在LCD上。

程序任务开始后,等待键盘或触摸屏的输入。

输入键有0~9数字键、+-*/()运算符、del退格键、clear清屏键、read读指定目录文本内容并计算键、enter'='键、‘.’小数点键。

每当有字符输入时,触摸屏相应键显示“AAA”,100ms后恢复原相应按键符号,同时LCD屏幕上显示相应字符。

当输入'del'键时,屏幕显示去掉最后一位字符。

当输入'='号后,得出计算结果,结果显示于表达式的下一行。

若是除零错误,则结果显示为“/0ERROR!”。

若有非法字符(触摸点不能识别为设计按键符则视为非法字符),则结果输出为“Syntax Error!!”。

若表达式有运算符连续输入,则忽略前面的运算符,只取最后一位运算符计算,正常显示数字结果。

当输入'clear'键时,情况显示区域。

当输入'read'键时,从指定目录文本文件中读取表达式并计算。

将表达式内容和计算结果显示在LCD上。

LCD显示界面如下:三、程序算法实现1、计算算法首先将输入的0~9数字、+-*/()运算符的内容存储于一个全局变量cal[number]中,表达为中缀表达式。

用void str2repol()函数,将输入字符串cal[number]转换成逆波兰表达式并存于全局数组char repol[maxs]中。

计算器设计实验报告

计算器设计实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实验报告计算器

实验报告计算器

实验报告||实验名称计算器课程名称面向对象程序设计(JAVA)||一、实验目的综合应用所学的知识分析问题、解决问题,提高实际编程能力及程序调试能力。

二、实验内容及要求用图形界面GUI编程,编写一个能够实现加减乘除的简单的计算器,要求使用监听类,还要能够连续加减,有清除功能,能够准确的计算出正确结果。

三、实验仪器与设备计算机,JDK,我用的是eclipse。

四、问题分析与系统设计问题分析:首先需要把图形界面设计出来,给组件注册监听器,转换事件信息,实现对数据的加、减、乘、除等计算器的基本的功能设计思想与设计结果:在主类Caculater中使用监听内部类 MyMonitor 对各个组件进行监听,在MyMonitor中对按键信息进行分类处理(数字,算术符号,功能键)。

数据成员主要有各个按钮以及计算器的各个状态(如初始状态等)。

成员函数有:1、对退格键的处理:backSpace() 2、对算是符号的处理:operater() 3、将数字字符串转换成数字:getDate()五、实验结果相反数、平方根等功能,能够将图形界面设计出来给注册监听器,实现界面与基本实现了简单的的加、减、乘、除以及倒数和取内部代码结合。

六、总结与体会1·我以前不清楚界面与内部代码是怎么连接的,现在知道了。

还学会简单的GUI编程,能够实现对界面进行布局2·跟c++有很大的不同,java多了许多的包,类呀,这样是编译快捷而且安全正确,学会使用了内部类,懂得了事件的响应以及如何处理事件。

3·锻炼了编程的逻辑思维,能够对数据进行逻辑的处理以及对整个程序的逻辑部署4·还知道了要想吧java学好是很难的,里面有许许多多的包,类。

要想好好运用java 就必须运用好java类包,java的简单编程只是基础,掌握系统提供的package和class 才是成为java厉害者的必经之路。

附件:源程序清单import java.awt.BorderLayout;import java.awt.Button;import java.awt.Color;import java.awt.Frame;import java.awt.GridLayout;import java.awt.Panel;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.ArrayList;import java.util.List;public class Caculator extends Frame {List<String> list = new ArrayList<String>();public static int step = 0; // 处理刚开始第一次计算的时候dataResult为零的问题private String command[] = { "BackSpace", "CE", "C" };private String normal[] = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };private String special[] = { "", "MC", "MR", "MS", "M+" };private boolean firstInput = true;private boolean legal = true;private double dataResult = 0;private String s = null;private TextField tf = new TextField();private Button bn[] = new Button[normal.length]; private Button bc[] = new Button[command.length]; private Button bs[] = new Button[special.length]; private Mymonitor mn = new Mymonitor();public static void main(String[] args) {CouterClient cc = new CouterClient();unchFrame();}public void launchFrame() {this.setLocation(200, 250);this.setBackground(Color.blue);this.setTitle("计算器");this.setSize(300, 400);this.setResizable(false);this.setLayout(new BorderLayout(2, 2));this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);}});Panel pn = new Panel(new GridLayout(4, 5, 2, 2));for (int i = 0; i < normal.length; i++) {bn[i] = new Button(normal[i]);bn[i].addActionListener(mn);pn.add(bn[i]);}Panel pc = new Panel(new GridLayout(1, 3, 2, 2));for (int i = 0; i < command.length; i++) {bc[i] = new Button(command[i]);bc[i].addActionListener(mn);pc.add(bc[i]);}Panel ps = new Panel(new GridLayout(5, 1, 2, 2));for (int i = 0; i < special.length; i++) {bs[i] = new Button(special[i]);bs[i].addActionListener(mn);ps.add(bs[i]);}Panel p = new Panel(new BorderLayout(2, 2));p.add(BorderLayout.NORTH, pc);p.add(BorderLayout.CENTER, pn);tf.setEditable(false);tf.setBackground(Color.white);this.add(BorderLayout.CENTER, p);this.add(BorderLayout.WEST, ps);this.add(BorderLayout.NORTH, tf);tf.setText("0");this.setVisible(true);this.pack();}private class Mymonitor implements ActionListener {public void actionPerformed(ActionEvent e) {s = e.getActionCommand();if (s.equals(command[2])) { // 按下了 C 键时归零计算器回到最初的状态tf.setText("0");firstInput = true;legal = true;dataResult = 0;step = 0;} else if (s.equals(command[1])) { // 按下 CE 键时,显示零tf.setText("0");firstInput = true;} else if (s.equals(command[0])) { // 按下退格键时backSpace();} else if ("0123456789.".indexOf(s) >= 0) {if (firstInput) {tf.setText(s);}if (firstInput && s.equals(".")) {tf.setText("0.");firstInput = false;} else if (!firstInput) {if (s.equals(".")) {if (tf.getText().indexOf(".") <= 0) {tf.setText(tf.getText() + s);} else {String str = (tf.getText() + s).substring(0, tf.getText().length());tf.setText(str);}} else {tf.setText(tf.getText() + s);}} else if (firstInput && !s.equals(".")) {firstInput = false;}} else {operator(s);}}}public void operator(String key) {if (key != "=")list.add(key);if (key.equals("+")) {this.dataResult += getData();} else if (key.equals("-")) {if (step == 0) {this.dataResult = getData();step++;} else {this.dataResult -= getData();}} else if (key.equals("*")) {if (step == 0) {this.dataResult = getData();step++;} else {this.dataResult *= getData();}} else if (key.equals("/")) {if (step == 0) {this.dataResult = getData();step++;} else {if (getData() == 0) {tf.setText("除数不能是0!请按C键重新开始输入");this.legal = false;} else {this.dataResult /= getData();}}} else if (key.equals("+/-")) {this.dataResult = -1 * getData();} else if (key.equals("sqrt")) {if ((this.dataResult = getData()) > 0) {this.dataResult = Math.sqrt(this.dataResult);} else {tf.setText("负数没有平方根");}} else if (key.equals("1/x")) {this.dataResult = getData();if (this.dataResult == 0) {tf.setText("0没有倒数");} else {this.dataResult = 1 / this.dataResult;}} else if (key.equals("=") && this.legal) {this.operator(list.get(list.size() - 1));this.firstInput = true;step = 0;}if (legal) {long l = (long) this.dataResult;double d;d = this.dataResult - l;if (d == 0) {tf.setText("" + l);} else {tf.setText("" + this.dataResult);}this.firstInput = true;if (key == "=")this.dataResult = 0;}}public void backSpace() {if (firstInput) {tf.setText("0");firstInput = true;} else {if (tf.getText().length() >= 1) {String temp = tf.getText().substring(0,tf.getText().length() - 1);tf.setText(temp);if (tf.getText().length() == 0) {tf.setText("0");this.firstInput = true;}}}}public double getData() {double result = 0;try {result = Double.valueOf(tf.getText()).doubleValue();} catch (NumberFormatException e) {tf.setText("0");firstInput = true;legal = true;dataResult = 0;}return result;}}。

计算器实验报告

计算器实验报告

实验一计算器的制作一.实验要求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进行判断。

计算器实验报告

计算器实验报告

键盘控制 输入模块

单片机
LCD 显示模块
1、键盘控制模块 键盘采用 4*4 矩阵键盘实现按键的控制。键盘可以输入数字 0 到 9 和“+” 、 “-” 、 “*” 、 “/”运算符。
2、单片机模块 这个设计采用 89C51 单片机作为控制单元。 主要性能参数: 与 MCS-51 产品指令系统完全兼容 4k 字节可重擦写 Flash 闪速存储器 1000 次擦写周期 全静态操作 0Hz-24MHz 三级加密程序存储器 128×8 字节内部 RAM 32 个可编程 I/O 口线 2 个 16 位定时/计数器 6 个中断源 可编程串行 UART 通道 低功耗空闲和掉电模式
write_com(0x06);//设置光标读写后自动加一 write_com(0x01);//清屏 write_com(0x80);//LCD 地址指向第一行开头 for(i=0;i<4;i++) write_date(str[i]); delay(1000); write_com(0x01);//清屏 } void write_com(uchar com)//向 lcd 写命令 { lcdrs=0; P0=com; lcde=1; delay(10); lcde=0; } void write_date(uchar date)//向 lcd 写数据 { lcdrs=1; P0=date; lcde=1; delay(10); lcde=0; } void delay(uint z)//延时 { uchar y; uint x; for(x=z;x>0;x--) for(y=110;y>0;y--); } uchar keyscan() { uchar temp=0,num1=0,i=0,j=0; temp=0xef; for(i=0;i<4;i++) { P1=temp; num1=P1;//读按键状态 num1=num1&0x0f; temp=_crol_(temp,1);//循环扫描 if(num1!=0x0f) { delay(50);//消抖

计算器设计实验报告

计算器设计实验报告

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

它能够进行基本的数学运算,如加减乘除,以及更复杂的科学计算,如对数、三角函数等。

本实验旨在设计一个简单的计算器,以了解计算器的工作原理,并通过实践来提高我们的电子设计和编程能力。

第二部分:设计思路在设计计算器之前,我们首先需要确定所需的功能和要使用的技术。

基于我们的目标是设计一个简单的计算器,我们决定使用数字显示屏、按键和微控制器来实现。

数字显示屏是用于显示计算结果和用户输入的设备,我们选择了七段数码管作为显示器。

按键则用于接收用户输入的数字和操作符。

微控制器是计算器的核心部件,它负责接收按键输入,进行计算,并将结果显示在数码管上。

第三部分:实验步骤1. 硬件设计我们首先设计了数字显示屏的电路。

通过连接七段数码管和相应的电阻,我们能够控制数码管的亮灭,从而显示不同的数字和符号。

接下来,我们设计了按键的电路。

每个按键都与微控制器的引脚相连,当按键被按下时,引脚会接收到一个电平信号,微控制器通过检测引脚状态来确定用户的输入。

2. 软件编程在硬件设计完成后,我们开始编写微控制器的程序。

程序的主要任务是接收按键输入,并根据用户的操作进行相应的计算。

首先,我们设置了一个变量来存储用户的输入,然后通过检测按键状态来更新这个变量。

当用户按下数字键时,程序将数字添加到变量中;当用户按下操作符键时,程序将根据当前的操作符和变量进行相应的计算。

最后,程序将计算结果显示在数码管上。

我们使用了一个函数来将计算结果转换为七段数码管的控制信号,并通过相应的引脚将信号发送到数码管。

第四部分:实验结果经过一段时间的设计和调试,我们成功地完成了计算器的制作。

它能够准确地接收用户的输入,并进行相应的计算。

计算结果也能够正确地显示在数码管上。

我们进行了一系列测试来验证计算器的功能和性能。

测试包括基本的加减乘除运算,以及一些复杂的科学计算,如对数和三角函数。

简易计算器实验报告

简易计算器实验报告

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

二、实验原理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、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。

计算器界面制作实训报告

计算器界面制作实训报告

一、引言随着计算机技术的不断发展,软件编程已经成为计算机科学领域的基础技能之一。

为了提高我的编程能力,我参加了本次计算器界面制作的实训。

通过本次实训,我不仅学习了计算器界面的设计方法,还提升了面向对象编程和图形用户界面(GUI)开发的能力。

二、实训目的1. 掌握计算器界面的设计方法。

2. 熟悉面向对象编程的基本思想。

3. 提高图形用户界面(GUI)开发技能。

4. 培养团队协作和沟通能力。

三、实训内容本次实训要求我独立完成一个简易计算器的界面设计,包括以下功能:1. 数字输入:支持输入0-9的数字。

2. 运算符输入:支持加、减、乘、除四则运算。

3. 结果显示:实时显示计算结果。

4. 清除功能:清除输入的数字和运算符。

四、实训过程1. 需求分析:首先,我分析了计算器的功能需求,明确了界面设计的基本框架。

2. 界面设计:根据需求分析,我设计了一个简洁明了的计算器界面,包括数字键盘、运算符按钮、结果显示区域和清除按钮。

3. 编程实现:- 面向对象编程:我采用了面向对象编程的思想,将计算器界面划分为多个类,如数字按钮类、运算符按钮类、结果显示区域类等。

- 图形用户界面(GUI)开发:我使用了Java Swing库中的组件来实现计算器界面,包括JFrame、JButton、JTextField等。

4. 功能实现:- 数字输入:我为数字按钮设置了监听器,当用户点击按钮时,将数字显示在结果显示区域。

- 运算符输入:我为运算符按钮设置了监听器,当用户点击按钮时,将运算符存储在变量中。

- 结果显示:根据输入的数字和运算符,计算结果并显示在结果显示区域。

- 清除功能:我为清除按钮设置了监听器,当用户点击按钮时,清空输入的数字和运算符。

5. 调试与优化:在编程过程中,我遇到了一些问题,如按钮点击事件处理、界面布局等。

通过查阅资料和请教同学,我逐步解决了这些问题,并对程序进行了优化。

五、实训总结1. 技术收获:通过本次实训,我掌握了计算器界面的设计方法,熟悉了面向对象编程和图形用户界面(GUI)开发技能。

简易计算器实验报告

简易计算器实验报告

目录1.概述 (1)2.系统软件设计 (1)2.1设计目标和实现方法 (1)2.2整体方案论证 (1)3.系统硬件的设计 (2)3.1复位电路的设计 (2)3.2时钟振荡器电路的设计 (3)3.3输入电路的设计 (4)3.4输出电路的设计 (7)4.系统程序的设计与介绍 (9)4.1读键输入程序流程图设计 (9)4.2 LED显示程序流程图设计 (11)4.3主程序流程图设计 (12)5.程序设计体会........................................... . (12)附 1 源程序代码 (14)附 2 计算器电路图 (24)1.概述随着社会的发展,科学的进步,人们的生活水平在逐步地提高,尤其是微电子技术的发展犹如雨后春笋般的变化。

电子产品的更新速度快就不足惊奇了。

计算器在人们的日常中是比较常见的电子产品之一,如何使计算器技术更加的成熟,充分利用已有的软件和硬件条件,设计出更出色的计算器,使其更好地为各个行业服务,成了如今电子领域重要的研究课题。

现如今,人们的日常生活中已经离不开计算器了,社会的各个角落都有它的身影,比如商店、办公室、学校……因此设计一款简单实用的计算器会有很大的实际意义。

本设计旨在进一步掌握单片机理论知识,理解嵌入式单片机系统的硬软件设计,加强对实际应用系统设计的能力。

通过本设计的学习,使我掌握单片机程序设计和微机接口应用的基本方法,并能综合运用本科阶段所学软、硬件知识分析实际问题,提高解决毕业设计实际问题的能力,为单片机应用和开发打下良好的基础。

1、对字符液晶显示模块的工作原理,如初始化、清屏、显示、调用及外特性有较清楚的认识,并会使用LCD(液晶显示模块)实现计算结果的显示;掌握液晶显示模块的驱动和编程,设计LCD和单片机的接口电路,以及利用单片机对液晶显示模块的驱动和操作;2、在充分分析内部逻辑的概念,进行软件和调试,学会使用,并能够以其为平台设计出具有四则运算能力简易计算器的硬件电路和软件程序。

计算器_实验报告

计算器_实验报告

一、实验目的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)通过学习计算器的基本原理和设计方法,掌握了计算器程序的设计与实现。

计算器实习报告

计算器实习报告

单片机实习报告学院:xx专业:2班号:4学号:4姓名:11指导老师:报告目录:1.元器件的购买,电路板的焊接情况2.实习项目:基于STC89C52单片机的计算器设计(1)计算器的功能概述(2)计算器的各部分功能介绍1)1602液晶电路和程序2)芯片AT89S52电路图3)扫面键盘及程序4)外围电路图(3)计算器程序设计流程图(4) 计算器程序详细设计3.编写程序遇到的问题及解决办法4.计算器制作过程中的心得体会5.计算器的源程序(附录)一.元器件购买和焊接1.购买过程;开发板元器件的购买总共用了三次才买完,第一次是我和宿舍几个同学一起去购买,我们来到华中电子市场,在伟芯电子购买基本的元器件,我将清单给老板,然后他就帮我们找到了所需要的元器件,我们将买到的元器件分成几份,每人拿一份,在买二脚蓝色插座时老板说不够,我们就去旁边的店购买也没有,于是我们就购买了几个三脚蓝色插座代替,也就是将三脚蓝色插座的旁边一个脚拆掉了,这样就代替了二脚插座。

在焊接完买回来的元器件后,发现少了多个200欧姆电阻和0.1微法的瓷片电容,于是我们便再来到这里购买,在老板拿来电阻后,我们就用万用表测电阻的大小,是200欧,之后我们便回去继续焊接。

2.电路板的焊接心得体会如果电烙铁长时间的接触焊接管脚肯定会损坏IC芯片的。

贴片IC有专门的焊锡膏及吹焊器具。

首先,工具上对你的电烙铁的电烙头要保护好,不要出现黑色的氧化物,如果有就磨掉磨掉后马上粘松香补焊锡。

焊锡的选取上,你尽量选取焊丝中间加有助焊剂的焊丝,焊丝表面应该光亮。

其次,焊接时将元器件管脚对应好焊接电路板的焊接位置上,接着先将焊丝接触然后电烙头从下至上的较快速的上锡,焊接出来的焊点应该饱满,这样才减少或避免虚焊。

在焊接的过程中,先焊接电阻,底座,在焊接底座的时候不要将芯片插上去,以免高温将芯片烧坏,在焊接基本完成后,我就将芯片插上去,后来拔芯片的时候用力过大,将ADC0809的引脚折断了两根,于是我又到华中电子市场花12元购买了一个,完成了开发板。

安卓计算器实验报告

安卓计算器实验报告

安卓计算器实验报告一、实验目的本次实验的目的是开发一款功能齐全、操作便捷的安卓计算器应用程序,以满足用户在日常生活和工作中对基本计算和科学计算的需求。

二、实验环境1、操作系统:Windows 102、开发工具:Android Studio3、编程语言:Java 和 XML4、测试设备:安卓手机(型号:_____ ,操作系统版本:_____ )三、实验步骤(一)需求分析在开始开发之前,对计算器的功能需求进行了详细的分析。

确定了以下主要功能:1、基本四则运算(加、减、乘、除)2、百分比计算3、平方根计算4、幂运算5、括号优先级计算6、历史记录功能7、清除和撤销操作(二)界面设计使用 XML 布局文件设计计算器的用户界面。

界面包括数字按钮、运算符按钮、等号按钮、清除按钮、撤销按钮和显示计算结果和表达式的文本框。

(三)功能实现1、数字和运算符的点击事件处理为每个数字按钮和运算符按钮设置点击事件监听器。

当用户点击数字按钮时,将数字添加到表达式中;点击运算符按钮时,根据当前的计算状态进行相应的处理。

2、计算逻辑使用 Java 中的数学运算方法实现四则运算、百分比计算、平方根计算和幂运算。

根据运算符的优先级进行计算,确保计算结果的准确性。

3、括号处理通过栈数据结构来处理括号,确保括号内的表达式先计算。

4、历史记录使用数据库来存储计算的历史记录,包括表达式和结果。

用户可以查看历史记录,并重新使用其中的表达式进行计算。

5、清除和撤销操作实现清除按钮的功能,将表达式和结果清空;撤销按钮的功能则是回退上一步的操作。

(四)测试与优化1、功能测试对计算器的各项功能进行了全面的测试,包括基本运算、复杂表达式计算、括号计算、历史记录查看等。

确保每个功能都能正常工作,计算结果准确无误。

2、性能测试对计算器的响应速度进行了测试,优化了计算算法和数据结构,提高了计算的效率。

3、兼容性测试在不同型号和操作系统版本的安卓手机上进行了测试,确保计算器应用在各种设备上都能正常运行,界面布局合理。

计算器设计实验报告

计算器设计实验报告

一、实验目的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)。

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

2.控件的焦点以及Tab键的设置和使用
3.多个控件(按钮)事件的共享
4.键盘的事件的应用
二. 设计思路
1.创建主体框架:建立程序的主要界面后,系统自动生成界面的主要窗
口生成代码。

对于每个按钮的的代码段中,分别添加事件触发的处理代码。

设置两个textBox,一个显示表达式,一个显示运算结果。

2数字1-9,小数点,运算符号的按键的事件处理都是在textBox1中分别添加相对应的数字字符,把数字当成是字符串处理。

用赋值语句进行添加。

每次点击后textBox1的显示内容变为一个新的表达式。

3四则运算时采用compute方法直接计算表达式。

该方法功能强大,优先级和运算规则皆宜考虑在内。

但是上次计算的结果不能直接运算,利用括号的作用排除了这一问题。

4三角函数的运算,调运Math类中的方法。

5小数点,归零键,和删除键需仔细设置。

6每个运算方法均用try-catch语句处理异常,异常用MessageBox进行提示,确保程序运行正常。

三核心代码
1 数字1-9,小数点,运算符号的按键的事件处理都是在textBox1中分别添加相对应的数字字符
if (textBox1.Text != "0")
{
textBox1.Text += button8.Text;
}
else
{
textBox1.Text = button8.Text;
}
2 四则运算
{
try
{
DataTable shi = new DataTable();
textBox2.Text = pute(textBox1.Text, "").ToString();//利用Compute方法进行四则用算
textBox1.Text = "(" + textBox1.Text + ")";//为表达式加上括号,使上一步的计算结果直接参与下一步计算
}
catch (Exception err)
{
MessageBox.Show("请检查表达式, 错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
3 三角函数计算
try
{
DataTable shi = new DataTable();
String b = pute(textBox1.Text, "").ToString();
double a = double.Parse(b);
textBox2.Text = Math.Cos(a).ToString();
}//将表达式运算后的结果,进行cos运算;故可直接计算表达式
catch (Exception err)
{
MessageBox.Show("请检查表达式, 错误, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
4 小数点判定
if (textBox1.Text.Contains("."))
{
MessageBox.Show("不能有两个小数点, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}//对是否有两个小数点进行判定
else
{
if (textBox1.Text.Length != 0)
{
textBox1.Text += button20.Text;
}
else
{
textBox1.Text = "0.";//防止小数点出现在开头
}
}
5 设置后退键
int r=textBox1.Text.Length;
if (r > 1)
{
textBox1.Text = textBox1.Text.Remove(r - 1);//删除最右边的字符}
else
{
textBox1.Text = "";//只剩一个字符时直接为空?
}
}//设置后退键
6 设置归零键
textBox1.Text = "";
textBox2.Text = "";
}//归零键设置:使表达式结果为空
四程序运行后如图1 四则运算
2 上一步计算结果直接进行三角运算
五实验总结
1首次亲自做出一个计算器,感觉颇有成就感。

在制作的过程中,才深刻感受到面向对象的真正含义。


如设置小数点的代码时,需要考虑实际操作过程中的各
种情况,再逐一解决。

这种设计思想的确高效快捷。

2之前只学过Java的控制台程序,故首次学习VS窗体程序感觉比较陌生。

通过这次的学习有了大致的了
解,也对VS强大的功能感到震撼,比如try-catch异常
处理语句颇为实用;并产生了浓厚的兴趣,希望自己也
可以设计更多实用软件。

3觉得学习编程语言一方面需掌握一下处理基本事件的方法,如如何获得输入的字符串等;另一方面,需要
对软件本身提供的各类方法有一定映像,比如本实验中
应用的compute方法,可以提高很大效率。

4有个疑问,设置后退键时,能否设置其事件为触发键盘事件,即按下Ctrl+Z作用?还没设置成功,但会继
续探讨。

相关文档
最新文档