Java程序设计课程设计报告
( 20## -- 20## 年度第 1 学期)
Hannoi塔
目 录... 2
1 概 述... 1
1.1 课程设计目的... 1
1.2 课程设计内容... 1
2 系统需求分析... 1
2.1 系统目标... 1
2.2 主体功能... 1
2.3 开发环境... 1
3 系统概要设计... 2
3.1 系统的功能模块划分... 2
3.2 系统流程图... 2
4系统详细设计... 2
5 测试... 14
5.1 测试方案... 14
5.2 测试结果... 14
6 小结... 16
参考文献... 17
附录1 源程序清单... 18
题目
随着社会的进步,我们用来娱乐的游戏世界也越来越丰富,越来越复杂。本程序的Hannoi塔游戏不但包括了游戏最基本的功能,而且还能培养用户的逻辑思维能力,同时也给玩家提供了一定的娱乐空间。本游戏还包括一个自动演示搬移Hannoi塔的功能,此功能能够帮助初次接触此游戏的用户了解此游戏的玩法。
设计HUI界面的Hannoi塔,用户可以通过拖动鼠标移动各个塔上的盘子,程序也可以自动演示盘子的移动过程
可以正常运行程序,并且按照设计目的预想的完成具体功能。
(1)设计GUI界面的Hannoi塔。Hannoi塔中有三个座,名字分别是A、B和C。初始状态 是A座上有五个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上。用户可以用鼠标选中盘子,然后通过拖动鼠标来移动该盘子、释放鼠标来放置该盘子。
(2)程序要求用户在移动盘子过程中,不允许把大盘子放在小盘子的上面,用户最终要完成的是把A座上的全部盘子移动到B座或C座上。
(3)用户可以通过单击Hannoi塔界面上提供的按钮,让程序自动完成把A座上的盘子全部移动到B座或C座上。
(4)用户在移动盘子的过程中,可以随时单击Hannoi塔界面上提供的按钮,重新开始游戏。
JDK1.6。
(1)Tower.java(主类)
Tower类负责创建Hannoi塔的主窗口,该类含有main方法,Hannoi塔从类开始执行。Tower类的成员变量中有两种重要类型的对象:一个int基本型数据和一个char型数组。两种类型的对象分别是:HannoiTower和Button对象 。
(2)HannoiTower.java
HannoiTower类是javax.swing包中JPanel容器的子类,创建的容器被添加到Tower窗口的中心。HannoiTower类的成员变量有两种重要类型的对象、一个int基类型数据和一个char型数组。两种类型的对象分别是:Disk、TowerPoint。
(3)TowerPoint.java
TowerPoint类负责在HannoiTower中创建表示位置的塔点对象。
(4)Disk.java
Disk类是Button的一个子类,创建的对象是HannoiTower容器中的一个按钮,用来表示HannoiTower中的盘子。
Tower类
Tower类是javax.swing包中Frame的一个子类,标明该类的主要成员变量和方法:
① 成员变量
tower是HannoiTower创建的对象。tower对象是一个容器,刻画了Hannoi塔的结构,该对象被添加到窗口的中心。
盘子数目是int型数据,它的默认值是5。盘子数目的值是用来确定tower对象中“盘子”的数目。
towerName是char型数组,长度为3,其三个单元的默认取值依次是A、B和C。towerName数组的单元的值用来确定tower中三个塔的名字。
renew和auto是Button创建的按钮对象,名字依次为“重新开始”和“自动演示搬盘子”,renew和auto都将当前窗口注册为自己的ActionEvent事件监视器。
② 方法
Tower()是构造方法,负责完成窗口的初始化。
main方法是Hannoi塔程序运行的入口方法。
actionPerformed(ActionEvent)方法是HannoiTower类实现的ActionListener 接口中的方法。HannoiTower创建的窗口是renew和auto两个按钮的ActionEvent事件监视器。当用户单击按钮时,窗口将执行actionPerformed(ActionEvent)方法进行相应的操作。当用户单击renew按钮时,actionPerformed(ActionEvent)方法所进行的操作是保持当前的盘子数目的值,并让tower对象根据盘子数目的值设置其初始状态。当用户单击auto按钮时,actionPerformed(ActionEvent)方法所进行的操作是让tower对象返回其中的AutoMoveDisc对象,该对象是一个对话框,用户可以通过对话框让程序自动地移动“盘子”。
代码(Tower.java)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Tower extends Frame implements ActionListener,Runnable
{ HannoiTower tower=null;
Button renew,auto=null;
char towerName[]={'A','B','C'};
int 盘子数目,盘宽,盘高;
Thread thread;
TextArea 信息条=null;
public Tower()
{ thread=new Thread(this);
盘子数目=5;
盘宽=80;
盘高=18;
信息条=new TextArea(12,12);
信息条.setText(null);
tower=new HannoiTower(盘子数目,盘宽,盘高,towerName,信息条);
renew=new Button("重新开始");
auto=new Button("自动演示搬盘子");
renew.addActionListener(this);
auto.addActionListener(this);
add(tower,BorderLayout.CENTER);
add(renew,BorderLayout.SOUTH);
add(auto,BorderLayout.NORTH);
add(信息条,BorderLayout.EAST);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);}
};
setVisible(true);
setBounds(60,20,670,540);
validate();
}
public void actionPerformed(ActionEvent e)
{ if(e.getSource()==renew)
{ if(!(thread.isAlive()))
{ this.remove(tower);
信息条.setText(null);
tower=new HannoiTower(盘子数目,盘宽,盘高,towerName,信息条);
add(tower,BorderLayout.CENTER);
validate();
}
else
{ }
}
if(e.getSource()==auto)
{ if(!(thread.isAlive()))
{ thread=new Thread(this); }
try
{ thread.start(); }
catch(Exception eee)
{ }
}
}
public void run()
{ this.remove(tower);
信息条.setText(null);
tower=new HannoiTower(盘子数目,盘宽,盘高,towerName,信息条);
add(tower,BorderLayout.CENTER);
validate();
tower.自动演示搬运盘子(盘子数目,towerName[0] ,towerName[1],towerName[2]);
}
public static void main(String args[])
{ new Tower(); }
}
HannoiTower类
HannoiTower类是javax.swing包中JPanel容器的一个子类,创建的对象tower是Tower窗口的成员之一,被添加到Tower窗口的中心位置。
① 成员变量
盘子数目是int型数据。盘子数目值用来确定tower对象中盘子的数目。
盘子是Disk型数组,该数组的长度由盘子数目值来确定。Disk数组的每个单元中存放一个Disk对象,依次表明tower对象中有怎样多的盘子。
towerName是char型数组,长度为3,其三个单元的默认取值依次是A、B和C。
Height的值确定每个盘子的高度。
pointA、pointB、pointC都是TowerPoint型数组,三个数组的长度与盘子数目相同,即都是盘子数目。pointA、pointB和pointC的单元都是TowerPoint创建对象,分别用来表示Hannoi塔中三个座上的塔点。A座、B座和C座上的三个塔点分别由pointA、pointB和pointC中的单元来确定。每个座上的五个塔点都是从座顶到座底依次对应数组的相应单元中的TowerPoint对象。
② 方法
HannoiTower(char[])是构造方法,负责完成tower容器的初始化。
tower容器调用paintComponent(Graphics)方法绘制出塔点的位置和必要的视图。
代码(HannoiTower.java)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class HannoiTower extends JPanel implements MouseListener,MouseMotionListener
{ TowerPoint point[];
int x,y;
boolean move=false;
Disk 盘子[];
int startX,startY;
int startI ;
int 盘子数目=0;
int width,height;
char towerName[]={'A','B','C'};
TextArea 信息条=null;
public HannoiTower(int number,int w,int h,char[] name,TextArea text)
{ towerName=name;
盘子数目=number;
width=w;
height=h;
信息条=text;
setLayout(null);
addMouseListener(this);
addMouseMotionListener(this);
盘子= new Disk[盘子数目];
point=new TowerPoint[3*盘子数目];
int space=20;
for(int i=0;i<盘子数目;i++)
{ point[i]=new TowerPoint(40+width,100+space,false);
space=space+height;
}
space=20;
for(int i=盘子数目;i<2*盘子数目;i++)
{ point[i]=new TowerPoint(160+width,100+space,false);
space=space+height;
}
space=20;
for(int i=2*盘子数目;i<3*盘子数目;i++)
{ point[i]=new TowerPoint(280+width,100+space,false);
space=space+height;
}
int tempWidth=width;
int sub=(int)(tempWidth*0.2);
for(int i=盘子数目-1;i>=0;i--)
{ 盘子[i]=new Disk(i,this);
盘子[i].setSize(tempWidth,height);
tempWidth=tempWidth-sub;
}
for(int i=0;i<盘子数目;i++)
{ point[i].放置盘子(盘子[i],this);
if(i>=1)
盘子[i].set上方有盘(true);
}
}
public void paintComponent(Graphics g)
{ super.paintComponent(g);
g.drawLine(point[0].getX(),point[0].getY(),point[盘子数目-1].getX(),point[盘子数目-1].getY());
g.drawLine(point[盘子数目].getX(),point[盘子数目].getY(),point[2*盘子数目-1].getX(),point[2*盘子数目-1].getY());
g.drawLine(point[2*盘子数目].getX(),point[2*盘子数目].getY(),point[3*盘子数目-1].getX(),point[3*盘子数目-1].getY());
g.drawLine(point[盘子数目-1].getX()-width,point[盘子数目-1].getY(),point[3*盘子数目-1].getX()+width,point[3*盘子数目-1].getY());
int leftx=point[盘子数目-1].getX()-width;
int lefty=point[盘子数目-1].getY();
int w=(point[3*盘子数目-1].getX()+width)-(point[盘子数目-1].getX()-width);
int h=height/2;
g.setColor(Color.orange);
g.fillRect(leftx,lefty,w,h);
g.setColor(Color.red);
int size=4;
for(int i=0;i<3*盘子数目;i++)
{ g.fillOval(point[i].getX()-size/2,point[i].getY()-size/2,size,size); }
g.drawString(""+towerName[0]+"塔",point[盘子数目-1].getX(),point[盘子数目-1].getY()+30);
g.drawString(""+towerName[1]+"塔",point[2*盘子数目-1].getX(),point[盘子数目-1].getY()+30);
g.drawString(""+towerName[2]+"塔",point[3*盘子数目-1].getX(),point[盘子数目-1].getY()+30);
g.drawString("将全部盘子从"+towerName[0]+"塔搬运到"+towerName[1]+"塔或"+towerName[2]+"塔",point[盘子数目-1].getX(),point[盘子数目-1].getY()+80);
}
public void mousePressed(MouseEvent e)
{ Disk 盘子=null;
Rectangle rect=null;
if(e.getSource()==this)
move=false;
if(move==false)
if(e.getSource() instanceof Disk)
{ 盘子=(Disk)e.getSource();
startX=盘子.getBounds().x;
startY=盘子.getBounds().y;
rect=盘子.getBounds();
for(int i=0;i<3*盘子数目;i++)
{ int x=point[i].getX();
int y=point[i].getY();
if(rect.contains(x,y))
{ startI=i;
break;
}
}
}
}
public void mouseMoved(MouseEvent e)
{ }
public void mouseDragged(MouseEvent e)
{ Disk disk=null;
if(e.getSource() instanceof Disk)
{ disk=(Disk)e.getSource();
move=true;
e=SwingUtilities.convertMouseEvent(disk,e,this);
}
if(e.getSource()==this)
{ if(move&&disk!=null)
{ x=e.getX();
y=e.getY();
if(disk.get上方有盘()==false)
disk.setLocation(x-disk.getWidth()/2,y-disk.getHeight()/2);
}
}
}
public void mouseReleased(MouseEvent e)
{ Disk disk=null;
move=false;
Rectangle rect=null;
if(e.getSource() instanceof Disk)
{ disk=(Disk)e.getSource();
rect=disk.getBounds();
e=SwingUtilities.convertMouseEvent(disk,e,this);
}
if(e.getSource()==this)
{ boolean containTowerPoint=false;
int x=0,y=0;
int endI=0;
if(disk!=null)
{ for(int i=0;i<3*盘子数目;i++)
{ x=point[i].getX();
y=point[i].getY();
if(rect.contains(x,y))
{ containTowerPoint=true;
endI=i;
break;
}
}
}
if(disk!=null&&containTowerPoint)
{ if(point[endI].是否有盘子()==true)
{ disk.setLocation(startX,startY); }
else
{ if(endI==盘子数目-1||endI==2*盘子数目-1||endI==3*盘子数目-1)
{ point[endI].放置盘子(disk,this);
if(startI!=盘子数目-1&&startI!=2*盘子数目-1&&startI!=3*盘子数目-1)
{(point[startI+1].获取盘子()).set上方有盘(false);
point[startI].set有盘子(false);
}
else
{ point[startI].set有盘子(false);
}
}
else
{ if(point[endI+1].是否有盘子()==true)
{ Disk tempDisk=point[endI+1].获取盘子();
if((tempDisk.getNumber()-disk.getNumber())>=1)
{ point[endI].放置盘子(disk,this);
if(startI!=盘子数目-1&&startI!=2*盘子数目-1&&startI!=3*盘子数目-1)
{ (point[startI+1].获取盘子()).set上方有盘(false);
point[startI].set有盘子(false);
tempDisk.set上方有盘(true);
}
else
{ point[startI].set有盘子(false);
tempDisk.set上方有盘(true);
}
}
else
{ disk.setLocation(startX,startY); }
}
else
{disk.setLocation(startX,startY); }
}
}
}
if(disk!=null&&!containTowerPoint)
{ disk.setLocation(startX,startY);}
}
}
public void mouseEntered(MouseEvent e)
{ }
public void mouseExited(MouseEvent e)
{ }
public void mouseClicked(MouseEvent e)
{ }
public void 自动演示搬运盘子(int 盘子数,char one,char two,char three)
{ if(盘子数==1)
{ 信息条.append(""+one+" 到: "+three+"塔\n");
Disk disk=在塔中获取最上面的盘子(one);
int startI=在塔中获取最上面盘子的位置(one);
int endI=在塔中获取最上面盘子的上方位置(three);
if(disk!=null)
{ point[endI].放置盘子(disk,this);
point[startI].set有盘子(false);
try
{ Thread.sleep(1000); }
catch(Exception ee)
{ }
}
}
else
{ 自动演示搬运盘子(盘子数-1,one,three,two);
信息条.append(""+one+" 到: "+three+"塔\n");
Disk disk=在塔中获取最上面的盘子(one);
int startI=在塔中获取最上面盘子的位置(one);
int endI=在塔中获取最上面盘子的上方位置(three);
if(disk!=null)
{ point[endI].放置盘子(disk,this);
point[startI].set有盘子(false);
try
{ Thread.sleep(1000); }
catch(Exception ee)
{ }
}
自动演示搬运盘子(盘子数-1,two,one,three);
}
}
public Disk 在塔中获取最上面的盘子(char 塔名)
{ Disk disk=null;
if(塔名==towerName[0])
{ for(int i=0;i<盘子数目;i++)
{ if(point[i].是否有盘子()==true)
{ disk=point[i].获取盘子();
break;
}
}
}
if(塔名==towerName[1])
{ for(int i=盘子数目;i<2*盘子数目;i++)
{ if(point[i].是否有盘子()==true)
{ disk=point[i].获取盘子();
break;
}
}
}
if(塔名==towerName[2])
{ for(int i=2*盘子数目;i<3*盘子数目;i++)
{ if(point[i].是否有盘子()==true)
{ disk=point[i].获取盘子();
break;
}
}
}
return disk;
}
public int 在塔中获取最上面盘子的上方位置(char 塔名)
{ int position=0;
if(塔名==towerName[0])
{ int i=0;
for(i=0;i<盘子数目;i++)
{ if(point[i].是否有盘子()==true)
{ position=Math.max(i-1,0);
break;
}
}
if(i==盘子数目)
{ position=盘子数目-1;}
}
if(塔名==towerName[1])
{ int i=0;
for(i=盘子数目;i<2*盘子数目;i++)
{ if(point[i].是否有盘子()==true)
{ position=Math.max(i-1,0);
break;
}
}
if(i==2*盘子数目)
{ position=2*盘子数目-1; }
}
if(塔名==towerName[2])
{ int i=0;
for(i=2*盘子数目;i<3*盘子数目;i++)
{ if(point[i].是否有盘子()==true)
{ position=Math.max(i-1,0);
break;
}
}
if(i==3*盘子数目)
{ position=3*盘子数目-1; }
}
return position;
}
public int 在塔中获取最上面盘子的位置(char 塔名)
{ int position=0;
if(塔名==towerName[0])
{ int i=0;
for(i=0;i<盘子数目;i++)
{ if(point[i].是否有盘子()==true)
{ position=i;
break;
}
}
if(i==盘子数目)
{ position=盘子数目-1; }
}
if(塔名==towerName[1])
{ int i=0;
for(i=盘子数目;i<2*盘子数目;i++)
{ if(point[i].是否有盘子()==true)
{ position=i;
break;
}
}
if(i==2*盘子数目)
{ position=2*盘子数目-1; }
}
if(塔名==towerName[2])
{ int i=0;
for(i=2*盘子数目;i<3*盘子数目;i++)
{ if(point[i].是否有盘子()==true)
{ position=i;
break;
}
}
if(i==3*盘子数目)
{ position=3*盘子数目-1; }
}
return position;
}
}
Disk类是javax.swing包中Button类的子类,所创建的对象称作Hannoi塔中的“盘子”。HannoiTower类有Disk类型的数组盘子。盘子数组的单元是用Disk创建的对象,被放置在Tower所创建的容器tower中,用来表示tower中的“盘子”。
① 成员变量
number的值确定所创建的“盘子”上的数字号码,通过该号码的大小来确定盘子的大小关系,即号码大的盘子大于号码小的盘子。
② 方法
Disk()构造方法。创建盘子对象时需要使用该构造方法。
setNumber(int n)。盘子调用该方法设置其上的数字号码。
getNumber()方法。盘子调用该方法返回其上的数字号码。
set上方有盘()方法。盘子调用该方法设置其所在的塔点。
get上方有盘()方法。盘子调用该方法返回其所在的塔点。
代码(Disk.java)
import java.awt.*;
public class Disk extends Button
{ int number;
boolean 上方有盘=false;
public Disk(int number,HannoiTower con)
{ this.number=number;
setBackground(Color.blue);
addMouseMotionListener(con);
addMouseListener(con);
}
public boolean get上方有盘()
{ return 上方有盘; }
public void set上方有盘(boolean b)
{ 上方有盘=b; }
public int getNumber()
{ return number; }
}
TowerPoint类
TowerPoint所创建的对象将作为HannoiTower类中TowerPoint型数组pointA、pointB和pointC中的元素。
① 成员变量
x和y是TowerPoint对象中的两个int型数据,用来表示塔点在容器tower中的坐标。tower容器的坐标原点是容器的左上角,向右是x轴的正方向,向下是y轴的正方向。
有盘子是boolean数据,如果当前塔点上有盘子时,该数据为true;否则为false。
盘子是Disk声明的对象,用来存放当前塔点上的盘子对象的引用,如果当前塔点上有盘子,盘子存放的引用是null,即盘子是空对象。
② 方法
TowerPoint(int,int)是构造方法,用来创建塔点对象。
塔点对象调用是否有盘子()方法可以返回一个boolean数据,如果调用该方法的塔点上有盘子,是否有盘子()方法返回true;否则返回false。
塔点对象调用set有盘子(boolean)方法可以根据参数的值设置当前塔点上是否有盘子。
塔点对象调用getX()和getY()方法可以返回塔点的坐标中的x轴坐标和y轴坐标。
塔点对象调用Equals(TowerPoint)方法可以判断当前塔点是否和参数指定的塔点相同。
塔点对象调用Equals(TowerPoint)方法putDisc(Component com,Container con)方法,将参数com指定的盘子放置在参数con指定的容器中,盘子所在位置由当前的塔点坐标所确定,即将盘子放置在当前塔点上。
塔点对象调用getDiscOnPoint()方法可以返回当前塔点上的盘子。
塔点对象调用removeDisc(Component com,Container con)方法可以移掉当前塔点上的盘子。
代码(TowerPoint.java)
import java.awt.*;
public class TowerPoint
{ int x,y;
boolean 有盘子;
Disk 盘子=null;
HannoiTower con=null;
public TowerPoint(int x,int y,boolean boo)
{ this.x=x;
this.y=y;
有盘子=boo;
}
public boolean 是否有盘子()
{ return 有盘子; }
public void set有盘子(boolean boo)
{ 有盘子=boo; }
public int getX()
{ return x; }
public int getY()
{ return y; }
public void 放置盘子(Disk 盘子,HannoiTower con)
{ this.con=con;
con.setLayout(null);
this.盘子=盘子;
con.add(盘子);
int w=盘子.getBounds().width;
int h=盘子.getBounds().height;
盘子.setBounds(x-w/2,y-h/2,w,h);
有盘子=true;
con.validate();
}
public Disk 获取盘子()
{ return 盘子; }
}
本程序的初始状态是A塔上有五个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A塔上。用户可以用鼠标选中盘子,然后通过拖动鼠标来移动该盘子、释放鼠标来放置该盘子。程序要求用户在移动盘子过程中,不允许把大盘子放在小盘子的上面,用户最终要完成的是把A塔上的全部盘子移动到B塔或C塔上。用户可以通过单击Hannoi塔界面上提供的按钮,让程序自动完成把A塔上的盘子全部移动到B塔或C塔上。用户在移动盘子的过程中,可以随时单击Hannoi塔界面上提供的按钮,重新开始游戏。
下面是程序运行的效果图。
(1)Tower类创建的窗口效果如图所示。
(2) HannoiTower类是javax.swing包中JPanel容器的一个子类,创建的对象tower是Tower窗口的成员之一,被添加到Tower窗口的中心位置。HannoiTower创建的容器效果如图所示。
(3) Disk类是javax.swing包中Button类的子类,所创建的对象称作Hannoi塔中的“盘子”。Disk创建的按钮的效果如图所示。
(4)TowerPoint创建的对象含有两个int型数据,用来表示塔点的位置坐标,该位置坐标由tower容器的pointComponent(Graphics g)方法负责绘制,绘制的形状是一个小圆点,如图所示。
(5)自动演示的效果图如图所示。
通过这次课程设计,使我充分的熟练了Java这种面向对象编程语言的编写。另外还巩固了我们在C语言和数据结构学过的许多知识,比如说if...else判断语句的应用,字符输出,用的最多的还是循环(While循环、For循环)。
在此感谢我们的原钥老师.,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次课程设计的每个实验细节和每个数据,都离不开老师您的细心指导。而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。
同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。
由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。
[1]耿祥义,张跃平. Java2实用教程(第三版)[M] . 北京:清华大学出版社, 20##
[2]耿祥义. Java课程设计(第三版)[M] . 北京:清华大学出版社, 2004
[3]张跃平.Java2实用教程实验指导与习题解答(第三版)[M]. 北京:清华大学出版社, 2004
[4]Jacquie Barker,Java面向对象编程指南,电子工业出版社,2001
附 录
河南机电高等专科学校学生课程设计报告实验课程名称Java程序设计开课实验室实验楼308机房系、部计科系年级11专业班软件技术学生姓…
Java语言程序设计综合实验报告系别计算机科学与技术系学科专业信息管理与信息系统课题题目qq聊天系统人员及分工白娟20xx1006…
Java课程设计报告课目计算器学院基础学院班级光信息20xx1学生指导教师丁振凡张晓瑞辅导教师江宇完成时间20xx年7月1日课程设…
河北科技大学课程设计报告学生姓名祝冬冬学号专业班级计算机科学与技术课程名称学年学期指导教师2011年6月课程设计成绩评定表目录示例…
软件学院课程设计报告书课程名称设计题目专业班级学号姓名指导教师年月目录JAVA日历设计31设计目标32设计要求33制作要点34设计…
黄淮学院JAVA课程设计报告题目:《日记本的设计与实现》课程设计学院:信息工程学院姓名:学号:专业:软件工程班级:软工1101B班…
Java程序设计课程设计报告20xx20xx年度第1学期Hannio塔专业学生姓名班级学号指导教师完成日期计算机科学技术网络工程马…
河南机电高等专科学校学生课程设计报告实验课程名称Java程序设计开课实验室实验楼308机房系、部计科系年级11专业班软件技术学生姓…
Java课程设计报告课目计算器学院基础学院班级光信息20xx1学生指导教师丁振凡张晓瑞辅导教师江宇完成时间20xx年7月1日课程设…
Java语言程序设计综合实验报告系别计算机科学与技术系学科专业信息管理与信息系统课题题目qq聊天系统人员及分工白娟20xx1006…
Java程序设计实训报告实训名称仓库管理系统实训专业计算机应用班级计算机10A1学号姓名指导教师侯丽敏20xx年12月8日实训成绩…