面向对象程序设计课程设计java设计一个计算器.docx
《面向对象程序设计课程设计java设计一个计算器.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计课程设计java设计一个计算器.docx(37页珍藏版)》请在冰豆网上搜索。
面向对象程序设计课程设计java设计一个计算器
课程设计(大作业)报告
课程名称:
面向对象程序设计课程设计
设计题目:
计算器的设计
院系:
信息技术学院
班级:
2015级计算机科学与技术
(2)班
设计者:
学号:
指导教师:
设计时间:
2016.12.26-2016.12.30
信息技术学院
课程设计(大作业)任务书
姓名:
院(系):
信息技术学院
专业:
计算机科学与技术
(2)班学号:
任务起止日期:
2016-12-26-2016-12-30
课程设计题目:
计算器功能设计
课程设计要求:
设计一个计算器,具有加减乘除的计算器,可扩展功能。
1)界面设计
首先按设计要求实现其基本功能,其次设计布局,按照GridLayout的布局,将空间划分为由行和列组成的网格单元,每个单元放一个组件,网格单元大小可不同,尽量将相同属性的按钮放在一个区域,方便操作。
2)计算器的基本功能:
(1)加法:
两个数据进行加操作,可以为小数。
(2)减法:
两个数据进行减操作,可以为负数相减。
(3)乘法:
两个数相乘操作。
(4)除法:
两个数相除操作。
(5)开平方:
对任意一个数进行开方运算,可以是小数。
(6)求余:
对任意一个数进行求余运算。
(7)倒数:
对任意一个数进行倒数运算。
功能可自行增加。
提示:
添加相关组件并进行按钮事件处理。
工作计划及安排:
本次课程设计是对前面学过的所有面向对象的编程思想以及编程方法的一个总结、回顾和实践。
1.开始设计前学生一定要先回顾以前所学的内容,明确本课程设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。
2.通过编写一个基于JAVA的应用系统综合实例,要求学生熟练掌握Java语言设计一个完整的应用程序的设计方法和步骤(软件的分析、设计、调试和总结)。
3.要求每个学生应在规定时间内,在相关软、硬件的环境下,由指导老师指导独立完成各阶段设计任务。
时间(天)完成内容说明
1明确选题,查阅相关资料2016.12.26
2题目分析、总体设计、编写代码2016.12.27-2016.12.28
1调试测试、总结,撰写课程设计报告2016.12.29
1修改、完善课程设计报告2016.12.30
指导教师签字
年月日
课程设计(大作业)报告
一、总体设计
1.系统需求分析
程序中传递的有信息有:
界面设计、各运算的实现
界面设计
采用边框布局和网格布局。
先用边框布局画一个整体的画板,再用网格布局放三个小的面板。
在这三个中,首先将pane1中北部放一个按钮,中部放一个按钮;然后是整体布局,将top的结果画板放在北部,pane1放在中部,其余一个放在西部。
各运算的实现:
、加法
elseif(operator.equals("+")){
//加法运算
resultNum+=getNumberFromText();
}
、减法
elseif(operator.equals("-")){
//减法运算
resultNum-=getNumberFromText();
}
、乘法
elseif(operator.equals("*")){
//乘法运算
resultNum*=getNumberFromText();
}
、除法
if(operator.equals("/")){
//除法运算
//如果当前结果文本框中的值等于0
if(getNumberFromText()==0.0){
//操作不合法
operateValidFlag=false;
resultText.setText("除数不能为0");
}else{
resultNum/=getNumberFromText();
}
}
}
、开平方
elseif(operator.equals("sqrt")){
//平方根运算
resultNum=Math.sqrt(resultNum);
}
、求余
elseif(operator.equals("%")){
//百分号运算,除以100
resultNum=resultNum/100;
}
、倒数
elseif(operator.equals("1/x")){
//倒数运算
if(resultNum==0.0){
//操作不合法
operateValidFlag=false;
resultText.setText("0没有倒数");
}else{
resultNum=1/resultNum;
}
}
、求三角函数
elseif(operator.equals("cos")){//如果按钮事件为"cos"键
resultNum=Math.cos(resultNum);
}
elseif(operator.equals("arcsin")){//如果按钮事件为"arcsin"键
resultNum=Math.asin(resultNum);
}
elseif(operator.equals("arccos")){//如果按钮事件为"arccos"键
resultNum=Math.acos(resultNum);
}elseif(operator.equals("tan")){//如果按钮事件为"tan"键
resultNum=Math.tan(resultNum);
}elseif(operator.equals("sin")){//如果按钮事件为"sin"键
resultNum=Math.sin(resultNum);
}
、求相反数
elseif(operator.equals("+/-")){
//正数负数运算
resultNum=resultNum*(-1);
}
、幂运算
elseif(operator.equals("exp")){//如果按钮事件为"exp"键
resultNum=Math.exp(resultNum);
}elseif(operator.equals("=")){
//赋值运算
resultNum=getNumberFromText();
}
2.总体设计结构
、加法据进行加操作,可以为小数。
、减法据进行加减操作,可以为负数相减。
、乘法个数进行相乘操作。
、除法多个数进行相除操作。
、开平方任意一个数进行开方运算,可以是小数。
、求余一个数进行求余运算。
、倒数意一个数进行倒数运算。
、求三角函数一个弧度值求三角函数。
、求相反数对任意一个数求相反数。
、清空任意数或计算的任意结果进行清空。
、后退对输入的任意数进行一次后退。
(12)幂运算对e的n次方计算
二.各模块分析与实现
一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。
但还不支持键盘操作。
建立一个JAVAproject
程序中使用到的类、包
packagejisuanqi;
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JPanel;
importjavax.swing.JTextField;
main函数
publicstaticvoidmain(Stringargs[]){
Calculatorcalculator1=newCalculator();
calculator1.setVisible(true);
calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
构造函数:
初始化计算器、设置计算器的背景颜色、在屏幕(400,300)坐标处显示计算器。
publicCalculator(){
super();
init();
this.setBackground(Color.LIGHT_GRAY);
this.setTitle("简易计算器");
this.setLocation(400,300);
this.setSize(500,500);
createMenuBar();
}
调用init()函数:
初始化计算器
privatevoidinit(){
文本框中的内容采用右对齐方式、不允许修改结果文本框、设置文本框背景颜色为白色
resultText.setHorizontalAlignment(JTextField.RIGHT);
resultText.setEditable(false);
resultText.setBackground(Color.WHITE);
初始化计算器上键的按钮,将键放在一个画板内、用网格布局器,5行,6列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
JPanelcalckeysPanel=newJPanel();
calckeysPanel.setLayout(newGridLayout(5,6,3,3));
for(inti=0;ikeys[i]=newJButton(KEYS[i]);
calckeysPanel.add(keys[i]);
keys[i].setForeground(Color.blue);
keys[i].setBackground(Color.green);
}
//运算符键用红色标示,其他键用蓝色表示
keys[3].setForeground(Color.red);
keys[4].setForeground(Color.red);
keys[8].setForeground(Color.red);
keys[9].setForeground(Color.red);
keys[13].setForeground(Color.red);
keys[14].setForeground(Color.red);
keys[18].setForeground(Color.red);
keys[19].setForeground(Color.red);
keys[20].setForeground(Color.red);
keys[21].setForeground(Color.red);
keys[22].setForeground(Color.red);
keys[23].setForeground(Color.red);
初始化功能键,都用红色标示。
将功能键放在一个画板内、用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
JPanelcommandsPanel=newJPanel();
commandsPanel.setLayout(newGridLayout(1,3,3,3));
for(inti=0;icommands[i]=newJButton(COMMAND[i]);
commandsPanel.add(commands[i]);
commands[i].setForeground(Color.black);
commands[i].setBackground(Color.green);
}
初始化M键,用红色标示,将M键放在一个画板内、用网格布局管理器,6行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
JPanelcalmsPanel=newJPanel();
calmsPanel.setLayout(newGridLayout(6,1,3,3));
for(inti=0;im[i]=newJButton(M[i]);
calmsPanel.add(m[i]);
m[i].setForeground(Color.black);
m[i].setBackground(Color.green);
}
初始化K键,用红色标示,将K键放在一个画板内、用网格布局管理器,6行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
JPanelKPanel=newJPanel();
KPanel.setLayout(newGridLayout(6,1,3,3));
for(inti=0;ik[i]=newJButton(K[i]);
calmsPanel.add(k[i]);
k[i].setForeground(Color.black);
k[i].setBackground(Color.green);
}
下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部、将文本框放在北部,将calms画板放在计算器的西部、新建一个大的画板,将上面建立的command和calckeys画板放在该画板内
JPanelpanel1=newJPanel();
画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素
panel1.setLayout(newBorderLayout(3,3));
panel1.add("North",commandsPanel);
panel1.add("Center",calckeysPanel);
建立一个画板放文本框
JPaneltop=newJPanel();
top.setLayout(newBorderLayout());
top.add("Center",resultText);
整体布局
getContentPane().setLayout(newBorderLayout(3,5));
getContentPane().add("North",top);
getContentPane().add("Center",panel1);
getContentPane().add("West",calmsPanel);
为各按钮添加事件侦听器、都使用同一个事件侦听器,即本对象。
本类的声明中有implementsActionListener
for(inti=0;ikeys[i].addActionListener(this);
}
for(inti=0;icommands[i].addActionListener(this);
}
for(inti=0;im[i].addActionListener(this);
}
}
调用createMenuBar()函数:
在界面标题下添加查看、编辑、帮助三大操作
privatevoidcreateMenuBar()
{
JMenuBarbar=newJMenuBar();
JMenufile=newJMenu("查看(V)");
JMenuItemopen=newJMenuItem("打开。
。
");
JMenuItemsave=newJMenuItem("保存。
。
");
JMenuItemstate=newJMenuItem("状态..");
JMenuItemexit=newJMenuItem("退出系统");
file.add(open);
file.add(save);
file.addSeparator();
file.add(state);
file.add(exit);
JMenuedit=newJMenu("编辑(E)");
JMenuItemcopy=newJMenuItem("复制");
JMenuItemcut=newJMenuItem("剪切");
JMenuItempaste=newJMenuItem("粘贴");
edit.add(copy);
edit.add(cut);
edit.add(paste);
JMenuhelp=newJMenu("帮助(H)");
JMenuItemerror=newJMenuItem("文档-网站");
help.add(error);
bar.add(file);
bar.add(edit);
bar.add(help);
setJMenuBar(bar);
}
从结果文本框中获取数字
*@return*/
privatedoublegetNumberFromText(){
doubleresult=0;
try{
result=Double.valueOf(resultText.getText()).doubleValue();
}catch(NumberFormatExceptione){
}
returnresult;
}
三.系统调试分析
1.当publicclasscalculatorextendsJFrameimplementsActionListener{}的calculator与我所建立的class中Caculator的名字不同时出现了
2.在构造函数中没有调用createMenuBar时
调用之后
3.修改前publicclassCalculatorextendsJFrameimplementsActionListener{
/**计算器上的键的显示名字*/
privatefinalString[]KEYS={"7","8","9","+","exp","4","5","6","-","sqrt","1","2","3","*","log","0",".","%","/","1/x","sin","cos","tan","+/-","="};
错误显示
修改为
publicclassCalculatorextendsJFrameimplementsActionListener{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
/**计算器上的键的显示名字*/
privatefinalString[]KEYS={"7","8","9","+","exp","4","5","6","-","sqrt","1","2","3","*","log","0",".","%","/","1/x","sin","cos","tan","+/-","="};
4.加法
5.减法
6.乘法
7.除法
8.开平方
9.求余
10.倒数
11.求三角函数
12.求相反数
13.清空
14.后退
15.e幂运算
16.查看
17.编辑
18.帮助
16.整个界面显示
四.总结
这个周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去探讨一件事情,如何去做一件事情,又如何完成一件事情。
在设计过程中,与我的小伙伴分工设计,和同学们相互探讨,相互学习,相互监督。
学会了合作。
课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不少的过程.通过这次课程设计,我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.通过这次计算器设计,本人在多方面都有所提高。
要面对社会的挑战只有不断的学习、实践,再学习、再实践。
这对于我的将来也有很大的帮助。
以后,不管有多苦,我想我都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。
这是一门纯属于设计的科目,它需用把理论变为上机调试。
在学习科目的第一节课起,何老师就为我们阐述了它的重要性。
它对我们来说具有一定的难度。
它是其它编程语言的一门基本学科。
刚开始学的时候确实有很多地方我很不理解,每次上课时老师都会让我们自己去做不同的设计题目,对于我们一个初学者来说,无疑是一个具大的挑战,撞了几次壁之后,我决定静下心
来,仔细去写程序。
老师会给我们需要编程的内容一些讲解,顺着老师的思路,来完成自己
的设计,我们可以开始运行自己的程序,可是好多处的错误让人看的可怕,还看不出到底是
哪里出现了错误,但是程序还是得继续下去,这时图书馆是我最好的去处,把自己不懂的去通过看书来更深层次理解,逐渐能自己找出错误,并加以改正。
在运行的时候,错误提示都是用英文来显示出来的,经过了这次课程设计,现在已经可以了解很多错误在英文里的提示,这对我来说是一个突破性的进步,眼看着一个个错误通过自己的努力在我眼前消失,觉得很是开心。
此次的程序设计能够成功,是我和小伙伴同学两个人共同努力作用的结果。
在这一段努力学习的过程中,
我们的编程设计有了明显的提高。
其实现在想起来,收获还真是不少,虽然说以前非常不懂这门语言,在它上面花费了好多心血,觉得它很难,是需用花费了大量的时间编写出来的。
在真正的明白了一些代码的应用,每个程序都有一些共同点,通用的结构,相似的格式。
只