《Java专业实践课题设计报告模版精品资料.doc》由会员分享,可在线阅读,更多相关《Java专业实践课题设计报告模版精品资料.doc(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java语言程序设计实践报告 大连理工大学城市学院JAVA语言编程实践报告 实践题目: 组长姓名: 组员姓名: 完成日期: 21目 录1 摘要12 系统设计与实现22.1 系统分析22.1.1 需求分析22.1.2 可行性分析22.1.3开发及运行环境分析22.2 系统总体设计32.2.1 系统总体功能描述32.2.2 系统总体流程32.2.3 系统功能模块图42.3 数据库设计52.3.1 E-R图52.3.2 数据表62.3.3 连接数据库模块72.4 系统详细设计92.4.1 系统功能实现小组分工描述92.4.2 管理员登录模块92.4.3 系统主界面模块102.4.4 用户管理模块11
2、2.4.5 图书信息管理模块142.4.6 图书借阅模块172.4.7服务器端处理过程192.5 系统测试设计202.5.1测试过程描述202.5.2 测试结果分析203 结 论211 摘要为了巩固Java语言程序设计课程的主要知识,提高编程实际的开发能力,基于课程的技术要求和作业标准,设计并实现了 MiniQQ通讯 系统。 该系统的主要功能是 实现局域网内部个单位的通信 ,系统的开发语言是 JAVA ,开发环境是 eclipse ,数据库是 JAVADB 。本系统具有的特点是: 程序小巧、操作简单 ,优点是: 界面美观 、灵活、实用、安全 2 系统设计与实现2.1 系统分析2.1.1 需求分
3、析根据一些大、中、小型企业和商业公司的实际需要,要求本系统具有以下功能。1 统一美观的操作界面,能保证系统的易用性。2 规范、完善的通信列表维护功能。3 全方位、多功能信息通信功能。4程序缩放到系统任务栏中,提供最大的可用屏幕空间。2.1.2 可行性分析计算机技术的飞速发展,使计算机应用技术在企业管理中也得到了迅速的普及,人们开始通过计算机对实务工作中的各项信息进行管理,以帮助企业提高生产、运作的效率。企业员工之间的沟通也是信息化管理的一部分,利用计算机实现工作中各种问题的沟通,例如工作任务通知、技术资料传递等。本系统根据企业工作中可能遇到的各种沟通问题开发而成,能够很好的避免工作中的错误,真
4、正实现了企业的信息化管理。2.1.3开发及运行环境分析1.硬件平台CPU:P1.60GHZ内存:128MB以上2.软件平台操作系统:Windows2000/Windows xp/Windows Vista/Window 7/Linux/Mac 等数据库:JAVADB开发工具:JDK 6.0 Eclipse+WindowsBuilder 2.2 系统总体设计2.2.1 系统总体功能描述miniQQ软件使用了JDK6新增的JAVADB数据库,系统主要有通信列表维护、系统操作、系统设置、任务栏操作等4部分组成。1通信列表维护 通信列表维护包括用户更名、添加用户、删除用户、显示列表访问主机和信使群发等
5、6部分。2系统操作 系统操作包括搜索用户。3系统设置系统设置包括IP搜索范围设置。4任务栏操作任务栏操作包括打开窗体、访问服务器、退出。 另外,miniQQ系统通过内部网络处理和交换信息,C/S模式采用开放结构、解决数据库共享问题,本系统就采用C/S模式,其中客户端运行Java客户端程序,服务器端运行Java服务器端程序,如图2-1所示。图2-1 系统运行总体结构2.2.2 系统总体流程过程如下:1 打开miniQQ系统,系统自动生成本机用户,本机可右键本机用户图标,对本机用户进行基本设置。2 点击IP搜索按钮,对当前局域网内的可操作IP进行设置,设定可添加的IP范围。3 点击搜索用户列表,单
6、机搜索新用户按钮,对当前局域网内的用户进行搜索,进行好友添加。对以添加的好友,可以在好友列表中建立图标,双击好友图标,即可进行会话。右键好友图标,可对好友进行操作。系统图书借阅流程如图2-2所示。图2-2 系统图书借阅流程图2.2.3 系统功能模块图根据系统的设计要求,MiniQQ系统实现了四个完整的功能。根据这些功能要求,设计的系统功能模块如图2-3所示。. MiniQQ 通讯列表维护 系统操作 系统设置 任务栏操作显示列表更名添加用户删除用户搜索用户IP搜索范围打开窗体退出访问主机访问服务器图2-3 系统功能模块图书信息管理系统各模块功能要求分析如下:1. 用户登录要求实现对管理员用户登录
7、的验证、标识,为用户对系统的操作提供授权依据,在这一模块中,首先要求管理员输入自己的登录用户名和登录密码,然后系统对用户名和密码进行验证,判断用户的身份。2. 用户管理要求由于用户众多,为了方便每个用户借阅,该系统需要存储每个用户的基本信息,以便用户借书时候通过用户名从数据库中快速调出用户信息,用户的基本信息包括用户名、姓名、密码、学院、专业和年级等,管理员可以添加新用户、查询用户、修改用户和删除用户。3. 图书管理要求为了方便图书的管理,需要把每本书的相关信息添加到数据库中,以便通过书号从数据库中快速调出图书信息,图书基本信息包括书号、作者、出版社、出版年月等,管理员可以添加图书、查询图书、
8、修改图书和删除图书。4. 借阅管理要求 通过本系统,图书管理员可以进行图书借阅登记和图书归还登记,并可以查询图书被借阅的情况。2.3 数据库设计本系统数据库采用JAVADB数据库,系统数据库名称为db_EQ,共包含两张表。下面将给出数据表概要说明及数据表的结构。1 数据表概要说明如图8.2所示,该数据表树形结构图包含系统所有数据表。2 数据表的结构内部通信系统的数据表结构如下。a.tb_location(定位信息表)2.3.1 E-R图本系统的数据库表的E-R图如图2-4至2-7所示:(1)用户实体的E-R图本机IP 本级用户User本机名称用户名称图2-4 用户实体(2)对话交互实体的E-R
9、图图2-5 借阅实体(3)图书实体的E-R图图2-6 图书实体(4)各实体之间的联系图图2-7 实体联系图2.3.2 数据表本系统数据库采用javadb数据库,系统数据库名称为db_EQ,共包含2张表,结构如下。1. tb_user(用户信息表)用户信息表主要用来保存企业内部的通信用户列表,结构如表2-1所示。表2-1 字段名称数据类型 长度 是否主键说明IpVarchar 16 是主键,用户IP地址hostVarchar 30主机名称NameVarchar 20姓名tooltipVarchar 50提示文本iconVarchar 50头像2. tb_location(定位信息表)定位信息表主
10、要用来保存通信窗体的位置和窗体大小,结构如表2-2所示。表2-2 字段名称数据类型是否为空是否主键说明xLocation Int Yes X坐标轴yLocation Int Yes Y坐标轴width Int Yes 窗体宽度heigth Int Yes 窗体高度2.3.3 连接数据库模块 编写访问数据库的DAO类,该公共类包含在com,lzw.dao包中,用来实现对数据库的各种操作,包括数据的插入、更新和查询。省去每次操作都要编写连接数据库程序的步骤,把连接数据库操作封装到一个类DAO中,在不同的模块中调用这个类就可以对数据库进行连接,执行相应的数据库操作,这样就使得连接数据库安全高效,程序
11、代码简洁清晰,也符合Java面向对象的思想整个系统的数据库访问工作全部由该类完成。连接数据库类dao.java的代码如下:package com.lzw.dao;import java.awt.Rectangle;import java.io.File;import .*;import java.sql.*;import java.util.*;import javax.swing.JOptionPane;import com.lzw.userList.User;public class Dao / 数据库驱动private static final String driver = org.a
12、pache.derby.jdbc.EmbeddedDriver;private static String url = jdbc:derby:db_EQ;/ 数据库URLprivate static Connection conn = null;/ 数据库连接private static Dao dao = null;private Dao() try Class.forName(driver);if (!dbExists() conn = DriverManager.getConnection(url + ;create=true);createTable(); elseconn = Dri
13、verManager.getConnection(url);addDefUser(); catch (Exception e) e.printStackTrace();JOptionPane.showMessageDialog(null, 数据库连接异常,或者本软件已经运行。);System.exit(0);private boolean dbExists() / 测试数据库是否存在boolean bExists = false;File dbFileDir = new File(db_EQ);if (dbFileDir.exists() bExists = true;return bExis
14、ts;public static Dao getDao() / 获取DAO实例if (dao = null)dao = new Dao();return dao;public List getUsers() / 获取所有用户List users = new ArrayList();try String sql = select * from tb_users;Statement stm = conn.createStatement();ResultSet rs = stm.executeQuery(sql);while (rs.next() User user = new User();use
15、r.setIp(rs.getString(1);user.setHost(rs.getString(2);user.setName(rs.getString(3);user.setTipText(rs.getString(4);user.setIcon(rs.getString(5);users.add(user);rs.close(); catch (SQLException e) e.printStackTrace();return users;public User getUser(String ip) / 获取指定IP的用户String sql = select * from tb_u
16、sers where ip=?;User user = null;try PreparedStatement pst = conn.prepareStatement(sql);pst.setString(1, ip);ResultSet rs = pst.executeQuery();if (rs.next() user = new User();user.setIcon(1.gif);user.setIp(rs.getString(1);user.setHost(rs.getString(2);user.setName(rs.getString(3);user.setTipText(rs.g
17、etString(4);user.setIcon(rs.getString(5);rs.close(); catch (SQLException e) e.printStackTrace();return user;public void addUser(User user) / 添加用户try String sql = insert into tb_users values(?,?,?,?,?);PreparedStatement ps = null;ps = conn.prepareStatement(sql);ps.setString(1, user.getIp();ps.setStri
18、ng(2, user.getHost();ps.setString(3, user.getName();ps.setString(4, user.getTipText();ps.setString(5, user.getIcon();ps.execute();ps.close(); catch (SQLException e) e.printStackTrace();public void updateUser(User user) / 修改用户try String sql = update tb_users set host=?,name=?,tooltip=?,icon=? where i
19、p=+ user.getIp() + ;PreparedStatement ps = null;ps = conn.prepareStatement(sql);ps.setString(1, user.getHost();ps.setString(2, user.getName();ps.setString(3, user.getTipText();ps.setString(4, user.getIcon();ps.executeUpdate();ps.close(); catch (SQLException e) e.printStackTrace();public void delUser
20、(User user) / 删除用户try String sql = delete from tb_users where ip=?;PreparedStatement ps = null;ps = conn.prepareStatement(sql);ps.setString(1, user.getIp();ps.executeUpdate();ps.close(); catch (SQLException e) e.printStackTrace();public void updateLocation(Rectangle location) / 更新窗体位置String sql = up
21、date tb_location set xLocation=?,yLocation=?,width=?,height=?;try PreparedStatement pst = conn.prepareStatement(sql);pst.setInt(1, location.x);pst.setInt(2, location.y);pst.setInt(3, location.width);pst.setInt(4, location.height);pst.executeUpdate();pst.close(); catch (SQLException e) e.printStackTr
22、ace();public Rectangle getLocation() / 获取窗体位置Rectangle rec = new Rectangle(100, 0, 240, 500);String sql = select * from tb_location;try Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql);if (rs.next() rec.x = rs.getInt(1);rec.y = rs.getInt(2);rec.width = rs.getInt(3);rec.h
23、eight = rs.getInt(4);rs.close();stmt.close(); catch (SQLException e) e.printStackTrace();return rec;public void createTable() / 创建数据表格String createUserSql = CREATE TABLE tb_users (+ ip varchar(16) primary key, + host varchar(30),+ name varchar(20), + tooltip varchar(50),+ icon varchar(50);String cre
24、ateLocationSql = CREATE TABLE tb_location (+ xLocation int, + yLocation int, + width int,+ height int);try Statement stmt = conn.createStatement();stmt.execute(createUserSql);stmt.execute(createLocationSql);addDefLocation();stmt.close(); catch (SQLException e) e.printStackTrace();public void addDefU
25、ser() / 创建本机用户try InetAddress local = InetAddress.getLocalHost();User user = new User();user.setIp(local.getHostAddress();user.setHost(local.getHostName();user.setName(local.getHostName();user.setTipText(local.getHostAddress();user.setIcon(1.gif);if (getUser(user.getIp() = null) addUser(user); catch
26、 (UnknownHostException e) e.printStackTrace();public void addDefLocation() / 添加默认窗体位置String sql = insert into tb_location values(?,?,?,?);try PreparedStatement pst = conn.prepareStatement(sql);pst.setInt(1, 100);pst.setInt(2, 0);pst.setInt(3, 280);pst.setInt(4, 650);pst.executeUpdate();pst.close();
27、catch (SQLException e) e.printStackTrace();public static void main(String args) Dao dao = new Dao();List users = dao.getUsers();for (User user : users) System.out.println(user.getIp() + t + user.getName();2.4 系统详细设计2.4.1 系统功能实现小组分工描述序号姓名 实现模块及功能备注 1葛正阳 2商 亮 3栾丽颖 4李 艳2.4.2 主窗体设计模块用户启动MiniQQ软件后,将启动程序主
28、窗体和系统托盘界面,其中主窗口体包括系统的所有功能模块,例如用户列表、系统工具面板和系统设置面板等。1. 主窗体运行结果图2. 技术实现主要代码(详见源程序) 3. 开发说明管理员登录由Login类继承了Jframe类,首先声明了标签、按钮、文本框、密码框和一个Jframe窗口,然后通过构造方法创建标签、按钮、文本框、密码框,并添加到窗口容器中,最后设置窗口的大小和可见行; 然后为按钮增加事件监听,实现AciontListener接口完成用户名、密码的检测并登录。2.4.3 用户列表模块通信软件也需要一个类似电话本的功能,用户列表模块就是用来实现记录用户信息、更改用户姓名、删除通信用户等与电话
29、本功能类似的模块,他是主窗口最先显示的模块界面,包含了当前系统数据库中记录的所有通信用户信息并且以列表的形式显示到界面中。1. 用户列表界面2. 技术实现主要代码(详见源程序) 3. 开发说明Bookmain类继承了Jframe类,定义了一个菜单栏、4个菜单和12个菜单项,然后定义了一个方法go(),通过该方法设置窗口的布局、窗口的大小和标题,将菜单项加入到各自的菜单中,把菜单加入到菜单栏中,并将菜单栏加入到窗口中;当单击菜单项时候产生单击实践,传递给监听者,实现接口并处理监听到的事件。2.4.4 用户通讯模块在用户列表中选择并双击用户头像,将启动该用户的通讯窗体,通过该窗体可以和对方互通文本
30、信息和信使信息,在窗体右侧会显示通信对方的用户信息,例如对方的主机名、用户名和IP地址。1. 用户通讯模块(1)用户通讯界面(2)技术实现主要代码(详见源程序) (3)开发说明 在系统主界面中,单击“用户管理”-“添加用户”菜单命令,打开添加用户界面,该界面包含6个标签、5个文本框、1个密码框和两个按钮,在文本框中输入用户信息,单击“添加”按钮就可以把数据信息添加到数据库中; 单击按钮进行用户添加,添加用户信息要求每项信息都不能为空,如果某一项为空则弹出消息提示对话框,否则调用方法connect()把数据流信息传输到服务器端。2. 用户信息删除模块(1)用户信息删除界面(2)技术实现主要代码(
31、详见源代码) (3)开发说明 在系统主界面中,单击“用户管理”-“删除用户”菜单命令,打开删除用户信息界面,界面包含6个标签、5个文本框、1个密码框和两个按钮,在最上面的文本框中输入学号,单击“查询”按钮用于查询用户是否存在,如果存在,则把用户信息显示在对应的文本框中,单击“删除”按钮就可以删除数据库中的信息;为两个按钮分别添加事件监听,并对监听到的事件进行处理。3. 用户信息修改模块(1)用户信息修改界面(2)技术实现主要代码(详见源代码) (3)开发说明在系统主界面中,单击“用户管理”-“修改用户”菜单命令,打开修改用户信息界面,界面包含6个标签、5个文本框、1个密码框和两个按钮,在最上面
32、的文本框中输入学号,单击“查询”按钮用于查询用户是否存在,如果存在,则把用户信息显示在对应的文本框中,修改用户信息后,单击“修改”按钮就可以修改数据库中的信息;为两个按钮分别增加事件监听,并对监听到的事件进行处理。4. 用户信息查询模块(1)用户信息查询界面(2)技术实现主要代码(详见源代码) (3)开发说明在系统主界面中,单击“用户管理”-“查询用户”菜单命令,打开查询用户信息界面,界面包含一个标签、一个文本框、一个下拉菜单和一个查询按钮,在文本框中输入查询条件,并通过下拉菜单选择按学号或按姓名查询,单击“查询”按钮就可以把查询结果显示出来; 通过actionPerformed()处理监听到
33、的事件,首先获得查询条件,如果查询条件不为空,接着调用方法connect()将数据传递到服务器端。2.4.5 系统工具模块系统工具模块包括搜索网络用户功能,搜索用户功能可以在指定的IP范围内搜索所有正在运行的计算机用户,搜索到用户就会保存到数据库,并添加到用户列表中。1. 图书信息增加模块(1)图书信息增加界面(2)技术实现主要代码(详见源代码) (3)开发说明在系统主界面中,单击“图书管理”-“添加图书”菜单命令,打开添加图书信息界面,界面包含6个标签、6个文本框和两个按钮,在文本框中输入图书信息;为按钮添加事件监听,添加图书信息要求每项信息都不能为空,如果某一项为空则弹出消息提示对话框,否
34、则调用方法connect()把数据流信息传输到服务器端。2. 图书信息删除模块(1)图书信息删除界面(2)技术实现主要代码(详见源代码) (3)开发说明在系统主界面中,单击“图书管理”-“删除图书”菜单命令,打开删除图书信息界面,界面包含6个标签、6个文本框和两个按钮,在最上面的文本框中输入图书编号,单击“查询”按钮用于查询该图书是否存在,如果存在,则把图书信息显示在对应的文本框中,单击“删除”按钮就可以删除数据库中的图书信息;为按钮添加事件监听,并对监听到的事件进行处理。3. 图书信息修改模块(1)图书信息修改界面(2)技术实现主要代码(详见源代码) (3)开发说明在系统主界面中,单击“图书
35、管理”-“修改图书”菜单命令,打开修改图书信息界面,界面包含6个标签、6个文本框和两个按钮,在最上面的文本框中输入图书编号,单击“查询”按钮查询该图书是否存在,如果存在,则把图书信息显示在对应的文本框中,修改图书信息后,单击“修改”按钮就可以修改数据库中的信息了;为按钮增加事件监听,并对监听到的事件进行处理。4. 图书信息查询模块(1)图书信息查询界面(2)技术实现主要代码(详见源代码) (3)开发说明在系统主界面中,单击“图书管理”-“查询图书”菜单命令,打开查询图书信息界面,界面包含一个标签,一个文本框、一个下拉菜单和一个查询按钮,在文本框中输入查询条件,并通过下拉菜单选择按编号或按书名查
36、询,单击“查询”按钮就可以把查询结果显示出来;通过方法actionPerformed()处理监听到的事件,首先获得查询条件,如果查询条件不为空,然后就调用方法connect()将数据传输到服务器端。2.4.6 系统设置模块系统设置模块用于设置系统参数,它主要包括系统路径设置功能、服务器登陆信息的设置功能和设置IP搜索范围的设置功能。1. MiniQQ系统设置模块(1)图书借阅界面(2)技术实现主要代码(详见源代码) (3)开发说明 在系统主界面中,单击“借阅管理”-“借阅图书”菜单命令,打开借阅图书界面,界面包含两个标签、两个文本框和两个按钮,在文本框中输入图书编号和读者编号,单击“借阅”按钮
37、就可以借阅图书;在这里为按钮添加事件监听,如果文本框为空,则弹出消息提示对话框,否则调用方法connect()把数据流传输到服务器端。2. 图书归还模块(1)图书归还界面(2)技术实现主要代码(详见源代码) (3)开发说明在系统主界面中,单击“借阅管理”-“归还图书”菜单命令,打开归还图书界面,界面包含1个标签、1个文本框和两个按钮,在文本框中输入图书编号,单击“归还”按钮就可以归还图书;为按钮添加监听,如果文本框为空,则弹出消息提示对话框,否则调用方法connect()把数据流传输到服务器端。3. 图书查询模块(1)图书查询界面(2)技术实现主要代码(详见源代码) (3)开发说明在系统主界面
38、中,单击“借阅管理”-“借阅查询”菜单命令,打开查询图书借阅情况界面,界面包含1个标签、1个文本框、1个下拉菜单和1个查询按钮,在文本框中输入查询条件,并通过下拉菜单选择按图书或按读者查询,单击“查询”按钮就可以把查询结果显示出来;通过方法actionPerformed()处理监听到的事件,首先获得查询条件,如果查询条件不为空,然后就调用方法connect()将数据传输到服务器端。2.4.7 服务器端处理过程在系统设计过程中采用的是C/S模式,具体操作时候需要把要处理的数据发送到服务器端进行处理,然后把处理的结果返回给客户端。服务器端处理的操作过程如下:(1) 创建ServerSocket对象
39、和Socket对象,用于接收来自客户端的数据流,并输出数据流到客户端;(2) 创建线程;(3) 读取来自客户端的数据流,并进行相应的处理;(4) 把处理的结果返回给客户端。其中在用户管理模块、图书管理模块和图书借阅模块都有相应的服务器端,它们的实现过程类似,具体编程过程如下所示(代码详见源代码)。(1) 导入程序所使用的包;(2) 创建图形用户界面为更清楚第显示客户机与服务器之间的连接情况,客户端与服务器端之间传输的数据流以及在程序运行过程中出现的异常情况,可以创建一个图形用户界面,用于显示系统的信息;(3) 定义connect()方法来接收来自客户端的数据流,启动线程处理,最后关闭数据库连接;(4) 创建线程由于可能同事有多个客户端对图书信息进行操作,因此要创建线程处理来自客户端的数据流;(5) 定义方法sendData()将操作结果输出到客户端。2.5 系统测试设计2.5.1测试过程描述各模块运行效果的描述和截图:2.5.2 测试结果分析根据以上实际测试结果, 3 结 论该系统的题目是: MiniQQ,经过测试能够正确地实现了所要求的功能: 局域网内部的用户进行即时通讯 。开发过程中采用的工具和环境是: eclipse,JDK6.0,数据库JAVADB ,系统主要功能是:
限制150内