Java期末小项目:Java+GUI+MySQL 学生管理系统

这是一个使用Java图形用户界面(GUI)和MySQL数据库构建的学生管理系统。系统包括用户登录、主界面展示、学生信息查询、添加、删除和修改功能。登录界面简洁,主界面提供查询和操作选项,实现了对学生信息的有效管理。
摘要由CSDN通过智能技术生成

学生管理系统

一、整体列表总览

在这里插入图片描述

  • 登录文件——LoginFrame
package net.zwh.p03.t09.gui;

import net.zwh.p03.t09.bean.User;
import net.zwh.p03.t09.service.UserService;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.IOException;

/**
 * 功能:用户登录窗口
 * 作者:曾文浩
 * 日期:2022年06月09日
 */
public class LoginFrame extends JFrame {
    private String username;
    private String password;

    private JLabel lblUsername;
    private JLabel lblPassword;
    private JTextField txtUsername;
    private JPasswordField txtPassword;

    private JButton btnOK;
    private JButton btnCancel;
    private JButton btnSign;

    private JPanel panel, panel1, panel2, panel3, panel4;

    /**
     * 有参构造方法
     *
     * @param title
     */
    public LoginFrame(String title) {
        super(title);
        initGUI(); // 调用初始化图形用户界面方法
        eventsHandling(); // 调用事件处理方法
    }

    /**
     * 事件处理
     */
    private void eventsHandling() {
        // 给【确定】按钮注册监听器
        btnOK.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取用户输入的用户名和密码
                username = txtUsername.getText().trim();
                password = new String(txtPassword.getPassword());
                // 创建用户服务对象
                UserService userService = new UserService();
                // 调用服务对象的登录方法
                User user = userService.login(username, password);
                // 判断用户登录是否成功
                if (user != null) {
                    // 弹出消息提示窗口
                    try {
                        new Main();
                        JOptionPane.showMessageDialog(null, "恭喜【"+ username + "】登录成功~");
                    } catch (IOException ioException) {
                        System.err.println("失败~");
                    }
                    dispose();
                } else {
                    // 弹出消息提示窗口
                    JOptionPane.showMessageDialog(null, "【"+ username + "】登录失败~\n用户名或密码错误~");
                    // 情况两个文本框
                    txtUsername.setText("");
                    txtPassword.setText("");
                    // 让姓名文本框获取焦点
                    txtUsername.requestFocus();
                }
            }
        });

        //给取消按钮注册监听器
        btnCancel.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        btnSign.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new Sign();
            }
        });
    }

    /**
     * 初始化图形用户界面方法
     */
    private void initGUI() {
        // 实例化组件(面板与控件)
        panel = (JPanel) getContentPane();
        panel1 = new JPanel();
        panel2 = new JPanel();
        panel3 = new JPanel();
        panel4 = new JPanel();

        lblUsername = new JLabel("用户名:");
        lblPassword = new JLabel("密    码:");
        txtUsername = new JTextField(15);
        txtPassword = new JPasswordField(15);
        btnOK = new JButton("确定[O]");
        btnCancel = new JButton("取消[C]");
        btnSign = new JButton("注册[I]");

        // 将控件添加到三个小面板
        panel1.add(lblUsername);
        panel1.add(txtUsername);
        panel2.add(lblPassword);
        panel2.add(txtPassword);
        panel3.add(btnOK);
        panel3.add(btnCancel);
        panel4.add(btnSign);

        // 设置主面板为三行一列的网格布局
        panel.setLayout(new GridLayout(4, 1));
        // 将三个小面板依次添加到主面板
        panel.add(panel1);
        panel.add(panel2);
        panel.add(panel3);
        panel.add(panel4);

        // 设置按钮热键字母
        btnOK.setMnemonic(KeyEvent.VK_O);
        btnCancel.setMnemonic(KeyEvent.VK_C);
        btnSign.setMnemonic(KeyEvent.VK_I);
        // 设置密码框回显字符
        txtPassword.setEchoChar('*');

        // 设置窗口大小
        setSize(700, 500);
        // 设置窗口屏幕居中
        setLocationRelativeTo(null);
        // 设置窗口不可调整大小
        setResizable(false);
        // 设置窗口刚好容纳组件
        pack();
        // 设置窗口可见
        setVisible(true);
        // 设置窗口默认关闭操作
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }


    public static void main(String[] args) {
        new LoginFrame("用户登录");
    }
}
  • 主文件——Main
package net.zwh.p03.t09.gui;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

public class Main extends JFrame implements ActionListener{
    public static void main(String[] args) throws IOException {
        new Main();
        final int WIDTH=800;//设置窗口的宽
        final int HEIGHT=500;//设置窗口的高
    }

    //面板控件
    private JLabel queryLab = null;
    private JTextField queryTxt = null;
    private JButton queryBtn = null;
    private JButton allBtn = null;
    private JTable resultTb = null;
    private JScrollPane jsp = null;
    private JButton addBtn = null;
    private JButton deleteBtn = null;
    private JButton updateBtn = null;
    private JPanel top = null;
    private JPanel bottom = null;

    private Model sm = null;

    //构造函数
    public Main() throws IOException {
        super("学生管理系统");

        //查询栏
        queryLab = new JLabel("请输入姓名:");
        queryTxt = new JTextField(10);
        queryBtn = new JButton("查询");
        allBtn = new JButton("全部");
        //添加查询栏监听
        queryBtn.addActionListener(this);
        queryBtn.setActionCommand("query");
        allBtn.addActionListener(this);
        allBtn.setActionCommand("all");
        //增删改栏
        addBtn = new JButton("添加");
        deleteBtn = new JButton("删除");
        updateBtn = new JButton("修改");
        //添加增删改栏监听
        addBtn.addActionListener(this);
        addBtn.setActionCommand("add");
        deleteBtn.addActionListener(this);
        deleteBtn.setActionCommand("delete");
        updateBtn.addActionListener(this);
        updateBtn.setActionCommand("update");
        //创建窗口整体布局
        //顶层查询栏
        top = new JPanel();
        top.add(queryLab);
        top.add(queryTxt);
        top.add(queryBtn);
        top.add(allBtn);
        //底层增删改栏
        bottom = new JPanel();
        bottom.add(addBtn);
        bottom.add(deleteBtn);
        bottom.add(updateBtn);
        //中间层显示栏
        sm = new Model();
        String sql = "select * from stu";
        sm.queryStu(sql, null);
        resultTb = new JTable(sm);
        jsp = new JScrollPane(resultTb);
        //构建整体布局
        this.add(top,BorderLayout.NORTH);
        this.add(jsp,BorderLayout.CENTER);
        this.add(bottom,BorderLayout.SOUTH);
        //设置窗口属性
        this.setBounds(500,250,500,300);
//        this.setIconImage(ImageIO.read(new File("D:\\yuandaima\\shishuo\\src\\studentManage\\img\\登录.png")));
        this.setVisible(true);
        this.setResizable(false);
    }

    //监听
    @Override
    public void actionPerformed(ActionEvent e)
    {
        // TODO Auto-generated method stub
        if(e.getActionCommand().equals("query")) {
            //查询
            //获取输入学生的姓名
            String name = queryTxt.getText().trim();
            if(name.length() != 0) {
                //姓名输入有效时,执行查询
                //定义参数
                String sql = "select * from stu where stuName=?";
                String []paras = {name};
                //更新模型
                jtableUpdate(sql, paras);
            } else {
                //姓名为空时,设置提醒
                JOptionPane.showMessageDialog(this, "姓名输入不能为空");
            }
        } else if(e.getActionCommand().equals("add")) {
            //添加
            new Add(this, "添加学生信息", true);
            String sql = "select * from stu";
            jtableUpdate(sql, null);
        } else if(e.getActionCommand().equals("all")) {
            //全部显示
            String sql = "select * from stu";
            jtableUpdate(sql, null);
        } else if(e.getActionCommand().equals("delete")) {
            //删除
            //获取选择行号
            int rowNum = this.resultTb.getSelectedRow();
            if(rowNum == -1) {
                JOptionPane.showMessageDialog(this, "请选择一行");
                return ;
            }
            //获取学生ID号
            String stuId = (String)sm.getValueAt(rowNum, 0);
            //删除学生
            String sql = "delete from stu where stuId=?";
            String []paras = {stuId};
            Model tmp = new Model();
            tmp.cudStu(sql, paras);
            //更新模型
            sql = "select * from stu";
            jtableUpdate(sql, null);
        } else if(e.getActionCommand().equals("update")) {
            //修改
            //获取选择行号
            int rowNum = this.resultTb.getSelectedRow();
            if(rowNum == -1) {
                JOptionPane.showMessageDialog(this, "请选择一行");
                return ;
            }
            new Set(this, "修改学生信息", true, sm, rowNum);
            String sql = "select * from stu";
            jtableUpdate(sql, null);
        }
    }

    //更新JTable内数据
    public void jtableUpdate(String sql, String[] paras)
    {
        //创建模型
        sm = new Model();
        sm.queryStu(sql, paras);
        //更新显示
        resultTb.setModel(sm);
    }

}

二、效果预览

  • 登录界面
    在这里插入图片描述

  • 登录成功
    在这里插入图片描述

  • 添加学生信息
    在这里插入图片描述
    在这里插入图片描述

  • 查询
    在这里插入图片描述

三、所有代码下载链接

链接: ☞代码所在 提取码: ntie

录入=new JButton("录入"); 查询=new JButton("查询");删除=new JButton("删除"); 修改=new JButton("修改");显示=new JButton("显示");录入.addActionListener(new InputAct());查询.addActionListener(new InquestAct()); 修改.addActionListener(new ModifyAct());删除.addActionListener(new DeleteAct());显示.addActionListener(new ShowAct()); 修改.setEnabled(false); p1=new JPanel(); p1.add(new JLabel("学号:",JLabel.CENTER)); p1.add(学号); p2=new JPanel(); p2.add(new JLabel("姓名:",JLabel.CENTER)); p2.add(姓名); p3=new JPanel(); p3.add(new JLabel("性别:",JLabel.CENTER)); p3.add(男); p3.add(女); p4=new JPanel(); p4.add(new JLabel("专业:",JLabel.CENTER)); p4.add(专业); p5=new JPanel(); p5.add(new JLabel("年级:",JLabel.CENTER)); p5.add(年级); p6=new JPanel(); p6.add(new JLabel("出生:",JLabel.CENTER)); p6.add(出生); pv=new JPanel(); pv.setLayout(new GridLayout(6,1)); pv.add(p1); pv.add(p2); pv.add(p3); pv.add(p4); pv.add(p5); pv.add(p6); ph=new JPanel(); ph.add(录入); ph.add(查询); ph.add(修改); ph.add(删除); ph.add(显示); file=new File("学生信息.txt"); 学生散列表=new Hashtable(); if(!file.exists()){ try{ FileOutputStream out=new FileOutputStream(file); ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(学生散列表); objectOut.close(); out.close(); } catch(IOException e){} } Container con=getContentPane(); con.setLayout(new BorderLayout()); con.add(lb, BorderLayout.WEST); con.add(pv, BorderLayout.CENTER); con.add(ph, BorderLayout.SOUTH); setDefaultCloseOperation(EXIT_ON_CLOSE); setBounds(100,100,600,300); setVisible(true); Statement stmt; ResultSet rs; } public static void main(String[] args) {StudentManager ff=new StudentManager();} //添加学生信息,的Mysql操作 public class InputAct implements ActionListener{ public void actionPerformed(ActionEvent e){ 修改.setEnabled(false); String number=""; number=学号.getText(); if(number.length()>0){ if(学生散列表.containsKey(number)){ String warning="该生信息已存在,请到修改页面修改!"; JOptionPane.showMessageDialog(null,warning,"警告", JOptionPane.WARNING_MESSAGE); }//end if1 else{ String m="该生信息将被录入!"; int ok=JOptionPane.showConfirmDialog(null,m,"确认", JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE); if(ok==JOptionPane.YES_OPTION) { try { Class.forName("org.gjt.mm.mysql.Driver"); } catch(java.lang.ClassNotFoundException e11) { System.out.println("Class not found exception occir.Message is:"); System.out.println(e11.getMessage()); } try { PreparedStatement prepstmt1; Statement stmt; ResultSet rs; String url = "jdbc:mysql://localhost/test?user=root&password=0&useUnicode=true&&characterEncoding=8859_1"; String user="root"; String password="0"; Connection conn=null; try { conn=DriverManager.getConnection(url,user,password); } catch(Exception ex) { ex.printStackTrace(); } //对制定的数据库添加信息 String sql1="INSERT INTO students(student_id,name,sex,job,data,grade)"+"VALUES(?,?,?,?,?,?)"; prepstmt1=(PreparedStatement)conn.prepareStatement(sql1); prepstmt1.setString(1,学号.getText()); prepstmt1.setString(2,姓名.getText()); if(男.isSelected()){prepstmt1.setString(3,"男.getText()");} else{prepstmt1.setString(3,女.getText());} prepstmt1.setString(4,专业.getText()); prepstmt1.setString(5,年级.getText()); prepstmt1.setString(6,出生.getText()); prepstmt1.executeUpdate(); } catch(SQLException e1) { System.out.println("SQL Exception occur.Message is:"); System.out.println(e1.getMessage()); } } else{ String warning="必须输入学号!"; JOptionPane.showMessageDialog(null,warning, "警告",JOptionPane.WARNING_MESSAGE); }//end else0 } } else{ String warning="必须输入学号!"; JOptionPane.showMessageDialog(null,warning, "警告",JOptionPane.WARNING_MESSAGE); } } }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值