Java工程实训报告_第1页
Java工程实训报告_第2页
Java工程实训报告_第3页
Java工程实训报告_第4页
Java工程实训报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机工程学院实习报告课程名称Java工程实训报告学生姓名:学号:指导教师:专业: 班级:实习时间: 年月日目录1面向对象的程序设计 面向对象的程序设计1.1封装对象要有一个明确的边界;边界的划分(对象各司其职、对象的粒度、对象的可重用性)具体来说:(1)属性:私有private(提供set和get方法)在(2)方法:公开或私有public/private(3)方法声明,然后方法实现。例如:以显示器为对象,它拥有宽、高、品牌等属性,功能为看电视、电影、显示,所以可先创建属性,然后创建函数(即功能),最后调用函数。 intwide; intheight; Stringpaizi; publicvoidxianshi(){ System.out.println("我可以显示,真棒!"); }1.2构造器(构造方法)构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。(1)构造方法作用: a、构造出来一个类的实例 b、对构造出来个一个类的实例(对象)初始化。(2)构造方法的名字必须与其定义的类名完全相同,没有返回类型。(3)主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作进行的。(4)类中必定有构造方法,若不写,系统自动添加无参构造函数。接口不允许被实例化,所以接口中没有构造方法。(5)不能被static、final、abstract修饰。(6)构造方法在初始化对象时自动执行,一般不能显式地直接调用.当同一个类存在多个构造方法时,java编译系统会自动按照初始化时最后面括号的参数个数以及参数类型来自动一一对应。完成构造函数的调用。(7)构造方法分为两种:无参构造方法有参构造方法(8)自定义类中,如果不写构造方法,java系统会默认添加一个无参的构造方法。如果写了一个有参的构造方法,就一定要写无参构造方法。 例如:以学生对象为例,学生对象具有姓名(Stringname)、年龄(intage)、性别(charsex)、地址(Stringadd)等等属性,即需要创建一个无参的构造函数和一个有参数的构造函数来对属性进行赋初值,然后再是各个方法(行为或功能)的实现。 publicPerson(){ } publicPerson(Stringname,intage,charsex){ =name; this.age=age; this.sex=sex;}1.3接口Collection<E>和Map<K,V>1.3.1接口Collection<E>(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=newArrayList<String>(); list.add("孟晓军"); list.add("王阳"); set1.add("成青懂"); List<Integer>lin=newLinkedList<Integer>(); lin.add(1); lin.add(2);(2)Set<E>无序的、不包含重复元素HashSet<E>1.3.2接口Map<K,V> 接口Map<K,V>,其中K-此映射所维护的键的类型(键值),V-映射值的类型,一个Map元素就是一个键值对HashMap<Object,Object>。1.4继承 共性放到父类,特性放到子类;即子类继承父类,其实就是一般继承特殊。(1)关键字:extends

例如:CatextendsAnimal{}(2)java中一个类最多只能有一个直接的父类,即单继承,java中要实现多继承,通过接口来实现,关键字。(3)父类中所有属性和方法都能继承给子类;父类中的私有方法不能继承给子类。(4)不同类型的访问权限与继承。表1-1访问权限与继承类型访问权限继承private本类内部不能继承default本类+同包同包子类可以继承protected本类+同包+不同子包可以继承public公开可以继承(5)super()函数的用法 a、super();调用父类的构造方法,只能出现在构造方法的第一行。 b、super.方法名;super表示父类的对象,通过它去调用父类的方法。2实例1打字游戏 在打字游戏实例中,创建一个WordGame类;实例要新建一个窗体,所以必须继承一个

JFrame

对象,而且还要用到键盘监听接口KeyListener。2.1实验步骤2.1.1JFrame创建 在WordGame()构造方法中添加如下代码,既可创建一个窗体: this.setUndecorated(true);//设置是否显示边框 this.setAlwaysOnTop(true);//设置窗口显示在最前端 this.getContentPane().setBackground(Color.BLACK);//设置窗口内容面板的背景色 this.setSize(400,600);//设置窗口大小 this.setLocationRelativeTo(null);//设置相对位置2.1.2创建面板并固定 新建一个类MyPanel作为面板,所以MyPane类需要继承一个JPanel对象,创建好面板后需要在窗体中固定,即在WordGame()构造方法声明一个WordGamePanal对象为panal,然后调用this.add(panal);即可将面板固定到窗体中。 classMyPanelextendsJPanelimplementsSerializable{}//创建面板 WordGamePanalpanal=newWordGamePanal();//创建面板的纸张对象 this.add(panal);//固定纸张2.1.3设置键盘监听接口KeyListener 在WordGame()构造方法中添加如下代码,即可完成键盘的监听,这种为内部类的实现,键盘监听也可以使用外部类来实现。 this.addKeyListener(newKeyListener(){//给当前窗口添加键盘监听事件 publicvoidkeyTyped(KeyEvente){} publicvoidkeyReleased(KeyEvente){} publicvoidkeyPressed(KeyEvente){}//实现需要监听的键盘按钮 });2.1.4当程序一启动,就将26个字母装载到我们的容器中(LinkList<W>) 在本包下创建一个W类,用来存放一个之母的属性,并设置其get,set函数和有参数的构造函数,以及hashCode()、equals(Objectobj)和toString()函数,使用快捷生成即可。2.1.5字母沿着Y轴方向下落(按照自己的速度) 创建一个数据对象,让字母的各个属性都随机的变换,即X坐标、字体大小、下落速度、字母颜色等等随机变换。 publicvoidrun(){ w.setWy(w.getWy()+w.getWspeed());//字符按照自己的速度下落 if(w.getWy()>=fh){//判断是否落到游戏界面的外部 w=null;//自动清空该字符 wp.getW();//调用创建字符方法创建一个新字符 score-=10;//减分} WP.this.repaint();//执行重画 }},0,100);//程序启动立即执行该任务并每100毫秒执行一次2.1.6实现积分操作 if(w2!=null){//判断拿到的字符对象是否为空防止出现空指针//判断所按键的字符是否与显示的字符相同 if((e.getKeyChar()+"").equals(words[w2.getWindex()])){//如果相同就将该字符去除并重新创建一个 WordGame.this.w=null; //调用自定义面板类中的创建一个字符的方法 wp.getW(); score+=10;//加分 WordGame.this.repaint();//执行重画方法}2.2实验结果如图2.1所示为打字游戏正常图,如果输入的字符与下落的字符一致,则会进行加分,如果输入的字符与下落的字符不一致,则会进行减分操作,按空格键就可以结束游戏。图2.1打字游戏运行图3实例2弹弹球游戏 进行了前面的计时器和打字游戏的编写,对Java编程有了更进一步的认识了,为此完成一个弹弹球的游戏,弹弹球游戏是将前面的所讲的知识全部集合在一起。在弹弹球游戏实例中,需要创建一个TTQGame类;实例要新建一个窗体,所以必须继承一个

JFrame

对象,而且还要用到键盘监听接口KeyListener。3.1实验步骤3.1.1JFrame创建 在TTQGame()构造方法中添加如下代码,既可创建一个窗体: this.setUndecorated(true);//设置是否显示边框 this.setAlwaysOnTop(true);//设置窗口显示在最前端 this.getContentPane().setBackground(Color.BLACK);//设置窗口内容面板的背景色 this.setSize(400,600);//设置窗口大小 this.setLocationRelativeTo(null);//设置相对位置3.1.2创建面板并固定 在TTQGame类中新建一个类TTQPanel作为面板,所以TTQPanel类需要继承一个JPanel对象,创建好面板后需要在窗体中固定,即在TTQGame()构造方法中声明一个TTQPanel对象为ttqp,然后调用this.add(ttqp);即可将面板固定到窗体中。 classTTQPanelextendsJPanelimplementsSerializable//创建面板 TTQPanelttqp=newTTQPanel();//创建面板的纸张对象 this.add(ttqp);//固定纸张3.1.3设置键盘监听接口KeyListener 在WordGame()构造方法中添加如下代码,即可完成键盘的监听,这种为内部类的实现,键盘监听也可以使用外部类来实现。 this.addKeyListener(newKeyListener(){//给当前窗口添加键盘监听事件 publicvoidkeyTyped(KeyEvente){} publicvoidkeyReleased(KeyEvente){} publicvoidkeyPressed(KeyEvente){}//实现需要监听的键盘按钮 });3.1.4创建小球对象和添加挡板对象在TTQGame类中创建小球和挡板对象,即创建小球的属性和挡板的属性,其属性为:X,Y坐标,宽度,长度,方向,颜色等等。publicvoidpaint(Graphicsg){ super.paint(g); g.setColor(Color.BLACK); g.fillOval(bx,by,bw,bh); g.setColor(Color.RED); g.fillRect(rx,ry,200,fh-ry); }3.1.5小球运动在小球运动过程中,其运动方向为方向总共四种:right_down(右下),right_up(右上),left_down(左下),left_up(左上),如果要改变小球的运动方向,只要改变小球的坐标即可。3.1.6球撞墙之后反弹小球在运动过程中撞墙,则会反弹,其运动约束设置为:如果球从左上下落,若碰到下壁则向右上反弹,若碰到右壁,则向左下反弹如果球从右上下落,若碰到下壁则向左上反弹,若碰到左壁,则向右下反弹如果球从左下上浮,若碰到上壁则向右下反弹,若碰到右壁,则向左上反弹如果球从右下下落,若碰到上壁则向左下反弹,若碰到左壁,则向右上反弹3.1.7小球遇到挡板后继续反弹,否则GAMEOVER!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,"GAMEOVER!","噩耗",JOptionPane.DEFAULT_OPTION);//弹出框提示游戏结束 System.exit(0);}}3.2实验结果如图3.1所示为弹弹球游戏正常图,如果小球撞击墙壁就会进行反弹操作,当小球撞击挡板也会进行反弹操作,如果小球下落没有撞击挡板,则游戏结束,按空格键就可以结束游戏。如图3.1弹弹球游戏运行图4实例3贪吃蛇游戏 在完成弹弹球游戏后,进行贪吃蛇游戏是为了掌握在弹弹球中方向的控制,其实验步骤与弹弹球相似,首先要创建窗口,然后在创建面板,固定面板。4.1实验步骤(1)JFrame创建(2)创建面板并固定(3)设置键盘监听接口KeyListener(4)加载数据(采用面向对象的思想,把整条蛇作为一个大的对象,把蛇的身体元素看成多个对象)(容器请使用LinkedList)(5)让数据对象动起来(去掉尾部添加头部)(6)控制数据对象运动的方向(7)随机产生一个豆子(8)数据对象(贪食蛇)吃豆子并长长(9)数据对象撞墙GAMEOVER(10)贪食蛇不能咬到自己的身体,贪食蛇不能180度掉头,否在GAMEOVER。4.2实验结果 如图4.1和4.2所示为贪吃蛇游戏运行图,其使用上下左右按键对贪吃蛇进行控制,使其能够吃到小豆子。图4.1贪吃蛇游戏运行图图4.2贪吃蛇撞墙运行图5实例4女装店管理系统(销售信息管理模块)5.1模块功能描述 销售信息管理模块具有销售记录添加、销售信息修改、销售信息删除、销售信息查询四个功能,这个模块是为了记录顾客在女装店的所有消费,同时也记录了服装的销售信息,这能更加方便的进行信息的管理。5.2销售信息管理模块ER图 会员实体具有会员编号、账号、密码、性别、联系电话、姓名等属性;商品实体具有商品编号、名称、尺寸、数量、颜色、价格等属性;销售记录实体具有编号、销售记录编号、买方姓名、产品名称、买卖时间、买卖数量、买卖颜色、买卖尺寸大小、买卖价格等属性。如图4.1所示5.3数据字典5.3.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)描述:用来存放买卖商品的价格5.3.2数据流1)数据流名称:会员个人信息数据流别名:无说明:记录会员所有的信息数据流来源:会员信息数据表数据流流向:会员自己数据流组成:编号+账号+密码+性别+联系电话+姓名2)数据流名称:商品信息说明:记录商品所有的信息数据流来源:管理员操作数据流流向:商品信息数据表数据流组成:编号+商品名称+商品尺寸+商品数量+商品颜色+商品价格3)数据流名称:销售记录信息数据流别名:无说明:记录商品所有的销售记录信息数据流来源:会员消费数据流流向:销售记录信息数据表数据流组成:编号+销售记录编号+买方姓名+产品名称+买卖时间+买卖数 量+买卖颜色+买卖尺寸大小+买卖价格5.4流程图选择系统登录,管理员输入账号和密码,验证正确后,进入系统。管理员选择销售记录模块,可以对所有的销售记录进行增加、修改、删除、查询等操作。如图5.2销售信息管理模块流程图5.5功能点的展示本次开发使用的是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.6原型展示 如图5.3所示,是管理员的登陆界面,管理员输入账号、密码和验证码,验证正确后,登陆进入系统,选择销售记录模块。如图5.3登陆界面如图5.4是销售管理模块界面,用户可以对所有的销售记录进行查询。如图5.5是销售管理模块界面,用户可以对所有的销售记录进行修改

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论