计算器设计的java课程设计报告.docx
- 文档编号:9129905
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:28
- 大小:162.19KB
计算器设计的java课程设计报告.docx
《计算器设计的java课程设计报告.docx》由会员分享,可在线阅读,更多相关《计算器设计的java课程设计报告.docx(28页珍藏版)》请在冰豆网上搜索。
计算器设计的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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算器 设计 java 课程设计 报告