2019 Java 课程设计

简易聊天室课程设计

1.功能实现

  本次课程设计,我们小组挑选了了QQ聊天室的课题进行设计,我作为小组成员负责了数据存储的数据库部分的实现。我的本次课程设计,
基于腾讯云数据库和对数据库的操作工具Navicat进行操作,腾讯云数据库能让我们小组的每个人都能对数据库进行使用和修改,而Navicat
真的是一个很好的数据库的工作软件,他能很直观的显示数据库的结构和数据,很方便的对他们进修完善。编译器采用IDEA并使用git和组员
进行代码的管理。在功能上我用户基本信息的存储,包括用户信息和在线状态,能够合理修改用户信息。并且实现了用户聊天数据的存储与查
找,包括建立群聊的聊天数据和进行一对一私聊的聊天记录。

2.前期调查

在我们平时使用的聊天软件中,聊天分为群聊和私聊,每一个用户都有自己的用户信息和id,并且id是唯一的。这些数据用文件存储的话会
相当难调用,使用数据库会大大缩小工作量,也能很直观的显示信息。

3.数据库结构

总体结构

  我在users这个表中对于随机生成的id(不会有重复id)设为键值,在表结构中id,name和password不能为null
值,其他注册完均为null,可在我的信息中进行修改,然后置入数据库。在其他的信息存储表中的信息均不能为空。
在编码方式上统一使用utf-8进行编码。字段类型为了读取方便均为varcahr型。

(1) 用户信息存放表

(2) 群聊信息存放表

(3) 私聊信息存放表

(4) 自定义群聊用户存放表和聊天数据存放表

4.主要代码展示与理解

ps:有些不是特别重要的功能的方法不做代码的展示,只会贴上SQL语句和构思思路。

(1)登入的数据库代码

SQL语句:select * from users WHERE id=? AND password=?

代码实现:

实现构思

通过users这个表对于用户输入的账号和密码进行遍历,如果找到相对于的数据,返回1并成功登入,若没找到,返回0
并输出相应的提示。先用JdbcUtils工具类中的getconnect方法建立数据库连接,再使用preparestatement创建预编
译环境,再调用setString方法设置SQL中?代表的参数,后将执行完成后的结果集返回。(之后的方法结构差不多就不一一列举)。

(2)注册代码的实现

SQL语句:insert into users VALUES(?,?,?,null,null,null,null,null )

代码实现:

实现构思

通过在users表中插入数据来实现用户的注册,只传入id(自动生成),name和password,其它均置为空。在代码中
调用executeUpdate()方法,如果数据插入成功则返回一个int类型的非零值,就对这个值进行胖多,若大于0,,则
就是插入成功。

(3)用户修改信息的实现

SQL语句:update users set age=?,gender=?,address=?,motto=?,telephone=?,name=? WHERE id=?

代码实现:

实现构思:

通过在users表中选取指定的要修改的参数,用传入的对象中的属性去覆盖数据表中的数据来实现用户数据的修改。

(4)插入私聊聊天记录

SQL语句:insert into chat_private VALUES(?,?,?,?)

代码实现:

实现构思:

因为我存放私聊信息只用了一个表来存放所有的聊天记录,所以在插入的时候要存放一个发送方还有一个接收方,插入时间
能很清楚的实现排序

(5)读取私聊聊天记录

SQL语句:select * from chat_private WHERE fromId = ? AND toId = ?

代码实现:

实现构思:

在数据读取的时候通过一个ArrayList数组进行存取数据,方法返回一个数据集合

(6)通过自定义群聊进行建群

SQL语句:CREATE TABLE Group"+ id +" (id varchar(20) not null )和CREATE TABLE Group_chatData"+ id +" (id varchar(20) not null ,time datetime not null ,message varchar(100) not null)

代码实现:

实现构思:

通过每个人唯一的id进行群聊的创建,以群主的id来命名用户表和聊天记录存储表。在群聊多了的时候可以清晰的调用数据表。这
是我们组在一开始构思时想好的方法,可能这对于数据库比较好完成,对于界面的编写有点困难。但是我这么编写也存在一个bug
就是每个用户只创建一个群聊,我以后会加以改进,现在的想法是新建一个用户的群聊的库。

(7)自定义群聊的用户添加和聊天记录获取

SQL语句:insert into Group"+id+" VALUES(?) (在用户表中添加群聊用户) insert into Group_chatData"+managerId+" VALUES(?,?,?)(在数据表中添加聊天记录信息)

          select * from Group_chatData"+managerId (获取聊天记录信息)

实现构思:

通过传入群主的id来确定将用户的id插入的用户表的选择,聊天记录表的选择也是如此。

(8)总群聊的聊天记录的添加和获取

SQL语句:insert into chat_group VALUES(?,?,?) 和 select * from chat_group

实现构思:

总群聊建了一个表去存取,通过传入一个用户id和用户发送的数据并自动生成时间,在数据库里生成一条语句。聊天记录的查找可以调用id来查找个人的聊天记录,也可查找所有人
的聊天记录。

(9)用户上下线的判断并改变状态

SQL语句的实现: select state from users WHERE id = ? 和 update users set state=? WHERE id =?

代码实现:


实现构思:

判断用户是否在线会将显示在界面的用户的状态更改,若用户上线了,调用语句将状态置为1,若用户下线,则调用语句将状态置为0。先要调用第一个SQL语句对用户的在线情况
进行判断,状态为1的话将状态置为0.反之亦然。

(10)获取用户ID和用户密码

SQL语句的实现: select * from users WHERE id = ? 和 select password from users WHERE id = ?

实现构思:

简单的遍历数据库的功能查找出相应的字段,并对数据进行筛选

5.使用代码规范检测出的问题

常见错误如下:

魔法值的出现:将数值定义为final类型。

采用驼峰命名法:如Isonline不符合命名标准,应显示为isOnLine。

未对代码的作者进行注释: 可调用IDEA的自动生成类的注释功能进行注释。

未对方法进行javadoc的注释: 使用/**加回车 对方法进行注释。

6.本人的git提交记录

7.uml类图


8.项目总结

因为这是我第一次系统的学习了部分数据库的知识,一开始对于数据库的学习有点慢,最后上手了之后其实写的也不是特别的吃力。
对于SQL语句的灵活运用自己也写了一个自定义群聊的方法。也学会了使用git和他人一起管理代码。总体来说,这次课程设计还是
学会了一些新的东西,能较熟练的实现数据库的编程。通过这次课程设计,我算是进一步感受到了java功能的强大。
posted @ 2020-01-09 20:48  AshinLuoX  阅读(257)  评论(0编辑  收藏  举报