logo资料库

广工Java程序设计——Java即时聊天程序.doc

第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
资料共19页,剩余部分请下载后查看
一、课程题目
二、题目分析与设计
三、测试分析
四、设计体会
附录:源代码
Java 期末考核 课程名称 Java 程序设计 题目名称 java 即时聊天程序 学生学院 计算机 专业班级 计算机 17(4)班 学 号 学生姓名 指导教师 赵锐 2018 年 12 月 10 日 1
难度系数 独立完成工作量占总工作量的比例 90% 程序功能完成情况 报告内容与格式 总评成绩 2
一、 课程题目 实现一个 Java 版即时聊天程序。 【功能提示】 1)用户登录及登录验证:用户能够使用固定帐号(帐号程序内置即可,无需完成额外的注册 功能)登录系统,系统能对预定的帐号、密码进行验证; 2)聊天功能:能够在两台以上的机器上登录运行程序,能使用不同帐号完成在线的即时消息 发送(聊天); 3)文件传输; 4)好友管理:能够显示好友列表,并能够添加、修改、删除好友; 5)在线、离线状态显示:能够显示好友的在线状态或离线状态。 6)聊天记录管理:能够以文件或数据库形式将聊天记录进行存储,并能打开、显示、删除所 存储的聊天记录。 补充:其它可选的还包括 Java 多人在线网络聊天室、B/S 结构的聊天系统等。 二、 题目分析与设计 1. 程序所使用的开发环境有:eclipse java EE、jdk1.8、mysql5.7 2.软件功能架构图如下: 3
3. 论述界面设计过程,指出其设计上的创意及组件的布局策略。 本程序一共包含 5 个界面: (1)登录界面:组件有两个标签、一个文本输入框、一个密码输入框以及两个按钮,界面的 布局管理器为空,各组件的位置通过设置其坐标点来确定。 (2)注册界面:组件有三个标签、一个文本输入框、两个密码输入框以及两个按钮,界面的 布局管理器为空,各组件的位置通过设置其坐标点来确定。 (3)主页:主页是继承了 JFrame 类,采用默认的边界布局,由 panelNorth 面板、jtp(选项卡) 两部分组成:○1 panelNorth 面板位于边界布局的北边,采用从左到右的流式布局,里面放了 一个由头像和用户 id 组成的标签;○2 jtp(选项卡)位于边界布局的中部,它的第一格窗也是采 用边界布局,第一个格窗由 3 个部分组成,由上到下是 panel_1(北边)、scroll(中部)、panel_2 (南边)。其中 panel_1 采用居中的流式布局,存放“刷新好友列表”的按钮;scroll 放了一个 表格 JTabel,用来显示好友列表,表格可滚动,右键点击好友可删除,双击可进入与该好友 的聊天窗口;panel_2 采用表格布局管理器,放了三个按钮。主页右上角的×设置为点击退出 程序。 (4)聊天窗口:该窗口继承 JFrame 类,定义 panel 替换 Jframe 的默认面板,panel 采用居中 的流式布局,里面包含两部分内容:可滚动的文本区域和一个面板,面板里边从左到右装了 一个文本输入框和三个按钮。 (5) 展示聊天历史记录页面:该类也是继承 JFrame,利用 DefaultTableModel 表格模型创建 可滚动的表格,用来展示聊天记录。双击聊天记录可删除该记录。 4. 本系统设计了 3 个表,分别对应三个实体类:用户、好友关系、聊天记录。 用户表(user) 列名 数据类型(长度) 默认 非空 自增 约束条件 备注 int(9) varchar(16) int(2) id password status 好友关系表(relation) 是 是 0 主键 用户账号 登录密码 登录状态 列名 id user friend 数据类型(长度) 默认 非空 自增 约束条件 备注 int(11) int(11) int(11) 是 是 主键 外键 外键 用户的账号 好友的账号 4
聊天记录表(record) 列名 数据类型(长度) 默认 非空 自增 约束条件 备注 int(11) varchar(200) int(11) int(11) datetime id message from_id to_id time 三个表的关联如下图: 是 是 主键 外键 外键 发送信息 发送者账号 接收者账号 发送时间 5. 系统主要分为以下几大模块: (1)登录验证模块 执行 Login 类(系统的入口 main 函数在这里),绘制出登录界面,内部类 MyActionListener 监听“登录”和“注册”两个按钮。当用户输入登录信息(账号+密码)点击登录按钮时,监 听器获取输入信息,先进行正则表达式验证,格式无误后再调用 userDao 类,连接数据库, 对登录进行验证,验证正确则跳转到 Homepage 类,并关闭原来的界面;当验证失败就会停留 在 Login 界面,并弹出信息错误提示框;当用户点击注册按钮,程序会跳转到 Register 类, 并关闭原来的界面。执行示意图如下: 5
(2)用户注册模块 在登录模块中点击注册按钮会跳转到注册模块,此时执行 Register 类,内部类 MyActionListener 监听。当用户输入注册信息点击注册按钮时,监听器获取输入信息,先进 行正则表达式验证,格式无误后再调用 userDao 类,连接数据库,向数据库插入新用户信息, 注册正确则跳回到登录模块中的 Login 类,并关闭原来的界面;当注册失败就会停留在 Register 界面,并弹出信息错误提示框;当用户点击返回按钮,程序会跳转到 Login 类,并 关闭原来的界面。执行示意图如下: (3)聊天功能模块 服务器端是 Server 类,该类专门用来创建 socket 服务,等待客户端的连接,同时有一 个静态的 HashMap,用来记录在线的客户端账号和其对应的输出流。每当客户端发起连接的 申请时,就实例化一个 ServerThread 类线程为该客户端服务。 ServerThread 类是服务器端线程类,是信息中转站,负责接收来自客户端的信息,客户 端的传来的信息都会经过 Protocol 接口中的协议字符包装,处理后再向指定的客户端输出。 客户端是 Client 类,这个类主要是用来获取客户端对应的输出流,同时为客户端实例化 一个 ClientThread 线程类。当用户登录成功进入系统主页之后,就会启动客户端,同时发送 信息通知服务器端,然后服务器端就会把用户账号和对应的输出流放进 HashMap 中。 ClientThread 类是客户端用来接收来自服务器的信息,并将信息处理后输出到聊天界面 上。 执行流程大概如下:Chating 类继承 JFrame 用来描绘聊天窗口,内部类 MyListener 监 听发送按钮。当客户端 A 点击发送按钮,获取输入框的信息,判断信息是否为空,非空调用 RecordDao 类,连接数据库,插入聊天记录,同时将信息显示在聊天窗体中,然后包装信息 并写入客户端 A 的输出流(客户端 A->服务器),服务器端接收到信息后,解读信息,得到该 6
信息的接收者账号客户端 B,写入指定客户端 B 的输出流(服务器->客户端 B)。客户端 B 的 ClientThread 实例接收来自服务器的信息后,处理过后再显示在客户端 B 的聊天窗口中。流 程如图: (4)文件传输模块 执行流程大概如下:Chating 类继承 JFrame 用来描绘聊天窗口,内部类 MyListener 监 听传输文件按钮。当客户端 A 点击传输文件按钮,打开本地文件目录,选择文件,实例化文 件输入流读取文件内容,然后包装读取到的内容并写入客户端 A 的输出流(客户端 A->服务 器)。服务器端接收到信息后,解读信息,得到该信息的接收者账号客户端 B,先发送系统信 息告诉 B 准备接收文件,然后 B 端会弹出窗口提示输入文件的存储路径,再将文件内容写入 客户端 B 的输出流(服务器->客户端 B)。这样客户端 B 的 ClientThread 实例接收来自服务 器的文件内容后,再将内容写入到自己指定的文件路径里。流程如图: 7
(5)好友管理模块 在主页 Homepage 类中会调用 MyFriendList 类,通过表格模型绘制好友列表。MyFriendList 类的内部类 MyListener 实现监听器监听表格,当双击表格某一行的时候就会打开与该行好友 的聊天窗口,当右键单击的时候会弹出对话框询问是否确定删除该好友。在 Homepage 类中 还有刷新好友列表、添加好友和删除好友这三个按钮,由 Homepage 类的内部类 MyListener 进行监听。当点击刷新好友列表按钮时,会重新连接数据库,调用 RelationDao 类、userDao 类向数据库中查询好友列表成员及好友的最新登录状态;当点击添加好友按钮时会弹出输入 框,提示输入要添加的好友账号,先用正则判断输入,再连接数据库,调用 UserDao 类查询 是否有该用户,再 RelationDao 类判断是否已经是自己的好友,如果都满足条件,再调用 RelationDao 类向数据库插入数据,最后弹出框提示添加好友成功;当点击删除好友按钮,与 添加好友类似,先正则判断输入,再连接数据库判断是否是自己的好友,如果是则调用 RelationDao 类删除好友关系,最后弹出框提示删除好友成功。流程如图: (6)登录状态模块 当用户登录成功进入主页时,在 Homepage 类的构造器中调用 UserDao 类的 chang(int id) 方法,连接数据库,修改用户的登录状态为在线,调用 Server 类中的 HashMap,添加用户账 号和对应输出流;当用户点击主页中的退出按钮时,内部类 MyListener 实现监听,调用 Server 类中的 HashMap,移除用户账号和对应输出流,然后再次连接数据库,调用 UserDao 类的 chang(int id)方法,修改用户的登录状态为离线。流程如图: 8
分享到:
收藏