当前位置:文档之家› JAVA课程设计报告材料

JAVA课程设计报告材料

《Java面向对象程序设计》课程设计报告(2013— 2014学年第一学期)专业:软件服务班级:二班姓名:学号:1207132208指导教师:成绩:计算机与信息工程学院2014 年 1 月17 日目录目的 (1)条状图 (1)虐待鼠标 (5)挂钟 (8)绘图程序 (13)目的本课程是软件工程、信息技术外包专业所开设的一门重要实践课程,主要要求学生掌握Java语言和面向对象在实践中的应用。

本课程设计的目的是使学生在理论学习的基础上,动手编写程序,通过应用所学习的知识,来解决一些实际的问题。

在此基础上,真正理解和掌握Java面向对象程序设计的相关理论,具备程序设计的能力。

条状图一、设计内容设计实现一个应用程序,创建一个条状图,用于查看一组JA V A成绩的分布情况。

程序初始化一组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.javaimport javax.swing.JFrame;public class Bar{//-----------------------------------------------------------------// Creates the main program frame.//-----------------------------------------------------------------public static void main (String[] args){JFrame frame = new JFrame ("Bar Chart");frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);BarChart panel = new BarChart();frame.getContentPane().add(panel);frame.pack();frame.setVisible(true);}}2.BarChart.javaimport javax.swing.JPanel;import java.awt.*;import java.util.Random;public class BarChart extends JPanel{Random generator = new Random();int score;int l1 ;i nt l2 ;i nt l3 ;i nt l4 ;i nt l5 ;public BarChart(){setBackground (Color.cyan);setPreferredSize (new Dimension(400, 300)); }public void paintComponent (Graphics page){super.paintComponent(page);for (int i = 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.建一个面板介入到框架中面板中添加按钮,标签(显示时间和点击鼠标次数)面板中添加监听器(监听点击鼠标次数和计时)提示:时间差计算方法Calendar begin=Calendar.getInstance(); //获取起点时间Calendar end = Calendar.getInstance(); //获取终点时间long between=end.getTimeInMillis() - begin.getTimeInMillis()/1000; //除以1000是为了将毫秒转换成秒三、程序运行结果(截图)四、心得体会1.本题需要两部分任务,倒计时Timber的调用,和记录点击鼠标的次数。

2.刚开始对题目所要用到的方法不太清楚,结合书本上的内容和上网查阅相关资料获得。

3.原本新建一个类,用来进行计时问题,但是程序出现错误。

因为对API不是很了解,上网查阅了API关于Calendar类及getInstance()方法和getTimeInMillis()方法的用法,运用监听器方法实现倒计时。

五、参考资料与致谢参考java书本上第四章的例题4.10,按钮点击次数。

网上获取计时器Calendar类的用法。

六、源程序1. Push.java//******************************************************************* *// PushCounter.java Authors: Lewis/Loftus//// Demonstrates a graphical user interface and an event listener.//******************************************************************* *import javax.swing.JFrame;public class Push{//-----------------------------------------------------------------// Creates the main program frame.//-----------------------------------------------------------------public static void main (String[] args){JFrame frame = new JFrame ("Push Counter");frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);frame.getContentPane().add(new PushPanel());frame.pack();frame.setVisible(true);}}2. PushPanel.java//******************************************************************* *// PushCounterPanel.java Authors: Lewis/Loftus//// Demonstrates a graphical user interface and an event listener.//******************************************************************* *import java.awt.*;import java.awt.event.*;import javax.swing.*;public class PushPanel extends JPanel{private int count;private JButton push;private JLabel label;private JLabel label1;private long between;java.util.Calendar begin=java.util.Calendar.getInstance(); //获取起点时间//-----------------------------------------------------------------// Constructor: Sets up the GUI.//-----------------------------------------------------------------public PushPanel (){count = 0;push = new JButton ("Push!");push.addActionListener (new ButtonListener());label = new JLabel ("Pushes: " + count);label1 = new JLabel ("Times: " + between);add (push);add (label);add (label1);setPreferredSize (new Dimension(300, 50));setBackground (Color.cyan);}//***************************************************************** // Represents a listener for button push (action) events.//***************************************************************** private class ButtonListener implements ActionListener{//--------------------------------------------------------------// Updates the counter and label when the button is pushed.//--------------------------------------------------------------public void actionPerformed (ActionEvent event){java.util.Calendar end=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("Time is over!");}}}}挂钟一、设计内容设计一款如下的挂钟提示:Calendar calendar=Calendar.getInstance(); //获取当前时间int year=calendar.get(Calendar.YEAR); //获取年int month=calendar.get(Calendar.MONTH); //获取月int day=calendar.get(Calendar.DATE); //获取日int weekDay=calendar.get((Calendar.DAY_OF_WEEK));int am_pm=calendar.get(Calendar.AM_PM);int hour=calendar.get(Calendar.HOUR_OF_DAY); //获取小时int minute=calendar.get(Calendar.MINUTE); //获取分钟int second=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.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.JFrame;public class clock{public static void main(String[] args){JFrame frame=new JFrame("clock");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().add(new clockPanel());frame.pack();frame.setVisible(true);}}2.clockPanel.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.Calendar;public class clockPanel extends JPanel{private final double PI=3.14;private int DELAY=1000;private Timer timer;private Calendar calendar;private double sx,sy,mx,my,hx,hy;private int second,minute,hour;private int s;public clockPanel(){timer=new Timer(DELAY,new clockListener());setPreferredSize(new Dimension(300,300));setBackground(Color.white);timer.start();}public void paint(Graphics g){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(new Font("TimesRoman",Font.PLAIN,20));for(int i=1;i<13;i++){int X=(int)(195+100*Math.sin((6*i*5*Math.PI)/180));int Y=(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(int a=1;a<13;a++){int X=(int)(195+95*Math.sin((6*a*5*Math.PI)/180));int Y=(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);}public class clockListener implements ActionListener{public void actionPerformed(ActionEvent event){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);if(hour<=12){hx=195+65*Math.sin((30*hour*Math.PI)/180+(6*minute*Math.PI)/180/12);hy=195-65*Math.cos((30*hour*Math.PI)/180+(6*minute*Math.PI)/180/12); }if(hour>12){hx=195+65*Math.sin((30*(hour-12)*Math.PI)/180+(6*minute*Math.PI)/180/ 12);hy=195-65*Math.cos((30*(hour-12)*Math.PI)/180+(6*minute*Math.PI)/180/ 12);}repaint();}}}绘图程序一、设计内容编写Java Application程序,使它在GUI界面中通过响应功能按钮的点击事件绘制各种简单的几何图形(矩形、圆形、扇形、多边形和他们的填充效果),并且能够通过接收传递参数控制图形的绘制。

相关主题