《java课程设计计算器报告书模版(软件工程).docx》由会员分享,可在线阅读,更多相关《java课程设计计算器报告书模版(软件工程).docx(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、华东交通大学课程设计报告课程设计(论文)任务书1本课程设计的目的(1)使学生巩固和提高Java编程技术(2)培养学生掌握程序设计的基本思路和方法; (3)加强学生研发、调试程序的能力;(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。2课程设计的任务及要求(以制作一个图形编辑系统作为模板)1)任务: 设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算、 设计的计算器应用程序可以完成加法、减法、乘法、除法和取余运算。且有小数点、正负号、求倒数、退格和清零等功能。用鼠标单击相应的数字键和运算符号键,然后单击=按钮,窗口上方的文本框将会显示计算
2、出来的结果,要将文本编辑框清零,可单击清零按钮。 2)创新要求: 在基本要求达到后,可进行创新设计,如:如何利用鼠标选取图形,删除。3)课程设计论文编写要求(1)课程设计任务及要求(2)需求分析(3)设计思路-工作原理、功能规划(4)详细设计-数据分析、算法思路、类设计、功能实现(含程序流程图、主要代码及注释)、界面等。(4)运行调试与分析讨论-给出运行屏幕截图,分析运行结果,有何改进想法等。(5)设计体会与小结-设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。(6)参考文献(必须按标准格式列出,可参考教材后面的参考文献格式)(7) 报告按规定排版打印,要求装订
3、平整,否则要求返工;(8) 课设报告的装订顺序如下:封面-任务书-中文摘要-目录-正文-附录(代码及相关图片)(9)严禁抄袭,如有发现,按不及格处理。一、课设任务及要求1二、需求分析2三、设计思路7四、 详细设计.8五、 运行调试与分析讨论.15六、 设计体会与小结21七、参考文献22八、源代码.23一、课设任务及要求 设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算、 设计的计算器应用程序可以完成加法、减法、乘法、除法和取余运算。且有小数点、正负号、求倒数、退格和清零等功能。用鼠标单击相应的数字键和运算符号键,然后单击=按钮,窗口上方的文本框将会显示计算出来的结果,要将文本编辑
4、框清零,可单击清零按钮。二、需求分析1、 状态定义1,刚启动计算器时的状态:开始计算按键开始键"ON"2清零:计算刚启动时,或者任何时候键入了清零键,计算器所处的状态。2一个操作数:输入了一个操作数时计算器所处的状态,如键入“2”后的状态,此时操作数为“2”,或者依次键入“3”、“8”后的状态,此时操作数为“38”。3运算结果:键入了“=”键后计算器所处的状态,如依次键入“35=”之后计算器的状态。在此状态如果输入数字,输入的数字将作为第一个操作数,开始一次新的计算。4一个操作数和一个两元符号:输入了一个操作数和加减乘除中的一个键后计算器的状态,如依次输入“2”或“31
5、215;5=÷”之后计算器的状态。5操作数两元符操作数:输入了一个操作数、一个加减乘除符号和另一个操作数后计算器所处的状态,如依次键入“30÷4”或“35=÷5”后计算器的状态。6操作数两元符运算结果:输入了一个操作数、一个加减乘除符号和另一个操作数后紧接着键入开方键计算器所处的状态。7错误:执行非法计算后所处的状态,如执行÷0计算或者对负数的开方计算后的状态。比如6/0后计算的结果是“0不能做除数”。二、本计算器具有以下功能 :用表说明状态操作计算器响应结果状态清零键入数字键,如1显示键入的数字,操作数=键入的数字一个操作数键入减号键相当于键入了0,但
6、负号不显示,只显示0。一个操作数键入除减号键和数字键以外的键忽略键入的键,仍保留清零状态清零一个操作数键入数字键显示新操作数,新操作数=当前操作数*10+键入的数字一个操作数键入回退键显示新操作数,新操作数=当前操作数除以10取整一个操作数清屏键显示0,但操作数不变一个操作数键入清零(任何状态下,键入清零键都会到清零状态下,以下的状态不再重复)清零清零键入加减乘除中任意键仍显示操作数,跳转到状态“一个操作数和一个两元符号”一个操作数和一个两元符号键入开方键对操作数执行开方运算,显示运算结果运算结果键入=键显示操作数,如果操作数为负数,显示负号和操作数,如“32”运算结果一个操作数和一个两元符号
7、键入%忽略,不做任何处理一个操作数和一个两元符号键入加减乘除之一用新操作符替换原操作符,如当前是“30”,接着键入“÷”则变为“30÷”一个操作数和一个两元符号键入=如果操作符为加法,则加0,显示结果;如果操作符为减法,显示为负数;如果操作符为乘法,显示为第一个操作数相乘,如键入12*=,结果为144;如果键入为除法,结果为1。运算结果键入回退键第一个操作数回退一位,操作符保持不变,如:123+,键入回退键后显示12,操作符仍然为+一个操作数和一个两元符号键入开方键执行开方操作,操作符保持不变;例如:当前是“9”,键入开方键则显示3。运算结果键入数字键、小数点键入的为第二个
8、操作数,例如:当前是“9”,键入8,显示为8操作数2元操作符操作数运算结果键入加减乘除中任意键结果作为一个操作数,例如:当前是“45”,键入*,显示仍然是45,操作符是*,将执行乘法。一个操作数和一个两元符号键入数字和小数点清除结果,键入的数值作为新的操作数;例如当前是“16开方”后的运算结果,显示是“4”;键入56,显示“56”。一个操作数键入%、=键显示结果。如:当前是“16+开方”后的运算结果,键入=,显示的结果为20。执行16+16开方的运算;当前显示的结果9,或者任意其它值,输入%,运算结果显示“0”。运算结果键入开方键运算结果再执行开方运算运算结果键入回退键结果回退一位,如当前显示
9、“123”,键入回退键,显示“12”。运算结果操作数2元操作符操作数键入加减乘除中任意键先执行前面的计算,显示结果并记下下一个操作符;例如:起始状态键入的是12*6,然后键入+,则显示72一个操作数和一个两元符号键入%例如输入:12+3%,结果0.36; 12-3%,结果0.36;12*3%,结果0.36;12÷3%,结果0.36;一律按照乘法计算。运算结果键入=执行运算,得出结果。例如当前是键入了“1+2”,再键入“=”,显示“3”。运算结果键入数字键、回退键、小数点键等待键入第二个操作数完毕操作数2元操作符操作数开方键第二个操作数开方操作数2元操作符运算结果操作符为除号,第二个操
10、作数为0;负数开方不正确的运算错误操作数2元操作符运算结果键入数字键、小数点键忽略开方步骤,直接进行操作数与键入数字进行操作符的运算。例如:4+9开方32结果为36; 5-9开方65结果为-60。操作数2元操作符操作数键入=计算结果。例如:12+9开方=,先计算9开方=3,再12+3=15;12*64开方=,结果96。运算结果键入%例如输入:12+9开方,再键入%结果0.36;12-9开方,再键入%结果0.36;12*9开方,再键入%结果0.36;12÷9开方,再键入%结果0.36;一律按照乘法计算。运算结果键入加减乘除中任意键得到运算结果,并记忆操作符;例如12+9开方,键入+得到
11、15+。一个操作数和一个两元符号键入开方、回退键运算结果再次执行开方或者回退操作数2元操作符运算结果错误清零以外的任何键忽略,计算器不做任何响应错误清零键清零清零三、设计思路 本应用程序继承自框架类(Frame),此程序使用Frame布局管理器GridBagLayout,将单行文本框加入到0行0列,包含各种按钮的面板Panel 3 采用4行5列的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到面板中。同时注册按钮事件监听器。如:Button b1=new Button();b1.addActionListener(this); b2.addActionListener(this); 事件
12、监听器中的事件处理方法void actionPerformed(ActionEvent evt)完成主要的按钮事件的处理。事件处理分以下几种情况:数字按钮事件(”0”,”1”,”2”8”,”9”)、运算符按钮事件(”+”,”“,”*”,”/”,”%”)、正负号按钮事件(”+/-“)、小数点按钮事件(”.”)、等号按钮事件(”)、求倒按钮事件(”1/x”)、退格按钮事件(”退格”)、清楚按钮事件(“C”)。在事件处理。触发按钮事件时,要进一步分析,是重新开始计算时触发的按钮事件还是计算中间触发的按钮事件。四、详细设计一 import语句,使用import语句引入java.awt.,java.aw
13、t.event.,javax.swing.,Javax.swing.border包中所有的类。Java.awt.event.*引入系统事件类包。import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;二实现动作事件监听接口public class JiSuanQi extends JFrame implements ActionListener注册事件源的动作监听者menuitem1.addActionListener(this); menuitem2.addActio
14、nListener(this); menuitem3.addActionListener(this);/注册事件监听器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.addActionListene
15、r(this);b10.addActionListener(this); b11.addActionListener(this); b12.addActionListener(this);b13.addActionListener(this); b14.addActionListener(this); b15.addActionListener(this);b16.addActionListener(this); b17.addActionListener(this); b18.addActionListener(this);b19.addActionListener(this); b20.a
16、ddActionListener(this);b01.addActionListener(this); b02.addActionListener(this); b03.addActionListener(this);b04.addActionListener(this); b05.addActionListener(this);三组件的布局管理采用了AWT布局管理器当中最复杂的,同时功能也是最强大的GridBagLayout布局方式.GridBagLayout g=new GridBagLayout();GridBagConstraints c=new GridBagConstraints(
17、);添加了三个面板进行组件布局panel1=new JPanel();panel2=new JPanel();panel3=new JPanel();面板penel1中包括显示操作结果的文本区,penel中包括退格按钮"Backspace",全部清除按钮"CE",本次清除按钮"C",开始按钮"ON",关闭按钮"OFF"。Penel3中包括数字按钮"0","1","2","3","4","
18、5","6","7","8","9"小数点按钮"." ,除号按钮("/"),求根按钮"sqrt",乘号按钮"*",求余按钮"%",减号按钮""-",求倒数按钮"1/x",正负号按钮"+/-"),加号按钮"+",等号按钮"="设置Penel1在0行0列即开始的地方 GridBagConstraints
19、 c=new GridBagConstraints();c.gridx=0; c.gridy=0设置并添加penel2面板按钮panel1.add(panel2);GridBagLayout i=new GridBagLayout();GridBagConstraints j=new GridBagConstraints();panel2.setLayout(i);j.gridx=0; j.gridy=0;j.gridwidth=68; j.gridheight=40;j.fill=GridBagConstraints.BOTH; j.insets=new Insets(1,1,1,1);j.
20、weightx=3.0; j.weighty=3.0;i.setConstraints(b04,j);panel2.add(b04);j.gridx=70;i.setConstraints(b01,j);panel2.add(b01);j.gridx=140;i.setConstraints(b02,j);panel2.add(b02);j.gridx=210;i.setConstraints(b03,j);panel2.add(b03);j.gridx=280;i.setConstraints(b05,j);panel2.add(b05);c.gridy=120;c.gridheight=8
21、0;c.weighty=10.0;Penel3面板设置为4行5列共20个网格panel3.setLayout(new GridLayout(4,5);按布置好的方式添加按钮panel3.add(b1); panel3.add(b2); panel3.add(b3); panel3.add(b4); panel3.add(b5);panel3.add(b6); panel3.add(b7); panel3.add(b8); panel3.add(b9); panel3.add(b10);panel3.add(b11); panel3.add(b12); panel3.add(b13); pane
22、l3.add(b14); panel3.add(b15);panel3.add(b16); panel3.add(b17); panel3.add(b18); panel3.add(b19); panel3.add(b20);panel3.setLayout(new GridLayout(4,5);四 在窗口中加入菜单定义一个菜单JMenuBar menubar;定义菜单组件各个部分的对象JMenu menu1,menu2,menu3;定义对象下的菜单项JMenuItem menuitem1,menuitem2,menuitem3,menuitem4,menuitem5;以下生成菜单组件对象m
23、enubar=new JMenuBar();menu1=new JMenu("File");menu2=new JMenu("Edit");menu3=new JMenu("Help");menuitem1=new JMenuItem("ON");menuitem2=new JMenuItem("OFF");menuitem3=new JMenuItem("Close");menuitem4=new JMenuItem("Copy");menuitem5=
24、new JMenuItem("Help");添加菜单条"File","Edit","Help".菜单File中有菜单项"ON","OFF","Close".菜单"Edit"中菜单项"Copy","Help"中菜单项"Help"panel1.add(menubar);menubar.add(menu1);menubar.add(menu2);menubar.add(menu3);
25、menu1.add(menuitem1);menu1.add(menuitem2);menu1.addSeparator();menu1.add(menuitem3);menu2.add(menuitem4);menu3.add(menuitem5);五 处理按钮事件if(e.getSource()=menuitem1)label.setText(a); b=true;else if(e.getSource()=menuitem2)label.setText(""); b=false;else if(e.getSource()=menuitem3)System.exit(0
26、);else if(e.getSource()=b04)label.setText(a); b=true;else if(e.getSource()=b05)label.setText(""); b=false;if(b)if(e.getSource()=b1)if(label.getText().equals("0")label.setText("7"); else if(!c)label.setText(label.getText().concat("7"); elselabel.setText("7
27、"); c=false; n=0.0; if(e.getSource()=b2)if(label.getText().equals("0")label.setText("8"); else if(!c)label.setText(label.getText().concat("8"); elselabel.setText("8"); c=false; n=0.0; if(e.getSource()=b3)if(label.getText().equals("0")label.setTe
28、xt("9"); else if(!c)label.setText(label.getText().concat("9"); elselabel.setText("9"); c=false; n=0.0; if(e.getSource()=b6)if(label.getText().equals("0")label.setText("4"); else if(!c)label.setText(label.getText().concat("4"); elselabel.set
29、Text("4"); c=false; n=0.0; if(e.getSource()=b7)if(label.getText().equals("0")label.setText("5"); else if(!c)label.setText(label.getText().concat("5"); elselabel.setText("5"); c=false; n=0.0; if(e.getSource()=b8)if(label.getText().equals("0"
30、)label.setText("6"); else if(!c)label.setText(label.getText().concat("6"); elselabel.setText("6"); c=false; n=0.0; if(e.getSource()=b11)if(label.getText().equals("0")label.setText("1"); else if(!c)label.setText(label.getText().concat("1");
31、elselabel.setText("1"); c=false; n=0.0; if(e.getSource()=b12)if(label.getText().equals("0")label.setText("2"); else if(!c)label.setText(label.getText().concat("2"); elselabel.setText("2"); c=false; n=0.0; if(e.getSource()=b13)if(label.getText().equal
32、s("0")label.setText("3"); else if(!c)label.setText(label.getText().concat("3"); elselabel.setText("3"); c=false; n=0.0; if(e.getSource()=b16)if(label.getText().equals("0")label.setText("0"); else if(!c)label.setText(label.getText().concat(&
33、quot;0"); elselabel.setText("0"); c=false; n=0.0; if(e.getSource()=b18) if(!label.getText().contains(".")label.setText(label.getText().concat("."); if(e.getSource()=b4) c=true; d=1; m=m.valueOf(label.getText(); if(e.getSource()=b9) c=true; d=2; m=m.valueOf(label.ge
34、tText(); if(e.getSource()=b14) c=true; d=3; m=m.valueOf(label.getText(); if(e.getSource()=b19) c=true; d=4; m=m.valueOf(label.getText(); 异常现象处理 if(e.getSource()=b15) m=m.valueOf(label.getText(); if(m=0)label.setText("0没有倒数"); elsem=1/m; if(e.getSource()=b5) m=m.valueOf(label.getText(); if(
35、m<0)label.setText("负数不能被开方");流程图五、运行调试与分析讨论刚开始界面启动计算器:按键"ON",也可以通过菜单中"File"中"ON"。关闭按键"OFF"开始或清零界面实现5的根号6的倒数两数相乘583*2516=1466828退格键正负号按钮实现还可实现加法,减法,除法,求余等功能第 18 页 6、 设计体会与小结 通过这个星期每天通宵达旦的做课设,虽然最后是完成了任务。但是做起来很费力 ,有些地方还是没怎么搞懂,时间又不允许总在一个问题上纠结。所以只是很表面的
36、学习了一下东西 ,通过这次课设使我明白, 要脚踏实地学习,快餐式的学习不可取 。在编写代码的时候出现了很多错误,都是一些平时不怎么关注的,所以,平时还是要多实践。还有最重要的一点就是 不到万不得已才去请教别人要知道独立思考的能力对你很重要。要知道程序员的时间是很宝贵的。第 29 页 七、参考文献1 作者1,作者2. 参考书籍名称M. 出版地:出版社名称,出版年限参考资料宏维恩 Java 2 面向对象程序设计 中国铁道出版社 2002徐迎晓 Java语法及网络应用设计 清华大学出版社 2002戴特尔(美)Java 大学简明教程实例程序设计 2005八,源代码import java.awt.*;i
37、mport java.awt.event.*;import javax.swing.*;import javax.swing.border.*;public class JiSuanQi extends JFrame implements ActionListener/ JiSuanQi 继承Frame实现ActionListener接口JMenuBar menubar;/定义一个菜单JMenu menu1,menu2,menu3;/定义菜单组件各个部分的对象JMenuItem menuitem1,menuitem2,menuitem3,menuitem4,menuitem5;/定义对象下的菜
38、单项JLabel label;JButtonb1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b01,b02,b03,b04,b05;JPanel panel1,panel2,panel3;/定义三个面板String a="0"boolean b,c;Double m=0.0,n=0.0,r=0.0;Integer h=0;int d;public JiSuanQi()setTitle("jisuanqi");panel1=new JPanel();panel2=
39、new JPanel();panel3=new JPanel();menubar=new JMenuBar();/以下生成菜单组件对象menu1=new JMenu("File");menu2=new JMenu("Edit");menu3=new JMenu("Help");menuitem1=new JMenuItem("ON");menuitem2=new JMenuItem("OFF");menuitem3=new JMenuItem("Close");menuite
40、m4=new JMenuItem("Copy");menuitem5=new JMenuItem("Help");label=new JLabel("");b1=new JButton("7"); b2=new JButton("8"); b3=new JButton("9"); b4=new JButton("/");b5=new JButton("sqrt"); b6=new JButton("4"); b7=n
41、ew JButton("5"); b8=new JButton("6");b9=new JButton("*"); b10=new JButton("%"); b11=new JButton("1"); b12=new JButton("2");b13=new JButton("3"); b14=new JButton("-"); b15=new JButton("1/x"); b16=new JButton(&qu
42、ot;0");b17=new JButton("+/-"); b18=new JButton("."); b19=new JButton("+"); b20=new JButton("=");b01=new JButton("Backspace"); b02=new JButton("CE"); b03=new JButton("C");b04=new JButton("ON"); b05=new JButton("
43、OFF");setSize(350,240);设置计算器的长宽label.setBorder(BorderFactory.createBevelBorder(1);/建立一个立体的边界label.setOpaque(true);/设置不透明,以便设置背景色label.setBackground(Color.white);/设置背景色白色label.setHorizontalAlignment(SwingConstants.RIGHT);显示在右边label.setCursor(new Cursor(Cursor.TEXT_CURSOR);add(panel1);GridBagLayo
44、ut g=new GridBagLayout();GridBagConstraints c=new GridBagConstraints();panel1.setSize(350,200);panel1.setLayout(g);c.gridx=0; c.gridy=0;/这个属性是用来描述组件在布局时应处于那个网格位置,即描述网格开始的位置.gridx=0,gridy=0时放在0行0列.c.gridwidth=350; c.gridheight=20;/这两个属性用来描述组件在布局中的所占的网格的个数,gridwidth描述了该组件在横向上所占网格的个数,gridheight描述了该组件在纵
45、向上所占网格的个数c.fill=GridBagConstraints.BOTH;c.insets=new Insets(1,1,1,1);/ 设置组件之间彼此的间距。c.weightx=10.0; c.weighty=0.0;g.setConstraints(menubar,c);panel1.add(menubar);menubar.add(menu1);menubar.add(menu2);menubar.add(menu3);menu1.add(menuitem1);menu1.add(menuitem2);menu1.addSeparator();menu1.add(menuitem3
46、);menu2.add(menuitem4);menu3.add(menuitem5);c.gridy=20;c.gridheight=50;g.setConstraints(label,c);panel1.add(label);c.gridy=70;c.gridheight=50;c.weighty=3.0;g.setConstraints(panel2,c);panel1.add(panel2);GridBagLayout i=new GridBagLayout();GridBagConstraints j=new GridBagConstraints();panel2.setLayout(i);j.gridx=0; j.gridy=0;j.gridwidth=68; j.gridheight=40;j.fill=GridBagConstraints.BOTH;