武汉理工大学华夏学院课程设计报告书课程名称JAVA课程设计课程设计总评成绩学生姓名、学号学生专业班级指导教师姓名课程设计起止日期武汉理工大学华夏学院《Java语言课程设计》课程任务书Java语言课程设计是“面向对象程序设计(Java)”课程之后的一个教学实践环节,是信管专业的重要实践性课程。其基本任务是综合利用课程中学到的编程知识和编程技巧,完成具有一定难度、一定编程量的课程设计题目,使学生掌握高级编程语言的知识和编程技术,掌握程序设计的思想和方法,具备利用计算机求解实际问题的能力。同时也是对软件开发过程的综合训练。通过Java语言课程设计,应该达到以下基本目标:(1)进一步巩固和复习Java程序设计的基础知识,提高编程技术。(2)进一步掌握Java面向对象的编程思想。(3)进行利用Java语言开发项目的训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。(4)提高学生程序调试的技巧和程序设计的能力。(5)提高学生分析问题、解决问题以及实际运用的能力。二、课程设计内容及基本要求本课程设计包含如下两个题目:1.计算器基本要求:编写程序实现类似下图所示的图形用户界面,实现windows计算器功能2.数字秒表基本要求:设计一个图所示的数字秒表,实现计时启动、暂停、继续、停止和重置等功能,要求多个按钮之间的状态是相互关联的。三、学时分配进度要求本课程设计将安排在第18周,通信实验室223机房。具体安排如下:本课程设计的时间为一周,学时分配如下表:序号内容时间1教师讲解第一题;学生查阅资料、准备程序周一上午2上机调试、测试第一题程序周二全天3教师讲解第二题;学生查阅资料、准备程序周三上午4上机调试、测试第二题程序周四全天5分组答辩、提交课程设计报告及相关文档,教师验收评分周五签名:日期:1.设计题目与要求:1.1.题目:《JAVA程序课程设计》1.2.要求:1.2.1.计算器基本要求:编写程序实现类似下图所示的图形用户界面,实现windows计算器功能1.2.2.数字秒表基本要求:设计一个图所示的数字秒表,实现计时启动、暂停、继续、停止和重置等功能,要求多个按钮之间的状态是相互关联的。2.需求分析:2.1.在日常生活中计算器的使用频率非常的高,比如科学计算器、数值计算。会计业务等,在Applet中实现一个精巧实用的计算器,可以让用户在使用网站服务的同时,可以很便捷的进行数据运算,可增加页面的实用性。2.2.同时也让用户的操作更加的方便与快捷。本次课程设计要求实现一个具有四则运算的计算器,拥有加减乘除功能,并且还要求具备清零等功能。3.设计思路与思想:3.1.思路:本应用程序继承自框架类cFrame。此程序使用Frame布局管理器FlowLayout,将单行文本框加入到最上方,含有各种按钮的两个面板Panel加入到下方区域,包含各种按钮的面板采用1-3和4-6的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到面板中。同时注册按钮事件监听器。如:button=newCButton(M+);add(bMC);button.add;ActionListener(newPressbbutton());事件监听器中事件处理方法classPressbDENGYUimplementsActionListener本应用程序中的数字按钮和运算符按钮可以分别定义以下两个类的对象组件数字按钮Button类如下:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;3.2.思想:设计这个计算器主要是参考Windows操作系统中自带的计算器,由于余水平和时间的限制,不能将计算器设计到科学型及其他更复杂的类型。4.课程设计安排4.1.本课程设计将安排在第17周,教育技术中心。具体安排如下:4.2.第一天,下发任务书,学生查阅资料4.3.第二天,系统设计和原型开发4.4.第三,四天系统功能实现4.5.第五天,系统调试测试打包和验收5.程序说明:5.1.数据分析5.1.1.计算器:计算器的程序设计,必然有数据的输入,当中就包含运算符和数字,都要通过计算器上的button按钮选项按键输入进去,里面录入的为double型的数据,进行运算时比较方便,不用进行多次类型转换。5.1.2.计时器:计时器的程序设计,所有功能都要通过计时器上的button按钮来实现,计时开始后通过一个booleanisRun来确定计时器运行的状态,在不同的状态可以按下不同的按键,还是较为方便的。6.类的设计6.1.1.计算器:classCFrameextendsFrame{}是初始化界面,以及响应用户的操作。CFrame是个内部类,功能是进行进制的转换。6.1.2.计时器:classTimerextendsFrameimplementsRunnable,ActionListener{}是初始化界面,以及响应用户的操作。publicvoidrun()是个内部类,功能是进行时间进制的转换。6.2.功能设计6.2.1.计算器:数字键按钮,选中所需要进行计算的数字。(”0~9”)。运算符按钮,选中所需要进行的四则运算。(”+”、”-“、”*”、”/”)。点击”=”按钮,输出运算的结果。点击”CE”按钮,实现数字的清零。点击”C”按钮,实现显示框的重置6.2.2.计时器:开始按钮,让计时开始;暂停按钮,让计时暂停;继续按钮,让计时重新开始;停止按钮,让计时停止;重置按钮,让计时回到初始状态;6.3.程序分析6.3.1.计算器本程序是一个使用Frame容器作为JavaApplication程序图形用户界面。本程序有两个类组成,一个是主类,该类中main()方法创建了一个了框架类,在框架里设计了计算器的布局,以及对各个按键按下之后的对应的事件产生。6.3.2.计时器:本程序也是使用Frame容器作为JavaApplication程序图形用户界面。本程序有两个类组成,一个是主类,该类中main()方法创建了一个了框架类,在框架里设计了计时器的布局,以及对各个按键按下之后的对应的事件产生。6.4.流程图计算器流程图开始主类中定义主方法主方法中定义主框架主框架中添加显示框和两个容器容器中增加按键和对个按键的监听写各个按键的方法7.运行结果和结果分析:7.1.运行结果:7.1.1.计算器:7.1.2.计时器:7.2.结果分析:7.2.1.计算器:计算器正常工作以及显示出来,界面分为三个部分,上方的显示区域,中间的文字控制区域,和下方的输入区域,以三个方面来组成整个计算器,计算器上的每个功能都是仿造WIN上的计算器制作的,计算器非常的好用,除了不支持键盘直接输入,其计算功能还是可以打败许多大街上卖的计算器的。7.2.2.计时器:计时器可以正常工作以及显示,按下开始后可以按下暂停、停止两个按键,按下停止后可以按下重置按钮,计时器时间精确达到毫秒级。8.自我评价与总结:作为一名物联网工程专业的学生,我觉得能做类似的课程设计是十分有意义,而且是十分必要的。经过一周的努力,计算器课程设计终于结束了,虽然很忙碌、很疲劳,但是收获很大当然在本次课程设计的过程中,我碰到了很多问题,比如写好的程序无法运行,最先是缺少没有权限调用什么什么的,百度之后解决了。还有就是实现退格功能时不知道怎样处理,最后上网百度了一下才找到了方法,果然网络的时代是学习的时代。还有取反按钮的一个bug,后来发现是没有把取反键设计进去。还遇到了其他的困难,这些花费了很多时间,使我失败了很多次,但是通过我不解的努力还是一一克服了这些问题,最终还是成功了。课程设计中,我的JAVA能力理所当然的提高了,对JAVA不像刚开始学习的时候那样模棱两可的感觉,Java这种面相对象的编程方法,是非常好学习的。附录:程序清单,计算器:packagejisuanqi;importjava.awt.*;importjava.awt.event.*;publicclassCalculator{publicstaticvoidmain(String[]args){CFramef=newCFrame();}}classCFrameextendsFrame{doubleone,two,m;TextFieldtf;intop=-1;CPanelUp1;CPanelDp2;CFrame(){super(Calculator);setLayout(newFlowLayout(FlowLayout.CENTER));setBackground(newColor(100,150,150));setForeground(Color.white);setResizable(false);setSize(300,250);tf=newTextField(22);tf.setEditable(false);tf.setBackground(newColor(108,118,103));tf.setForeground(Color.white);tf.setFont(newFont(Arial,Font.BOLD,16));add(tf);p1=newCPanelU();p2=newCPanelD();add(p1);add(p2);setVisible(true);addWindowListener(newWclose());}classCButtonextendsButton{CButton(Strings){super(s);setBackground(Color.blue);}}classCPanelUextendsPanel{CButtonbBS,bCE,bC;CPanelU(){setLayout(newGridLayout(1,3));bBS=newCButton(BackSpace);bCE=newCButton(CE);bC=newCButton(C);add(bBS);bBS.addActionListener(newPressbBS());add(bCE);bCE.addActionListener(newPressbCE());add(bC);bC.addActionListener(newPressbC());}}classCPanelDextendsPanel{CButtonb1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bPoint,bP,bM,bCHENG,bCHU,bDENGYU,bDAOSHU,bQIUYU,bSQRT,bMS,bMR,bMC,bMP,bQUFAN;CPanelD(){setLayout(newGridLayout(4,6));b1=newCButton(1);b2=newCButton(2);b3=newCButton(3);b4=newCButton(4);b5=newCButton(5);b6=newCButton(6);b7=newCButton(7);b8=newCButton(8);b9=newCButton(9);b0=newCButton(0);bPoint=newCButton(.);bP=newCButton(+);bM=newCButton(-);bCHENG=newCButton(*);bCHU=newCButton(/);bDENGYU=newCButton(=);bDAOSHU=newCButton(1/x);bQIUYU=newCButton(%);bQUFAN=newCButton(+/-);bSQRT=newCButton(sqrt);bMS=newCButton(MS);bMR=newCButton(MR);bMC=newCButton(MC);bMP=newCButton(M+);add(bMC);bMC.addActionListener(newPressbMC());add(b7);b7.addActionListener(newPressb7());add(b8);b8.addActionListener(