java小球碰撞学生信息管理系统实训报告.docx
《java小球碰撞学生信息管理系统实训报告.docx》由会员分享,可在线阅读,更多相关《java小球碰撞学生信息管理系统实训报告.docx(56页珍藏版)》请在冰点文库上搜索。
java小球碰撞学生信息管理系统实训报告
北京联合大学
实训报告
课程(项目)名称:
Java程序设计实训(双语)
学 院:
师范学院 专业:
计算机
班 级:
学 号:
2010
姓 名:
成 绩:
2013年6月17
实训一小球的碰撞试验
一、实训任务与目的
实训任务:
使用多线程编程和图形界面的画图,编写一个或多个在长方形盒子中反弹的小球。
要求:
界面设计、颜色选取等可能美观。
有能力的同学可以设计图形界面的操作按钮,用于改变球的颜色、反弹速度,开始和结束按钮等。
本任务要求4节课完成。
实训目的:
1、掌握Swing图形用户界面编程以及事件处理等,掌握java绘图技术。
2、掌握多线程编程的基本原理,能使用Runnable、ExecutorService等接口进行线程的创建、启动等工作。
3、培养独立查找资料,并解决问题的能力。
二、原理
通过Ball类来进行对球的设计,有对于增加球的速度,返回球的当前速度,球球移动到边界事的处理球颜色的随机处理,球速度的随机处理等,使得运行时的界面和球的各种运动状态都能良好。
每一个球都是通过一个线程来进行控制,其中还对球的碰撞进行了分析和处理,通过对线程中小球的之间距离和半径和的比较对碰撞情况做了比较好的处理,Balliards还设定了各个全局常量,设置了小球的最小最大速度,最小最大尺寸,球的数目,窗体的宽度和长度等。
三、实训内容与步骤
代码如下:
packageshixun1;
importjava.awt.Color;
importjava.awt.Graphics;
importjava.util.Random;
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
publicclassBallextendsJPanelimplementsRunnable{
inty=200,x=70,a;
Colorl0=Color.YELLOW;
Colorl1=Color.BLACK;
Colorl2=Color.RED;
Colorl3=Color.BLUE;
Colorl4=Color.GREEN;
publicvoidpaint(Graphicsg){
super.paintComponent(g);
g.setColor(l0);
g.drawRect(20,20,360,360);
g.setColor(l1);
g.fillOval(y,x,20,20);
g.setColor(l2);
g.fillOval(40,y,20,20);
g.setColor(l3);
g.fillOval(x,y,20,20);
g.setColor(l4);
g.fillOval(x,90,20,20);
}
publicvoidrun(){
while(true){
try{
{if(a==0)
{l0=Color.GREEN;
l1=Color.CYAN;
l2=Color.YELLOW;
l3=Color.ORANGE;
l4=Color.GRAY;
Randomll=newRandom();
intld=ll.nextInt(15)+1;
x-=1;
y+=1;
Thread.sleep(ld);
if(x==20)
a=1;
}
elseif(a==1)
{l0=Color.RED;
l1=Color.BLUE;
l2=Color.RED;
l3=Color.BLACK;
l4=Color.PINK;
Randomll=newRandom();
intlmb=ll.nextInt(4)+1;
x+=1;
y+=1;
Thread.sleep(lmb);
if(y==360)
a=2;
}
elseif(a==2)
{l0=Color.BLUE;
l1=Color.darkGray;
l2=Color.WHITE;
l3=Color.GREEN;
l4=Color.MAGENTA;
Randomll=newRandom();
intld=ll.nextInt(10)+1;
x+=1;
y-=1;
Thread.sleep(ld);
if(x==360)
a=3;
}
elseif(a==3)
{l0=Color.YELLOW;
l1=Color.GREEN;
l2=Color.BLUE;
l3=Color.RED;
l4=Color.ORANGE;
Randomll=newRandom();
intlmb=ll.nextInt(6)+1;
x-=1;
y-=1;
Thread.sleep(ld);
if(y==20)
a=0;
}
}
}catch(InterruptedExceptione){
e.printStackTrace();
}
repaint();
}
}
publicstaticvoidmain(Stringargs[]){
Ballpanel=newBall();
ExecutorServicethreadExecutor=
Executors.newCachedThreadPool();
threadExecutor.execute(panel);
//createanewframetoholdthepanel
JFrameapplication=newJFrame();
//settheframetoexitwhenitisclosed
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
application.add(panel);//addthepaneltotheframe
application.setSize(400,420);//setthesizeoftheframe
application.setVisible(true);
}//endmain
}
下面为运行时的图形界面:
按钮设计
代码:
packageshixun1;
importjava.awt.BorderLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
publicclassBallButtonextendsJFrame{
JButtonstart,stop;
ThreadthreadExecutor;
BallButton(){
super("碰撞的小球--liudan29");
finalBallld=newBall();
this.add(ld,BorderLayout.CENTER);
JPanelbtn=newJPanel();
start=newJButton("开始");
stop=newJButton("停止");
btn.add(start);
btn.add(stop);
ActionListenerhandler1=null;
ActionListenerhandler=null;
start.addActionListener(handler1);
stop.addActionListener(handler);
start.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevent){
start.setEnabled(false);
threadExecutor=newThread(ld);
threadExecutor.start();
stop.setEnabled(true);
}
});
stop.addActionListener(newActionListener(){
@SuppressWarnings("deprecation")
publicvoidactionPerformed(ActionEventevent){
start.setEnabled(true);
threadExecutor.stop();
stop.setEnabled(false);
}
});
add(btn,BorderLayout.NORTH);
this.setSize(450,500);
this.setVisible(true);
}
publicstaticvoidmain(String[]args){
newBallButton();
}
}
开始状态下运行的界面:
停止状态下运行的界面:
实训中的问题和解决方法
(1)停止按钮不能控制小球
(2)小球碰壁后颜色没有变化
在遇到问题时,我首先会先向班上基础知识扎实的同学请教,如果在同学的帮助下还不能解决的问题我就会向老师求助,最终在大家的共同努力下程序加以完善
总结
在几天的实训中我真正体会到这几点。
首先兴趣是关键,我的学习完全是兴趣导向的,所以压力并不大。
因为有兴趣,所以我会很想充分理解一切细节。
又因为理解,所以许多原本片片断断的知识都可以渐渐互相融会贯通,累积技术能量、理论和实务之间的玻璃被打破了,学习效率才能倍增。
其次态度要端正,摆正自己的心态,不要以为什么东西上网搜搜就可以了,一定要有自己的东西。
只有自己付出过,当程序运行成功时的那种喜悦才会令自己有一种莫名的自豪感。
态度决定一切!
然后还要有敢于挑战不安于现成的程序,要敢于用多种方法实现一个目的。
这次的实训也让我明白了要做好一个系统,团队合作永远是最重要的,一个人的力量永远是渺小的,团队分工、合作会使得问题更加的简单、解决的迅速。
实训二基于java的学生信息管理系统
一、实训任务与目的
实训任务:
编写图形界面的应用程序,实现对Mysql数据库的添、删、改、查等操作,实现易于操作的信息管理系统。
本任务要求16节课(4个时间单元)完成。
另外,1个
要求:
一、确定所做的信息管理系统,进行数据库和表的设计(Mysql下),创建库和表,要求至少要有2张表。
二、进行软件系统的总体设计和模块的设计。
三、实现各个模块的功能设计和编码:
具体包括:
1.编写数据库连接类,实现数据库连接并测试。
2.编写对应于数据库表的的各个javabean类并测试。
每个数据库表对应一个bean类。
3.编写实现数据库表的添、删、改、查等操作的数据库操作类,每个数据库表对应一个数据库操作类。
根据系统应用的需求定义实现各个功能的方法、根据需求重载方法,使得软件功能尽可能完善且易于使用。
4.系统图形界面设计与实现、测试。
要求有登陆验证、菜单和相关图形组件,使软件系统易于使用和维护等。
四、对系统进行进行整体测试。
五、撰写实训报告(要求见附件文档)。
实训目的:
学生信息管理系统,是对学生的个人信息,课程信息,成绩信息以信息化的方式进行管理,最大限度地减少各个环节可能出现的错误,有效减少因人力资源局限性导致的存储信息量大,信息存储错误,混淆等问题,合理进行信息存储,使学校能够合理录入学生的个人资料,学期成绩情况,以及课程安排,为学校师生的工作提供后方面。
二、原理
数据库是一种存储结构,它允许使用各种格式的输入、输出、调用、不用反复输入,它具有实现资源共享的功能。
JCBC制定了统一的访问各类关系数据库的标准接口,但他不能直接访问数据库。
需要加载驱动才可以使用。
三、实训内容与步骤
1建立数据库、并在数据库中添加students表以及users表
单机开始—程序—MySQL—MySQLServer5.5—MySQL5.5CommandLineClient打开数据库如下图所示:
Password:
111111
输入createdatabaseliudan;
useliudan;
createtableusers(
idint(11)notnullauto_incrementprimarykey,
namevarchar(10)notnull,
passwordvarchar(10)notnull,
levelint
(1)notnull);
insertintousers(id,name,password,level)values('1','teacher','123456','1');
updateuserssetname='mm',password=123456,level=0whereid=2;
createtablestudents(
idint(11)notnullauto_incrementprimarykey,
namevarchar(10)notnull,
tallint
(1)notnull);
insertintostudents(id,name,tall)values('1','liudan','173');
2、创建Students的javabean
将如下代码保存为Students.java文件
packagebean;
publicclassStudents{
privateintid;
privateStringname;
privateinttall;
privateStudents(){
super();
}
publicStudents(intid,Stringname,inttall){
super();
this.id=id;
this.name=name;
this.tall=tall;
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetTall(){
returntall;
}
publicvoidsetTall(inttall){
this.tall=tall;
}
}
3、创建users的javabean
将如下代码保存为Users.java文件
packagebean;
publicclassUsers{
privateintid;
privateStringname;
privateStringpassword;
privateintlevel;
publicUsers(){
super();
}
publicUsers(intid,Stringname,Stringpassword,intlevel){
super();
this.id=id;
this.name=name;
this.password=password;
this.level=level;
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicintgetLevel(){
returnlevel;
}
publicvoidsetLevel(intlevel){
this.level=level;
}
}
4、实现数据库连接:
将如下代码保存为MySqlConnection.java文件
packagedb;
importjava.sql.*;
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;
importbean.Users;
publicclassDBUsers{
/**
*@paramargs
*/
privateDBUsers(){
//TODOAuto-generatedconstructorstub
}
publicstaticvoidaddUsers(Usersa){
Connectionconn=null;
try{
conn=MySqlConnnection.getConnection();//获得数据连接
PreparedStatementps=conn
.prepareStatement("insertintousers(id,name,password,level)values(?
?
?
?
)");
ps.setLong(1,a.getId());
ps.setString(2,a.getName());
ps.setString(3,a.getPassword());//设置第2个占位符的内容
ps.setInt(4,a.getLevel());
ps.executeUpdate();//执行更新操作
ps.close();
}catch(Exceptionex){
ex.printStackTrace();
}finally{
MySqlConnnection.closeConnection(conn);
}
}
publicstaticvoiddeleteUsers(intid){
Connectionconn=null;
try{
conn=MySqlConnnection.getConnection();//获得数据连接
PreparedStatementps=conn
.prepareStatement("DELETEFROMusersWHEREid=?
");
ps.setInt(1,id);//设置第1个占位符的内容
ps.executeUpdate();//执行更新操作
ps.close();
}catch(Exceptionex){
ex.printStackTrace();
}finally{
MySqlConnnection.closeConnection(conn);
}
}
publicstaticvoidupdateUsers(Usersa){
Connectionconn=null;
try{
conn=MySqlConnnection.getConnection();
StringSql="UPDATEusersSETname=?
password=?
level=?
WHEREid=?
";
PreparedStatementps=conn.prepareStatement(Sql);
ps.setString(1,a.getName());
ps.setString(2,a.getPassword());
ps.setInt(3,a.getLevel());
ps.setInt(4,a.getId());//设置第4个占位符的内容
ps.executeUpdate();//执行更新操作
ps.close();
}catch(Exceptionex){
ex.printSta