计算器设计的java课程设计报告.docx

上传人:b****7 文档编号:9129905 上传时间:2023-02-03 格式:DOCX 页数:28 大小:162.19KB
下载 相关 举报
计算器设计的java课程设计报告.docx_第1页
第1页 / 共28页
计算器设计的java课程设计报告.docx_第2页
第2页 / 共28页
计算器设计的java课程设计报告.docx_第3页
第3页 / 共28页
计算器设计的java课程设计报告.docx_第4页
第4页 / 共28页
计算器设计的java课程设计报告.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

计算器设计的java课程设计报告.docx

《计算器设计的java课程设计报告.docx》由会员分享,可在线阅读,更多相关《计算器设计的java课程设计报告.docx(28页珍藏版)》请在冰豆网上搜索。

计算器设计的java课程设计报告.docx

计算器设计的java课程设计报告

华东交通大学课程设计

 

课程设计题目:

计算器设计

 

 

课程设计(论文)任务书

基础 学  院  信息与计算科学 专  业 2010—1 班

一、课程设计(论文)题目 计算器的设计 

二、课程设计(论文)工作自2013年6月23日起至2013年6月27日止。

三、课程设计(论文)地点:

计算机中心

四、课程设计(论文)内容要求:

1.本课程设计的目的

(1)使学生掌握系统各功能模块的基本工作原理;

(2)掌握Java的基本编程原理和基本的编程方法;

(3)使学生学会系统调试;

(4)培养学生分析、解决问题的能力;

(5)提高学生的软件文档写作能力和团队合作精神。

2.课程设计的任务及要求

1)基本要求:

(1)分析系统各功能模块的工作原理;

(2)提出系统的设计方案;

(3)对所进行编程、调试、修改。

2)创新要求:

在基本要求达到后,可进行创新设计,如:

用虚函数,文件流,重载流插入运算符等。

3)课程设计论文编写要求

(1)要按照书稿的规格打印誊写设计论文;

(2)论文包括目录、摘要、正文、总结等;

(3)毕业论文装订按学校的统一要求完成。

4)答辩与评分标准:

(1)达到课程设计的目的与要求,程序的可读性较好,并调试正确,60分;

(2)能正确回答老师所提问题,可增加10分;

(3)课程设计报告书写规范整齐,可增加10分;

(4)心得体会认真总结,可增加10分;

(5)程序有创新性,可增加10分;

成绩评定实行优秀、良好、中等、及格和不及格五个等级。

不及格者需重做。

5)参考文献:

(1)丁振凡.《Java语言程序设计》清华大学出版社

(2)丁振凡.《Java语言程序设计实验指导与习题解析》清华大学出版社

(3)http:

//

6)课程设计进度安排

内容天数     地点

总体需求与分析构思及收集资料1     图书馆

各模块的编程实现,调试与修改3    机房

撰写论文与答辩1    图书馆,机房

学生签名:

2013年6月18日

 

课程设计(论文)评审意见

(1)态度评价(20分):

优( )、良( )、中( )、一般( )、差( );

(2)任务难度(20分):

优( )、良( )、中( )、一般( )、差( );

(3)设计分析(20分):

优( )、良( )、中( )、一般( )、差( );

(4)创新性评价(20分):

优( )、良( )、中( )、一般( )、差( );

(5)回答问题(20分):

优( )、良( )、中( )、一般( )、差( );

(6)论文格式规范性及考勤是否降等级:

是( )、否()

评阅人签名:

 职称:

教授

2013年6月25日

目 录

第1章系统概要

1.1系统介绍

编写一个简易计算器,实现Windows计算器的主要功能。

本次课程设计就是利用java语言来编写简单计算器的应用程序,模拟Windows计算器的功能,能进行加、减、乘、除四则算术运算和求倒数、求平方根等简单函数运算,且有小数点、清零和存储等功能。

1.2基本功能要求

通过计算器的设计,掌握Java编程的基本知识点。

(1)掌握基于AWT的图形用户界面的设计,如常用的的布局设计,容器中面板、按钮、文本框等组件的添加和布局。

(2)掌握图形界面的事件处理方法,注册动作事件监听者。

(3)掌握各类功能的实现思路,及程序表达。

熟悉实例变量、类变量与局部变量的差异。

(4)掌握方法的封装与调用。

尽量将重复用到的一段功能设计为方法。

(5)掌握if和switch等语句的使用。

(6)掌握如何给按钮设置颜色及给页面背景设计颜色。

(7)掌握java中“对象”和“类”的知识,类的设计及成员的控制访问

第2章设计思路与算法

2.1应用的基本工作流程

1.打开命令提示符和记事本;

2.输入源程序代码;

3.保存并运行源程序;

4.运行,检查是否有误;

5.修改错误并再次运行;

6.测试计算器的工作状况。

2.2类设计

本次计算器的设计,主要用到的是GUI编程的相关方法。

所以我们所用到的类和方法主要有:

主类:

Calculation类

继承的父类为WindowAdapter类,实现了ActionListener接口,定义了一个窗体f和多个面板,按钮和文本框。

(1)方法名:

display方法

作用:

构建计算器的主界面

在方法display中,定义了窗体的标题,设置了窗体的大小并通过setVisible(true)方法使窗体可见,setBackground()方法设置背景颜色,setResizable(false)方法使窗体大小不可变。

用setLayout()方法给容器指定按BorderLayout布局排列部件:

通过容器的add()方法将面板放置在North区域:

f.add(p5,BorderLayout.NORTH),通过add方法用来向面板中加入部件。

添加GUI部件并给各个部件各自不同的标识,创建中间面板时,如面板p1,p1=newPanel(newGridLayout(1,3,5,5)),设置为GridLayout布局,再用add方法把按钮都加进去,按(1,3,5,5)方式排列

通过按钮对象的addActionListener方法为其注册事件监听处理者。

(2)方法名:

actionPerformed方法

作用:

设置各个GUI部件的事件处理

在actionPerformed方法中,分别设置了不同按钮的操作事件,当不同按钮单击发生动作时自动调用执行相应的动作,从而实现计算器的多种运算功能。

通过e.getActionCommand()获得按钮事件对象的命令名,再在if语句中根据操作命令符按情况分别处理事件,进行相应运算。

通过setText()方法将结果转化为数字串写入文本输入框中。

事件监听器中的事件处理方法voidactionPerformed(ActionEvente)完成主要的按钮事件的处理。

事件处理分以下几种情况:

数字按钮事件(“0”,“1”,“2”,“3”···“8”,“9”),小数点按钮事件(“.”),运算符按钮处理事件(“+”,“-”,“*”,“/”),正负号按钮事件(“+/-”),退格按钮事件(“Backspace”),清除按钮事件(“C”),等号按钮事件(“=”),存储按钮事件(“MS”,“MC”,“MR”,“M+”)等。

(3)方法名:

main方法

在该方法中,通过new运算符创建一个类Calculation的对象Cal,通过调用display()方法。

(4)方法名:

windowClosing方法

在该方法中,在处理窗体的“关闭”事件的监听者采用继承WindowsAdapter的方式。

2.3应用界面的设计

参考了windows计算器的布局,我们把总体界面采用BorderLayout布局,文本框所在的面板p5位于最上方(North区域),存储按钮及显示M状态文本框所在的面板p3在最左边(West区域),而Backspace,CE,C所在的面板p1和数字按钮、运算符按钮等所在面板p2放置在面板p4中,面板p4统一分布在中央(Center区域),同时面板中又按GridLayout布局分布多行多列。

具体如下图所示。

2.4事件处理原理、具体设计

首先,对计算器的整体布局构思清楚,将整个计算器分成多行多列组成的单元,使得整个计算器的布局更加合理、有序。

采用网格块布局,整体分为6行,第一行为输入及显示框,第二行为退格键和清零键,下面几行分别为数字按钮与运算符按钮,以及MC,MR,MS,M+等存储按钮。

第二,设计依次添加GUI部件。

第三,为各个部件注册监听者,考虑到数字键,运算符,等于,小数点,求平方根等的不同以及程序的调理清晰,我们分别为其设置了不同的监听者。

第四,设置相应的各类算法。

第五,设置主程序和退出方法。

在编写完源程序代码后,进行运行,发现错误并更正。

最后,测试制作的计算器运行状况即计算能力。

 

动作事件的各方关系,结合代码大致如下图所示:

2.5算法考虑

在actionPerformed方法中,分别设置了不同按钮的操作事件,当不同按钮单击发生动作时自动调用执行相应的动作,从而实现计算器的多种运算功能。

数字按钮与其他按钮作为事件源都注册了监听者,且监听者符合ActionListener接口的要求。

数据与运算符的键入通过点击按钮来触发事件,在按下“=”按钮时通过调用之前按下的相应运算符所表示的运算函数进行运算,将所的结果保存在dResult中,并显示在文本框内。

求平方根、求倒数等运算时,调用了Math类的方法进行运算。

当输入小数时,将小数点拼接到数字串中。

按下清除按钮时,变量初始化。

 

第3章源程序代码

//用JAVA编写简易计算器的程序(模拟Windows计算器)

importjava.awt.*;

importjava.awt.event.*;

publicclassCalculationextendsWindowAdapterimplementsActionListener

{

doubledResult=0;

doubledNowInput=0;

doubledMemory;//记载内存中存储的数据

intn=0;//记载小数位数

intnOperation=1;//记录运算符类型

intnBitsNum=0;//记录总共输入的位数

booleanalreadyHaveDot=false;//是否已经有小数点

booleankeyAvailable=true;

booleanalreadyClickedEqueal=false;//是否已经按下过"="按钮

booleanisTempNowInput=false;//是否在计算出结果后直接按运算符将结果赋给了当前输入值

Framef;

Panelp1,p2,p3,p4,p5,p6;

TextFieldtf1,tf2;

Buttonb1,b2,b3,b4,b5,b6,b7,b8,b9,b0;

ButtonbDiv,bSqrt,bMulti,bMinus,bPercent,bPlus,bReciprocal,bEqual,bDot,bNegative;

ButtonbBackspace,bCE,bC,bMR,bMS,bMC,bM;

publicvoiddisplay()

{

f=newFrame("计算器");

f.setSize(280,213);

f.setLocation(200,200);

f.setBackground(Color.LIGHT_GRAY);

f.setResizable(false);

f.setLayout(newBorderLayout(3,3));//采用方位布局排列部件

p1=newPanel(newGridLayout(1,3,5,5));//用于存放Backspace,CE,C三键

p2=newPanel(newGridLayout(4,5,5,5));//用于存放数字区及附近共20键

p3=newPanel(newGridLayout(5,1,5,5));//用于存放MC,MR,MS,M+键及显示M状态文本框

p4=newPanel(newFlowLayout());//用于存放p1,p2

p5=newPanel(newFlowLayout());

p6=newPanel(newFlowLayout());

p4.add(p1);

p4.add(p2);

tf1=newTextField(35);//存放显示区

tf1.setText("0.");

tf1.setEditable(false);//判断输入框是否可编辑,非编辑状态不能输入数据

p5.add(tf1);

f.add(p5,BorderLayout.NORTH);

f.add(p4,BorderLayout.CENTER);

f.add(p3,BorderLayout.WEST);

b1=newButton("1");//数字按钮

b2=newButton("2");

b3=newButton("3");

b4=newButton("4");

b5=newButton("5");

b6=newButton("6");

b7=newButton("7");

b8=newButton("8");

b9=newButton("9");

b0=newButton("0");

b1.addActionListener(this);

b2.addActionListener(this);

b3.addActionListener(this);

b4.addActionListener(this);

b5.addActionListener(this);

b6.addActionListener(this);

b7.addActionListener(this);

b8.addActionListener(this);

b9.addActionListener(this);

b0.addActionListener(this);

bDiv=newButton("/");//运算符按钮

bSqrt=newButton("sqrt");

bMulti=newButton("*");

bMinus=newButton("-");

bPercent=newButton("%");

bPlus=newButton("+");

bReciprocal=newButton("1/x");

bEqual=newButton("=");

bDot=newButton(".");

bNegative=newButton("+/-");

bDiv.addActionListener(this);

bSqrt.addActionListener(this);

bMulti.addActionListener(this);

bMinus.addActionListener(this);

bPercent.addActionListener(this);

bPlus.addActionListener(this);

bReciprocal.addActionListener(this);

bEqual.addActionListener(this);

bDot.addActionListener(this);

bNegative.addActionListener(this);

p2.add(b7);//将按钮依次添加到面板

p2.add(b8);

p2.add(b9);

p2.add(bDiv);

p2.add(bSqrt);

p2.add(b4);

p2.add(b5);

p2.add(b6);

p2.add(bMulti);

p2.add(bPercent);

p2.add(b1);

p2.add(b2);

p2.add(b3);

p2.add(bMinus);

p2.add(bReciprocal);

p2.add(b0);

p2.add(bNegative);

p2.add(bDot);

p2.add(bPlus);

p2.add(bEqual);

bBackspace=newButton("Backspace");

bCE=newButton("CE");

bC=newButton("C");

bBackspace.addActionListener(this);

bCE.addActionListener(this);

bC.addActionListener(this);

p1.add(bBackspace);

p1.add(bCE);

p1.add(bC);

tf2=newTextField

(2);

tf2.setEnabled(false);

tf2.setBackground(Color.LIGHT_GRAY);

bMC=newButton("MC");

bMR=newButton("MR");

bMS=newButton("MS");

bM=newButton("M+");

bMC.addActionListener(this);

bMR.addActionListener(this);

bMS.addActionListener(this);

bM.addActionListener(this);

p6.add(tf2);

p3.add(p6);

p3.add(bMC);

p3.add(bMR);

p3.add(bMS);

p3.add(bM);

f.setVisible(true);

f.addWindowListener(this);

}

publicvoidactionPerformed(ActionEvente)

{

//key0to9

if(this.keyAvailable&&e.getActionCommand().length()==1&&e.getActionCommand().compareTo("0")>=0&&e.getActionCommand().compareTo("9")<=0)

{

if(this.isTempNowInput)

{

this.dNowInput=0;

this.isTempNowInput=false;

}

this.nBitsNum++;

if(this.alreadyHaveDot==false)

this.dNowInput=this.dNowInput*10+Double.parseDouble(e.getActionCommand());

else

{

doubletemp=Double.parseDouble(e.getActionCommand());

for(inti=this.n;i<0;i++)

{

temp*=0.1;

}

this.dNowInput+=temp;

this.n--;

}

this.tf1.setText(Double.toString(this.dNowInput));

}

//keydot

if(this.keyAvailable&&e.getActionCommand()==".")

{

if(this.alreadyHaveDot==false)

{

this.nBitsNum++;

this.alreadyHaveDot=true;

this.n=-1;

}

}

//key"+","-","*","/"

if(this.keyAvailable&&e.getActionCommand()=="+"||e.getActionCommand()=="-"||e.getActionCommand()=="*"||e.getActionCommand()=="/")

{

if(this.alreadyClickedEqueal)

{

this.dNowInput=this.dResult;

this.isTempNowInput=true;

}

else

{

switch(this.nOperation)

{

case1:

this.dResult+=this.dNowInput;break;

case2:

this.dResult-=this.dNowInput;break;

case3:

this.dResult*=this.dNowInput;break;

case4:

{

if(this.dNowInput==0)

{

tf1.setText("除数不能为零");

this.keyAvailable=false;

}

elsethis.dResult=this.dResult/this.dNowInput;

}

}

if(this.keyAvailable)tf1.setText(Double.toString(this.dResult));

this.dNowInput=0;

}

if(e.getActionCommand()=="+")

{

this.nOperation=1;

}

if(e.getActionCommand()=="-")

{

this.nOperation=2;

}

if(e.getActionCommand()=="*")

{

this.nOperation=3;

}

if(e.getActionCommand()=="/")

{

this.nOperation=4;

}

this.nBitsNum=0;

this.alreadyClickedEqueal=false;

}

//key"+/-"

if(this.keyAvailable&&e.getActionCommand()=="+/-")

{

this.dNowInput=0-this.dNowInput;

tf1.setText(Double.toString(this.dNowInput));

}

//key"C"

if(e.getActionCommand()=="C")

{

this.nBitsNum=0;

this.dResult=0;

this.dNowInput=0;

this.alreadyHaveDot=false;

this.n=0;

this.nOperation=1;

this.keyAvailable=true;

this.alreadyClickedEqueal=false;

tf1.setText("0.");

}

//key"CE"

if(e.getActionCommand()=="CE")

{

this.nBitsNum=0;

this.dNowInput=0;

this.alreadyHaveDot=false;

this.n=0;

this.nOperation=1;

this.keyAvailable=true;

tf1.setText("0.");

}

//key"sqrt"

if(this.keyA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1