
基于java的仿qq聊天程序的设计与实现(论文).doc
35页2. 系统分析2.1可行性分析 1)经济可行性:本系统需要一个oracle数据库服务器,由于使用人数比较少,安装一个免费的oracle数据库完全可以应付需要,所以成本就不用考虑了 2)操作可行性:只要一台以上计算机连接在同一个局域网内,本系统就可以安装使用,所以操作上完全不存在问题 3)技术可行性:本系统采用Java语言,是基于CS架构的开发这个系统需要开发者对socket编程和java Swing这两方面的技术比较熟由于本人长期从事于java语言编程,所以技术方面是可行的 2.2需求分析2.2.1功能分析本系统要实现的功能如下:1)注册服务器收到用户的注册请求,便开始接受客户传递的信息,诸如客户的呢称,性别,籍贯,个人资料等,接受完毕后,便通过Jdbc-Odbc与后台数据库连接,然后向数据库添加记录,如果成功,便向客户返回其号码客户收到服务器返回的信息后,便打开主登陆窗口2)登陆在客户端,用户输入其号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过JdbcOdbc读取数据库,然后与用户输入的信息比较,如果成功,便打开主程序窗口然后客户向服务器请求读取好友名单,服务器收到该请求,开始读取数据库中的表,得到好友的号码后,再在icq表中读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,并且建立几个矢量(Vector)用以存储好友的呢称,号码。
3)私聊私聊就是两个聊天客户端首先发送消息到服务器端,服务器端根据发送人信息和接收者信息来转发例如服务器接收到一个A发给B的消息,先判断B是否已经,如果就将信息发送过去B接收到A发来的信息,如果是未建立对话窗口,就询问是否建立对话,否则就丢弃信息4)群聊群聊,就是多人一起聊天过程与私聊差不多唯一的不同就是服务器会将信息转发给指定群的所有成员5)创建分组用户注册以后默认的好友分组只有一个用户在执行添加分组操作以后,客户端分将一个这个动作的信息发送给服务器端(主要是FromClientlisten)服务器端的fromClientListen接收到这个请求,会进行数据库操作,将要添加的分组信息插入到数据库中如果成功,则返回这个分组的信息给客户端,否则返回错误提示信息6)创建群用户注册以后群个数为0用户在执行添加群操作以后,客户端分将一个这个动作的信息发送给服务器端(主要是FromClientlisten)服务器端的fromClientListen接收到这个请求,会进行数据库操作,将要添加的群信息插入到数据库中如果成功,则返回这个群的信息给客户端,否则返回错误提示信息7)查找好友并加为好友输入要查找的用户ID号,客户端发送一个查询信息给服务器端,如果找到就返回用户服务信息。
打开一个用户信息显示界面,该界面会提供一个“添加为好友”按钮,点击后可将此人加为好友如果未找到,弹出一个信息提示框8)查找群并加入群输入要查找的群ID号,客户端发送一个查询信息给服务器端,如果找到就返回用户服务信息打开一个群信息显示界面,该界面会提供一个“加入此群”按钮,点击后可将此人加为好友如果未找到,则弹出一个信息提示框9)文件共享在启动文件传输服务器的共享文件功能之前,要设置它的IP号和端口,如果设置不好好友将无法下看到这些共享的文件还有一个重要的步骤就是添加共享文件或目录最后启动文件共享10)下载文件使用文件传输的客户端要正确配置好服务器的IP和端口号,以及下载好的文件的存放目录如果其中之一配置不好,文件下载将会失败设置好以后,点击“连接”按钮,如果配置正确,这时将会看到服务器共享的文件目前不能支持文件夹下载,当看到一个文件夹以后,可以双击该文件夹并查看文件夹里面的文件2.2.2性能分析 本系统由于采用免费的oracle数据库软件,连接数最多不能超过200,所以并发访问数据库的人数不能超过200人2.2.3用例图图2-1系统用例图2.2.4时序图 客户登陆、注册时的服务器端时序图 图2-2注册、登陆时的服务端的时序图本图说明: 服务器接每次与一个客户连接以后,就会去创建一个监听线程。
通过线程来接收客户端发送的所有数据如果要查询数据库,监听线程会请求获得一个数据库连接.如果数据库连接已经获得,就把连接交给DBOperation对象,通过此对象可以返回给监听线程必要的结果最后监听线程会通过Socket将结果返回给客户端 2.2.5活动图1)用户登陆活动图图2-3用户登陆活动图本图说明: 首先填写登陆信息,提交以后服务器会对用户名和密码进行验证如果不正确,返回一个提示信息如果登陆成功,就更新状态通知所有好友自己已经上线2)客户之间的通信活动图图2-4客户通信活动图本图说明: 短消息发送以后,服务器端对应的监听线程会接收到一个数据包此包中包含接收者的信息,如果接收者,数据包将会转发到接收者如果不,就写入数据库3)客户之间的文件传送活动图 本图说明:客户端向服务器发送文件下载请求如果服务器端同意下载,就读取文件流并将数据流写入到客户端客户端读取到文件名之后,立刻创建一个新的文件并将读取的数据写入到文件中客户端 服务器端发送要要下载的文件名创建服务器端监听线程读取文件流并发送到客户端查找文件客户端监听器创建文件并将数据流写入文件服务器端图2-5文件传送活动图4)新增好友活动图根据好友ID号查找好友,如果此ID存在,就将用户信息发送到客户端。
同时将好友关系写入到数据库客户端服务器端是否存在用户资料填写搜索好友请求监听端口(监听线程)查询数据库返回找到用户资料监听端口(监听线程)写入数据库显示查找的客户资料加为好友请求更新好友列表图2-6新增好友活动图5)删除好友活动图此图说明:客户向服务器发送删除好友请求服务器接收到删除好友请求以后,将好友关系从数据库中删除客户端服务器端删除好友请求监听端口(监听线程)更新数据库更新好友列表图2-7删除好友活动图3. 总体设计 3.1功能模块图本系统主要由由两个子系统组成:1)文件传输系统;2)聊天子系统文件传输系统的功能主要有:1)共享文件;2)查看并下载文件聊天子系统的功能有:1)注册;2)登陆;3)添加群;4)查找群5)私聊;6)群聊;7)查看好友资料;8)查找好友;9)添加好友;10)创建好友分组JICQ(java通信系统)通信(聊天)文件传输注册登陆私聊群聊查看好友资料查找好友添加好友查找群添加群创建好友分组共享文件查看共享文件并下载图3-1系统功能模块图3.2数据库设计3.2.1 E-R图 用户表ID账号密码个性签名头像好友分组ID用户ID号分组名用户—分组用户—群ID分组ID用户IDID群ID用户ID拥有创建拥有创建1111n1n群ID创建人ID群名群公告11留言ID发信人ID收信人ID拥有内容n图3-3系统E-R图用户表(User):属性:id,account(登陆账号),pwd,nickname,sign(个性签名),sex,email,head(头像)关系: 一个用户可以有多个好友分组。
一个用户可以有多个群 一个用户可以有多条留言好友分组表(Qqperson_group): 属性:id,userid(创建者ID),name(分组名) 关系:一条记录只对应一个用户,但是可以拥有多个组成员群表(Qqpublic_group): 属性:id,userid(创建者ID号),name(群名),sign(群公告) 关系:一个群只有一个创建者,但是可以拥有多个群成员 图3-4系统各表之间的联系图3.2.2表结构设计表3-1 客户信息表(user)1自动id号Id整数2用户账号Account整数3用户密码Pwd字符4用户昵称Nickname字符5用户签名 sign字符6用户性别Sex字符7用户邮箱email字符8用户头像Head字符表3-2 Qq消息表(Message)1自动IDID整数2发信人Account_from整数3收信人Account_to整数4发送内容Content字符表3-3 用户分组表(persongroup)1自动IDID整数2拥有者Iduserid整数3分组名称name字符表3-4 公共群表(public_group)1自动IDID整数2创建人userid整数3群名称name整数4群的公共消息sign字符表3-5 用户与群的中间表(user_publicgroup)1自动IDID整数2加入的群IDgroupid整数3加入的用户的IDuserid整数表3-6 用户与分组的中间表(user_persongroup)1自动IDID整数2加入的分组的idgroupid整数3加入分组的用户的iduserid整数以上各表创建的代码如下:1)创建用户表create table user(number primary key,account number unique,nickname varchar(100),sign varchar(500),sex varchar(10),email varchar(100),head varchar(200));2)创建分组表create table person_Group(id number primary key,userid references user(id),name varchar(100));3)创建群表create table public_group(id number primary key,userid number references user(id),name varchar(100),sign varchar(800)); 4)创建消息表create table message(id number primary key,account_from number,account_to number,content varchar(1000));5)创建用户与群的中间表create user_publicgroup (id number primary k。
