JAVA课程设计报告.docx
《JAVA课程设计报告.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计报告.docx(28页珍藏版)》请在冰豆网上搜索。
JAVA课程设计报告
《Java面向对象程序设计》
课程设计报告
(2013—2014学年第一学期)
专业:
软件服务
班级:
二班
姓名:
学号:
**********
指导教师:
成绩:
计算机与信息工程学院
2014
年
1
月
17
日
目的
本课程是软件工程、信息技术外包专业所开设的一门重要实践课程,主要要求学生掌握Java语言和面向对象在实践中的应用。
本课程设计的目的是使学生在理论学习的基础上,动手编写程序,通过应用所学习的知识,来解决一些实际的问题。
在此基础上,真正理解和掌握Java面向对象程序设计的相关理论,具备程序设计的能力。
条状图
一、设计内容
设计实现一个应用程序,创建一个条状图,用于查看一组JAVA成绩的分布情况。
程序初始化一组0-100的整数,根据整数值进行分类,通过调用fillRect方法绘图。
二、方案设计与论证
1.随机产生10个整数,范围在0到100之间。
2.将这十个数分5种水平累加。
累加的数值大小的十倍即为条状图的长度。
3.调用fillRect方法绘图。
三、程序运行结果(截图)
四、心得体会
1.在规定条状图大小位置较麻烦。
2.在BarChart类中一直出现不匹配的问题。
解决方法:
将for循环移入paintComponent()方法中。
3.为了代码的严谨性,在BarChart类中增添了构造方法,在构造方法中初始化了背景色和面板大小,规定了条状图的大小。
五、参考资料与致谢
参考Java书本4.6图形对象中的例题4.5的格式。
六、源程序
1.Bar.java
importjavax.swing.JFrame;
publicclassBar
{
//-----------------------------------------------------------------
//Createsthemainprogramframe.
//-----------------------------------------------------------------
publicstaticvoidmain(String[]args)
{
JFrameframe=newJFrame("BarChart");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BarChartpanel=newBarChart();
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}
2.BarChart.java
importjavax.swing.JPanel;
importjava.awt.*;
importjava.util.Random;
publicclassBarChartextendsJPanel
{
Randomgenerator=newRandom();
intscore;
intl1;
intl2;
intl3;
intl4;
intl5;
publicBarChart()
{
setBackground(Color.cyan);
setPreferredSize(newDimension(400,300));
}
publicvoidpaintComponent(Graphicspage)
{
super.paintComponent(page);
for(inti=0;i<10;i++)
{
score=generator.nextInt(101);
if(score>=91&&score<=100)
l1++;
if(score>=81&&score<=90)
l2++;
if(score>=71&&score<=80)
l3++;
if(score>=60&&score<=70)
l4++;
if(score>=0&&score<=59)
l5++;
}
page.setColor(Color.lightGray);
page.fillRect(150,50,155,110);
page.setColor(Color.black);
page.drawLine(180,50,180,160);
page.drawLine(210,50,210,160);
page.drawLine(240,50,240,160);
page.drawLine(270,50,270,160);
page.drawString("0",150,170);
page.drawString("2",180,170);
page.drawString("4",210,170);
page.drawString("6",240,170);
page.drawString("8",270,170);
page.drawString("10",300,170);
page.setColor(Color.magenta);
page.fillRect(150,60,l1*10,10);
page.setColor(Color.magenta);
page.fillRect(150,80,l2*10,10);
page.setColor(Color.magenta);
page.fillRect(150,100,l3*10,10);
page.setColor(Color.magenta);
page.fillRect(150,120,l4*10,10);
page.setColor(Color.magenta);
page.fillRect(150,140,l5*10,10);
page.setColor(Color.black);
page.drawString("91到100",100,67);
page.drawString("81到90",100,87);
page.drawString("71到80",100,108);
page.drawString("60到70",100,130);
page.drawString("0到59",100,155);
}
}
虐待鼠标
一、设计内容
鼠标是一个易损器件,损坏的原因往往是因为过量的点击。
请参考第四章的例题4.10设计一款程序测试在一分钟内你能点击鼠标多少次,找你的同学来试试看看谁的食指更灵活。
二、方案设计与论证
1.建一个界面(用框架)
2.建一个面板介入到框架中
面板中添加按钮,标签(显示时间和点击鼠标次数)
面板中添加监听器(监听点击鼠标次数和计时)
提示:
时间差计算方法
Calendarbegin=Calendar.getInstance();//获取起点时间
Calendarend=Calendar.getInstance();//获取终点时间
longbetween=end.getTimeInMillis()-begin.getTimeInMillis()/1000;//除以1000是为了将毫秒转换成秒
三、程序运行结果(截图)
四、心得体会
1.本题需要两部分任务,倒计时Timber的调用,和记录点击鼠标的次数。
2.刚开始对题目所要用到的方法不太清楚,结合书本上的内容和上网查阅相关资料获得。
3.原本新建一个类,用来进行计时问题,但是程序出现错误。
因为对API不是很了解,上网查阅了API关于Calendar类及getInstance()方法和getTimeInMillis()方法的用法,运用监听器方法实现倒计时。
五、参考资料与致谢
参考java书本上第四章的例题4.10,按钮点击次数。
网上获取计时器Calendar类的用法。
六、源程序
1.Push.java
//********************************************************************
//PushCounter.javaAuthors:
Lewis/Loftus
//
//Demonstratesagraphicaluserinterfaceandaneventlistener.
//********************************************************************
importjavax.swing.JFrame;
publicclassPush
{
//-----------------------------------------------------------------
//Createsthemainprogramframe.
//-----------------------------------------------------------------
publicstaticvoidmain(String[]args)
{
JFrameframe=newJFrame("PushCounter");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(newPushPanel());
frame.pack();
frame.setVisible(true);
}
}
2.PushPanel.java
//********************************************************************
//PushCounterPanel.javaAuthors:
Lewis/Loftus
//
//Demonstratesagraphicaluserinterfaceandaneventlistener.
//********************************************************************
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassPushPanelextendsJPanel
{
privateintcount;
privateJButtonpush;
privateJLabellabel;
privateJLabellabel1;
privatelongbetween;
java.util.Calendarbegin=java.util.Calendar.getInstance();//获取起点时间
//-----------------------------------------------------------------
//Constructor:
SetsuptheGUI.
//-----------------------------------------------------------------
publicPushPanel()
{
count=0;
push=newJButton("Push!
");
push.addActionListener(newButtonListener());
label=newJLabel("Pushes:
"+count);
label1=newJLabel("Times:
"+between);
add(push);
add(label);
add(label1);
setPreferredSize(newDimension(300,50));
setBackground(Color.cyan);
}
//*****************************************************************
//Representsalistenerforbuttonpush(action)events.
//*****************************************************************
privateclassButtonListenerimplementsActionListener
{
//--------------------------------------------------------------
//Updatesthecounterandlabelwhenthebuttonispushed.
//--------------------------------------------------------------
publicvoidactionPerformed(ActionEventevent)
{
java.util.Calendarend=java.util.Calendar.getInstance();//获取终点时间
between=(end.getTimeInMillis()-begin.getTimeInMillis())/1000;//除以1000是为了将毫秒转换成秒
if(event.getSource()==push)//获取点击鼠标的信息
{
count++;
label.setText("Pushes:
"+count);
}
if(between<=60)//时间设定为1分钟即60秒
{
between++;
label1.setText("Times:
"+between);
}
else
{
System.out.println("Timeisover!
");
}
}
}
}
挂钟
一、设计内容
设计一款如下的挂钟
提示:
Calendarcalendar=Calendar.getInstance();//获取当前时间
intyear=calendar.get(Calendar.YEAR);//获取年
intmonth=calendar.get(Calendar.MONTH);//获取月
intday=calendar.get(Calendar.DATE);//获取日
intweekDay=calendar.get((Calendar.DAY_OF_WEEK));
intam_pm=calendar.get(Calendar.AM_PM);
inthour=calendar.get(Calendar.HOUR_OF_DAY);//获取小时
intminute=calendar.get(Calendar.MINUTE);//获取分钟
intsecond=calendar.get(Calendar.SECOND);//获取秒
二、方案设计与论证
运用定时器Timer设计运行时钟
运用Graphics绘制时钟图像及表针
三、程序运行结果(截图)
四、心得体会
1.起初不懂画表针如何得到坐标,查阅相关资料得代码如下:
sx=195+95*Math.sin((6*second*Math.PI)/180);
sy=195-95*Math.cos((6*second*Math.PI)/180);mx=195+80*Math.sin((6*minute*Math.PI)/180+(6*second*Math.PI)/180/60);my=195-80*Math.cos((6*minute*Math.PI)/180+(6*second*Math.PI)/180/60);
2.画表针方法如下:
g.setColor(Color.black);
g.drawLine(195,195,(int)sx,(int)sy);
g.drawLine(195,195,(int)mx,(int)my);
g.drawLine(195,195,(int)hx,(int)hy);
五、参考资料与致谢
参考Java书上9.8定时器类的例题9.15
六、源程序
1.clock.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.JFrame;
publicclassclock
{
publicstaticvoidmain(String[]args)
{
JFrameframe=newJFrame("clock");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(newclockPanel());
frame.pack();
frame.setVisible(true);
}
}
2.clockPanel.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.Calendar;
publicclassclockPanelextendsJPanel
{
privatefinaldoublePI=3.14;
privateintDELAY=1000;
privateTimertimer;
privateCalendarcalendar;
privatedoublesx,sy,mx,my,hx,hy;
privateintsecond,minute,hour;
privateints;
publicclockPanel()
{
timer=newTimer(DELAY,newclockListener());
setPreferredSize(newDimension(300,300));
setBackground(Color.white);
timer.start();
}
publicvoidpaint(Graphicsg)
{
super.paint(g);
g.setColor(Color.gray);
g.fillOval(75,75,240,240);
g.setColor(Color.yellow);
g.fillOval(100,100,190,190);
g.setColor(Color.black);
g.drawOval(75,75,240,240);
g.setColor(Color.black);
g.drawOval(100,100,190,190);
g.setColor(Color.black);
g.fillOval(190,190,10,10);
calendar=Calendar.getInstance();
second=calendar.get(Calendar.SECOND);
minute=calendar.get(Calendar.MINUTE);
hour=calendar.get(Calendar.HOUR_OF_DAY);
g.setColor(Color.black);
g.setFont(newFont("TimesRoman",Font.PLAIN,20));
for(inti=1;i<13;i++)
{
intX=(int)(195+100*Math.sin((6*i*5*Math.PI)/180));
intY=(int)(195-100*Math.cos((6*i*5*Math.PI)/180));
if(i<4)
g.drawString(""+i,X-2,Y+3);
if(i<7&&i>=4)
g.drawString(""+i,X-6,Y+16);
if(i>=7&&i<10)
g.drawString(""+i,X-10,Y+12);
if(i>=10&&i<=12)
g.drawString(""+i,X-17,Y+3);
}
for(inta=1;a<13;a++)
{
intX=(int)(195+95*Math.sin((6*a*5*Math.PI)/180));
intY=(int)(195-95*Math.cos((6*a*5*Math.PI)/180));
g.setColor(Color.black);
g.fillOval(X-2,Y-2,4,4);
}
g.setColor(Color.black);
g.drawLine(195,195,(int)sx,(int)sy);
g.setColor(Color.black);
g.drawLine(195,195,(int)mx,(int)my);
g.setColor(Color.black);
g.drawLine(195,195,(int)hx,(int)hy);
}
publicclassclockListenerimplementsActionListener
{
publicvoidactionPerformed(ActionEventevent)
{
sx=195+95*Math.sin((6*second*Math.PI)/180);
sy=195-95*Math.cos((6*second*Math.PI)/180);
mx=195+80*M