球队人员管理系统 --- Java版本

本文档详细介绍了使用Java编程语言实现对MySQL数据库的连接与操作,包括增删改查功能,以及球员信息管理的系统设计。通过Player类封装球员数据,DBUtil类处理数据库连接与关闭,PlayerDao接口及其实现类处理具体数据库操作。系统提供了一个用户交互界面,允许用户进行球员信息的添加、删除、修改和查询,还支持按年龄和评级排序。整个设计过程涉及到了数据库连接、SQL语句编写和面向对象编程思想的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

这是本学期我的课程设计最早编写出的版本,主要是通过Java语言实现对MySQL数据库的调用,完成对数据库中数据的增、删、改、查。在这里难点是连接数据库和数据库操作,需要有一定的Java语言基础和SQL语言基础。

二、数据结构描述

2.1 数据结构和存储结构

1.ArrayList

ArrayList是一个数组队列,相当于动态数组。相比于Java中的数组,它的容量能动态增长。ArrayList继承了AbstractList,实现了List。提供了相关的添加、删除、修改、遍历等功能。在ArrayList中,可以通过元素的序号快速获取元素对象;动态数组底层是基于数组来实现容量大小变化的线性数据结构,数组是用于储存多个相同类型数据的集合。数组的顺序存储结构,在逻辑上相邻的两个元素,他们的物理位置也是相邻的,即线性关系利用物理上的相邻关系来体现,并且不需要为数组中元素之间的逻辑关系而增加额外的存储空间。在加入数据是不需要考虑数组的长度大学,但是在输出时采用循环输出的方式,具有更高的效率。

2.2 主要算法

1.Sort排序

是改进的快速排序算法。用于对list中的元素进行排序,并返回一个list,默认的排序方法是根据字符串Unicode码。在本系统中用sort排序根据球员的年龄或者表现评级从大到小的排序。

2.顺序查找

顺序查找算法是按照序列原有顺序对数组进行遍历比较查询的基本算法。

注:由于这个版本涉及到数据库的连接与使用,所以在数据结构和算法上有所减少。更多的操作是用SQL语言实现。

三、重要的代码部分

1.数据库连接

private static final String DROVER_NAME="com.mysql.jdbc.Driver";
    private static final String URL="jdbc:mysql://localhost/PLAYER";
    private static final String USER="root";
    private static final String PASS="root";

    public static Connection getCon() throws ClassNotFoundException,
            SQLException{
        Connection con=null;
        Class.forName(DROVER_NAME);
        con= DriverManager.getConnection(URL,USER,PASS);

        return con;
    }
    public static void close(Connection con, Statement stmt, ResultSet rs){
        try {
            if (rs != null) {
                rs.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

在连接数据库之前需要在lib包下加入mysql-connector-java-5.1.38.jar文件。

在这里建议将DROVER_NAME、URL、USER、PASS单独定义,这样可以减少getCon()中的代码复杂程度,并且可以便于问题的修改。URL的形式是jdbc:mysql://localhost/数据库名称

这里定义一个close()用于关闭数据库的连接,在这里建立之后可以减少后续代码编写中要关闭数据库连接的代码长度。

2.数据库的操作

这里使用添加球员为例

public boolean add(Player player){
        String sql="insert into player(P_ID,P_NAME,P_SEX,P_AGE,P_CLASS,P_PHONE,P_PERFORMANCE,P_GRADE) values(?,?,?,?,?,?,?,?)";
        try{
            con = DBUtil.getCon();
            pstmt=con.prepareStatement(sql);
            pstmt.setString(1, player.getID());
            pstmt.setString(2, player.getNAME());
            pstmt.setString(3, player.getSEX());
            pstmt.setInt(4, player.getAGE());
            pstmt.setString(5, player.getCLASS());
            pstmt.setString(6, player.getPHONE());
            pstmt.setString(7, player.getPERFORMANCE());
            pstmt.setString(8, player.getGRADE());
            pstmt.executeUpdate();
        }catch (ClassNotFoundException e){
            e.printStackTrace();
            return false;
        }catch (SQLException e){
            e.printStackTrace();
            return false;
        }finally {
            DBUtil.close(con,pstmt,rs);
        }
        return true;
    }

首先是定义sql语句 intsert into 表名(属性)  values(属性值),属性有几个属性值处就有几个问号,之后就是连接数据库和执行sql语句。注意:数据库的连接和操作都要在try-catch-finally下执行,可以方便找出错误。第一行 con=DBUtil.getCon()是连接数据,第二句 pstmt=con.prepareStatement(sql)是执行的sql语句,之后的就是获取球员信息使用setString和setInt获得球员相应的属性值,最后就用executeUpdate()更新数据库信息。

四、完整的代码

1.球员类 Player.java

package Player;/*
   @Author :张鹏翔
   @Date   :Creater in 18:36 2021/10/23

   实体类,封装球员信息
*/

public class Player {
    private String ID;                 //球员编号
    private String NAME;               //球员姓名
    private String SEX;                //球员性别
    private Integer  AGE;                //球员的年龄
    private String CLASS;              //球员班级
    private String PHONE;              //球员手机号
    private String PERFORMANCE;        //球员表现
    private String GRADE;              //球员评级


    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }

    public String getNAME() {
        return NAME;
    }

    public void setNAME(String NAME) {
        this.NAME = NAME;
    }

    public String getSEX() {
        return SEX;
    }

    public void setSEX(String SEX) {
        this.SEX = SEX;
    }

    public int getAGE() {
        return AGE;
    }

    public void setAGE(Integer AGE) {
        this.AGE = AGE;
    }

    public String getCLASS() {
        return CLASS;
    }

    public void setCLASS(String CLASS) {
        this.CLASS = CLASS;
 
### 关于球队管理系统的E-R图设计 在设计一个球队管理系统的E-R图时,需要考虑系统的核心实体及其之间的关系。以下是基于已有引用内容和专业知识构建的一个完整的解决方案。 #### 1. 系统核心实体 根据引用[2]的内容[^2],可以确定该系统的主要实体包括但不限于以下几个方面: - **管理员**:负责整个系统的管理和维护。 - **用户**:普通用户可能指球迷或其他相关人员- **球员**:属于某个特定的球队- **球队**:由多个球员组成,并参与比赛。 - **比赛记录**:存储有关比赛的信息,如比分、时间等。 - **球迷**:与球队存在关联,可能是支持者或会员。 这些实体构成了基本的数据框架。 #### 2. 实体间的关系定义 为了清晰表达各个实体间的相互作用,下面列举了一些典型的关系描述: - **管理员与用户**:一种一对多的关系,即一位管理员可以管理多名用户账户。 - **球员隶属于某支球队**:这是典型的隶属关系,每位运动员只归属于单一队伍。 - **比赛涉及两支及以上球队**:体现为多对多联系形式,在实际建模过程中需引入中间表来处理这种复杂情况。 以上两点结合具体场景调整细节设置即可满足大部分应用需求[^3]。 #### 3. E-R 图绘制建议 按照标准做法,先画出所有已知的关键节点(也就是上面提到的各种对象),再依据它们彼此交互方式连接起来形成最终版本图表如下所示简化版示意草稿: ```plaintext 【管理员】<----->【用户】 | 【球队---<【球员】> | 【比赛记录】 ``` 注意这里只是非常粗略表示法并非正式成品,请根据自己项目实际情况进一步细化完善直至达到理想状态为止[^4]。 --- ### 提供一段伪代码用于辅助理解如何映射到程序层面 如果打算用 Java 来实现这个模型的话,则可以通过面向对象的方式创建类对应每一个主要组件并建立起相应的关联机制。例如: ```java public class Team { private String name; private List<Player> players; public void addPlayer(Player player){ this.players.add(player); } } class Player{ private String playerName; } ``` 上述片段展示了最基本的团队成员添加逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值