中南林业科技大学理学院实习报告
实习类别: 专业综合实习
专 业: 信息与计算科学
姓 名: 杨平霞
学 号: 20083704
指导教师: 杨勇老师
实习内容: Core Java
实习时间: 20##-7-1 到 20##-7-10
实习评定表
续实习评定表
计算机工程学院
实 习 报 告
课程名称 Java工程实训报告
学生姓名: 学 号:
指导教师:
专 业:
班 级:
实习时间:
年 月 日
目录
1 面向对象的程序设计... 1
1.1 封装... 1
1.2 构造器(构造方法)... 1
1.3 接口 Collection<E>和Map<K,V>. 1
1.4 继承... 1
2 实例1 打字游戏... 1
2.1 实验步骤... 1
2.2 实验结果... 1
3 实例2 弹弹球游戏... 1
3.1 实验步骤... 1
3.2 实验结果... 1
4 实例3 贪吃蛇游戏... 1
4.1 实验步骤... 1
4.2 实验结果... 1
5 实例4 女装店管理系统(销售信息管理模块)... 1
5.1 模块功能描述... 1
5.2 销售信息管理模块 ER图... 1
5.3 数据字典... 1
5.4 流程图... 1
5.5 功能点的展示... 1
5.6 原型展示... 1
总 结... 1
对象要有一个明确的边界;边界的划分(对象各司其职、对象的粒度、对象的可重用性)具体来说:
(1)属性: 私有 private(提供set和get方法)在
(2)方法: 公开或私有public/private
(3)方法声明,然后方法实现 。
例如:以显示器为对象,它拥有宽 、高 、品牌等属性,功能为看电视、电影、显示,所以可先创建属性,然后创建函数(即功能),最后调用函数。
int wide;
int height;
String paizi;
public void xianshi(){
System.out.println("我可以显示,真棒!");
}
构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。
(1)构造方法作用:
a、构造出来一个类的实例
b、对构造出来个一个类的实例(对象)初始化。
(2)构造方法的名字必须与其定义的类名完全相同,没有返回类型。
(3)主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作进行的。
(4)类中必定有构造方法,若不写,系统自动添加无参构造函数。接口不允许被实例化,所以接口中没有构造方法。
(5)不能被static、final、abstract修饰。
(6)构造方法在初始化对象时自动执行,一般不能显式地直接调用.当同一个类存在多个构造方法时,java编译系统会自动按照初始化时最后面括号的参数个数以及参数类型来自动一一对应。完成构造函数的调用。
(7)构造方法分为两种:无参构造方法 有参构造方法
(8)自定义类中,如果不写构造方法,java系统会默认添加一个无参的构造方法。如果写了一个有参的构造方法,就一定要写无参构造方法。
例如:以学生对象为例,学生对象具有姓名(String name)、年龄(int age)、性别(char sex)、地址(String add)等等属性,即需要创建一个无参的构造函数和一个有参数的构造函数来对属性进行赋初值,然后再是各个方法(行为或功能)的实现。
public Person(){
}
public Person(String name,int age,char sex){
this.name=name;
this.age=age;
this.sex=sex; }
(1)List<E>,其中<E>--泛型,类型控制作用,有序的、列表通常允许重复的元素、实现类是大小可变的动态数组,例如:List<String>。
ArrayList和LinkedList的大致区别:
1)ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2)对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3)对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。ArrayList<E>数组形式、放在连续的位置中、可继承、长度可变、所有元素允许为null、适用于查找操作;LinkedList<E> 常用的方法 removeFirst() 、removeLast()链表形式、可继承、所有元素允许为null、所有操作都是按照双重链接列表、适用于增删操作。
例如:List<String> list = new ArrayList<String>();
list.add("孟晓军");
list.add("王阳");
set1.add("成青懂");
List<Integer> lin = new LinkedList<Integer>();
lin.add(1);
lin.add(2);
(2)Set<E>无序的、不包含重复元素HashSet<E>
接口Map<K,V> ,其中K - 此映射所维护的键的类型(键值) ,V - 映射值的类型,一个Map元素就是一个键值对HashMap<Object,Object>。
共性放到父类,特性放到子类;即子类继承父类,其实就是一般继承特殊。
(1)关键字:extends 例如:Cat extends Animal{}
(2)java中一个类最多只能有一个直接的父类,即单继承,java中要实现多继承,通过接口来实现,关键字。
(3)父类中所有属性和方法都能继承给子类;父类中的私有方法不能继承给子类。
(4)不同类型的访问权限与继承。
表1-1访问权限与继承
(5)super()函数的用法
a、super();调用父类的构造方法,只能出现在构造方法的第一行。
b、super.方法名;super表示父类的对象,通过它去调用父类的方法。
在打字游戏实例中,创建一个WordGame类;实例要新建一个窗体,所以必须继承一个 JFrame 对象,而且还要用到键盘监听接口KeyListener。
在WordGame()构造方法中添加如下代码,既可创建一个窗体:
this.setUndecorated(true);// 设置是否显示边框
this.setAlwaysOnTop(true);// 设置窗口显示在最前端
this.getContentPane().setBackground(Color.BLACK);// 设置窗口内容面板的背景色
this.setSize(400, 600);// 设置窗口大小
this.setLocationRelativeTo(null);// 设置相对位置
新建一个类MyPanel作为面板,所以MyPane类需要继承一个JPanel对象,创建好面板后需要在窗体中固定,即在WordGame()构造方法声明一个WordGamePanal对象为panal,然后调用this.add(panal);即可将面板固定到窗体中。
class MyPanel extends JPanel implements Serializable{}//创建面板
WordGamePanal panal = new WordGamePanal();// 创建面板的纸张对象
this.add(panal);// 固定纸张
在WordGame()构造方法中添加如下代码,即可完成键盘的监听,这种为内部类的实现,键盘监听也可以使用外部类来实现。
this.addKeyListener(new KeyListener() {// 给当前窗口添加键盘监听事件
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void keyPressed(KeyEvent e) {}//实现需要监听的键盘按钮
});
在本包下创建一个W类,用来存放一个之母的属性,并设置其get,set函数和有参数的构造函数,以及hashCode()、equals(Object obj)和toString()函数,使用快捷生成即可。
创建一个数据对象,让字母的各个属性都随机的变换,即X坐标、字体大小、下落速度、字母颜色等等随机变换。
public void run() {
w.setWy(w.getWy()+w.getWspeed()); //字符按照自己的速度下落
if(w.getWy()>=fh){ //判断是否落到游戏界面的外部
w = null ; //自动清空该字符
wp.getW();//调用创建字符方法 创建一个新字符
score-=10 ; //减分}
WP.this.repaint() ; //执行重画
}
}, 0, 100); //程序启动 立即执行该任务并每100毫秒执行一次
if(w2!=null){ //判断拿到的字符对象是否为空防止出现空指针
//判断所按键的字符是否与显示的字符相同
if((e.getKeyChar()+"").equals(words[w2.getWindex()])){
//如果相同就将该字符去除 并重新创建一个
WordGame.this.w = null ;
//调用自定义面板类中的创建一个字符的方法
wp.getW();
score += 10 ;//加分
WordGame.this.repaint(); //执行重画方法}
如图2.1所示为打字游戏正常图,如果输入的字符与下落的字符一致,则会进行加分,如果输入的字符与下落的字符不一致,则会进行减分操作,按空格键就可以结束游戏。
图2.1 打字游戏运行图
进行了前面的计时器和打字游戏的编写,对Java编程有了更进一步的认识了,为此完成一个弹弹球的游戏,弹弹球游戏是将前面的所讲的知识全部集合在一起。在弹弹球游戏实例中,需要创建一个TTQGame类;实例要新建一个窗体,所以必须继承一个 JFrame 对象,而且还要用到键盘监听接口KeyListener。
在TTQGame ()构造方法中添加如下代码,既可创建一个窗体:
this.setUndecorated(true);// 设置是否显示边框
this.setAlwaysOnTop(true);// 设置窗口显示在最前端
this.getContentPane().setBackground(Color.BLACK);// 设置窗口内容面板的背景色
this.setSize(400, 600);// 设置窗口大小
this.setLocationRelativeTo(null);// 设置相对位置
在TTQGame类中新建一个类TTQPanel作为面板,所以TTQPanel类需要继承一个JPanel对象,创建好面板后需要在窗体中固定,即在TTQGame ()构造方法中声明一个TTQPanel对象为ttqp,然后调用this.add(ttqp);即可将面板固定到窗体中。
class TTQPanel extends JPanel implements Serializable//创建面板
TTQPanel ttqp= new TTQPanel ();// 创建面板的纸张对象
this.add(ttqp);// 固定纸张
在WordGame()构造方法中添加如下代码,即可完成键盘的监听,这种为内部类的实现,键盘监听也可以使用外部类来实现。
this.addKeyListener(new KeyListener() {// 给当前窗口添加键盘监听事件
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void keyPressed(KeyEvent e) {}//实现需要监听的键盘按钮
});
在TTQGame类中创建小球和挡板对象,即创建小球的属性和挡板的属性,其属性为:X,Y坐标,宽度,长度,方向,颜色等等。
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.BLACK);
g.fillOval(bx, by, bw, bh);
g.setColor(Color.RED);
g.fillRect(rx, ry, 200, fh-ry);
}
在小球运动过程中,其运动方向为方向总共四种:right_down(右下),right_up(右上),left_down(左下),left_up(左上),如果要改变小球的运动方向,只要改变小球的坐标即可。
小球在运动过程中撞墙,则会反弹,其运动约束设置为:
如果球从左上下落,若碰到下壁则向右上反弹,若碰到右壁,则向左下反弹
如果球从右上下落,若碰到下壁则向左上反弹,若碰到左壁,则向右下反弹
如果球从左下上浮,若碰到上壁则向右下反弹,若碰到右壁,则向左上反弹
如果球从右下下落,若碰到上壁则向左下反弹,若碰到左壁,则向右上反弹
if(by + bh >= fh-block_h){
if(bx+bw/2>=block_x && bx+bw/2<=block_x+block_w){
if(direction.equalsIgnoreCase("right_down"))//判别方向
{ direction = "right_up" ;//反弹方向
}else{ direction = "left_up" ; //反弹方向}
}else{
JOptionPane.showMessageDialog(ttqp, "GAME OVER !", "噩耗", JOptionPane.DEFAULT_OPTION);//弹出框提示游戏结束
System.exit(0); }}
如图3.1所示为弹弹球游戏正常图,如果小球撞击墙壁就会进行反弹操作,当小球撞击挡板也会进行反弹操作,如果小球下落没有撞击挡板,则游戏结束,按空格键就可以结束游戏。
如图3.1 弹弹球游戏运行图
在完成弹弹球游戏后,进行贪吃蛇游戏是为了掌握在弹弹球中方向的控制,其实验步骤与弹弹球相似,首先要创建窗口,然后在创建面板,固定面板。
(1) JFrame创建
(2) 创建面板并固定
(3) 设置键盘监听接口KeyListener
(4) 加载数据(采用面向对象的思想,把整条蛇作为一个大的对象,把蛇的身体元素看成多个对象)(容器请使用 LinkedList)
(5) 让数据对象动起来(去掉尾部 添加头部)
(6) 控制数据对象运动的方向
(7) 随机产生一个豆子
(8) 数据对象(贪食蛇)吃豆子并长长
(9) 数据对象撞墙 GAME OVER
(10)贪食蛇不能咬到自己的身体,贪食蛇不能180度掉头,否在 GAME OVER 。
如图4.1和4.2所示为贪吃蛇游戏运行图,其使用上下左右按键对贪吃蛇进行控制,使其能够吃到小豆子。
图4.1 贪吃蛇游戏运行图
图4.2 贪吃蛇撞墙运行图
销售信息管理模块具有销售记录添加、销售信息修改、销售信息删除、销售信息查询四个功能,这个模块是为了记录顾客在女装店的所有消费,同时也记录了服装的销售信息,这能更加方便的进行信息的管理。
会员实体具有会员编号、账号、密码、性别、联系电话、姓名等属性;商品实体具有商品编号、名称、尺寸、数量、颜色、价格等属性;销售记录实体具有编号、销售记录编号、买方姓名、产品名称、买卖时间、买卖数量、买卖颜色、买卖尺寸大小、买卖价格等属性。如图4.1所示
a)会员实体属性项
根据E-R图能够得到会员编号、账号、密码、性别、联系电话、姓名,为会员实体的基本数据项,下面给出了每个数据项的数据名称、别名、类型长度和描述。
1)数据项名称:会员编号 别名:c_id 类型长度:int
描述:用来存放会员的编号,其为自动增长
2)数据项名称:账号 别名:c_account 类型长度:varchar(11)
描述:由varchar类型来存储,其为会员登录账号
3)数据项名称:密码 别名:c_password 类型长度:varchar(100)
描述:用来进行系统登录所有
4)数据项名称:姓名 别名:c_name 类型长度:varchar(1000)
描述:会员的名字
5)数据项名称:性别 别名:sex 类型长度:char(2)
描述:分别为男、女
6)数据项名称:联系电话 别名:c_phone 类型长度:nvarchar(100)
描述:有会员的联系电话
b)商品实体属性项
根据E-R图能够得到商品编号、名称、尺寸、数量、颜色、价格为商品实体的基本数据项,下面出了每个数据项的数据名称、别名、类型长度和描述。
1)数据项名称:会员编号 别名:p_id 类型长度:int
描述:用来存放商品的编号,其为自动增长
2)数据项名称:名称 别名:p_name 类型长度:varchar(100)
描述:由varchar类型来存储
3)数据项名称:尺寸 别名:p_size 类型长度:varchar(50)
描述:用来存放商品的大小
4)数据项名称: 数量 别名:p_number 类型长度:varchar(100)
描述:用来存放商品的数量
5)数据项名称:颜色 别名:p_color 类型长度:varchar(50)
描述:用来存放商品的颜色
6)数据项名称:价格 别名:p_price 类型长度:nvarchar(50)
描述:用来存放商品的单价
c)销售记录实体属性项
根据E-R图能够得到编号、销售记录编号、买方姓名、产品名称、买卖时间、买卖数量、买卖颜色、买卖尺寸大小、买卖价格为销售记录实体的基本数据项,下面出了每个数据项的数据名称、别名、类型长度和描述。
1)数据项名称: 编号 别名:s_id 类型长度:int
描述:用来存放记录的编号,其为自动增长
2)数据项名称:销售记录编号 别名:s_orderid 类型长度:varchar(100)
描述:由varchar类型来存储
3)数据项名称:买方姓名 别名:s_cname 类型长度:nvarchar(100)
描述:用来存放买方姓名
4)数据项名称:产品名称 别名:s_pname 类型长度:varchar(100)
描述:用来存放产品名称
5)数据项名称:买卖时间 别名:s_date 类型长度:varchar(50)
描述:用来存放商品买卖时间
6)数据项名称:买卖数量 别名:s_numbe 类型长度:nvarchar(100)
描述:用来存放商品的买卖数量
7)数据项名称:买卖颜色 别名:s_color 类型长度:nvarchar(50)
描述:用来存放商品的买卖颜色
8)数据项名称:买卖尺寸大小 别名:s_size 类型长度:nvarchar(50)
描述:用来存放买卖商品的尺寸大小
9)数据项名称:买卖价格 别名:s_price 类型长度:nvarchar(5)
描述:用来存放买卖商品的价格
1) 数据流名称:会员个人信息
数据流别名:无
说明:记录会员所有的信息
数据流来源:会员信息数据表
数据流流向:会员自己
数据流组成:编号+账号+密码+性别+联系电话+姓名
2) 数据流名称:商品信息
说明:记录商品所有的信息
数据流来源:管理员操作
数据流流向:商品信息数据表
数据流组成:编号+商品名称+商品尺寸+商品数量+商品颜色+商品价格
3) 数据流名称:销售记录信息
数据流别名:无
说明:记录商品所有的销售记录信息
数据流来源:会员消费
数据流流向:销售记录信息数据表
数据流组成:编号+销售记录编号+买方姓名+产品名称+买卖时间+买卖数 量+买卖颜色+买卖尺寸大小+买卖价格
选择系统登录,管理员输入账号和密码,验证正确后,进入系统。管理员选择销售记录模块,可以对所有的销售记录进行增加、修改、删除、查询等操作。
如图5.2 销售信息管理模块流程图
本次开发使用的是MyEclipse8.6,MySQL,JDK1.7和Tomcat6.0,我们负责的是消费记录管理模块,该模块主要用到了HTML布局,Servlet,HttpServlet处理页面请求,客户端服务端数据的交互和Java.sql包中的DriverManager,PreparedStatedment,Connection等对象与其中的方法等知识。用到一些常用的Jsp页面写java代码的技巧,比如EL表达式,<%%>和JSTL等知识,不过在EL表达式和JSTL时,不能忘了导入对应的jar包。还有就是使用JDBC连接MySql数据库,也需要使用对应的jar包。然后就是我们这次模块的处理逻辑,首先是查询功能,通过单击按钮,然后获得jsp页面中文本框中的数据,通过表单提取的方式发送给对应的java类去处理,在后台代码的数据库处理后,返回给客户端一个查询后的结果,这个结果使用table布局的方式展现,这边数据的读取需要用到jstl方式,比较灵活;其中添加消费记录也是同理,不过在插入一条消费记录之后,还需要再一次读取消费记录表中的内容,将该表的内容返回给我们的客户端,这样显得更友好一点。
如图5.3所示,是管理员的登陆界面,管理员输入账号、密码和验证码,验证正确后,登陆进入系统,选择销售记录模块。
如图5.3 登陆界面
如图5.4是销售管理模块界面,用户可以对所有的销售记录进行查询。如图5.5是销售管理模块界面,用户可以对所有的销售记录进行修改。如图5.4是销售管理模块界面,用户可以对所有的销售记录进行删除。
图5.4 查询销售记录
图5.5 修改销售记录
图5.6 删除销售记录
总 结
转眼间,四周的工程实训已经结束,在这期间遇到了很多的困难,幸得老师和同学的帮助才能解决。虽然实训过程是痛苦的,成天的编写代码,但结果是甘甜的。这次的实训是以往没有过的,指导老师是企业培训教师,这对我们的实训有很大的帮助。一月的实训,让我对JAVA语言有了更进一步的认识了。
在本次实训中进行了多个实例的开发,其中包含打字游戏、弹弹球游戏、贪吃蛇游戏和女装管理系统。其中打字游戏、弹弹球游戏、贪吃蛇游戏是基于JFrame实现的,开发使用的环境是Eclipse SDK 4.2.2,JDK1.7;而女装管理系统是基于JSP实现的,其开发使用的环境是MyEclipse8.6,MySQL,JDK1.7和Tomcat6.0。在窗体小游戏中,主要用到了键盘监听接口KeyListener,此接口主要实现对键盘按钮的监听;使用了Timer类和Random类,其中Timer类用来在指定的时间间隔内反复触发指定窗口的定时器事件,Random类用来随机生成坐标位置;还使用了ArrayList和LinkedList来进行对象的存储。此外在进行窗体小游戏的编写过程中,还用到了匿名内部类,在此之前,对于这个知识是相当的模糊的,完全不知道是什么,但在指导老师的悉心讲解中,理解了其真正的含义及使用。
在JSP开发过程中,开发使用的是Eclipse SDK 4.2.2, JDK1.7和Tomcat6.0,在女装店管理系统开发中,主要承担了消费记录管理模块,该模块主要用到了HTML布局,Servlet,HttpServlet处理页面请求,客户端服务端数据的交互和Java.sql包中的DriverManager,PreparedStatedment,ResultSet、Connection、setAttribute、getRequestDispatcher等对象与其中的方法等知识。用到一些常用的Jsp页面写java代码的技巧,比如EL表达式,<%%>和JSTL等知识,不过在EL表达式和JSTL时,不能忘了导入对应的jar包。还有就是使用JDBC连接MySql数据库,也需要使用对应的jar包。在女装店管理系统中,产生了很多的问题,特别在对数据的交换与传递之间,由于没有搞清楚数据之间交换的过程,所以在传递的过程中出现了问题。
实训虽然过去了,但学到的知识却是永恒的,对于JAVA编程,我们要学的知识还很多,希望在以后的学习中能够坚持下去。
中南林业科技大学理学院实习报告实习类别专业姓名学号指导教师实习内容实习时间专业综合实习信息与计算科学杨勇老师CoreJava20x…
一直以来我们专业的生产实习就是在校内,而今年我们终于有机会在校外实习了。去IT培训学校实习两周,对于我这种酷爱计算机的人是多么好的…
毕业实习报告一、实习目的:进一步了解java开发的相关知识,掌握java开发的基本技术,丰富java开发的实战经验。学习SQL的基…
实习报告实习单位地点渥瑞达实习时间20xx年4月实习指导教师周奕学生学号0706034501学生姓名韩芳1实习单位总体印象通过一个…
一.二.1.2.实习单位的基本情况................................................…
毕业实习报告一、实习目的:进一步了解java开发的相关知识,掌握java开发的基本技术,丰富java开发的实战经验。学习SQL的基…
一直以来我们专业的生产实习就是在校内,而今年我们终于有机会在校外实习了。去IT培训学校实习两周,对于我这种酷爱计算机的人是多么好的…
毕业实习报告姓名学号班级实习单位实习单位地址实习时间20xx.8.26-20xx.11.29实习成绩20xx年x月x日一.实习目的…
通过这一期的实训,虽然实训的时间不长,但是总体上收获挺大的,学习中我不但有了学习成果的喜悦,而且自己也日渐成熟,有种说不出的喜悦。…
实习报告(二)在学习测试基础时,就应该意识到一说到基础就是最重要的东西,记得以前在工地干活的时候,地基花的时间往往是最长的,打好了…
今年暑假,我参加了达内C++为其20天的实习培训,短短20他的学习过程使我受益匪浅。不仅计算机专业知识有所增长,而且对我们这个专业…