东软Java技术项目训练实习报告

                                                         

                                                         

大连东软信息学院

Java技术项目训练

实习报告

     

系    别:        计算机系           

专业班级:      数据库12002 班      

学    号:       12111100220        

学生姓名:         冀佳伟           

指导教师:         邹启杰             

        

                   

                                2014年   9   月   11   日

目    录

目    录... II

第一部分 Java图形化程序开发... 1

1.1 系统知识准备:图形用户界面... 1

1.2 系统知识准备:多线程... 4

1.3 系统开发:贪食蛇游戏开发... 8

1.4 实习情况检查记录单... 10

第二部分 Java数据库程序开发... 11

2.1 系统知识准备:结构化查询语言SQL. 11

2.2 后台数据库准备:触发器... 17

2.3 系统开发:中超足球联赛管理系统... 19

2.4 实习情况检查记录单... 19

实习总结... 21


第一部分 Java图形化程序开发

1.1 系统知识准备:图形用户界面

1.填空题:

(1)GUI界面由GUI组件构成,Java中有两套GUI组件类,分别是位于

    java.awt           包下的     AWT       组件和位于   javax.swing              包下的    Swing        组件。

(2)Java的Swing包中定义框架的类是    JFrame         

(3)显示框架的方法名是   setVisible(boolean b)         

(4)设置框架的标题的方法名是    setTitle(String title)            

(5)设置框架大小的方法名是    setSize(int width,int height)             

(6)设置框架缺省关闭操作的方法名是  setDefaultOpration(into peration)  

(7)获取框架内容窗格的方法名是     getContentPane()           

(8)为容器设置布局管理器的方法名是     setLayout(LayoutManager mgr) 

(9)JFrame中内容窗格的缺省布局管理器    BorderLayout           

(10)JPanel缺省的布局管理器是     FlowLayout            

(11)Java的Swing包中定义按钮的类是    JButton          。设置按钮上文本内容的方法名是   setText(String text)           。获取按钮上文本内容的方法名是    getText()         

(12)文本框是用于输入、输出或编辑单行文本的控制组件,Java的Swing包中定义文本框的类是    JTextField          。将指定的字符串写入文本框中的方法名是   setText(String text)           。获取文本框中文本的方法名是     getText()         。设置文本框的可编辑属性的方法名是      setEditable(boolean b)        ,并且参数为   true      是可编辑,   参数为   false       是不可编辑。

(13)Java的Swing包中定义单选按钮的类是     JRadioButton         。实现单选按钮之间的互斥需将单选按钮放到一个按钮组中,定义按钮组的类名是     ButtonGroup         。获取单选按钮选择状态的方法名是    isSelected()         

(14)基本的事件类都定义在     java.util                 包中。

(15)所有的事件名都是以    Event         结尾,所有的监听接口名都是以

  Listener             结尾。

2.简答题:

(1)请说出三种常用的布局管理器及各自的特点。

FlowLayout是最简单的布局管理器。它按添加组件的顺序由左到右将组件排列在容器中,一行排满后再排新的一行。

BorderLayout将容器分成五部分:东区、南区、西区、北区、中央。

GridLayout根据构造方法定义的行数和列数以网格(矩阵)的形式排列组件,组件按添加的顺序从左到右排列,一行排满另起一行。

(2)简述创建菜单的几个步骤。

创建一个菜单栏(JMenuBar),并建立它与框架的关联、

创建菜单(JMenu),并添加到菜单栏中

创建菜单项并添加到菜单中

(3)什么是事件?什么是事件源?

事件:可以定义为程序发生了某些事情的信号。如点击鼠标、点击键盘、移动鼠标等。

事件源:在其上发生事件的GUI组件被称为事件的源对象。例如,按钮是点击按钮事件的源对象。

(4)简述事件处理的过程。

每一种事件类都有对应的监听接口,想监听某一事件先给该事件注册事件监听器,当该事件发生时会被该事件的事件监听器监听到,从而执行监听器中的业务逻辑。


1.2 系统知识准备:多线程

1.简答题

(1)什么是多线程?线程和进程有什么区别?

多线程是为了使得多个线程并行的工作以完成多项任务

通常,我们把操作系统的多个任务称为进程(Process),而程序中的多任务则称为线程。

(2)在Java语言中创建线程有几种途径,说明创建方式有何区别,每一种都是怎么实现的,写出主要步骤。

第一种方法就是继承线程类java.lang.Thread

1.Thread子类无法再从其它类继承(java语言单继承)。

2.编写简单,run()方法的当前对象就是线程对象,可直接操作。

class  subThread  extends  Thread

{    

       public  subThread( String  str )

       {    

              super( str ); 

       }

     public  void  run( )               

     {      

              System.out.println( " " + getName( ) );

              try

              {    

                     sleep( ( int )( Math.random( ) * 1000 ) );

              }

              catch( InterruptedException e )             {     }

             

              System.out.println( "Finished!" + getName( ) );

       }

第二种方法:  使用Runnable接口

1.可以将CPU,代码和数据分开,形成清晰的模型

2.线程体run()方法所在的类可以从其它类中继承一些有用的属性和方法

3.有利于保持程序的设计风格一致

class  MulThread   implements  Runnable        

{

       String  s;

       public  MulThread(String  str)

       {    

              s=str;

       }

       public  void  run( )

       {

              System.out.println(s);

              try

              {    

                     Thread.sleep( ( int ) ( Math.random( ) * 1000 ) );

        }

              catch( InterruptedException e ){   }

             

              System.out.println( "Finished!  " + s );             

       }

}

2.实践题

编写一个线程类,类名为SubThread 。该线程能够在命令行显示线程的名称,然后随机休眠小于1秒的时间,最后显示线程结束信息: “finished”+线程名。

编写Application,在其中创建SubThread类的三个对象t1、t2、t3,它们的名称分别为"First"、" Second"、" Third",并启动这三个线程。

分别用两种方法实现线程的创建。

方法一:

public  class  Application

{    

       public  static  void  main( String[ ]  args )

       {    

              Thread  t1 = new  subThread( "First" );

              Thread  t2 = new  subThread( "Second" );

              Thread  t3 = new  subThread( "Third" );

              t1.start( );

              t2.start( );

              t3.start( );         

     }

}

class  subThread  extends  Thread

{    

       public  subThread( String  str )

       {    

              super( str ); 

       }

      public  void  run( )               

      {       

              System.out.println( " " + getName( ) );

              try

              {    

                     sleep( ( int )( Math.random( ) * 1000 ) );

              }

              catch( InterruptedException e )            {     }

             

              System.out.println( "Finished!" + getName( ) );

       }

}

方法二:

public  class  Application

{    

       public  static  void  main( String[ ]  args )

       {    

              Runnable r1 =new  MulThread( "First" );

              Runnable r2 =new  MulThread( "Second" );

              Runnable r3 =new  MulThread( "Third" );

              Thread  t1 = new  Thread( r1 );

              Thread  t2 = new  Thread( r2 );

              Thread  t3 = new  Thread( r3 );

              t1.start( );

              t2.start( );

              t3.start( );

       }

}

class  MulThread   implements  Runnable        

{

       String  s;

       public  MulThread(String  str)

       {    

              s=str;

       }

       public  void  run( )

       {

              System.out.println(s);

              try

              {    

                     Thread.sleep( ( int ) ( Math.random( ) * 1000 ) );

          }

              catch( InterruptedException e ){   }

             

              System.out.println( "Finished!  " + s );                    

       }

}

1.3 系统开发:贪食蛇游戏开发

1.实践题

(1)给出实现该游戏程序需要的主要类名,以及每个类的类结构(类中的属性和方法),并描述该类的作用。

(2)描述在编程中遇到的问题及解决方法。

a.如何实现排行榜中成绩的永久保存

   将成绩保存到一个文件中,查看、保存时进行文件的读写操作

b.如何实现背景音乐的开启、暂停功能

   将该类写成线程类,通过线程的开启和暂停功能实现音乐的开启暂停功能

1.4 实习情况检查记录单


第二部分 Java数据库程序开发

2.1 系统知识准备:结构化查询语言SQL

1.  填空题:

1)请请项目需求,采用标准SQL语句将球队表(Team)、球员表(Member)、比赛进程表(Course)、进球表(Goal)、积分榜(Score)和射手榜(GoalScore)6张表创建出来,并填写到下面的空格中。

①    CREATE TABLE    TEAM (NAME VARCHAR(20) PRIMARY KEY ,MASTERPLACE VARCHAR(30) ,COACH VARCHAR(20) )                                          

                                                                   

②    CREATE TABLE     MEMBER(NAME VARCHAR(20) NOT NULL,

TEAMNAME VARCHAR(20) NOT NULL FOREIGN KEY REFERENCES TEAM(NAME),NUMBER   INT NOT NULL ,POSITION VARCHAR(6) NOT NULL ,HEIGHT  INT ,WEIGHT INT ,BIRTHDATE DATETIME ,PRIMARY KEY(TEAMNAME,NUMBER))                                                  

                                                                                                                                                   

③    CREATE TABLE     course(home varchar(20) not null references team(name), away varchar(20) not null references team(name), turn int not null, matchdate  datetime not null, homescore  int not null, awayscore  int not null,  primary key (home,away))                                                  

                                                                                                                                             

④    CREATE TABLE      goal(teamname varchar(20) not null,number   int         not null,turn     int         not null,goaltime datetime    not null,foreign key(teamname,number) references member(teamname,number),primary key (teamname,number,turn,goaltime))                                                 

                                                                                                                                                

⑤    CREATE TABLE        score( place int not null default 0, name  varchar(20)  primary key, turn  int  not null, won int not null, even int not null, beaten int not null,goal   int not null,lost   int not null,net int not null,point  int not null )                                               

                                                                     

⑥    CREATE TABLE      goalscore(  place int not null default 0,  name  varchar(20) not null ,  teamname varchar(20),  number  int not null, goals  int  not null,  foreign key (teamname,number) references member(teamname,number),  primary key(teamname,number))                                                 

                                                                     

2)利用足球联赛管理系统的6张表,完成下述要求的SQL语句。

(1) 向球队表中插入一个球队信息(北京现代队,北京体育场)。

      insert            into          Team (NAME, MASTERPLACE) 

     values      ‘北京现代队’    ‘北京体育场’      

(2)同(1)题,向球队表中插入一个球队信息(北京现代队,北京体育场)。

    insert            into       Team __  values       _ (   ‘北京现代队’    ,    null           ‘北京体育场’    )

(3)向球员表中插入记录(张海峰,辽宁,8,前卫,177,1979-9-16)。

      insert   into    member   values(‘张海峰’,’辽宁’,8,’前卫’,null, 177,1979-9-16 )                                                                                                                    

(4)将积分榜表中所有球队的积分都设置为0。

        update       Score     set      POINT = 0

(5)将深圳健力宝球队的教练的值设为空值。

         update      Team SET      coach=null      where        

               NAME=’深圳健力宝’

(6)将球员表中场上位置为空的球员的场上位置改为后卫。

 UPDATE Member SET POSITION =’ 后卫’ WHERE      POSITION IS NULL                  

(7)将球队主场在上海的球队的所有球员的出生日期改为1980-1-1、场上位置改为空值。

         Update  member  set  birthday=’1980-1-1’  join  team  on  member.teamname=team.name  where team.masterplace is null                                                       

                                                                    

(8)删除比赛进程表Course中的所有记录。

       Delete from         Course

(9)删除球队表中教练为空的球队信息。

         Delete        FROM Team     where     COACH IS NULL

(10)删除积分榜中有关大连万达队的所有积分信息。

          Delete  from score where name=’ 大连万达’                                                  

2.  实践题:

利用教材中的中超足球联赛管理系统的4张表,在SQL查询分析器中实现满足如下要求的SQL语句,并将成功运行的SQL语句写到题后空白处。

(1)查询所有球员信息。

           Select * from member                                                    

(2)查询所有球员的姓名、所在球队、球衣号码和出生日期。

      Select name,teamname,number,birthday from member                                                         

(3)查询所有球员的姓名、所在球队、球衣号码和年龄。

      Select name,teamname,number,YEAR(GETDATE())-YEAR(birthdate) from MEMBER                                                         

(4)查询球员表中所有球员的出生年份,相同的年份只显示一次。

        Select distinct birthday from member                                                       

(5)查询球队表中的球队信息,并返回前5行记录。

        select top 5 * from TEAM;                                                       

(6)查询球队表中的球队信息,并返回查询结果的前20%的记录。

       select top 20 percent * from TEAM;                                                           

(7)查询球队主场在上海的各球队的名称。

       Select name from team where masterplace=’上海’                                                         

(8)查询球员表中身高超过180cm的球员的姓名和场上位置。

        Select name,position from member where height>180                                                       

(9)查询体重在[75,90]之间的所有球员的姓名和所在球队。

   Select name,teamname from member where weight between 75 and 90                                                        

(10)查询在1978年~1984年之间出生的所有球员的姓名、所在球队、出生日期。

      Select name,teamname,birthdate from member where year(birthdate) between 1978 and 1984;                                                           

(11)查询大连实德、山东鲁能、北京现代和上海申花4个球队的所有球员的信息。

      Select * from member where teamname in (‘大连实德’,’山东鲁能’,’北京现代’,’上海申花’)                                                         

                                                               

(12)查询球员表中不姓“张”的所有球员的信息。

        Select * from member where name not like '张%';                                                       

(13)查询球员表中身背号码的最后一位不是3、4、7的球员的姓名、所在球队和身背号码。

        Select name,teamname,number from member where number not like '%3' and number not like '%4' and number not like '%7';                                                        

(14)查询球队表中教练不为空值的球队名称和教练姓名。

     Select name,coach from team where coach is not null                                                          

(15)查询球员表中出生日期为空值的球员姓名。

     Select name from member where birthdate is null                                                          

(16)查询大连实德队中在1980年以后出生且身高超过185cm的球员姓名。

      Select name from member where teamname='大连实德' and year(birthdate)>=1980 and height>185;                                                          

                                                               

(17)查询各球队信息,结果按球队教练的姓氏升序排列。

      Select * from team order by coach ASC;                                                           

(18)查询上海申花队的球员姓名和年龄,并将结果按球员的年龄升序排列,年龄相同的按姓名降序排列。

       Select name,year(getdate())-year(birthdate) as ag from member where teamname='上海申花' order by ag asc,name desc;                                                          

(19)统计每个球队的人数。

         select team.name,count(member.name) from team join member on team.name=member.teamname group by team.name;                                                      

(20)统计每个球队球员的平均身高和体重。

        select team.name,avg(member.height),avg(member.weight) from team join member on team.name=member.teamname group by team.name;                                                       

(21)查询球队人数超过20人的球队名及其人数。

        select team.name,count(member.name) from team join member on team.name=member.teamname group by team.name having count(member.name)>20;                                                       

(22)查询球队的球员平均身高超过185cm的球队名称。

       mysql> select team.name from team join member on team.name=member.teamname group by team.name having avg(member.height)>185;                                                         

(23)统计球员表中球员人数。

         Select count(name) from member                                                      

(24)统计所有球员的平均体重和平均身高。

        Select   avg(height),avg(weight) from member                                                       

(25)查询山东队中年龄最大的球员信息。

        select * from MEMBER where TEAMNAME='山东队' and BIRTHDATE=(select MIN(BIRTHDATE) from MEMBER where TEAMNAME='山东队');                                                      

(26)查询球队主场在上海的球队球员的平均身高。

    select AVG(height) from MEMBER where TEAMNAME in (select NAME from TEAM where HOME like '上海%');                                                           

(27)查询球员平均身高高于大连实德队球员平均身高的球队名称。

        select teamname from MEMBER group by TEAMNAME having AVG(height)>(select AVG(height) from MEMBER  where TEAMNAME='大连实德');                                                       

(28)查询球员的平均年龄最小的球队名称。

      select top 1 teamname from MEMBER group by teamname order by avg(YEAR(getdate())-year(birthdate));                                                          

(29)查询球员张海峰所在球队信息。

      Select * from team join member on team.name=member.teamname where member.name=’张海峰’                                                         

(30)查询所有球队的球员信息,包括新建的没有球员的球队。

       Select * from team left join member on team.name=member.teamname;                                                        


2.2 后台数据库准备:触发器

1.填空题

(1)触发器分为  电平触发器  边沿触发器  主从触发器  类型。

(2)在SQL语言中,创建触发器时使用    create trigger            语句,修改触发器时使用     alter trigger           语句,删除触发器时使用                       drop trigger           语句。

(3)在触发器工作时,SQL Server 会自动创建和管理两种特殊的表:

    inserted    表和   deleted     表。

2.简答题

(1)在什么情况下需要使用触发器?

触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如UPDATE、 INSERT、 DELETE 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。

触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。

(2)比较AFTER触发器和INSTEAD OF触发器的区别。

INSTEAD OF 触发器用来代替通常的触发动作,即当对表进行INSERT、UPDATE 或 DELETE 操作时,系统不是直接对表执行这些操作,而是把操作内容交给触发器,让触发器检查所进行的操作是否正确。如正确才进行相应的操作。因此,INSTEAD OF 触发器的动作要早于表的约束处理。
    INSTEAD OF 触发器的操作有点类似于完整性约束。在对数据库的操纵时,有些情况下使用约束可以达到更好的效果,而如果采用触发器,则能定义比完整性约束更加复杂的约束。有关触发器与约束的比较,请参见联机丛书。
INSTEAD OF 触发器不仅可在表上定义,还可在带有一个或多个基表的视图上定义,但在作为级联引用完整性约束目标的表上限制应用。
AFTER 触发器定义了对表执行了 INSERT、UPDATE 或 DELETE 语句操作之后再执行的操作。比如对某个表中的数据进行了更新操作后,要求立即对相关的表进行指定的操作,这时就可以采用 AFTER 触发器。AFTER 触发器只能在表上指定,且动作晚于约束处理。
     每一个表上只能创建一个 INSTEAD OF 触发器,但可以创建多个 AFTER 触发器。


2.3 系统开发:中超足球联赛管理系统

1.实践题

实现中超足球联赛管理系统各部分的功能,描述在编程中遇到的问题及解决方法。

a.       连接数据库出现问题,无法连接到数据库

通过输出连接异常的堆栈信息,得出连接语句的url行语句出现问题,通过百度得知问题是出在odbc连接方式上,win7 64位系统对odbc的连接方式不兼容,从而改成了jdbc的连接方式,并引入了相关jar包,问题得以解决

2.4 实习情况检查记录单


实习总结

通过Java技术项目训练的学习,有哪些收获、体会或建议?

通过java技术项目训练的学习,使我学会了很多知识。在开发过程中,体验了其中的苦与乐,学会了如何面临困难,如何解决问题,学会了团结合作,达到了锻炼的目的。同时,拓展了知识面,进一步加深了对软件开发的理解和认识。

相关推荐