当前位置:文档之家› 计算器课程设计

计算器课程设计

计算器设计摘要:本程序设是应用java语言设计在JDK环境下运行编译的计算器系统。

该系统的主要功能就是以鼠标和键盘两种方式均能操作实现整数、浮点数的加、减、乘、除、乘方、三角函数、指数、对数等运算。

关键字:Java计算器1 前言在日常生活中人们总是难以避免的要进行一些运算,当运算比较复杂时没有一个计算器就会显得很麻烦。

为了解决这种日常生活中的困难特意设计了这个计算器系统。

在该系统中不仅可以进行整数的加、减、乘、除等简单运算,也可以进行浮点数的加、减、乘、除等运算。

除此之外还可以进行乘方、三角函数、指数、对数等运算。

人们应用它可以解决日常生活中的一些运算问题,比如做买卖时进行交易的过程中就可以利用该计算器进行数量,价格以及总金额的统计和计算。

学生也可以利用该计算器进行数学运算,解决简单的三角函数运算。

在此次课程设计中我查阅了大量的书籍和信息,并参考了相关的事例让自己的系统更加的完善。

但是毕竟本人知识有限,该系统还有很多不足之处还希望大家能够多多指点。

1.1 系统要求1.设计一个直观的运算器界面。

2.通过点击界面的按钮可以进行数据运算。

3.可通过键盘在输入数据进行数据运算。

4.可实现整型和浮点数的加、减、乘、除等功能。

1.2 课程设计思路设计的界面要求友好而方便,使用户用起来能够得心应手。

该系统应用java语言来实现,具有对整数和浮点数进行加、减、乘、除以及乘方、三角函数、指数、对数等运算。

2 功能模块设计2.1 功能模块的划分界面模块:实现计算器的运算界面,该界面有表示数据的按钮、表示运算浮的按钮和实现键盘输入的文本域和显示运算结果的文本域。

窃听器模块:为每一个按钮安装一个窃听器,当鼠标点击按钮时通过窃听器来判断该按钮代表的是什么数据、实现的是什么运算功能等。

动作响应模块:该模块通过按钮事件,进行对应的处理功能。

其主要是将运算数据存储在一个数组中,然后通过判断运算浮的类型对数组中的数据进行相应的运算。

并将运算结果以String类型在结果显示文本域中显示出来。

主函数模块:调用已经设计好的函数,来实现运算器的全部功能。

2.2 系统流程图根据系统要求和系统功能模块的划分可以得到如图1所示的流程图:图1 程序流程图3.功能模块的实现3.1 计算器界面功能在界面设计中,应用了Frame框架。

Frame是独立于浏览器的可独立运行的主窗口,所以应用Frame框架来设计计算器界面是比较适合的。

将主Frame定义为BorderLayout布局,在Frame框架中定义了两个面板Panel1和Panel2,并将它们分别放在north和center区域中。

在面板Panel1中定义的是一个GridBagLayou布局,因为GridBagLayou布局将显示区域分成许多矩形小单元,每个组件可以占用一个或多个单元,从而可以指定每个组件所占的空间大小。

在Panel1中只添加了一个lable和一个TextField,其作用是用来实现结果显示功能。

Panel1布置在Frame框架的最顶端。

Panel2面板使用的是GridLayout布局,因为GridLayout 布局将容器区域划分成m行*n列,即一个个大小相等的格子。

可以整齐的排列组件。

所以非常适合用来排列计算器中的数字按钮和运算付按钮等。

这样排版的界面就比较整齐美观。

实现该功能的部分代码如下:import java.awt.*;import java.awt.event.*;public class cal extends Frame implements ActionListener{ //继承Frame类和接口ActionListener Button l1=new Button("1");Button l2=new Button("2");…………………………….//定义各种组件Button l0=new Button("0");Button cos=new Button("cos");TextField a1=new TextField(15);Label txt=new Label("运行结果是:");Label tx1=new Label("数字1:");Label tx2=new Label("数字2:");Panel b2=new Panel(new GridLayout(6,4)); //面板b2定义为GridLayout布局Panel b1=new Panel(new GridBagLayout()); //面板b1定义为GridBagLayou布局public cal(String ss) //构造函数{ super(ss);this.setLayout(new BorderLayout()); //将主Frame定义为BorderLayout布局this.add(b1,BorderLayout.NORTH);this.add(b2,BorderLayout.CENTER);b1.add(txt);b1.add(a1);…………………………//在两个面板中添加组件b2.add(l4);3.2 窃听器模块通过继承ActionListener接口来实现事件的监听。

当在Button对象上用鼠标进行点击时。

将发送一个ActionEvent事件。

这个ActionEvent事件会被使用addActionListener()方法进行注册的所有ActionListener的actionPerformed()方法接收。

首先为所有具有事件动作的组件用addActionListener(this)进行监听。

当被监听的组件发生事件时就进行反馈同时进行动作事件处理。

该模块的部分代码如下:………………………b2.add(l1);b2.add(l2);b2.add(l3);b2.add(l4);l1.addActionListener(this);//给对应的按钮添加窃听器l2.addActionListener(this);l3.addActionListener(this);l4.addActionListener(this);……………………b2.add(zhi);b2.add(clz);b2.add(result);b2.add(en);zhi.addActionListener(this);clz.addActionListener(this);result.addActionListener(this);en.addActionListener(this);…………………………3.3 动作响应模块该模块通过actionPerformed(ActionEvent e)函数来实现动作响应事件。

首先通过getSource()来获得当前发生动作的Object,然后根据不同的按钮产生不同的动作响应。

在实现动作响应之前在主类中定义了如下的静态常量:static double a[]=new double[100]; //用来存储数据static int i=0; //用来表示数组a中第几位static int k=0;static int size=0;static int dian=0;//用来表示是否为小数点按钮static int number=1;//用来表示当前表示的是第几个操作数static int num=0;//用来表示小数点后面的第几位数static double all=0; //用来存储最后的运算结果之所以要把它们定义为static类型是为了避免当再次调用动作响应函数时,先前动作产生的效果(存储的数据,小数点的情况等)不会被初始化掉。

之有这样才可以在联系的动作响应下进行正确的数据运算。

以上static常量定义完之后通过以下函数来实现按钮的判断以及数据的存储和数据的运算:public void actionPerformed(ActionEvent e){Object obj=e.getSource();double ss=1;String str,str1,str2;int x;//如果是“键盘输入”按钮if(obj==jian){str1=txt1.getText();//提取txt1和txt2中的字符并存储到str1、str2中str2=txt2.getText();a[i]=Integer.parseInt(str1);//通过数据类型转换将string类型的字符转换成inta[++i]=Integer.parseInt(str2); //并将int数据存储到数组a 中}//如果是数字“1”按钮并且还没有发生“小数点”按钮事件if(obj==l1) { if(dian==0){//如果是第一个操作数表示数字输入没有完成当前输入的数字是前一数字的后一位if(number==1){a[i]=a[i]*10+1.0;}else {//如果是第2个操作数if(size==0) {a[++i]=1.0;size=1;}//是2操作数的第一位//直接存储数据并改变标志位else a[i]=a[i]*10+1.0;}}else { x=num;//若已经发生了“小数点”动作用x记录当前小数点后的位数while(x>=0) //计算当前位数的数量级{ ss=ss/10;x--;}a[i]=ss+a[i];//将当前数据乘于数量级并和前面的数字相加num++;//位数加1}}if(obj==l2)……………….if(obj==l3)………………..if(obj==l4)………………..……………………………if(obj==l0)……………….if(obj==zhi) dian=1;//发生了“小数点”事件时将其打上标记//当发生的是“运算符”按钮事件用k来表示对应的按钮并将之前操作数1的所有有关数据//的标志还原为操作数2的存储做准备if(obj==add) {k=1;number=2;dian=0;num=0;}if(obj==sub) {k=2;number=2;dian=0;num=0;}if(obj==mul) {k=3;number=2;dian=0;num=0;}if(obj==mod) {k=4;number=2;dian=0;num=0;}if(obj==sin) {k=5;number=2;dian=0;num=0;}if(obj==cos) {k=6;number=2;dian=0;num=0;}if(obj==clz) { //当发生“clz”按钮事件时a1.setText(" "); //将结果显示文本域清空for(int j=0;j<=i;j++) a[j]=0;//将数组中存储的全部数据也清空i=0; //其他标志位也全部还原size=0;number=1;dian=0;num=0;}//如果是“=”按钮if(obj==en) {switch(k){ //通过k值来判断其运算符case 1: all=a[i-1]+a[i];break; //k=1实现“+”操作case 2: all=a[i-1]-a[i];break;case 3: all=a[i-1]*a[i];break;case 4: all=a[i-1]/a[i];break;case 5: all=Math.sin(Math.toDegrees(a[i]));break;case 6: all=Math.cos(Math.toDegrees(a[i]));break;}str=" "+all; //将运算结果转换成string类型a1.setText(str);//将结果在文本域中显示出来//清空数组并将所有的标志位还原for(int j=0;j<=i;j++) a[j]=0;i=0;size=0;number=1;dian=0;num=0;}}3.4 主函数模块基于前面三块模板的功能,定义一个主函数用来实现计算器所有的功能。

相关主题