java课设报告 3.docx
- 文档编号:23600844
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:22
- 大小:222.04KB
java课设报告 3.docx
《java课设报告 3.docx》由会员分享,可在线阅读,更多相关《java课设报告 3.docx(22页珍藏版)》请在冰豆网上搜索。
java课设报告3
武汉理工大学华夏学院
课程设计报告书
课程名称java课程设计
课程设计总评成绩
学生姓名、学号
学生专业班级
指导教师姓名
课程设计起止日期
武汉理工大学华夏学院
《Java语言课程设计》课程任务书
Java语言课程设计是“面向对象程序设计(Java)”课程之后的一个教学实践环节,是信管专业的重要实践性课程。
其基本任务是综合利用课程中学到的编程知识和编程技巧,完成具有一定难度、一定编程量的课程设计题目,使学生掌握高级编程语言的知识和编程技术,掌握程序设计的思想和方法,具备利用计算机求解实际问题的能力。
同时也是对软件开发过程的综合训练。
通过Java语言课程设计,应该达到以下基本目标:
(1)进一步巩固和复习Java程序设计的基础知识,提高编程技术。
(2)进一步掌握Java面向对象的编程思想。
(3)进行利用Java语言开发项目的训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
(4)提高学生程序调试的技巧和程序设计的能力。
(5)提高学生分析问题、解决问题以及实际运用的能力。
二、课程设计内容及基本要求
本课程设计包含如下两个题目:
1.计算器
基本要求:
编写程序实现类似下图所示的图形用户界面,实现windows计算器功能
2.数字秒表
基本要求:
设计一个图所示的数字秒表,实现计时启动、暂停、继续、停止和重置等功能,要求多个按钮之间的状态是相互关联的。
三、学时分配进度要求
本课程设计将安排在第18周,通信实验室223机房。
具体安排如下:
本课程设计的时间为一周,学时分配如下表:
序号
内容
时间
1
教师讲解第一题;学生查阅资料、准备程序
周一上午
2
上机调试、测试第一题程序
周二全天
3
教师讲解第二题;学生查阅资料、准备程序
周三上午
4
上机调试、测试第二题程序
周四全天
5
分组答辩、提交课程设计报告及相关文档,教师验收评分
周五
一、课程设计项目名称
数字秒表
2、项目设计要求及性能指标
(1)设计一个图所示的数字秒表,实现计时启动、暂停、继续、停止和重置等功能,要求多个按钮之间的状态是相互关联的。
(2)在没按开始建时,其他键失效
三、项目设计方案
(1)在开发平台上建立项目,包,和类,
(2)选择是用定时器
(3)选择正确的布局
(4)依次将需要的按键加入容器中
(5)每个按键设置监听对象
(6)对监听进行对象响应
3、系统软件设计(给出系统的软件设计,画出程序流程图,并给出关键部分的程序说明。
)
packagekhs;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassStopWatchextendsJFrameimplementsActionListener{
JTextAreatimeArea;//时间显示
JButtonstartBtn,pauseBtn,continueBtn,stopBtn,resetBtn;//定义变量
intmin=0,sec=0,mSec=0;
Timertimer;//使用定时器
publicStopWatch(Stringstr){
//TODO自动生成的构造函数存根
super(str);
//容器对象生成
ContainercontentPane=getContentPane();
contentPane.setLayout(newBorderLayout());
//北边:
时间显示区域
timeArea=newJTextArea("",1,12);
timeArea.setFont(newFont("宋体",Font.ITALIC,32));
timeArea.setText("00:
00:
00");
contentPane.add(timeArea,BorderLayout.NORTH);
//中间:
开始\暂停\继续\停止\重置按钮
JPanelpCenter=newJPanel(newGridLayout(1,2));//设置网格布局
startBtn=newJButton("开始");
pCenter.add(startBtn);
startBtn.addActionListener(this);//设置监听对象
pauseBtn=newJButton("暂停");
pCenter.add(pauseBtn);
continueBtn=newJButton("继续");
pCenter.add(continueBtn);
stopBtn=newJButton("停止");
pCenter.add(stopBtn);
resetBtn=newJButton("复位");
pCenter.add(resetBtn);
contentPane.add(pCenter,BorderLayout.CENTER);
//启动时只有开始按钮可以点击
pauseBtn.setEnabled(false);//其他键失效
continueBtn.setEnabled(false);
stopBtn.setEnabled(false);
resetBtn.setEnabled(false);
//注册事件监听
startBtn.addActionListener(this);
pauseBtn.addActionListener(this);
continueBtn.addActionListener(this);
stopBtn.addActionListener(this);
resetBtn.addActionListener(this);
//设定定时器周期为10毫秒
timer=newTimer(10,this);
pack();
setVisible(true);
}
publicstaticvoidmain(Stringargs[]){
//@SuppressWarnings("unused")
StopWatchs=newStopWatch("物联网1121柯宏帅的表");
}
@Override
publicvoidactionPerformed(java.awt.event.ActionEvente){
//TODO自动生成的方法存根
StringtimeStr,str1,str2,str3;
//定时器事件
if(e.getSource()==timer){//时间更新
mSec++;
if(mSec==100){
mSec=0;
sec++;
}
if(sec==60){
sec=0;
min++;
}
if(min==60)
min=0;//显示新时间
if(min<10)
str1="0"+min+":
";
else
str1=min+":
";
if(sec<10)
str2="0"+sec+":
";
else
str2=sec+":
";
if(mSec<10)
str3="0"+mSec;
else
str3=mSec+"";
timeStr=str1+str2+str3;
timeArea.setText(timeStr);
}
//点击开始按钮
elseif(e.getSource()==startBtn){
//开始按钮灰显,激活其他按钮
startBtn.setEnabled(false);//开始失效
pauseBtn.setEnabled(true);//暂停有效
continueBtn.setEnabled(false);//继续失效
stopBtn.setEnabled(true);
resetBtn.setEnabled(true);
//开启定时器
timer.start();
}
//点击继续按钮
elseif(e.getSource()==continueBtn){
//开始按钮灰显,激活其他按钮
startBtn.setEnabled(false);
pauseBtn.setEnabled(true);
continueBtn.setEnabled(false);
stopBtn.setEnabled(true);
resetBtn.setEnabled(true);
timer.start();
}
//点击停止按钮
elseif(e.getSource()==stopBtn){
//开始按钮灰显,激活其他按钮
startBtn.setEnabled(false);
pauseBtn.setEnabled(false);
continueBtn.setEnabled(false);
stopBtn.setEnabled(false);
resetBtn.setEnabled(true);
timer.stop();
}
//点击暂停按钮
elseif(e.getSource()==pauseBtn){
//开始按钮灰显,激活其他按钮
startBtn.setEnabled(false);
pauseBtn.setEnabled(false);
continueBtn.setEnabled(true);
stopBtn.setEnabled(false);
resetBtn.setEnabled(true);
timer.stop();
}
//点击重置按钮
elseif(e.getSource()==resetBtn){
//重置时只有开始按钮可以点击
startBtn.setEnabled(true);
pauseBtn.setEnabled(false);
continueBtn.setEnabled(false);
stopBtn.setEnabled(false);
resetBtn.setEnabled(false);
//停止定时器
timer.stop();
//计时显示置0
timeArea.setText("00:
00:
00");
min=0;
sec=0;
mSec=0;
}
}
}
4、项目设计结果分析
结果如图所示
当按下开始键后其他键功能激活
一、课程设计项目名称
《java计算器》
二、项目设计要求及性能指标
1.设计的计算器应用程序可以完成加法、减法、乘法、除法和取余运算。
且有小数点、正负号、求倒数、退格和清零功能。
2.课程设计可选用Eclipse、JBuilder、NetBeans等作为开发平台以提高开发效率,通过资料查阅和学习尽可能熟练掌握其中一种集成开发环境。
3.认真按时完成课程设计报告,课程设计报告内容包括:
设计任务与要求、需求分析、设计思路、详细设计、运行调试与分析讨论和设计体会与小结六个部分。
三、项目设计方案
1、系统方案设计(分析项目要求和指标,给出总的设计方案,画出项目设计的方框图,写出设计方案和工作原理。
)
1.1.开发的技术及功能
本课程设计是要做一个图形界面的计算器,其界面主要是由swing组件中的控件构成。
程序实现了计算器的基本功能有:
加、减、乘、除基本算术运算(可以进行浮点和负数运算)和求倒数、退格和清零功能,同时能进行指数运算和自然对数运算,还有求倒数、退格和清零功能。
1.2.设计思路
设计这个计算器主要是参考Windows操作系统中自带的计算器,由于编者水平和时间的限制,不能将计算器设计到科学型及其他更复杂的类型,在设计过程中还参考了一些其他的优秀设计。
但本计算器除了常用的加减乘除(可以进行浮点和负数运算)这些基本运算外,还有求余、求倒、退格、清零,甚至还能进行一些复杂科学的运算,比如求平方根(sqrt),并且还能进行连续运算。
总体上说来,本计算器设计简单,代码很少,程序很小,但功能却很强大,这是同类计算器所不具备的。
1.3.设计效果
设计时先在设计界面中添加按钮等控件,后在按钮的actionPerformed事件中添加代码完成其功能其中调用了Java类中的Math函数库以及各种字符串操作。
2、系统软件设计(给出系统的软件设计,画出程序流程图,并给出关键部分的程序说明。
)
1系统软件设计图
2.1.主程序设计
这是一个简单的计算器,里面所涉及到的功能就是加、减、乘、除、开方运算、等基本功能。
仅须定义两个变量来保存双运算操作的前一个数和当前在计算器上显示的数字即可,而对于单运算的操作要求更加简单,只需要一个变量就可以了。
当然对数据进行判断是必不可少的。
在输入数据之后Character.isDigit(Command.charAt(0))判断输入的数据是否符合要求。
不符合要求给出提示,符合要求以后将判断点击的运算符,执行相应的操作。
对于单运算操作要进一步判断是否符合要求,如果是就进入下步计算,如果不是就弹出相应的提示:
“负数不能开根号";"除数不能为零";用try….catch捕获异常,如果有异常则中止活动。
在进行开方(sqrt)运算时,如果输入数为负数,则弹出"负数不能开根号",中止运算。
在进行自然对数运算时(log)如果输入数为负数,则弹出"负数不能进行自然对数运算”。
在进行三角函数运算时(cos、tan)不必考虑输入的数字是否符合规范,对于任意输入的数函数本身有一个判断的过程,都能把输入的数转化为合适的范围,进而得到正确的结果。
对于加减乘除等双运算操作,每个功能都由每一个模块来实现,当按下加按钮时,进行相应的加法操作,这一块对相应的操作数没有要求;当点击减号时,则进行减法操作,由jTextField.getText()得到数字按钮的值显示在相应的文本框中;乘法操作在点击一个操作数然后点击乘号再点击另一个时得出相应的结果显示在文本框中;在作除法运算时,当被除数点击为零时,调用catch进行异常处理,弹出“Infinity”。
2.2.数据分析
在事件处理,触发按钮事件时,先判断是或是数字是或是“-/+”是或是“.”,是的话就将负号“-”、数字、小数点“.”分别写入文本框并存放在sum中,然后判断是或是“退格”、“求倒”等,是的话进行相应的处理,都不是的话则跳到doOperation()执行运算同时将运算符存放在preOperater中。
触发按钮事件时,要进一步分析,是重新开始计算时触发的按钮事件还是计算中间触发的按钮事件。
2.3.整体流程图设计
2.4.主要功能程序说明
importjava.awt.*;
importjava.awt.event.*;
publicclassMycalcextendsWindowAdapterimplementsActionListener
{
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.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);
四、设计思路
1、本应用程序继承自框架类(JFrame),容器Containerc采用BorderLayout边缘布局,将单行文本框加入到“North”区域,包含各种按钮的面板JPanelp加入到”Center”区域。
包含各种按钮的面板JPanelp采用3行6列的网格布局,然后将数字按钮和运算符按钮以及控制按钮用一个for循环添加到面板中同时注册按钮事件监听器。
2、事件监听器中的事件处理方法voidactionPerformed(ActionEventevt)完成主要的按钮事件的处理。
事件处理分以下几种情况:
数字按钮事件(”0”,”1”,”2”…”8”,”9”)、运算符按钮事件(”+”,”-“,”*”,”/”,”%”)、正负号按钮事件(”+/-“)、小数点按钮事件(”.”)、等号按钮事件(”=”)、求倒按钮事件(”求倒”)、退格按钮事件(”退格”)、清除按钮事件(“C”)以及求平方根(sqrt).
3、在事件处理,触发按钮事件时,先判断是或是数字是或是“-/+”是或是“.”,是的话就将负号“-”、数字、小数点“.”分别写入文本框并存放在sum中,然后判断是或是“退格”、“求倒”等,是的话进行相应的处理,都不是的话则跳到doOperation()执行运算同时将运算符存放在preOperater中。
触发按钮事件时,要进一步分析,是重新开始计算时触发的按钮事件还是计算中间触发的按钮事件。
4、计算器完成的是一个数学表达式,如
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java课设报告 java 报告