Java Swing + Mysql的球员信息管理系统

一、数据库设计首先的话,基于这个FIFA球员管理系统的需求来看,只需要一个球员表baller就足够了,然后里面包含的属性应该有数据id,也就是这一条记录的id,然后就是球员的球号(bid),还有球员名字(name),以及球员性别(sex),球员年龄(age),以及他们的球队名称(team_name),和登录密码(password),表设计如下:

然后往该表中添加模拟数据,如下图:

二、架构设计2.1 总体设计首先,我们这边避免不了要跟数据库进行一个交互,那么这里我们需要一个DB类,里面可以通过传入不同的sql语句从而进行一个操作,那么DB类应该单独放在dao包里面去。然后我们还需要一个界面的操作,按照这里设计的话,每一个菜单或者子菜单都需要一个界面类,然后这些类就放在stu包下面,项目架构如下图:

2.2 dao包设计Dao包里面的话只包含一个DB类就足够了,而该DB类的话就是连接数据库以及对应数据库进行一些增删查改等操作的类,那么该类应当包含获取连接方法,以及查询方法,以及修改方法,因为JDBC这里的话,增删改都是直接调用executeUpdate方法的。然后查询的话就是调用executeQuery方法,我们这里重写这两个方法,然后还应该有一个关闭连接方法close。

以及一些相关属性啊,比如说DBURL就是我们需要连接哪一个数据库,DBUSER这个一般是root,除非我们有多用户的情况下。DBPASS的话就是我们的数据库密码了,DBDRIVER啊这个的话,经过查询相关资料,mysql在5.0.x之前的话就是没有cj的,后面8.0.x新版本才需要添加cj上去的。因此DB类的类图如下:

2.2 stu包设计那么这里stu包设计的话,首先要有一个登录界面LoginMin类,以及一个主页面MainMin类,这里主页面的话目前设计了添加,删除,修改,查询,返回等菜单。然后查询的话,分为按姓名查询,按球号查询,以及最关键的模糊查询。那么每一个菜单以及子菜单,对应有一个界面类。

添加菜单对应的就是Add类,然后还有修改菜单的Alter类,删除菜单对应的DelMin类,按姓名查询对应的NameQue类,和按球号查询对应的IdQue类,和模糊查询对应的LikeQue类。

最后的话,我们这里查询出来的信息肯定是需要一个列表来进行展示的,那么这里对应的就是QueDisplay类。还有一个球员信息框架界面StuPal类。因为这里在添加球员以及修改球员的时候都是需要用到这个球员信息框架的。

综上所述啊,stu包的一个架构图如下:

三、详细设计3.1 LoginMin类设计首先一个GUI程序,登录界面是必不可少的,而且登录界面的话,目前的一个设计思路是通过输入球员名字和球员密码,如果匹配上就登录成功进去主页面,否则进行一个弹框提示。那么该类应该有一个登录方法,主要作用就是查询该球员是否存在,以及输入是否合法,那么这里就是lookTo方法,如下图:

3.2 MainMin类设计主页面设计的话,上面也有说过了,设计了添加,删除,修改,查询,返回等菜单。然后查询的话,分为按姓名查询,按球号查询,以及最关键的模糊查询。那么每一个菜单以及子菜单。

该主页面也一个布局也是上中下布局,如下图代码所示:

分别是North,Center,South,北中南,也叫上中下布局。

然后蓝色方框里面的是菜单的一个监听器,当点击某一个菜单,触发监听器,然后新建对应的界面类,重置当前界面。

3.3 QueDisplay类设计这个类的话具体没什么太大的一个设计难度,就是通过查询出来的ResultSet集合,然后遍历,放到TextArea一个文本区域框里面,对应的就是showStuInfor方法,如下图:

3.4 StuPal类设计这个球员信息框架类需要的方法以及属性就比较多了。就是比如说获取球员性别方法getSex,获取球员密码的方法getHobbies,获取球员的球队名称的方法getPostatus。这些都是需要我们去重写的.然后还有就是当添加球员的时候,需要有一个保存球员信息到数据库的方法,这里对应的就是saveTo方法。

或者更改球员信息的时候,需要有一个保存球员信息到数据库的方法,这里对应的就是updateTo方法。然后这里最重要的就是当修改球员信息的时候,我们需要回显球员的一个数据,那么这里用到的方法就是showInfor方法,先根据球员id查询球员信息,然后再分别设置到文本框或者按钮和下拉框里面去。完整的类图如下:

这里还有最关键的一点就是说,球队名称的话,这里是写死了一个数组在这里的,teams数组代表的就是球队名称。

3.5 Add类设计这里添加球员界面的话也是可以直接new一个球员信息框架表的,然后根据不同的事件响应不同的方法,

就比如上面,如果是点击保存球员,则直接调用保存方法,如果点击了重置按钮,则将所有文本框和重新至空。以及一个取消按钮的话则就是清除主页面所有数据。

3.6 DelMin类设计DelMin类设计也是如Add类差不多,只不过这里需要我们直接手动添加一个删除的函数。从而根据球号来进行一个删除,类图如下:

3.7 Alter类设计更改球员信息类也是一样,只是当点击修改按钮的时候,需要首先执行showInfor方法,去数据库中查询该球员的一个信息,从而回显到界面中去。类图如下:

3.8 NameQue类设计这里根据球员名查询,不过这里设计的是一个精确查询。同样的道理也是,将查询出来的信息,展示在页面上即可,这里调用的也是showInfor方法,类图如下:

3.9 IdQue类设计这里也是根据球员球号进行一个精确查询,设计思路和NameQue类也是大同小异的,类图如下:

3.10 LikeQue类设计这个模糊查询就是改项目的一个设计亮点,这里可以根据球员账号的关键字进行一个查询,而球员关键字包含了球员名字和球员一个球号查询,以及通过球员的性别进行查询和年龄范围进行查询,和球队名称的一个查询,这里就组成了一个多维度查询。是该项目的一个设计亮点。

要想实现该功能的话,主要在于拼接sql字符串和判断球员输入来进行一个拼接字符串查询。如下图:

代码语言:sql复制

"select * from baller " +

"where (bid like '%" + txtstuid.getText() + "%' " +

"or name like '%" + txtstuid.getText() + "%') " +

"and (age>="+ minAge.getText() +

" and age <= " + maxAge.getText() + ") ";

这里解释一下啊,

where (bid like '%" + txtstuid.getText() + "%' " +

"or name like '%" + txtstuid.getText() + "%') "也就是是账号这个文本输入框是同时可以进行球员球号和球员名字来进行一个模糊查询功能的。

and (age>="+ minAge.getText() +

" and age <= " + maxAge.getText() + ") ";

这段sql代码就是根据选择的一个年龄范围进行查询。

后面两个if就是如果有性别和球队名称输入,则合并该条件起来进行查询,否则进行全部查询。

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!