精华内容
下载资源
问答
  • 学生信息管理系统 此项目包括四个类 StartMySql → 用于启动登录界面 Login → 登录进入操作界面 MySQLGUI → 图形用户界面 OperationMySql → 对数据库数据的操作功能实现 实现概貌: 这个项目的注释真的 真...

    学生信息管理系统

    此项目包括四个类

    1. StartMySql → 用于启动登录界面
    2. Login → 登录进入操作界面
    3. MySQLGUI → 图形用户界面
    4. OperationMySql → 对数据库数据的操作功能实现

    mysql 中 Table 的设计
    涉及三个表
    数据库名 StudentInfo 表名分别为 grade、course、summary

    grade
    ID Name Chinese Math English
    course
    ID Name Course Credit
    summary
    Course Average

    实现概貌:
    在这里插入图片描述
    在这里插入图片描述

    • 这个项目的注释真的 真的灰常详细 ~ o( ̄▽ ̄)ブ
    • 此项目代码量在 1000 行左右,纯手打,奥力给

    直接上代码啦

    • 启动单独成类
    // StartMySql.java
    package StudentInfo;
    
    public class StartMySql {
        // 启动登录界面
        public static void main(String[] args) {
            new Login();
        }
    }
    
    
    • 这是一个登录界面的小框框
    // Login.java
    package StudentInfo;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class Login implements ActionListener {
        // 定义主窗口
        private final JFrame jf;
        // 定义输入用户名和密码的标签提示
        private final JLabel InputUserName;
        private final JLabel InputPassWord;
        // 定义输入用户名文本框
        private final JTextField UserName;
        // 定义输入密码框
        private final JPasswordField PassWord;
        // 定义登录和取消按钮
        private final JButton Login;
        private final JButton Cancel;
    
        Login() {
            // 各组件实例化过程
            jf = new JFrame("Login");
            InputUserName = new JLabel("        ID:    ");
            InputPassWord = new JLabel("password:");
            UserName = new JTextField();
            PassWord = new JPasswordField();
            Login = new JButton("登录");
            Cancel = new JButton("退出");
            // 设置主窗口大小、位置和布局
            jf.setSize(400, 150);
            jf.setLocation(600, 400);
            // 设置窗口流式布局
            jf.setLayout(new FlowLayout());
            // 设置用户名和密码框大小
            UserName.setPreferredSize(new Dimension(300, 30));
            PassWord.setPreferredSize(new Dimension(300, 30));
            // 依次向主窗口添加各组件
            jf.getContentPane().add(InputUserName);
            jf.getContentPane().add(UserName);
            jf.getContentPane().add(InputPassWord);
            jf.getContentPane().add(PassWord);
            jf.getContentPane().add(Login);
            jf.getContentPane().add(Cancel);
            // 设置主窗口不可调节大小
            jf.setResizable(false);
            // 设置主窗口默认关闭操作
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            // 给登录和取消按钮添加 Action 监听器
            Login.addActionListener(this);
            Cancel.addActionListener(this);
            // 设置主窗口可见
            jf.setVisible(true);
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            // 如果单击【退出】按钮则程序退出
            if (e.getSource().equals(Cancel)) {
                System.exit(0);
            }
            // 如果单击【登录】按钮则检查用户名和密码是否匹配
            else if (e.getSource().equals(Login)) {
                // 如果用户名和密码匹配,则打开具体操作面板
                if (UserName.getText().equals("admin") && String.valueOf(PassWord.getPassword()).equals("1234")) {
                    // MySQLGUI myS = new MySQLGUI();
                    // myS.initial();
                    new MySQLGUI();
                    jf.setVisible(false);
                    jf.dispose();
                }
                // 如果用户名和密码不匹配,则给出提示对话框
                else {
                    JOptionPane.showOptionDialog(jf, "用户名或密码错误", "登陆失败",
                            JOptionPane.CLOSED_OPTION,
                            JOptionPane.ERROR_MESSAGE, null, null, null);
                }
            }
        }
    }
    
    
    • 这是 GUI 界面代码
    // MySQLGUI.java
    package StudentInfo;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    
    public class MySQLGUI extends JFrame implements MouseListener, ItemListener {
        // 定义选项卡
        private JTabbedPane Base;
        // 定义选项卡上的嵌板
        /*
         * jp1,  添加记录
         * jp2,  删除记录
         * jp3,  更新记录
         * jp4,  查找记录
         * jp5,  选课记录
         * jp6   课程平均分
         *  */
        private JPanel jp1, jp2, jp3, jp4, jp5, jp6;
        // 定义各按钮
        /*
         * InsertRecord, 添加记录按钮
         * InsertReset, 添加取消按钮
         * DeleteRecord, 删除记录按钮
         * DeleteReset, 删除取消按钮
         * QueryRecord, 查询记录按钮
         * UpdateRecord, 更改记录按钮
         * UpdateReset, 重置更新框
         * CourseQuery, 选课表查询按钮
         * GradeQuery, 成绩查询按钮
         * */
        private JButton InsertRecord, InsertReset, DeleteRecord, DeleteReset,
                QueryRecord, UpdateRecord, UpdateReset, CourseQuery, GradeQuery;
        // 定义各标签
        /*
         * InsertID1,      插入学号提示标签
         * InsertName1,    插入姓名提示标签
         * InsertChinese1, 插入语文成绩提示标签
         * InsertMath1,    插入数学提示标签
         * InsertEnglish1, 插入英语提示标签
         * DeleteID1,      删除学号提示标签
         * UpdateID1,      更新学号提示标签
         * */
        private JLabel InsertID1, InsertName1, InsertChinese1, InsertMath1,
                InsertEnglish1, DeleteID1, UpdateID1;
        // 定义各文本框
        /*
         * InsertID2,       插入学号文本框
         * InsertName2,     插入姓名文本框
         * InsertChinese2,  插入语文文本框
         * InsertMath2,     插入数学文本框
         * InsertEnglish2,  插入英语文本框
         * DeleteID2,       所要删除学号的文本框
         * UpdateID2,       所要更新学号的文本框
         * UpdateContent,   更新内容填写文本框
         * IDCondition,     查询ID文本框
         * NameCondition,   查询姓名文本框
         * ChineseCondition,查询语文文本框
         * MathCondition,   查询数学文本框
         * EnglishCondition,查询英语文本框
         * */
        private JTextField InsertID2, InsertName2, InsertChinese2, InsertMath2, InsertEnglish2,
                DeleteID2, UpdateID2, UpdateContent, IDCondition, NameCondition, ChineseCondition, MathCondition,
                EnglishCondition;
        // 定义显示结果文本域 显示 jp4 jp5 jp6 的查询结果
        /*
         * QueryRecordResult,  查询学生信息结果文本域
         * CourseQueryResult,  查询课程信息文本域
         * GradeQueryResult,   查询课程成绩平均分文本域
         * */
        private JTextArea QueryRecordResult, CourseQueryResult, GradeQueryResult;
        // 定义查询选项
        /*
         * ID,       选择学号查询
         * Name,     选择姓名查询
         * Chinese,  选择语文查询
         * Math,     选择数学查询
         * English,  选择英语查询
         * */
        private JRadioButton ID, Name, Chinese, Math, English;
        // 定义一个数据库操作的实例
        private OperationMySql db = null;
        // 定义滚动条
        private JScrollPane scroll = null;
        private JScrollPane CourseScroll = null;
        private JScrollPane GradeScroll = null;
        // 定义一个复选框用于选择更新的项目
        private JComboBox<String> UpdateItem = null;
        // 定义复选框用于选择查询的项目
        private JComboBox<String> CourseItem = null;    // 课程信息复选框
        private JComboBox<String> GradeItem = null;     // 课程成绩复选框
    
        MySQLGUI() {
            // 设置各按钮信息
            setButton();
            // 设置各标签信息
            setLabel();
            // 设置各文本框信息
            setTextField();
            // 设置各面板信息
            setPanel();
            // 设置布局信息
            setLayout();
            // 设置选项卡信息
            setBase();
            // 设置主窗口信息
            setThis();
            // 设置数据库信息
            setDB();
        }
    
        // 设置各按钮信息的方法
        private void setButton() {
            // jp1 上的按钮
            InsertRecord = new JButton("添加");
            InsertRecord.setFont(new Font("宋体", 1, 20));      // 1 代表加粗,20 代表字体大小
            InsertRecord.setBackground(Color.CYAN);
            InsertRecord.setBounds(150, 400, 100, 45);
            InsertRecord.setMargin(new Insets(0, 0, 0, 0));    // 设置按钮的边缘空白为四个方向全为0,也即让按钮中的文本与按钮边缘贴齐
            InsertReset = new JButton("重置");
            InsertReset.setFont(new Font("宋体", 1, 20));
            InsertReset.setBackground(Color.CYAN);
            InsertReset.setBounds(300, 400, 100, 45);
            InsertReset.setMargin(new Insets(0, 0, 0, 0));
            // jp2 上的按钮
            DeleteRecord = new JButton("删除信息");
            DeleteRecord.setFont(new Font("宋体", 1, 20));
            DeleteRecord.setBackground(Color.CYAN);
            DeleteRecord.setBounds(150, 350, 100, 45);
            DeleteRecord.setMargin(new Insets(0, 0, 0, 0));
            DeleteReset = new JButton("重置");
            DeleteReset.setFont(new Font("宋体", 1, 20));
            DeleteReset.setBackground(Color.CYAN);
            DeleteReset.setBounds(300, 350, 100, 45);
            DeleteReset.setMargin(new Insets(0, 0, 0, 0));
            // jp3 上的按钮
            UpdateRecord = new JButton("更新");
            UpdateRecord.setFont(new Font("宋体", 1, 20));
            UpdateRecord.setBackground(Color.CYAN);
            UpdateRecord.setBounds(250, 400, 100, 45);
            UpdateReset = new JButton("重置");
            UpdateReset.setFont(new Font("宋体", 1, 20));
            UpdateReset.setBackground(Color.CYAN);
            UpdateReset.setBounds(400, 400, 100, 45);
            // jp4 上的按钮
            ID = new JRadioButton("学号");
            ID.setFont(new Font("宋体", 1, 15));
            ID.setMargin(new Insets(0, 0, 0, 0));
            ID.setBounds(30, 300, 55, 20);
            Name = new JRadioButton("姓名");
            Name.setFont(new Font("宋体", 1, 15));
            Name.setMargin(new Insets(0, 0, 0, 0));
            Name.setBounds(30, 330, 55, 20);
            Chinese = new JRadioButton("语文");
            Chinese.setFont(new Font("宋体", 1, 15));
            Chinese.setMargin(new Insets(0, 0, 0, 0));
            Chinese.setBounds(30, 360, 55, 20);
            Math = new JRadioButton("数学");
            Math.setFont(new Font("宋体", 1, 15));
            Math.setMargin(new Insets(0, 0, 0, 0));
            Math.setBounds(30, 390, 55, 20);
            English = new JRadioButton("英语");
            English.setFont(new Font("宋体", 1, 15));
            English.setMargin(new Insets(0, 0, 0, 0));
            English.setBounds(30, 420, 55, 20);
            QueryRecord = new JButton("查询");
            QueryRecord.setFont(new Font("宋体", 1, 20));
            QueryRecord.setBackground(Color.CYAN);
            QueryRecord.setBounds(600, 400, 80, 45);
            // jp5 上的按钮
            CourseQuery = new JButton("查询");
            CourseQuery.setFont(new Font("宋体", 1, 20));
            CourseQuery.setBackground(Color.CYAN);
            CourseQuery.setBounds(600, 400, 80, 45);
            // jp6 上的按钮
            GradeQuery = new JButton("查询");
            GradeQuery.setFont(new Font("宋体", 1, 20));
            GradeQuery.setBackground(Color.PINK);
            GradeQuery.setBounds(600, 400, 80, 45);
            // 按键监听初始化
            initial();
        }
    
        // 设置各标签信息的方法
        private void setLabel() {
            // jp1 上的标签
            InsertID1 = new JLabel("学    号:");
            InsertID1.setFont(new Font("楷体", 1, 22));
            InsertID1.setBackground(Color.GREEN);
            InsertID1.setBounds(100, 40, 120, 50);
            InsertName1 = new JLabel("姓    名:");
            InsertName1.setFont(new Font("楷体", 1, 22));
            InsertName1.setBackground(Color.GREEN);
            InsertName1.setBounds(100, 100, 120, 50);
            InsertChinese1 = new JLabel("语文成绩:");
            InsertChinese1.setFont(new Font("楷体", 1, 22));
            InsertChinese1.setBackground(Color.GREEN);
            InsertChinese1.setBounds(100, 160, 120, 50);
            InsertMath1 = new JLabel("数学成绩:");
            InsertMath1.setFont(new Font("楷体", 1, 22));
            InsertMath1.setBackground(Color.GREEN);
            InsertMath1.setBounds(100, 220, 120, 50);
            InsertEnglish1 = new JLabel("英语成绩:");
            InsertEnglish1.setFont(new Font("楷体", 1, 22));
            InsertEnglish1.setBackground(Color.GREEN);
            InsertEnglish1.setBounds(100, 280, 120, 50);
            // jp2 上的标签
            DeleteID1 = new JLabel("学  号:");
            DeleteID1.setBounds(100, 100, 100, 50);
            DeleteID1.setFont(new Font("楷体", 1, 22));
            // jp3 上的标签
            UpdateID1 = new JLabel("学  号:");
            UpdateID1.setFont(new Font("楷体", 1, 22));
            UpdateID1.setBounds(200, 60, 120, 50);
            UpdateItem = new JComboBox<>();
            UpdateItem.setFont(new Font("楷体", 1, 22));
            UpdateItem.setBounds(200, 200, 100, 45);
            UpdateItem.addItem("姓名");
            UpdateItem.addItem("语文");
            UpdateItem.addItem("数学");
            UpdateItem.addItem("英语");
            // jp4 上的标签
            //...
            // jp5 上的标签
            CourseItem = new JComboBox<>();
            CourseItem.setFont(new Font("楷体", 1, 22));
            CourseItem.setBounds(100, 40, 140, 45);
            CourseItem.addItem("语文");
            CourseItem.addItem("数学");
            CourseItem.addItem("英语");
            // jp6 上的标签
            GradeItem = new JComboBox<>();
            GradeItem.setFont(new Font("楷体", 1, 22));
            GradeItem.setBounds(100, 40, 140, 45);
            GradeItem.addItem("语文");
            GradeItem.addItem("数学");
            GradeItem.addItem("英语");
        }
    
        // 设置各文本框信息的方法
        private void setTextField() {
            // jp1 上的文本框
            InsertID2 = new JTextField();
            InsertID2.setFont(new Font("宋体", 1, 23));
            InsertID2.setBounds(210, 40, 200, 35);
            InsertName2 = new JTextField();
            InsertName2.setFont(new Font("宋体", 1, 23));
            InsertName2.setBounds(210, 100, 200, 35);
            InsertChinese2 = new JTextField();
            InsertChinese2.setFont(new Font("宋体", 1, 23));
            InsertChinese2.setBounds(210, 160, 200, 35);
            InsertMath2 = new JTextField();
            InsertMath2.setFont(new Font("宋体", 1, 23));
            InsertMath2.setBounds(210, 220, 200, 35);
            InsertEnglish2 = new JTextField();
            InsertEnglish2.setFont(new Font("宋体", 1, 23));
            InsertEnglish2.setBounds(210, 280, 200, 35);
            // jp2 上的文本框
            DeleteID2 = new JTextField("输入要删除信息的学号");
            DeleteID2.setFont(new Font("楷体", 1, 25));
            DeleteID2.setBounds(210, 100, 350, 50);
            // jp3 上的文本框
            UpdateID2 = new JTextField();
            UpdateID2.setFont(new Font("楷体", 1, 20));
            UpdateID2.setBounds(310, 60, 200, 45);
            UpdateContent = new JTextField("更新内容");
            UpdateContent.setFont(new Font("楷体", 0, 22));
            UpdateContent.setBounds(310, 200, 200, 45);
            // jp4 上的文本框
            QueryRecordResult = new JTextArea("查询结果:");
            QueryRecordResult.setFont(new Font("楷体", 1, 20));
            //QueryRecordResult.setBounds(30,30,560,260);
            QueryRecordResult.setEditable(false);
            QueryRecordResult.setLineWrap(true);        // 当一行文字过多时自动换行
            scroll = new JScrollPane(QueryRecordResult);      // 添加滚动条
            scroll.setBounds(30, 30, 560, 260);
            scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);    // 当需要垂直滚动条时显示
            scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);// 当需要水平滚动条时显示
            IDCondition = new JTextField();
            IDCondition.setFont(new Font("宋体", 1, 18));
            IDCondition.setBounds(90, 300, 100, 21);
            NameCondition = new JTextField();
            NameCondition.setFont(new Font("宋体", 1, 18));
            NameCondition.setBounds(90, 330, 100, 21);
            ChineseCondition = new JTextField();
            ChineseCondition.setFont(new Font("宋体", 1, 18));
            ChineseCondition.setBounds(90, 360, 100, 21);
            MathCondition = new JTextField();
            MathCondition.setFont(new Font("宋体", 1, 18));
            MathCondition.setBounds(90, 390, 100, 21);
            EnglishCondition = new JTextField();
            EnglishCondition.setFont(new Font("宋体", 1, 18));
            EnglishCondition.setBounds(90, 420, 100, 21);
            IDCondition.setEditable(false);
            NameCondition.setEditable(false);
            ChineseCondition.setEditable(false);
            MathCondition.setEditable(false);
            EnglishCondition.setEditable(false);
            // jp5 上的文本框
            CourseQueryResult = new JTextArea("查询结果:");
            CourseQueryResult.setFont(new Font("楷体", 1, 20));
            CourseQueryResult.setEditable(false);
            CourseQueryResult.setLineWrap(true);
            CourseScroll = new JScrollPane(CourseQueryResult);
            CourseScroll.setBounds(20, 100, 560, 340);
            CourseScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
            CourseScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            // jp6 上的文本框
            GradeQueryResult = new JTextArea("查询结果:");
            GradeQueryResult.setFont(new Font("楷体", 1, 20));
            GradeQueryResult.setEditable(false);
            GradeQueryResult.setLineWrap(true);
            GradeScroll = new JScrollPane(GradeQueryResult);
            GradeScroll.setBounds(20, 100, 560, 340);
            GradeScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
            GradeScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        }
    
        // 设置各面板信息的方法
        private void setPanel() {
            jp1 = new JPanel();
            jp2 = new JPanel();
            jp3 = new JPanel();
            jp4 = new JPanel();
            jp5 = new JPanel();
            jp6 = new JPanel();
        }
    
        // 设置布局信息的方法
        private void setLayout() {
            // 添加 jp1 的组件
            jp1.setLayout(null);
            jp1.add(InsertRecord);
            jp1.add(InsertReset);
            jp1.add(InsertID1);
            jp1.add(InsertName1);
            jp1.add(InsertChinese1);
            jp1.add(InsertMath1);
            jp1.add(InsertEnglish1);
            jp1.add(InsertID2);
            jp1.add(InsertName2);
            jp1.add(InsertChinese2);
            jp1.add(InsertMath2);
            jp1.add(InsertEnglish2);
            // 添加 jp2 上的组件
            jp2.setLayout(null);
            jp2.add(DeleteID1);
            jp2.add(DeleteID2);
            jp2.add(DeleteRecord);
            jp2.add(DeleteReset);
            // 添加 jp3 上的组件
            jp3.setLayout(null);
            jp3.add(UpdateID1);
            jp3.add(UpdateID2);
            jp3.add(UpdateItem);
            jp3.add(UpdateContent);
            jp3.add(UpdateRecord);
            jp3.add(UpdateReset);
            // 添加 jp4 上的组件
            jp4.setLayout(null);
            // jp4.add(QueryRecordResult);
            jp4.add(scroll);
            jp4.add(QueryRecord);
            jp4.add(ID);
            jp4.add(Name);
            jp4.add(Chinese);
            jp4.add(Math);
            jp4.add(English);
            jp4.add(IDCondition);
            jp4.add(NameCondition);
            jp4.add(ChineseCondition);
            jp4.add(MathCondition);
            jp4.add(EnglishCondition);
            // 添加 jp5 上的组件
            jp5.setLayout(null);
            jp5.add(CourseItem);
            jp5.add(CourseQuery);
            jp5.add(CourseScroll);
            // 添加 jp6 上的组件
            jp6.setLayout(null);
            jp6.add(GradeQuery);
            jp6.add(GradeItem);
            jp6.add(GradeScroll);
        }
    
        // 设置选项卡信息的方法
        private void setBase() {
            Base = new JTabbedPane(JTabbedPane.TOP);
            Base.addTab("添加记录", jp1);
            Base.addTab("删除记录", jp2);
            Base.addTab("更新记录", jp3);
            Base.addTab("查找记录", jp4);
            Base.addTab("选课记录", jp5);
            Base.addTab("课程平均分", jp6);
        }
    
        // 设置主窗口信息的方法
        private void setThis() {
            this.add(Base);
            this.setTitle("学生信息管理系统");
            this.setLocation(300, 200);
            this.setSize(800, 550);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setResizable(false);
            this.setVisible(true);
        }
    
        // 设置数据库信息的方法
        private void setDB() {
            db = new OperationMySql();
            // 连接 mysql
            db.setDburl("jdbc:mysql://localhost:3306/StudentInfo?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC");
            // 加载驱动
            db.setDbdriver("com.mysql.cj.jdbc.Driver");
            // 这里的用户名和密码是要和你的 mysql 对应的,也是唯一需要更改的地方
            db.setUsername("root");
            db.setPassword("6666");
        }
    
        // 初始化
        void initial() {
            // 给各按钮添加监听器
            // InsertRecord, InsertReset, DeleteRecord, DeleteReset, QueryRecord, UpdateRecord, CourseQuery, GradeQuery;
            InsertRecord.addMouseListener(this);
            InsertReset.addMouseListener(this);
            DeleteRecord.addMouseListener(this);
            DeleteReset.addMouseListener(this);
            QueryRecord.addMouseListener(this);
            UpdateRecord.addMouseListener(this);
            UpdateReset.addMouseListener(this);
            CourseQuery.addMouseListener(this);
            GradeQuery.addMouseListener(this);
            // 给各复选按钮添加监听器
            // ID,Name, Chinese, Math, English
            ID.addItemListener(this);
            Name.addItemListener(this);
            Chinese.addItemListener(this);
            Math.addItemListener(this);
            English.addItemListener(this);
        }
    
        @Override
        public void mouseClicked(MouseEvent e) {
            // 添加按钮功能
            // 点击重置键则清空文本框
            if (e.getSource().equals(InsertReset)) {
                InsertID2.setText("");
                InsertID2.setFont(new Font("宋体", 1, 23));
                InsertName2.setText("");
                InsertName2.setFont(new Font("宋体", 1, 23));
                InsertChinese2.setText("");
                InsertChinese2.setFont(new Font("宋体", 1, 23));
                InsertMath2.setText("");
                InsertMath2.setFont(new Font("宋体", 1, 23));
                InsertEnglish2.setText("");
                InsertEnglish2.setFont(new Font("宋体", 1, 23));
            } else if (e.getSource().equals(InsertRecord)) {
                // 添加记录功能
                String InsertStuID = InsertID2.getText();
                String InsertStuName = InsertName2.getText();
                String InsertStuChinese = InsertChinese2.getText();
                String InsertStuMath = InsertMath2.getText();
                String InsertStuEnglish = InsertEnglish2.getText();
                try {
                    db.setRs(db.executeQuery(InsertStuID));
                    if (!db.getRs().next()) {
                        db.executeInsert(InsertStuID, InsertStuName, InsertStuChinese, InsertStuMath, InsertStuEnglish);
                        JOptionPane.showOptionDialog(this, "添加信息成功!", "数据库操作提示",
                                JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
                    } else JOptionPane.showOptionDialog(this, "添加失败", "温馨提示",
                            -1, 1, null, null, null);
                } catch (Exception exception) {
                    exception.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            } else if (e.getSource().equals(DeleteReset)) {
                // 删除重置功能
                DeleteID2.setText("");
                DeleteID2.setFont(new Font("楷体", 1, 25));
            } else if (e.getSource().equals(DeleteRecord)) {
                // 删除功能
                String DeleteStuID = DeleteID2.getText();
                try {
                    db.setRs(db.executeQuery(DeleteStuID));
                    if (db.getRs().next()) {
                        db.executeDelete(DeleteStuID);
                        JOptionPane.showOptionDialog(this, "删除成功!", "数据库操作提示",
                                -1, 1, null, null, null);
                    } else JOptionPane.showOptionDialog(this, "删除失败", "温馨提示",
                            -1, 1, null, null, null);
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
            } else if (e.getSource().equals(UpdateReset)) {
                // 重置更新框功能
                UpdateID2.setText("");
                UpdateID2.setFont(new Font("宋体", 1, 20));
                UpdateContent.setText("");
                UpdateContent.setFont(new Font("宋体", 1, 20));
            } else if (e.getSource().equals(UpdateRecord)) {
                // 完成更新功能
                String UpdateStuID = UpdateID2.getText();
                try {
                    db.setRs(db.executeQuery(UpdateStuID));
                    if (!db.getRs().next()) {
                        JOptionPane.showOptionDialog(this, "没有记录无法更新",
                                "温馨提示", JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE,
                                null, null, null);
                    } else {
                        String updateItem = null;
                        // 更新选项是姓名
                        if (UpdateItem.getSelectedItem().toString().equals("姓名")) {
                            updateItem = "Name";
                        }
                        // 更新的是语文成绩
                        else if (UpdateItem.getSelectedItem().toString().equals("语文")) {
                            updateItem = "Chinese";
                        }
                        // 更新的是数学成绩
                        else if (UpdateItem.getSelectedItem().toString().equals("数学")) {
                            updateItem = "Math";
                        }
                        // 更新的是英语成绩
                        else if (UpdateItem.getSelectedItem().toString().equals("英语")) {
                            updateItem = "English";
                        }
                        db.executeUpdate(UpdateStuID, updateItem, UpdateContent.getText());
                        JOptionPane.showOptionDialog(this, "更新成功!", "数据库操作提示",
                                -1, 1, null, null, null);
                    }
                } catch (Exception exception) {
                    exception.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            } else if (e.getSource().equals(QueryRecord)) {
                // 完成查询功能
                try {
                    // 默认设置各检索条件均为通配符
                    String a = "%", b = "%", c = "%", d = "%", f = "%";
                    // 如果 ID 选项被选中,则获得该选项的输入内容
                    if (ID.isSelected() && !IDCondition.getText().trim().isEmpty()) {
                        a = IDCondition.getText();
                    }
                    // 如果 Name 选项被选中,则获得该选项的输入内容
                    if (Name.isSelected() && !NameCondition.getText().trim().isEmpty()) {
                        b = NameCondition.getText();
                    }
                    // 如果 Math 选项被选中,则获得该选项的输入内容
                    if (Math.isSelected() && !MathCondition.getText().trim().isEmpty()) {
                        d = MathCondition.getText();
                    }
                    // 如果 English 选项被选中,则获得该选项的输入内容
                    if (English.isSelected() && !EnglishCondition.getText().trim().isEmpty()) {
                        f = EnglishCondition.getText();
                    }
                    // 如果 Chinese 选项被选中,则获得该选项的输入内容
                    if (Chinese.isSelected() && !ChineseCondition.getText().trim().isEmpty()) {
                        c = ChineseCondition.getText();
                    }
                    // 根据各选项检索关键字进行查询,并返回结果集
                    db.setRs(db.executeQueryByCondition(a, b, c, d, f));
                    // 定义结果集中记录条数
                    int i = 0;
                    QueryRecordResult.setText("查询结果:");
                    // 输出结果集记录
                    while (db.getRs().next()) {
                        ++i;
                        QueryRecordResult.append("\r\n" + "第" + i + "条记录:" + "\r\n"
                                + "学号:" + db.getRs().getString(1) + "\r\n"
                                + "姓名:" + db.getRs().getString(2) + "\r\n"
                                + "语文:" + db.getRs().getString(3) + "\r\n"
                                + "数学:" + db.getRs().getString(4) + "\r\n"
                                + "英语:" + db.getRs().getString(5) +
                                ("\r\n--------------------------------------"));
                    }
                    QueryRecordResult.setText(QueryRecordResult.getText() +
                            "\r\n" + "共有" + i + "条学生记录");
                } catch (Exception e1) {
                    e1.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            } else if (e.getSource().equals(CourseQuery)) {
                // 完成选课查询
                String Course = CourseItem.getSelectedItem().toString();
                try {
                    db.setRs(db.executeQueryByCourse(Course));
                    int count = 0;
                    CourseQueryResult.setText("查询结果:");
                    // 输出结果集记录
                    while (db.getRs().next()) {
                        ++count;
                        CourseQueryResult.append("\r\n" + "第" + count + "条记录" + "\r\n"
                                + "学号: " + db.getRs().getString(1) + "\r\n"
                                + "姓名: " + db.getRs().getString(2) + "\r\n"
                                + "课程: " + db.getRs().getString(3) + "\r\n"
                                + "学分: " + db.getRs().getString(4) +
                                ("\r\n--------------------------------------"));
                    }
                    CourseQueryResult.setText(CourseQueryResult.getText() +
                            "\r\n" + "共有" + count + "条选课记录");
                } catch (Exception exception) {
                    exception.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            } else if (e.getSource().equals(GradeQuery)) {
                // 完成课程平均分统计查询
                String Course = GradeItem.getSelectedItem().toString();
                try {
                    db.setRs(db.executeQueryByGrade(Course));
                    int j = 0;
                    GradeQueryResult.setText("查询结果:");
                    // 输出查询结果集
                    while (db.getRs().next()) {
                        ++j;
                        GradeQueryResult.append("\r\n" + "第" + j + "条记录" + "\r\n"
                                + "课程: " + db.getRs().getString(1) + "\t" +
                                "平均分: " + db.getRs().getString(2) +
                                ("\r\n--------------------------------------"));
                    }
                    GradeQueryResult.setText(GradeQueryResult.getText() +
                            "\r\n" + "共有" + j + "条记录");
                } catch (Exception exception) {
                    exception.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            }
        }
    
        @Override
        public void mousePressed(MouseEvent e) {
    
        }
    
        @Override
        public void mouseReleased(MouseEvent e) {
    
        }
    
        @Override
        public void mouseEntered(MouseEvent e) {
    
        }
    
        @Override
        public void mouseExited(MouseEvent e) {
    
        }
    
        @Override
        public void itemStateChanged(ItemEvent e) {
            // 如果查询选项 ID 被选中,则可以输入 ID 进行查询
            if (e.getSource().equals(ID)) {
                IDCondition.setEditable(ID.isSelected());
            }
            // 如果选项姓名被选中,则可以输入姓名进行查询
            else if (e.getSource().equals(Name)) {
                NameCondition.setEditable(Name.isSelected());
            }
            // 如果语文被选中,则可以输入语文成绩进行查询
            else if (e.getSource().equals(Chinese)) {
                ChineseCondition.setEditable(Chinese.isSelected());
            }
            // 如果数学选项被选中,则可以输入数学成绩查询
            else if (e.getSource().equals(Math)) {
                MathCondition.setEditable(Math.isSelected());
            }
            // 如果英语选项被选中,则可以输入英语成绩来查询
            else if (e.getSource().equals(English)) {
                EnglishCondition.setEditable(English.isSelected());
            }
        }
    }
    
    
    • 最后一个类实现数据库的有关操作
    // OperationMySql.java
    package StudentInfo;
    
    import java.sql.*;
    
    public class OperationMySql {
        // 定义数据库连接url
        private String dburl = null;
        // 定义数据库连接
        private Connection conn = null;
        // 定义数据库状态
        private PreparedStatement stmt = null;
        // 定义数据库返回结果集
        private ResultSet rs = null;
        // 定义数据库用户名
        private String username = null;
        // 定义数据库连接密码
        private String password = null;
        // 定义数据库驱动方式
        private String dbdriver = null;
    
        // 设置数据库连接url的方法
        public void setDburl(String dburl) {
            this.dburl = dburl;
        }
    
        // 返回当前实例数据库连接url
        public String getDburl() {
            return dburl;
        }
    
        // 返回当前实例结果集的方法
        public ResultSet getRs() {
            return rs;
        }
    
        // 设置当前实例结果集的方法
        public void setRs(ResultSet rs) {
            this.rs = rs;
        }
    
        // 设置数据库用户名的方法
        public void setUsername(String username) {
            this.username = username;
        }
    
        // 返回当前实例化数据库用户名
        public String getUsername() {
            return username;
        }
    
        // 设置数据库连接的方法
        public void setPassword(String password) {
            this.password = password;
        }
    
        // 返回当前实例数据库连接密码
        public String getPassword() {
            return password;
        }
    
        // 设置数据库驱动方式的方法
        public void setDbdriver(String dbdriver) {
            this.dbdriver = dbdriver;
        }
    
        // 返回当前实例数据库驱动方式的方法
        public String getDbdriver() {
            return dbdriver;
        }
    
        // 创建数据库连接的方法
        Connection CreateConnection(String dburl, String username, String password) throws Exception {
            setDburl(dburl);
            setUsername(username);
            setPassword(password);
            Class.forName(getDbdriver());
            // 根据数据库路径、用户名和密码创建连接并返回该连接
            return DriverManager.getConnection(dburl, username, password);
        }
    
        // 关闭结果集的方法
        public void CloseRS() {
            try {
                rs.close();
            } catch (SQLException e) {
                System.out.println("关闭结果集时发生错误!");
            }
        }
    
        // 关闭状态的方法
        public void CloseStmt() {
            try {
                stmt.close();
            } catch (SQLException e) {
                System.out.println("关闭状态时发生错误!");
            }
        }
    
        // 关闭连接的方法
        public void CloseConnection() {
            try {
                conn.close();
            } catch (SQLException e) {
                System.out.println("关闭连接时发生错误!");
            }
        }
    
        // 增
        void executeInsert(String InsertID, String InsertName, String Chinese, String Math, String English) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                stmt = conn.prepareStatement("insert into grade values(?,?,?,?,?)");
                stmt.setString(1, InsertID);
                stmt.setString(2, InsertName);
                stmt.setString(3, Chinese);
                stmt.setString(4, Math);
                stmt.setString(5, English);
                stmt.executeUpdate();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
        }
    
        // 删
        void executeDelete(String DeleteID) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                stmt = conn.prepareStatement("delete from grade where ID = ?");
                stmt.setString(1, DeleteID);
                stmt.executeUpdate();
                CloseStmt();
                CloseConnection();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
        }
    
        // 查 主键 是否在表中
        ResultSet executeQuery(String StuID) throws Exception {
            try {
                String sql = "select * from grade where ID = ?";
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                stmt = conn.prepareStatement(sql);
                stmt.setString(1, StuID);
                rs = stmt.executeQuery();
            } catch (SQLException e) {
                System.err.println(e.getMessage());
            }
            return rs;
        }
    
        // 改
        void executeUpdate(String UpdateID, String UpdateItem, String UpdateContent) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                String sql = "update grade set " + UpdateItem + " = ? where ID = ?";
                stmt = conn.prepareStatement(sql);
                stmt.setString(1, UpdateContent);
                stmt.setString(2, UpdateID);
                stmt.executeUpdate();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
        }
    
        // 按条件查询
        ResultSet executeQueryByCondition(String stuid, String stuname, String chinese, String math, String english) throws Exception {
            try {
                String sql = "select * from grade where ID like ? and Name like ? and Chinese like ? " +
                        "and Math like ? and English like ? order by ID asc";
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                stmt = conn.prepareStatement(sql);
                if (stuid.equals("%")) {
                    stmt.setString(1, "%");
                } else {
                    stmt.setString(1, "%" + stuid + "%");
                }
                if (stuname.equals("%")) {
                    stmt.setString(2, "%");
                } else {
                    stmt.setString(2, "%" + stuname + "%");
                }
                if (chinese.equals("%")) {
                    stmt.setString(3, "%");
                } else {
                    stmt.setString(3, "%" + chinese + "%");
                }
                if (math.equals("%")) {
                    stmt.setString(4, "%");
                } else {
                    stmt.setString(4, "%" + math + "%");
                }
                if (english.equals("%")) {
                    stmt.setString(5, "%");
                } else {
                    stmt.setString(5, "%" + english + "%");
                }
                rs = stmt.executeQuery();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
            return rs;
        }
    
        // 选课表查询
        ResultSet executeQueryByCourse(String course) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                String sql = "select * from course where Course = ?";
                stmt = conn.prepareStatement(sql);
                stmt.setString(1, course);
                rs = stmt.executeQuery();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
            return rs;
        }
    
        // 课程总计查询
        ResultSet executeQueryByGrade(String grade) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                String sql = "select * from summary where Course = ?";
                stmt = conn.prepareStatement(sql);
                stmt.setString(1, grade);
                rs = stmt.executeQuery();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
            return rs;
        }
    }
    
    
    展开全文
  • 学生信息管理系统 此项目包括四个类 StartMySql → 用于启动登录界面 Login → 登录进入操作界面 MySQLGUI → 图形用户界面 OperationMySql → 对数据库数据的操作功能实现 mysql 中 Table 的设计 涉及三个表 数据库...

    学生信息管理系统
    此项目包括四个类

    StartMySql → 用于启动登录界面
    Login → 登录进入操作界面
    MySQLGUI → 图形用户界面
    OperationMySql → 对数据库数据的操作功能实现
    mysql 中 Table 的设计
    涉及三个表
    数据库名 StudentInfo 表名分别为 grade、course、summary
    在这里插入图片描述
    启动单独成类

    // StartMySql.java
    package StudentInfo;
    
    public class StartMySql {
        // 启动登录界面
        public static void main(String[] args) {
            new Login();
        }
    }
    
    
    

    这是一个登录界面的小框框

    // Login.java
    package StudentInfo;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class Login implements ActionListener {
        // 定义主窗口
        private final JFrame jf;
        // 定义输入用户名和密码的标签提示
        private final JLabel InputUserName;
        private final JLabel InputPassWord;
        // 定义输入用户名文本框
        private final JTextField UserName;
        // 定义输入密码框
        private final JPasswordField PassWord;
        // 定义登录和取消按钮
        private final JButton Login;
        private final JButton Cancel;
    
        Login() {
            // 各组件实例化过程
            jf = new JFrame("Login");
            InputUserName = new JLabel("        ID:    ");
            InputPassWord = new JLabel("password:");
            UserName = new JTextField();
            PassWord = new JPasswordField();
            Login = new JButton("登录");
            Cancel = new JButton("退出");
            // 设置主窗口大小、位置和布局
            jf.setSize(400, 150);
            jf.setLocation(600, 400);
            // 设置窗口流式布局
            jf.setLayout(new FlowLayout());
            // 设置用户名和密码框大小
            UserName.setPreferredSize(new Dimension(300, 30));
            PassWord.setPreferredSize(new Dimension(300, 30));
            // 依次向主窗口添加各组件
            jf.getContentPane().add(InputUserName);
            jf.getContentPane().add(UserName);
            jf.getContentPane().add(InputPassWord);
            jf.getContentPane().add(PassWord);
            jf.getContentPane().add(Login);
            jf.getContentPane().add(Cancel);
            // 设置主窗口不可调节大小
            jf.setResizable(false);
            // 设置主窗口默认关闭操作
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            // 给登录和取消按钮添加 Action 监听器
            Login.addActionListener(this);
            Cancel.addActionListener(this);
            // 设置主窗口可见
            jf.setVisible(true);
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            // 如果单击【退出】按钮则程序退出
            if (e.getSource().equals(Cancel)) {
                System.exit(0);
            }
            // 如果单击【登录】按钮则检查用户名和密码是否匹配
            else if (e.getSource().equals(Login)) {
                // 如果用户名和密码匹配,则打开具体操作面板
                if (UserName.getText().equals("admin") && String.valueOf(PassWord.getPassword()).equals("1234")) {
                    MySQLGUI myS = new MySQLGUI();
                    myS.initial();
                    jf.setVisible(false);
                    jf.dispose();
                }
                // 如果用户名和密码不匹配,则给出提示对话框
                else {
                    JOptionPane.showOptionDialog(jf, "用户名或密码错误", "登陆失败",
                            JOptionPane.CLOSED_OPTION,
                            JOptionPane.ERROR_MESSAGE, null, null, null);
                }
            }
        }
    }
    
    
    

    这是 GUI 界面代码

    // MySQLGUI.java
    package StudentInfo;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    
    public class MySQLGUI extends JFrame implements MouseListener, ItemListener {
        // 定义选项卡
        private JTabbedPane Base;
        // 定义选项卡上的嵌板
        /*
         * jp1,  添加记录
         * jp2,  删除记录
         * jp3,  更新记录
         * jp4,  查找记录
         * jp5,  选课记录
         * jp6   课程平均分
         *  */
        private JPanel jp1, jp2, jp3, jp4, jp5, jp6;
        // 定义各按钮
        /*
         * InsertRecord, 添加记录按钮
         * InsertReset, 添加取消按钮
         * DeleteRecord, 删除记录按钮
         * DeleteReset, 删除取消按钮
         * QueryRecord, 查询记录按钮
         * UpdateRecord, 更改记录按钮
         * UpdateReset, 重置更新框
         * CourseQuery, 选课表查询按钮
         * GradeQuery, 成绩查询按钮
         * */
        private JButton InsertRecord, InsertReset, DeleteRecord, DeleteReset,
                QueryRecord, UpdateRecord, UpdateReset, CourseQuery, GradeQuery;
        // 定义各标签
        /*
         * InsertID1,      插入学号提示标签
         * InsertName1,    插入姓名提示标签
         * InsertChinese1, 插入语文成绩提示标签
         * InsertMath1,    插入数学提示标签
         * InsertEnglish1, 插入英语提示标签
         * DeleteID1,      删除学号提示标签
         * UpdateID1,      更新学号提示标签
         * */
        private JLabel InsertID1, InsertName1, InsertChinese1, InsertMath1,
                InsertEnglish1, DeleteID1, UpdateID1;
        // 定义各文本框
        /*
         * InsertID2,       插入学号文本框
         * InsertName2,     插入姓名文本框
         * InsertChinese2,  插入语文文本框
         * InsertMath2,     插入数学文本框
         * InsertEnglish2,  插入英语文本框
         * DeleteID2,       所要删除学号的文本框
         * UpdateID2,       所要更新学号的文本框
         * UpdateContent,   更新内容填写文本框
         * IDCondition,     查询ID文本框
         * NameCondition,   查询姓名文本框
         * ChineseCondition,查询语文文本框
         * MathCondition,   查询数学文本框
         * EnglishCondition,查询英语文本框
         * */
        private JTextField InsertID2, InsertName2, InsertChinese2, InsertMath2, InsertEnglish2,
                DeleteID2, UpdateID2, UpdateContent, IDCondition, NameCondition, ChineseCondition, MathCondition,
                EnglishCondition;
        // 定义显示结果文本域 显示 jp4 jp5 jp6 的查询结果
        /*
         * QueryRecordResult,  查询学生信息结果文本域
         * CourseQueryResult,  查询课程信息文本域
         * GradeQueryResult,   查询课程成绩平均分文本域
         * */
        private JTextArea QueryRecordResult, CourseQueryResult, GradeQueryResult;
        // 定义查询选项
        /*
         * ID,       选择学号查询
         * Name,     选择姓名查询
         * Chinese,  选择语文查询
         * Math,     选择数学查询
         * English,  选择英语查询
         * */
        private JRadioButton ID, Name, Chinese, Math, English;
        // 定义一个数据库操作的实例
        private OperationMySql db = null;
        // 定义滚动条
        private JScrollPane scroll = null;
        private JScrollPane CourseScroll = null;
        private JScrollPane GradeScroll = null;
        // 定义一个复选框用于选择更新的项目
        private JComboBox<String> UpdateItem = null;
        // 定义复选框用于选择查询的项目
        private JComboBox<String> CourseItem = null;    // 课程信息复选框
        private JComboBox<String> GradeItem = null;     // 课程成绩复选框
    
        MySQLGUI() {
            // 设置各按钮信息
            setButton();
            // 设置各标签信息
            setLabel();
            // 设置各文本框信息
            setTextField();
            // 设置各面板信息
            setPanel();
            // 设置布局信息
            setLayout();
            // 设置选项卡信息
            setBase();
            // 设置主窗口信息
            setThis();
            // 设置数据库信息
            setDB();
        }
    
        // 设置各按钮信息的方法
        private void setButton() {
            // jp1 上的按钮
            InsertRecord = new JButton("添加");
            InsertRecord.setFont(new Font("宋体", 1, 20));      // 1 代表加粗,20 代表字体大小
            InsertRecord.setBackground(Color.CYAN);
            InsertRecord.setBounds(150, 400, 100, 45);
            InsertRecord.setMargin(new Insets(0, 0, 0, 0));    // 设置按钮的边缘空白为四个方向全为0,也即让按钮中的文本与按钮边缘贴齐
            InsertReset = new JButton("重置");
            InsertReset.setFont(new Font("宋体", 1, 20));
            InsertReset.setBackground(Color.CYAN);
            InsertReset.setBounds(300, 400, 100, 45);
            InsertReset.setMargin(new Insets(0, 0, 0, 0));
            // jp2 上的按钮
            DeleteRecord = new JButton("删除信息");
            DeleteRecord.setFont(new Font("宋体", 1, 20));
            DeleteRecord.setBackground(Color.CYAN);
            DeleteRecord.setBounds(150, 350, 100, 45);
            DeleteRecord.setMargin(new Insets(0, 0, 0, 0));
            DeleteReset = new JButton("重置");
            DeleteReset.setFont(new Font("宋体", 1, 20));
            DeleteReset.setBackground(Color.CYAN);
            DeleteReset.setBounds(300, 350, 100, 45);
            DeleteReset.setMargin(new Insets(0, 0, 0, 0));
            // jp3 上的按钮
            UpdateRecord = new JButton("更新");
            UpdateRecord.setFont(new Font("宋体", 1, 20));
            UpdateRecord.setBackground(Color.CYAN);
            UpdateRecord.setBounds(250, 400, 100, 45);
            UpdateReset = new JButton("重置");
            UpdateReset.setFont(new Font("宋体", 1, 20));
            UpdateReset.setBackground(Color.CYAN);
            UpdateReset.setBounds(400, 400, 100, 45);
            // jp4 上的按钮
            ID = new JRadioButton("学号");
            ID.setFont(new Font("宋体", 1, 15));
            ID.setMargin(new Insets(0, 0, 0, 0));
            ID.setBounds(30, 300, 55, 20);
            Name = new JRadioButton("姓名");
            Name.setFont(new Font("宋体", 1, 15));
            Name.setMargin(new Insets(0, 0, 0, 0));
            Name.setBounds(30, 330, 55, 20);
            Chinese = new JRadioButton("语文");
            Chinese.setFont(new Font("宋体", 1, 15));
            Chinese.setMargin(new Insets(0, 0, 0, 0));
            Chinese.setBounds(30, 360, 55, 20);
            Math = new JRadioButton("数学");
            Math.setFont(new Font("宋体", 1, 15));
            Math.setMargin(new Insets(0, 0, 0, 0));
            Math.setBounds(30, 390, 55, 20);
            English = new JRadioButton("英语");
            English.setFont(new Font("宋体", 1, 15));
            English.setMargin(new Insets(0, 0, 0, 0));
            English.setBounds(30, 420, 55, 20);
            QueryRecord = new JButton("查询");
            QueryRecord.setFont(new Font("宋体", 1, 20));
            QueryRecord.setBackground(Color.CYAN);
            QueryRecord.setBounds(600, 400, 80, 45);
            // jp5 上的按钮
            CourseQuery = new JButton("查询");
            CourseQuery.setFont(new Font("宋体", 1, 20));
            CourseQuery.setBackground(Color.CYAN);
            CourseQuery.setBounds(600, 400, 80, 45);
            // jp6 上的按钮
            GradeQuery = new JButton("查询");
            GradeQuery.setFont(new Font("宋体", 1, 20));
            GradeQuery.setBackground(Color.PINK);
            GradeQuery.setBounds(600, 400, 80, 45);
            // 按键监听初始化
            initial();
        }
    
        // 设置各标签信息的方法
        private void setLabel() {
            // jp1 上的标签
            InsertID1 = new JLabel("学    号:");
            InsertID1.setFont(new Font("楷体", 1, 22));
            InsertID1.setBackground(Color.GREEN);
            InsertID1.setBounds(100, 40, 120, 50);
            InsertName1 = new JLabel("姓    名:");
            InsertName1.setFont(new Font("楷体", 1, 22));
            InsertName1.setBackground(Color.GREEN);
            InsertName1.setBounds(100, 100, 120, 50);
            InsertChinese1 = new JLabel("语文成绩:");
            InsertChinese1.setFont(new Font("楷体", 1, 22));
            InsertChinese1.setBackground(Color.GREEN);
            InsertChinese1.setBounds(100, 160, 120, 50);
            InsertMath1 = new JLabel("数学成绩:");
            InsertMath1.setFont(new Font("楷体", 1, 22));
            InsertMath1.setBackground(Color.GREEN);
            InsertMath1.setBounds(100, 220, 120, 50);
            InsertEnglish1 = new JLabel("英语成绩:");
            InsertEnglish1.setFont(new Font("楷体", 1, 22));
            InsertEnglish1.setBackground(Color.GREEN);
            InsertEnglish1.setBounds(100, 280, 120, 50);
            // jp2 上的标签
            DeleteID1 = new JLabel("学  号:");
            DeleteID1.setBounds(100, 100, 100, 50);
            DeleteID1.setFont(new Font("楷体", 1, 22));
            // jp3 上的标签
            UpdateID1 = new JLabel("学  号:");
            UpdateID1.setFont(new Font("楷体", 1, 22));
            UpdateID1.setBounds(200, 60, 120, 50);
            UpdateItem = new JComboBox<>();
            UpdateItem.setFont(new Font("楷体", 1, 22));
            UpdateItem.setBounds(200, 200, 100, 45);
            UpdateItem.addItem("姓名");
            UpdateItem.addItem("语文");
            UpdateItem.addItem("数学");
            UpdateItem.addItem("英语");
            // jp4 上的标签
            //...
            // jp5 上的标签
            CourseItem = new JComboBox<>();
            CourseItem.setFont(new Font("楷体", 1, 22));
            CourseItem.setBounds(100, 40, 140, 45);
            CourseItem.addItem("语文");
            CourseItem.addItem("数学");
            CourseItem.addItem("英语");
            // jp6 上的标签
            GradeItem = new JComboBox<>();
            GradeItem.setFont(new Font("楷体", 1, 22));
            GradeItem.setBounds(100, 40, 140, 45);
            GradeItem.addItem("语文");
            GradeItem.addItem("数学");
            GradeItem.addItem("英语");
        }
    
        // 设置各文本框信息的方法
        private void setTextField() {
            // jp1 上的文本框
            InsertID2 = new JTextField();
            InsertID2.setFont(new Font("宋体", 1, 23));
            InsertID2.setBounds(210, 40, 200, 35);
            InsertName2 = new JTextField();
            InsertName2.setFont(new Font("宋体", 1, 23));
            InsertName2.setBounds(210, 100, 200, 35);
            InsertChinese2 = new JTextField();
            InsertChinese2.setFont(new Font("宋体", 1, 23));
            InsertChinese2.setBounds(210, 160, 200, 35);
            InsertMath2 = new JTextField();
            InsertMath2.setFont(new Font("宋体", 1, 23));
            InsertMath2.setBounds(210, 220, 200, 35);
            InsertEnglish2 = new JTextField();
            InsertEnglish2.setFont(new Font("宋体", 1, 23));
            InsertEnglish2.setBounds(210, 280, 200, 35);
            // jp2 上的文本框
            DeleteID2 = new JTextField("输入要删除信息的学号");
            DeleteID2.setFont(new Font("楷体", 1, 25));
            DeleteID2.setBounds(210, 100, 350, 50);
            // jp3 上的文本框
            UpdateID2 = new JTextField();
            UpdateID2.setFont(new Font("楷体", 1, 20));
            UpdateID2.setBounds(310, 60, 200, 45);
            UpdateContent = new JTextField("更新内容");
            UpdateContent.setFont(new Font("楷体", 0, 22));
            UpdateContent.setBounds(310, 200, 200, 45);
            // jp4 上的文本框
            QueryRecordResult = new JTextArea("查询结果:");
            QueryRecordResult.setFont(new Font("楷体", 1, 20));
            //QueryRecordResult.setBounds(30,30,560,260);
            QueryRecordResult.setEditable(false);
            QueryRecordResult.setLineWrap(true);        // 当一行文字过多时自动换行
            scroll = new JScrollPane(QueryRecordResult);      // 添加滚动条
            scroll.setBounds(30, 30, 560, 260);
            scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);    // 当需要垂直滚动条时显示
            scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);// 当需要水平滚动条时显示
            IDCondition = new JTextField();
            IDCondition.setFont(new Font("宋体", 1, 18));
            IDCondition.setBounds(90, 300, 100, 21);
            NameCondition = new JTextField();
            NameCondition.setFont(new Font("宋体", 1, 18));
            NameCondition.setBounds(90, 330, 100, 21);
            ChineseCondition = new JTextField();
            ChineseCondition.setFont(new Font("宋体", 1, 18));
            ChineseCondition.setBounds(90, 360, 100, 21);
            MathCondition = new JTextField();
            MathCondition.setFont(new Font("宋体", 1, 18));
            MathCondition.setBounds(90, 390, 100, 21);
            EnglishCondition = new JTextField();
            EnglishCondition.setFont(new Font("宋体", 1, 18));
            EnglishCondition.setBounds(90, 420, 100, 21);
            IDCondition.setEditable(false);
            NameCondition.setEditable(false);
            ChineseCondition.setEditable(false);
            MathCondition.setEditable(false);
            EnglishCondition.setEditable(false);
            // jp5 上的文本框
            CourseQueryResult = new JTextArea("查询结果:");
            CourseQueryResult.setFont(new Font("楷体", 1, 20));
            CourseQueryResult.setEditable(false);
            CourseQueryResult.setLineWrap(true);
            CourseScroll = new JScrollPane(CourseQueryResult);
            CourseScroll.setBounds(20, 100, 560, 340);
            CourseScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
            CourseScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            // jp6 上的文本框
            GradeQueryResult = new JTextArea("查询结果:");
            GradeQueryResult.setFont(new Font("楷体", 1, 20));
            GradeQueryResult.setEditable(false);
            GradeQueryResult.setLineWrap(true);
            GradeScroll = new JScrollPane(GradeQueryResult);
            GradeScroll.setBounds(20, 100, 560, 340);
            GradeScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
            GradeScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        }
    
        // 设置各面板信息的方法
        private void setPanel() {
            jp1 = new JPanel();
            jp2 = new JPanel();
            jp3 = new JPanel();
            jp4 = new JPanel();
            jp5 = new JPanel();
            jp6 = new JPanel();
        }
    
        // 设置布局信息的方法
        private void setLayout() {
            // 添加 jp1 的组件
            jp1.setLayout(null);
            jp1.add(InsertRecord);
            jp1.add(InsertReset);
            jp1.add(InsertID1);
            jp1.add(InsertName1);
            jp1.add(InsertChinese1);
            jp1.add(InsertMath1);
            jp1.add(InsertEnglish1);
            jp1.add(InsertID2);
            jp1.add(InsertName2);
            jp1.add(InsertChinese2);
            jp1.add(InsertMath2);
            jp1.add(InsertEnglish2);
            // 添加 jp2 上的组件
            jp2.setLayout(null);
            jp2.add(DeleteID1);
            jp2.add(DeleteID2);
            jp2.add(DeleteRecord);
            jp2.add(DeleteReset);
            // 添加 jp3 上的组件
            jp3.setLayout(null);
            jp3.add(UpdateID1);
            jp3.add(UpdateID2);
            jp3.add(UpdateItem);
            jp3.add(UpdateContent);
            jp3.add(UpdateRecord);
            jp3.add(UpdateReset);
            // 添加 jp4 上的组件
            jp4.setLayout(null);
            // jp4.add(QueryRecordResult);
            jp4.add(scroll);
            jp4.add(QueryRecord);
            jp4.add(ID);
            jp4.add(Name);
            jp4.add(Chinese);
            jp4.add(Math);
            jp4.add(English);
            jp4.add(IDCondition);
            jp4.add(NameCondition);
            jp4.add(ChineseCondition);
            jp4.add(MathCondition);
            jp4.add(EnglishCondition);
            // 添加 jp5 上的组件
            jp5.setLayout(null);
            jp5.add(CourseItem);
            jp5.add(CourseQuery);
            jp5.add(CourseScroll);
            // 添加 jp6 上的组件
            jp6.setLayout(null);
            jp6.add(GradeQuery);
            jp6.add(GradeItem);
            jp6.add(GradeScroll);
        }
    
        // 设置选项卡信息的方法
        private void setBase() {
            Base = new JTabbedPane(JTabbedPane.TOP);
            Base.addTab("添加记录", jp1);
            Base.addTab("删除记录", jp2);
            Base.addTab("更新记录", jp3);
            Base.addTab("查找记录", jp4);
            Base.addTab("选课记录", jp5);
            Base.addTab("课程平均分", jp6);
        }
    
        // 设置主窗口信息的方法
        private void setThis() {
            this.add(Base);
            this.setTitle("学生信息管理系统");
            this.setLocation(300, 200);
            this.setSize(800, 550);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setResizable(false);
            this.setVisible(true);
        }
    
        // 设置数据库信息的方法
        private void setDB() {
            db = new OperationMySql();
            // 连接 mysql
            db.setDburl("jdbc:mysql://localhost:3306/StudentInfo?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC");
            // 加载驱动
            db.setDbdriver("com.mysql.cj.jdbc.Driver");
            // 这里的用户名和密码是要和你的 mysql 对应的,也是唯一需要更改的地方
            db.setUsername("root");
            db.setPassword("6666");
        }
    
        // 初始化
        void initial() {
            // 给各按钮添加监听器
            // InsertRecord, InsertReset, DeleteRecord, DeleteReset, QueryRecord, UpdateRecord, CourseQuery, GradeQuery;
            InsertRecord.addMouseListener(this);
            InsertReset.addMouseListener(this);
            DeleteRecord.addMouseListener(this);
            DeleteReset.addMouseListener(this);
            QueryRecord.addMouseListener(this);
            UpdateRecord.addMouseListener(this);
            UpdateReset.addMouseListener(this);
            CourseQuery.addMouseListener(this);
            GradeQuery.addMouseListener(this);
            // 给各复选按钮添加监听器
            // ID,Name, Chinese, Math, English
            ID.addItemListener(this);
            Name.addItemListener(this);
            Chinese.addItemListener(this);
            Math.addItemListener(this);
            English.addItemListener(this);
        }
    
        @Override
        public void mouseClicked(MouseEvent e) {
            // 添加按钮功能
            // 点击重置键则清空文本框
            if (e.getSource().equals(InsertReset)) {
                InsertID2.setText("");
                InsertID2.setFont(new Font("宋体", 1, 23));
                InsertName2.setText("");
                InsertName2.setFont(new Font("宋体", 1, 23));
                InsertChinese2.setText("");
                InsertChinese2.setFont(new Font("宋体", 1, 23));
                InsertMath2.setText("");
                InsertMath2.setFont(new Font("宋体", 1, 23));
                InsertEnglish2.setText("");
                InsertEnglish2.setFont(new Font("宋体", 1, 23));
            } else if (e.getSource().equals(InsertRecord)) {
                // 添加记录功能
                String InsertStuID = InsertID2.getText();
                String InsertStuName = InsertName2.getText();
                String InsertStuChinese = InsertChinese2.getText();
                String InsertStuMath = InsertMath2.getText();
                String InsertStuEnglish = InsertEnglish2.getText();
                try {
                    db.setRs(db.executeQuery(InsertStuID));
                    if (!db.getRs().next()) {
                        db.executeInsert(InsertStuID, InsertStuName, InsertStuChinese, InsertStuMath, InsertStuEnglish);
                        JOptionPane.showOptionDialog(this, "添加信息成功!", "数据库操作提示",
                                JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
                    } else JOptionPane.showOptionDialog(this, "添加失败", "温馨提示",
                            -1, 1, null, null, null);
                } catch (Exception exception) {
                    exception.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            } else if (e.getSource().equals(DeleteReset)) {
                // 删除重置功能
                DeleteID2.setText("");
                DeleteID2.setFont(new Font("楷体", 1, 25));
            } else if (e.getSource().equals(DeleteRecord)) {
                // 删除功能
                String DeleteStuID = DeleteID2.getText();
                try {
                    db.setRs(db.executeQuery(DeleteStuID));
                    if (db.getRs().next()) {
                        db.executeDelete(DeleteStuID);
                        JOptionPane.showOptionDialog(this, "删除成功!", "数据库操作提示",
                                -1, 1, null, null, null);
                    } else JOptionPane.showOptionDialog(this, "删除失败", "温馨提示",
                            -1, 1, null, null, null);
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
            } else if (e.getSource().equals(UpdateReset)) {
                // 重置更新框功能
                UpdateID2.setText("");
                UpdateID2.setFont(new Font("宋体", 1, 20));
                UpdateContent.setText("");
                UpdateContent.setFont(new Font("宋体", 1, 20));
            } else if (e.getSource().equals(UpdateRecord)) {
                // 完成更新功能
                String UpdateStuID = UpdateID2.getText();
                try {
                    db.setRs(db.executeQuery(UpdateStuID));
                    if (!db.getRs().next()) {
                        JOptionPane.showOptionDialog(this, "没有记录无法更新",
                                "温馨提示", JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE,
                                null, null, null);
                    } else {
                        String updateItem = null;
                        // 更新选项是姓名
                        if (UpdateItem.getSelectedItem().toString().equals("姓名")) {
                            updateItem = "Name";
                        }
                        // 更新的是语文成绩
                        else if (UpdateItem.getSelectedItem().toString().equals("语文")) {
                            updateItem = "Chinese";
                        }
                        // 更新的是数学成绩
                        else if (UpdateItem.getSelectedItem().toString().equals("数学")) {
                            updateItem = "Math";
                        }
                        // 更新的是英语成绩
                        else if (UpdateItem.getSelectedItem().toString().equals("英语")) {
                            updateItem = "English";
                        }
                        db.executeUpdate(UpdateStuID, updateItem, UpdateContent.getText());
                        JOptionPane.showOptionDialog(this, "更新成功!", "数据库操作提示",
                                -1, 1, null, null, null);
                    }
                } catch (Exception exception) {
                    exception.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            } else if (e.getSource().equals(QueryRecord)) {
                // 完成查询功能
                try {
                    // 默认设置各检索条件均为通配符
                    String a = "%", b = "%", c = "%", d = "%", f = "%";
                    // 如果 ID 选项被选中,则获得该选项的输入内容
                    if (ID.isSelected() && !IDCondition.getText().trim().isEmpty()) {
                        a = IDCondition.getText();
                    }
                    // 如果 Name 选项被选中,则获得该选项的输入内容
                    if (Name.isSelected() && !NameCondition.getText().trim().isEmpty()) {
                        b = NameCondition.getText();
                    }
                    // 如果 Math 选项被选中,则获得该选项的输入内容
                    if (Math.isSelected() && !MathCondition.getText().trim().isEmpty()) {
                        d = MathCondition.getText();
                    }
                    // 如果 English 选项被选中,则获得该选项的输入内容
                    if (English.isSelected() && !EnglishCondition.getText().trim().isEmpty()) {
                        f = EnglishCondition.getText();
                    }
                    // 如果 Chinese 选项被选中,则获得该选项的输入内容
                    if (Chinese.isSelected() && !ChineseCondition.getText().trim().isEmpty()) {
                        c = ChineseCondition.getText();
                    }
                    // 根据各选项检索关键字进行查询,并返回结果集
                    db.setRs(db.executeQueryByCondition(a, b, c, d, f));
                    // 定义结果集中记录条数
                    int i = 0;
                    QueryRecordResult.setText("查询结果:");
                    // 输出结果集记录
                    while (db.getRs().next()) {
                        ++i;
                        QueryRecordResult.append("\r\n" + "第" + i + "条记录:" + "\r\n"
                                + "学号:" + db.getRs().getString(1) + "\r\n"
                                + "姓名:" + db.getRs().getString(2) + "\r\n"
                                + "语文:" + db.getRs().getString(3) + "\r\n"
                                + "数学:" + db.getRs().getString(4) + "\r\n"
                                + "英语:" + db.getRs().getString(5) +
                                ("\r\n--------------------------------------"));
                    }
                    QueryRecordResult.setText(QueryRecordResult.getText() +
                            "\r\n" + "共有" + i + "条学生记录");
                } catch (Exception e1) {
                    e1.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            } else if (e.getSource().equals(CourseQuery)) {
                // 完成选课查询
                String Course = CourseItem.getSelectedItem().toString();
                try {
                    db.setRs(db.executeQueryByCourse(Course));
                    int count = 0;
                    CourseQueryResult.setText("查询结果:");
                    // 输出结果集记录
                    while (db.getRs().next()) {
                        ++count;
                        CourseQueryResult.append("\r\n" + "第" + count + "条记录" + "\r\n"
                                + "学号: " + db.getRs().getString(1) + "\r\n"
                                + "姓名: " + db.getRs().getString(2) + "\r\n"
                                + "课程: " + db.getRs().getString(3) + "\r\n"
                                + "学分: " + db.getRs().getString(4) +
                                ("\r\n--------------------------------------"));
                    }
                    CourseQueryResult.setText(CourseQueryResult.getText() +
                            "\r\n" + "共有" + count + "条选课记录");
                } catch (Exception exception) {
                    exception.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            } else if (e.getSource().equals(GradeQuery)) {
                // 完成课程平均分统计查询
                String Course = GradeItem.getSelectedItem().toString();
                try {
                    db.setRs(db.executeQueryByGrade(Course));
                    int j = 0;
                    GradeQueryResult.setText("查询结果:");
                    // 输出查询结果集
                    while (db.getRs().next()) {
                        ++j;
                        GradeQueryResult.append("\r\n" + "第" + j + "条记录" + "\r\n"
                                + "课程: " + db.getRs().getString(1) + "\t" +
                                "平均分: " + db.getRs().getString(2) +
                                ("\r\n--------------------------------------"));
                    }
                    GradeQueryResult.setText(GradeQueryResult.getText() +
                            "\r\n" + "共有" + j + "条记录");
                } catch (Exception exception) {
                    exception.printStackTrace();
                } finally {
                    db.CloseRS();
                    db.CloseStmt();
                    db.CloseConnection();
                }
            }
        }
    
        @Override
        public void mousePressed(MouseEvent e) {
    
        }
    
        @Override
        public void mouseReleased(MouseEvent e) {
    
        }
    
        @Override
        public void mouseEntered(MouseEvent e) {
    
        }
    
        @Override
        public void mouseExited(MouseEvent e) {
    
        }
    
        @Override
        public void itemStateChanged(ItemEvent e) {
            // 如果查询选项 ID 被选中,则可以输入 ID 进行查询
            if (e.getSource().equals(ID)) {
                IDCondition.setEditable(ID.isSelected());
            }
            // 如果选项姓名被选中,则可以输入姓名进行查询
            else if (e.getSource().equals(Name)) {
                NameCondition.setEditable(Name.isSelected());
            }
            // 如果语文被选中,则可以输入语文成绩进行查询
            else if (e.getSource().equals(Chinese)) {
                ChineseCondition.setEditable(Chinese.isSelected());
            }
            // 如果数学选项被选中,则可以输入数学成绩查询
            else if (e.getSource().equals(Math)) {
                MathCondition.setEditable(Math.isSelected());
            }
            // 如果英语选项被选中,则可以输入英语成绩来查询
            else if (e.getSource().equals(English)) {
                EnglishCondition.setEditable(English.isSelected());
            }
        }
    }
    
    
    

    最后一个类实现数据库的有关操作

    // OperationMySql.java
    package StudentInfo;
    
    import java.sql.*;
    
    public class OperationMySql {
        // 定义数据库连接url
        private String dburl = null;
        // 定义数据库连接
        private Connection conn = null;
        // 定义数据库状态
        private PreparedStatement stmt = null;
        // 定义数据库返回结果集
        private ResultSet rs = null;
        // 定义数据库用户名
        private String username = null;
        // 定义数据库连接密码
        private String password = null;
        // 定义数据库驱动方式
        private String dbdriver = null;
    
        // 设置数据库连接url的方法
        public void setDburl(String dburl) {
            this.dburl = dburl;
        }
    
        // 返回当前实例数据库连接url
        public String getDburl() {
            return dburl;
        }
    
        // 返回当前实例结果集的方法
        public ResultSet getRs() {
            return rs;
        }
    
        // 设置当前实例结果集的方法
        public void setRs(ResultSet rs) {
            this.rs = rs;
        }
    
        // 设置数据库用户名的方法
        public void setUsername(String username) {
            this.username = username;
        }
    
        // 返回当前实例化数据库用户名
        public String getUsername() {
            return username;
        }
    
        // 设置数据库连接的方法
        public void setPassword(String password) {
            this.password = password;
        }
    
        // 返回当前实例数据库连接密码
        public String getPassword() {
            return password;
        }
    
        // 设置数据库驱动方式的方法
        public void setDbdriver(String dbdriver) {
            this.dbdriver = dbdriver;
        }
    
        // 返回当前实例数据库驱动方式的方法
        public String getDbdriver() {
            return dbdriver;
        }
    
        // 创建数据库连接的方法
        Connection CreateConnection(String dburl, String username, String password) throws Exception {
            setDburl(dburl);
            setUsername(username);
            setPassword(password);
            Class.forName(getDbdriver());
            // 根据数据库路径、用户名和密码创建连接并返回该连接
            return DriverManager.getConnection(dburl, username, password);
        }
    
        // 关闭结果集的方法
        public void CloseRS() {
            try {
                rs.close();
            } catch (SQLException e) {
                System.out.println("关闭结果集时发生错误!");
            }
        }
    
        // 关闭状态的方法
        public void CloseStmt() {
            try {
                stmt.close();
            } catch (SQLException e) {
                System.out.println("关闭状态时发生错误!");
            }
        }
    
        // 关闭连接的方法
        public void CloseConnection() {
            try {
                conn.close();
            } catch (SQLException e) {
                System.out.println("关闭连接时发生错误!");
            }
        }
    
        // 增
        void executeInsert(String InsertID, String InsertName, String Chinese, String Math, String English) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                stmt = conn.prepareStatement("insert into grade values(?,?,?,?,?)");
                stmt.setString(1, InsertID);
                stmt.setString(2, InsertName);
                stmt.setString(3, Chinese);
                stmt.setString(4, Math);
                stmt.setString(5, English);
                stmt.executeUpdate();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
        }
    
        // 删
        void executeDelete(String DeleteID) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                stmt = conn.prepareStatement("delete from grade where ID = ?");
                stmt.setString(1, DeleteID);
                stmt.executeUpdate();
                CloseStmt();
                CloseConnection();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
        }
    
        // 查 主键 是否在表中
        ResultSet executeQuery(String StuID) throws Exception {
            try {
                String sql = "select * from grade where ID = ?";
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                stmt = conn.prepareStatement(sql);
                stmt.setString(1, StuID);
                rs = stmt.executeQuery();
            } catch (SQLException e) {
                System.err.println(e.getMessage());
            }
            return rs;
        }
    
        // 改
        void executeUpdate(String UpdateID, String UpdateItem, String UpdateContent) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                String sql = "update grade set " + UpdateItem + " = ? where ID = ?";
                stmt = conn.prepareStatement(sql);
                stmt.setString(1, UpdateContent);
                stmt.setString(2, UpdateID);
                stmt.executeUpdate();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
        }
    
        // 按条件查询
        ResultSet executeQueryByCondition(String stuid, String stuname, String chinese, String math, String english) throws Exception {
            try {
                String sql = "select * from grade where ID like ? and Name like ? and Chinese like ? " +
                        "and Math like ? and English like ? order by ID asc";
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                stmt = conn.prepareStatement(sql);
                if (stuid.equals("%")) {
                    stmt.setString(1, "%");
                } else {
                    stmt.setString(1, "%" + stuid + "%");
                }
                if (stuname.equals("%")) {
                    stmt.setString(2, "%");
                } else {
                    stmt.setString(2, "%" + stuname + "%");
                }
                if (chinese.equals("%")) {
                    stmt.setString(3, "%");
                } else {
                    stmt.setString(3, "%" + chinese + "%");
                }
                if (math.equals("%")) {
                    stmt.setString(4, "%");
                } else {
                    stmt.setString(4, "%" + math + "%");
                }
                if (english.equals("%")) {
                    stmt.setString(5, "%");
                } else {
                    stmt.setString(5, "%" + english + "%");
                }
                rs = stmt.executeQuery();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
            return rs;
        }
    
        // 选课表查询
        ResultSet executeQueryByCourse(String course) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                String sql = "select * from course where Course = ?";
                stmt = conn.prepareStatement(sql);
                stmt.setString(1, course);
                rs = stmt.executeQuery();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
            return rs;
        }
    
        // 课程总计查询
        ResultSet executeQueryByGrade(String grade) throws Exception {
            try {
                conn = CreateConnection(getDburl(), getUsername(), getPassword());
                String sql = "select * from summary where Course = ?";
                stmt = conn.prepareStatement(sql);
                stmt.setString(1, grade);
                rs = stmt.executeQuery();
            } catch (SQLException ex) {
                System.err.println(ex.getMessage());
            }
            return rs;
        }
    }
    
    
    
    展开全文
  • 首界面 用户管理登录界面相同 管理管理界面

    首界面
    在这里插入图片描述用户和管理员登录界面相同
    在这里插入图片描述
    管理员管理界面
    在这里插入图片描述

    <!DOCTYPE html>
    <html>
        <link href="admin.css" type="text/css" rel="Stylesheet" />
    <head>
        <meta charset="utf-8">
        <title>管理员界面</title>
    </head>
    <?php
            $link=mysqli_connect('127.0.0.1', 'root', '', 'userinformation') or die('连接或者选择数据库失败');
            mysqli_set_charset($link, 'utf8mb4');
            $page=$_GET["page"]??1;//得到页数
            $sql = "SELECT count(*) from student";
            $totalresult=mysqli_query($link,$sql);
            $total=mysqli_fetch_row($totalresult);
            $num = 7;
            $totalpage=ceil($total[0]/$num);//总页数
            if($page>$totalpage)
            {
                $page=$totalpage;
            }
            if($page<1)
            {
                $page=1;
            }
            $start = ($page-1)*7;
            $sql = "SELECT * FROM student limit $start,7" ;
            $result = mysqli_query($link, $sql);
        ?>
    <body>
        <div id="container">
    
    
            <div id="header">
                <p class="p_font">河北大学学生信息管理系统</p>
                <a href="../login/Adminindex.php"style="float: right;margin-top: 47px;"<?php session_destroy();?>>>注销</a>
            </div>
            <div id="content" >
            <div id="left">
                <ul>
                    <li><a href="">个人信息管理</a></li>
                    <li><a href="">选课信息管理</a></li>
                </ul>
            </div>
            <div id="right">
                <div class="box">
                    <div class="boxhead">
                    <p style="font-size: 18px;color: orange;font-family: emoji;letter-spacing: 8px;font-style: normal;">信息查询</p>
                    </div>
                    <div class="bar1">
                        <a href="./insert.php"><button class="button">添加信息</button></a>
                        <form action="search.php" method="post">
                             <select name="key"class="select">
                                <option value="sname">姓 名</option>
                                <option value="sno">学 号</option>
                                <option value="sex">性 别</option>
                                <option value="sage">年 龄</option>
                                <option value="smajor">专 业</option>
                                <option value="sclass">班 级</option>
                                <option value="sdept">学 院</option>
                            </select>
                            <input class="bar1_input"type="text"name="keywords" placeholder="请输入您要搜索的内容...">
                            <button class="bar1_button"type="submit"name="submit"value="提交查询"></button>
                        </form>
        
                    </div>
                </div>
                    
                    <div>
                        <form action="checkdelete.php"method="POST">
                        <table class="mytable">
                            <tr>
                                <th class="th">序号</th>
                                <th class="th">学号</th>
                                <th class="th">姓名</th>
                                <th class="th">年龄</th>
                                <th class="th">性别</th>
                                <th class="th">专业</th>
                                <th class="th">班级</th>
                                <th class="th">学院</th>
                                <th class="th">操作</th>
                                <th class="th"><input type="checkbox" id="allChecks"name="allChecks" οnclick="ckAll()">全选</th>
                            </tr>
                            <?php
                            while($row = mysqli_fetch_assoc($result))
                            {
                                $html=<<<A
                                <tr>
                                        <td class="td">{$row['id']}</td> 
                                        <td class="td">{$row['sno']}</td>
                                        <td class="td">{$row['sname']}</td>
                                        <td class="td">{$row['sage']}</td>
                                        <td class="td">{$row['ssex']}</td>
                                        <td class="td">{$row['smajor']}</td>
                                        <td class="td">{$row['sclass']}</td>
                                        <td class="td">{$row['sdept']}</td>
                                        <td class="td">
                                                       <a href="./update.php ? id={$row['id']} ">修改</a>
                                                       <a onclick = "javascript:if(!confirm('确认要删除选择的信息吗?')){return false;}"href="./delete.php ? id={$row['id']} ">删除</a></td>
                                        <td class="td"><input type="checkbox"  id = "check"name="check[]"value="{$row['id']}"></td>           
                          </tr>
    A;                     
                                echo $html;
                            }                     
                            ?>
     
                            <tr align = "center">
                            <td style = "height:38px"colspan="10">
                            <a href="?page=1">首页</a>
                            <a href="?page=<?php echo $page-1?>">上一页</a>
                            <?php echo $page; echo'/';echo $totalpage?>
                            <a href="?page=<?php echo $page+1?>">下一页</a>
                            <a href="?page=<?php echo $totalpage ?>">尾页</a>
                            <input  onclick = "javascript:if(!confirm('确认要删除选择的信息吗?')){return false;}"
                            style=" float:right; background-color: #2196f3;font-weight: bold; height: 26px;" 
                            type="submit"value="删除所选">
                            </td>
                            </tr>
                        </table>
                        </form>
                    </div>
            </div>
                
        </div>
    
            <div id="footer" style="background-color:#FFA500;clear:both;text-align:center;">
            <?php
             echo '@';
             echo $_SESSION['manage']['name'];
             echo "admin用户";
            ?>
               </div>
    
        </div>
        <script>
           function ckAll()
            {
                var cks=document.getElementsByName("check[]");//获取全选按钮的对象
                var flag=document.getElementById("allChecks").checked; //获取全选按钮当前的状态
                for(var i=0;i<cks.length;i++)
                {
                    cks[i].checked = flag;
                }
            }
        </script>   
    </body>
    
    </html>
    
    展开全文
  • 本文实例为大家分享了Python实现GUI学生信息管理系统的具体代码,供大家参考,具体内容如下项目环境:软件环境:OS:RedHat6.3Lib:PygtkLanguage:PythonSupport tool:Glade3项目简述:①Glade3设计用户登录窗口,...

    本文实例为大家分享了Python实现GUI学生信息管理系统的具体代码,供大家参考,具体内容如下

    项目环境:

    软件环境:

    OS:RedHat6.3

    Lib:Pygtk

    Language:Python

    Support tool:Glade3

    项目简述:

    ①Glade3设计用户的登录窗口,功能主窗口

    ②通过Gtk.Builder初始化,载入界面

    ③在Mysql.py文件中实现Python操作数据库。

    ④在stuManager.py中实现学生信息的查询,删除,修改,终端登录,图形统计等功能

    ⑤在Glade中定义函数触发信号,实现功能的连接。

    项目测试:

    ①登录窗口

    2018110152727314.png

    ②主窗口

    2018110153327729.png

    ③删除信息

    2018110153350943.png

    ④修改信息

    2018110153414458.png

    ⑤登录终端

    2018110153446940.png

    ⑥学生成绩

    2018110153738954.png

    ⑦图形统计(没做好)

    ⑧查找信息

    2018110153809461.png

    部分代码:

    Terminal.py

    #-*- coding=utf-8 -*-

    #!/usr/bin/python

    #####################################################################

    ## Filename: terminal.py

    ##

    ## Copyright (C) 2014.6

    ## Author: TangMeiHao@760209035@qq.com

    ##

    ## Description: python + pygtk(gtk)实现学生信息管理系统

    ##

    ######################################################################

    import vte

    import gtk

    class MyTerm():

    def __init__(self):

    """初始化一个term对象"""

    self.terminal=vte.Terminal()

    self.terminal.connect("child-exited",lambda term: self.vte_exit())

    self.terminal.fork_command()

    self.terminal.set_size(10,20)

    def vte_exit(self):

    """当terminal退出时,直接重新产生一个terminal,并clear初始化"""

    self.terminal.fork_command()

    self.terminal.feed_child("clear ")

    def vte_message(self):

    pass

    Stu_Sys.py

    #!/usr/bin/python

    #-*- coding:utf-8 -*-

    ######################################################################

    ## Filename: Stu_Sys.py

    ##

    ## Copyright (C) 2014.6

    ## Author: TangMeiHao@760209035@qq.com

    ##

    ## Description: python + pygtk(gtk)实现学生信息管理系统

    ##

    ######################################################################

    import gtk

    import gtk.glade

    from terminal import *

    import MySQLdb

    #系统类

    class system:

    #定义数据库的变量

    host='localhost'

    user='root'

    passwd='aixocm'

    db='student'

    port=3306

    charset='utf8'

    def __init__(self):

    # 定义所使用的glade文件

    self.glade_file = "Student.glade"

    self.glade = gtk.Builder()

    self.glade.add_from_file(self.glade_file)

    self.glade.connect_signals(self)

    self.glade.get_object("window1").set_size_request(800,500)

    self.glade.get_object("window1").set_position(gtk.WIN_POS_CENTER)

    #从xml文件中读取数据,并链接必要的信号

    for widget in self.glade.get_objects():

    if issubclass(type(widget),gtk.Buildable):name=gtk.Buildable.get_name(widget)

    setattr(self,name,widget)

    #创建一个Terminal的实例,并且添加到登录管理的标签页中

    self.myterm=MyTerm()

    self.glade.get_object("vbox2").add(self.myterm.terminal)

    #登录窗口

    self.dialog3.run()

    self.dialog3.set_size_request(300,260)

    self.dialog3.set_position(gtk.WIN_POS_CENTER)

    #登录窗口登录,验证管理员用户,密码.

    def on_login_click(self,widget,data=None):

    try:

    conn=MySQLdb.connect(host=system.host,user=system.user,passwd=system.passwd,

    db=system.db,port=system.port,charset=system.charset)

    cur=conn.cursor()

    manager_name=cur.execute('select manager_name from manager')

    name=cur.fetchmany(1)

    manager_passwd=cur.execute('select manager_passwd from manager')

    text16=self.entry16.get_text()

    text17=self.entry17.get_text()

    if text16!=name:

    #验证成功,关闭登录窗口

    self.dialog3.destroy()

    #显示窗口

    self.glade.get_object("window1").show_all()

    else:

    #提示框

    login_waring='亲爱的管理员,你登录的用户或密码误'

    self.dialog1buffer=self.textview3.get_buffer()

    self.dialog1buffer.set_text(str(login_waring))

    self.dialog1.set_size_request(300,260)

    self.dialog1.set_position(gtk.WIN_POS_CENTER)

    self.dialog1.run()

    except MySQLdb.Error,e:

    print "Mysql Error %d: %s" % (e.args[0], e.args[1])

    ...........

    更多学习资料请关注专题《管理系统开发》。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 使用MFC实现的一个登录界面,有学生端和管理员端两个用户端,输入不同的账号密码可以进入不同的界面(弹出不同的模态窗口)。运行此程序可能需要VS相应环境支持。学生端账号密码皆为123456;管理员端密码皆为000000...
  • Java学生成绩管理系统界面设计(包括登录界面及界面切换),内含学生成绩管理系统用户应有功能模块设计。 登录界面 package Panel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event...
  • 本文实例为大家分享了Python实现GUI学生信息管理系统的具体代码,供大家参考,具体内容如下项目环境:软件环境:OS:RedHat6.3Lib:PygtkLanguage:PythonSupport tool:Glade3项目简述:①Glade3设计用户登录窗口,...
  • 项目环境:软件环境:...④查询、删除、修改终端登录,图表统计数据和其他中间学生信息的功能。⑤在空地实现函数定义函数触发信号连接。项目测试:①登录窗口②主窗口③④删除信息修改学生的成绩信息⑤登录终端⑥⑦图...
  • 学生信息管理系统

    2019-04-27 16:43:34
    学生信息管理系统 在使用本系统之前,需要做一些运行环境的搭建,具体步骤见该目录下的 --系统部署流程--。 系统部署完成以后,运行wamp,待服务全部启动之后,打开浏览器,输入:...
  • 《Jsp学生信息管理系统登录验证全代码(最新整理)》由会员分享,可在线阅读,更多相关《Jsp学生信息管理系统登录验证全代码(最新整理)(17页珍藏版)》请在人人文库网上搜索。1、1. jsp 登录界面 Login.jsp用户登录界面...
  • 为提高学生信息管理的效率,主要介绍自主开发的基于B/S模式的学生信息管理系统中信息管理的设计与实现方法,通过对系统中的关键技术和代码较详细的阐述,介绍了用户登录的实现、学生信息的录入、系统后台的管理和...
  • 文件名称: StudentManager下载 收藏√ [5 4 3 2 1]开发工具: Java文件大小: 234 KB上传时间: 2015-06-25下载次数: 0详细说明:这是一个可以学生信息管理系统的程序,该程序有界面登录用户添加,学生信息添加,用户...
  • Java学生信息管理系统

    2020-09-25 14:06:06
    (无数据库)txt文件进行保存数据有完整的登录注册和学生信息录入界面1.登录界面:有登录,注册,重置功能,实现用户登录和无用户人员注册登录账号以及登录密码,注册完成的账号密码可登录系统,重置按钮拥有对输错...
  • Netbeans软件中建立一个StudentManager项目,实现用户会员注册,用户信息确认,用户登录,登录学生信息管理系统首页,学生信息搜索五个功能,并且能实现各界面的相互连接和跳转,实现填入用户名后自动显示密码,检测...
  • (1)学生信息管理系统的使用者主要是学生和老师,老师作为管理者应该拥有更多权限,例如学生信息的添加、修改、删除等等,而学生作为普通用户只能拥有一些基本的权限,比如查看。 (2)学生信息管理系统应能登录和...
  • 学生成绩管理系统是按班级对学生信息及成绩进行管理与统计的一个管理系统。由于不同班级(专业)的课程不同,因此,管理系统应该具有针对不同班级设置不同课程的功能。 该管理系统主要用于对学生的学号、姓名等基本...
  • 学生学籍管理系统~~功能界面

    千次阅读 2017-05-23 23:21:47
    之前介绍了登录界面的设计,现在介绍一下注册管理员和录入信息的部分。 设计注册管理员的思想是:默认一个拥有创建用户管理员,这个管理员可以创建数据库登录用户(相当于创建教师),而这些用户只能登录和进行...
  • 学生信息管理系统.zip

    2019-11-14 17:28:46
    登录验证码,登录界面会生成随机的验证码,用户登录有验证码验证功能 3.学生信息,班级信息,教师信息的增删改查功能 资源包含:eclipse工程源码,数据库可执行sql文件、课程设计wrod文档20页、项目导入教程...
  • 课程设计题目描述和需求分析2.1课程设计题目:学生信息管理系统2.2需求分析:功能分析:(1)用户登录用户登录(一个界面)通过验证分为管理员,学生,老师登陆三个主页面(2)学生信息管理:管理员对学生信息进行...
  • 有一个二进制数据文件qmscore.dat,内容为一批学生期末考试成(姓名,总成绩),统计本次考试中的前三名,依次输出前三名的姓名 如:第一名为zhangsan,第二名为lisi,第三名为wangwu,则输出格式为:zhangsan:lisi:...
  • 本人第一次做的学生管理系统,适合初学者,分为前台学生用户界面,后台管理员界面;前台主要功能:学生信息查询,选课,留言,后台主要功能:学生信息增删改,成绩录入,留言回复,学生登录权限管理 一部分用到了mvc...
  • (学习目标:使用.net 窗体制作一个学生信息管理系统,满足学生信息、班级信息、年级信息的增删改查。) 第三天:登录代码的优化。 任务:封装公用的代码,使结构更完整。 目前登录界面代码虽然已经实现,但是考虑到...
  • 项目环境:软件环境:OS:RedHat6.3Lib:PygtkLanguage:PythonSupport tool:Glade3项目简述:①Glade3设计...④在stuManager.py中实现学生信息的查询,删除,修改,终端登录,图形统计等功能⑤在Glade中定义函数触发信...
  • 本文实例为大家分享了Python实现GUI学生信息管理系统的具体代码,供大家参考,具体内容如下项目环境:软件环境:OS:RedHat6.3Lib:PygtkLanguage:PythonSupport tool:Glade3项目简述:①Glade3设计用户登录窗口,...
  • 创建登录界面,根据用户角色()不同,显示不同用户界面。... A,学生信息管理,浏览所有学生信息,添加和删除学生,修改学生信息; B,学生成绩管理,录入学生成绩,删除学显示学生个人信息:通过课程名查询成绩。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 545
精华内容 218
关键字:

学生信息管理系统用户登录界面