学生信息管理系统

connect类 

package manage;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class connect {
    private static String driverName = "com.mysql.cj.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/manage?useUnicode=true&useCharacter=utf8&useSSL=true&serverTimezone=GMT";
    private static String userName = "root";
    private static String password = "123456";
    private Connection conn;
    private Statement stmt;

    public connect() {
        try {
            Class.forName(driverName);//加载数据库
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, userName, password);//使用DriverManger获取数据库连接
    }

    public void dispose() {
        try {
            if (conn != null) {
                conn.close();
            }
            if (stmt != null) {
                stmt.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

login类:

package manage;

import java.awt.FlowLayout;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
//登录界面
public class login {
    public static void main(String args[]) {
        login l=new login();//实例化Login对象
        l.showUI();
    }

    public void showUI() {
        JFrame login=new JFrame();//创建一个JFrame容器窗口
        login.setTitle("登录系统");//设置标题
        login.setSize(340,240);//设置窗口大小
        login.setDefaultCloseOperation(3);//0-DO_NITHING窗口无法关闭;1-HIDE隐藏程序界面但没有关闭程序;2-DISPOSE自动隐藏释放窗体,继续运行应用程序;3-EXIT
        login.setLocationRelativeTo(null);//设置窗口位置相对于指定组件的位置
        login.setResizable(false);//设置窗口不可被调整大小,布尔值
        //FlowLayout fl=new FlowLayout(FlowLayout.CENTER,5,5);
        login.setLayout(new FlowLayout());//FloeLayout默认居中对齐,水平、垂直间距默认为5个单位
        login.setVisible(true);//窗体可见

        //用户名标签组件
        JLabel labname=new JLabel();
        labname.setText("用户名:");
        labname.setPreferredSize(new Dimension(60, 60));//设置最适合窗口的位置(setPreferredSize)和JLable标签组件的宽度和高度(Dimension)
        login.add(labname);//加入JFrame窗口
        JTextField textname=new JTextField();//创建一个JTextField文本框用于输入用户名
        textname.setPreferredSize(new Dimension(250, 30));
        login.add(textname);//加入到JFrame窗口中
        //密码标签组件
        JLabel labpassword=new JLabel();
        labpassword.setText("密    码:");
        labpassword.setPreferredSize(new Dimension(60, 60));
        login.add(labpassword);
        JPasswordField jp=new JPasswordField();
        jp.setPreferredSize(new Dimension(250, 30));
        login.add(jp);

        //登录按钮
        JButton button=new JButton();
        button.setText("登录");
        button.setPreferredSize(new Dimension(100, 40));
        login.add(button);
        login.setVisible(true);

        //为登录键添加鼠标事件监听器
        button.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                connect dbconn = new connect();//实例化Connect对象
                Statement stmt = null;
                ResultSet rs = null;
                try {
                    //用于创建一个 Statement 对象,封装 SQL 语句发送给数据库,通常用来执行不带参数的 SQL 语句
                    stmt = dbconn.getConnection().createStatement();
                    //执行查询;用statement类的executeQuery()方法来下达select指令以查询数据库,把数据库响应的查询结果存放在ResultSet类对象中供我们使用
                    //select * from查询在数据库中表内信息
                    rs = stmt.executeQuery("select * from user where username='"+textname.getText()+"' and password='"+jp.getText()+"'");
                    if (rs.next()) {
                        new studentSystem();//主界面
                        login.dispose();//释放登录界面窗口占用的屏幕资源
                    }else{
                        JOptionPane.showMessageDialog(null, "用户名或密码不正确!!!","提示",2);//java弹窗
                    }
                    rs.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因,显示出更深的调用信息
                } finally {
                    try {
                        if (stmt != null) {
                            stmt.close();
                        }
                        if (rs != null) {
                            rs.close();
                        }
                    } catch (SQLException e1) {
                        e1.printStackTrace();
                    }
                }
            }
        });
    }
}

MyDialog类:

package manage;

import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Map;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class MyDialog extends JDialog implements ActionListener {

    private static final long serialVersionUID = 1L;//把java对象序列化而后进行保存
    private connect dbconn = new connect();
    private static String id;
    private JPanel pCenter, pSouth;
    private JLabel nameLab, sexLab, mailLab, birthLab, phoneLab,noteLab;
    private JTextField nameText, mailText, birthText, phoneText,noteText;
    private JComboBox<String> sex;
    private JButton yesBtn, noBtn;
    public MyDialog() {}

    public MyDialog(String title, Map<String, String> info) {
        id = info.get("id");
        if("删除联系人".equals(title)) {
            deletePerson();
        }else {
            Font font = new Font("宋体", Font.BOLD, 14);
            String[] sexType = { "-请选择-","男", "女" };//下拉列表组件添加内容
            pCenter = new JPanel();
            pCenter.setLayout(new GridLayout(5, 1));
            nameLab = new JLabel("姓名:");
            sexLab = new JLabel("性别:");
            mailLab = new JLabel("学号:");
            birthLab = new JLabel("生日:");
            phoneLab = new JLabel("电话:");
            noteLab = new JLabel("政治面貌:");
            nameLab.setFont(font);
            sexLab.setFont(font);
            mailLab.setFont(font);
            birthLab.setFont(font);
            phoneLab.setFont(font);
            noteLab.setFont(font);
            nameText = new JTextField(10);
            mailText = new JTextField(10);
            birthText = new JTextField(10);
            phoneText = new JTextField(10);
            noteText = new JTextField(10);
            sex = new JComboBox<String>(sexType);

            JPanel jp1 = new JPanel();
            jp1.setLayout(new FlowLayout(FlowLayout.LEFT));
            jp1.add(nameLab);
            jp1.add(nameText);

            JPanel jp5 = new JPanel();
            jp5.setLayout(new FlowLayout(FlowLayout.LEFT));
            jp5.add(sexLab);
            jp5.add(sex);
            nameText.setText(info.get("name"));
            sex.setSelectedItem(info.get("sex"));

            JPanel jp2 = new JPanel();
            jp2.setLayout(new FlowLayout(FlowLayout.LEFT));
            jp2.add(mailLab);
            jp2.add(mailText);
            mailText.setText(info.get("number"));

            JPanel jp3 = new JPanel();
            jp3.setLayout(new FlowLayout(FlowLayout.LEFT));
            jp3.add(birthLab);
            jp3.add(birthText);
            birthText.setText(info.get("birthday"));

            JPanel jp4 = new JPanel();
            jp4.setLayout(new FlowLayout(FlowLayout.LEFT));
            jp4.add(phoneLab);
            jp4.add(phoneText);
            phoneText.setText(info.get("telephone"));

            JPanel jp6 = new JPanel();
            jp6.setLayout(new FlowLayout(FlowLayout.LEFT));
            jp6.add(noteLab);
            jp6.add(noteText);
            noteText.setText(info.get("note"));

            pCenter.add(jp1);
            pCenter.add(jp5);
            pCenter.add(jp2);
            pCenter.add(jp3);
            pCenter.add(jp4);
            pCenter.add(jp6);

            pSouth = new JPanel();
            yesBtn = new JButton("以数据库保存");
            yesBtn.addActionListener(this);
            noBtn = new JButton("以文件保存");
            noBtn.addActionListener(this);
            pSouth.add(yesBtn);
            pSouth.add(noBtn);

            this.add(pCenter, "Center");
            this.add(pSouth, "South");

            this.setTitle(title);
            this.setSize(400, 450);
            this.setLocationRelativeTo(null);
            this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        }
    }

    public void actionPerformed(ActionEvent e) {//系统功能按钮监听器
        if (e.getSource() == yesBtn) {
            if (this.getTitle().equals("新建学生信息")) {
                dbinsertPerson();
            } else if (this.getTitle().equals("修改学生信息")) {
                updatePerson();
            } else if (this.getTitle().equals("删除学生信息")) {
                deletePerson();
            }
        } else if (e.getSource() == noBtn) {
            fileinsertPerson();
        }
    }

    public void insertPerson() {
        if (nameText.getText().isEmpty()) {
            JOptionPane.showMessageDialog(null, "请输入姓名!");//提示弹窗
            return;
        }
    }

    public void dbinsertPerson(){//将新建的学生信息写入数据库的表中
        boolean flag=true;
        String sql = "insert into student(name, sex, telephone, number, birthday, note)value(?,?,?,?,?,?)";
        try {
            //PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能
            PreparedStatement pstmt = dbconn.getConnection().prepareStatement(sql);
            pstmt.setString(1, nameText.getText());
            pstmt.setString(2, (String) sex.getSelectedItem());
            pstmt.setString(3, phoneText.getText());
            pstmt.setString(4, mailText.getText());
            pstmt.setString(5, birthText.getText());
            pstmt.setString(6, noteText.getText());
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "新建学生信息失败!");//提示弹窗
            flag = false;
        } finally {
            dispose();
            if (flag) {
                JOptionPane.showMessageDialog(null, "新建学生信息成功!");//提示弹窗
            }
            studentSystem.flashInfo();//将数据写入数据库
            DefaultTableModel model = new DefaultTableModel(studentSystem.info, studentSystem.column);

            studentSystem.infoTable.setModel(model);
            TableColumn column1 = studentSystem.infoTable.getColumnModel().getColumn(0);
            column1.setMaxWidth(40);
            column1.setMinWidth(40);

            TableColumn column3 = studentSystem.infoTable.getColumnModel().getColumn(2);
            column3.setMaxWidth(40);
            column3.setMinWidth(40);
        }
    }

    public void fileinsertPerson(){//将新建的学生信息写入文件中
        boolean flag=true;
        try {
            StringBuffer sbf=new StringBuffer();
            sbf.append(nameText.getText()).append(" ")
                    .append((String) sex.getSelectedItem()).append(" ")
                    .append(phoneText.getText()).append(" ")
                    .append(mailText.getText()).append(" ")
                    .append(birthText.getText()).append(" ")
                    .append(noteText.getText());
            File file = new File("information.txt");
            FileOutputStream fos = null;
            if(!file.exists()){
                file.createNewFile();//如果文件不存在,就创建该文件
                fos = new FileOutputStream(file);//首次写入获取
            }else{
                //如果文件已存在,就在文件末尾追加写入
                fos = new FileOutputStream(file,true);
            }
            OutputStreamWriter osw = new OutputStreamWriter(fos, "gbk");//指定以UTF-8格式写入文件
            osw.write(sbf.toString());
            osw.write("\r\n");
            osw.close();
        } catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "新建学生信息失败!");//提示弹窗
            flag = false;
        } finally {
            dispose();
            if (flag) {
                JOptionPane.showMessageDialog(null, "新建学生信息成功!");//提示弹窗
            }
        }
    }

    public void deletePerson() {//删除信息
        String sql = "delete from student where id=?";

        try {
            PreparedStatement pstmt = dbconn.getConnection().prepareStatement(sql);
            pstmt.setString(1, id);
            pstmt.executeUpdate();
        }
        catch (SQLException e) {
            e.printStackTrace();
        } finally {
            dispose();
            studentSystem.flashInfo();
            DefaultTableModel model = new DefaultTableModel(studentSystem.info, studentSystem.column);
            JOptionPane.showMessageDialog(null, "删除成功!");
            studentSystem.infoTable.setModel(model);
            TableColumn column1 = studentSystem.infoTable.getColumnModel().getColumn(0);
            column1.setMaxWidth(40);
            column1.setMinWidth(40);

            TableColumn column3 = studentSystem.infoTable.getColumnModel().getColumn(2);
            column3.setMaxWidth(40);
            column3.setMinWidth(40);
        }
    }

    public void updatePerson() {//修改信息
        if (nameText.getText().isEmpty()) {
            JOptionPane.showMessageDialog(null, "请输入姓名!");//提示弹窗
        }
        String sql = "update student set name=?,sex=?,telephone=?,number=?,birthday=?,note=? where id=?";

        try {
            PreparedStatement pstmt = dbconn.getConnection().prepareStatement(sql);
            pstmt.setString(1, nameText.getText());
            pstmt.setString(2, (String) sex.getSelectedItem());
            pstmt.setString(3, phoneText.getText());
            pstmt.setString(4, mailText.getText());
            pstmt.setString(5, birthText.getText());
            pstmt.setString(6, noteText.getText());
            pstmt.setString(7, id);
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            dispose();
            studentSystem.flashInfo();
            DefaultTableModel model = new DefaultTableModel(studentSystem.info, studentSystem.column);

            studentSystem.infoTable.setModel(model);
            TableColumn column1 = studentSystem.infoTable.getColumnModel().getColumn(0);
            column1.setMaxWidth(40);
            column1.setMinWidth(40);

            TableColumn column3 = studentSystem.infoTable.getColumnModel().getColumn(2);
            column3.setMaxWidth(40);
            column3.setMinWidth(40);
        }
    }
}

studentSystem类:

package manage;

import java.awt.*;
import java.awt.event.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class studentSystem extends JFrame implements ActionListener {//继承自JFrame使得这个类成为一个窗体,可以对窗体的属性进行扩展并且可以定义自己需要的特殊操作方法
    private static final long serialVersionUID = 1L;//把java对象序列化而后进行保存
    private Map<String, String> PersonInfo;
    public static Vector<Vector<String>> info = new Vector<Vector<String>>();
    private JLabel keyLab;
    private JButton searchBtn, createBtn, updateBtn, deleteBtn,exitBtn;
    public static JTable infoTable;
    private JTextField keyText;
    public static Vector<String> column;

    public studentSystem() {
        PersonInfo = new HashMap<String, String>();
        Font font = new Font("宋体", Font.PLAIN, 15);//设置字体,类型和大小;Front.PLAIN普通,Front.BLOD加粗,Front.ITALIC斜体
        JPanel pNorth = new JPanel();
        pNorth.setLayout(new FlowLayout(FlowLayout.RIGHT));
        keyLab = new JLabel("请输入关键字:");
        keyText = new JTextField(10);//搜索文本框

        //创建系统功能按钮
        searchBtn = new JButton("搜索学生信息");
        createBtn = new JButton("新增学生信息");
        updateBtn = new JButton("修改学生信息");
        deleteBtn = new JButton("删除学生信息");
        exitBtn = new JButton("退出系统");

        //设置字体大小
        keyLab.setFont(font);
        searchBtn.setFont(font);
        createBtn.setFont(font);
        updateBtn.setFont(font);
        deleteBtn.setFont(font);
        exitBtn.setFont(font);

        //添加监听器
        searchBtn.addActionListener(this);
        createBtn.addActionListener(this);
        updateBtn.addActionListener(this);
        deleteBtn.addActionListener(this);
        exitBtn.addActionListener(this);

        //在JPanel面板的上方加入搜索功能所需的一系列组件
        pNorth.add(keyLab);
        pNorth.add(keyText);
        pNorth.add(searchBtn);

        //在JPanel面板下方加入系统功能组件
        JPanel pSouth = new JPanel();
        pSouth.add(createBtn);
        pSouth.add(updateBtn);
        pSouth.add(deleteBtn);
        pSouth.add(exitBtn);

        //表格数据
        column = new Vector<String>();
        column.add("编号");
        column.add("姓名");
        column.add("性别");
        column.add("电话");
        column.add("学号");
        column.add("生日");
        column.add("政治面貌");
        flashInfo();//将数据存入数据库
        infoTable = new JTable(info, column);
        TableColumn column1 = infoTable.getColumnModel().getColumn(0);
        column1.setPreferredWidth(30);//自适应

        TableColumn column3 = infoTable.getColumnModel().getColumn(2);
        column3.setPreferredWidth(30);//自适应

        JScrollPane pCenter = new JScrollPane(infoTable);//创建垂直滚动面板
        this.add(pNorth, "North");
        this.add(pCenter, "Center");
        this.add(pSouth, "South");

        this.setTitle("学生信息管理系统");
        this.setSize(800, 450);
        this.setVisible(true);
        this.setLocationRelativeTo(null);
        this.setResizable(false);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void flashInfo() {
        connect dbconn = new connect();
        Statement stmt = null;
        ResultSet rs = null;
        info.clear();
        try {
            stmt = dbconn.getConnection().createStatement();//创建一个 Statement 对象,封装 SQL 语句发送给数据库
            rs = stmt.executeQuery("select * from student");//下达命令执行查询语句并且存放在ResultSet对象中
            while (rs.next()) {
                Vector<String> row = new Vector<String>();
                row.add(rs.getString(1));
                row.add(rs.getString(2));
                row.add(rs.getString(3));
                row.add(rs.getString(4));
                row.add(rs.getString(5));
                row.add(rs.getString(6));
                row.add(rs.getString(7));
                info.add(row);
            }
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                }
                if (rs != null) {
                    rs.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public void actionPerformed(ActionEvent e) {
        int rowNum = infoTable.getSelectedRow();//返回第一个选定行的索引
        if (rowNum != -1) {
            PersonInfo = new HashMap<String, String>();
            //将值插入HasMap中
            PersonInfo.put("id", (String) infoTable.getValueAt(rowNum, 0));//返回表格row和column位置的单元格值
            PersonInfo.put("name", (String) infoTable.getValueAt(rowNum, 1));
            PersonInfo.put("sex", (String) infoTable.getValueAt(rowNum, 2));
            PersonInfo.put("telephone", (String) infoTable.getValueAt(rowNum, 3));
            PersonInfo.put("number", (String) infoTable.getValueAt(rowNum, 4));
            PersonInfo.put("birthday", (String) infoTable.getValueAt(rowNum, 5));
            PersonInfo.put("note", (String) infoTable.getValueAt(rowNum, 6));
        }

        if (e.getSource() == searchBtn) {//搜索
            String keyStr = keyText.getText();
            searchInfo(keyStr);
        } else if (e.getSource() == createBtn) {//新建
            MyDialog InsertPane = new MyDialog("新建学生信息", new HashMap<String, String>());
            InsertPane.setVisible(true);
        } else if (e.getSource() == updateBtn) {//修改
            if (rowNum == -1) {
                JOptionPane.showMessageDialog(null, "请选择学生");//提示弹窗
            }
            MyDialog UpdatePane = new MyDialog("修改学生信息", PersonInfo);
            UpdatePane.setVisible(true);
        } else if (e.getSource() == deleteBtn) {//删除
            if (rowNum == -1) {
                JOptionPane.showMessageDialog(null, "请选择学生");//提示弹窗
            }
            MyDialog DeletePane = new MyDialog("删除学生信息", PersonInfo);
            DeletePane.setVisible(true);
        }else if(e.getSource()==exitBtn) {//退出
            this.setVisible(false);
        }
    }

    protected void searchInfo(String key) {//搜索
        connect dbconn = new connect();
        Statement stmt = null;
        ResultSet rs = null;
        try {
            stmt = dbconn.getConnection().createStatement();
            String sql = "select * from student where name like'%" + key + "%'";
            rs = stmt.executeQuery(sql);
            info.clear();
            while (rs.next()) {
                Vector<String> row = new Vector<String>();//创建自增长数组
                row.add(rs.getString(1));//向Vector中添加值
                row.add(rs.getString(2));
                row.add(rs.getString(3));
                row.add(rs.getString(4));
                row.add(rs.getString(5));
                row.add(rs.getString(6));
                row.add(rs.getString(7));
                info.add(row);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                }
                if (rs != null) {
                    rs.close();
                }

            } catch (SQLException e) {
                e.printStackTrace();
            }
            DefaultTableModel model = new DefaultTableModel(studentSystem.info, studentSystem.column);//构造一个 DefaultTableModel,并通过将 data 和 columnNames 传递到 setDataVector 方法来初始化该表。
            studentSystem.infoTable.setModel(model);//数据绑定
            TableColumn column1 = studentSystem.infoTable.getColumnModel().getColumn(0);
            column1.setMaxWidth(40);
            column1.setMinWidth(40);

            TableColumn column3 = studentSystem.infoTable.getColumnModel().getColumn(2);
            column3.setMaxWidth(40);
            column3.setMinWidth(40);
        }
    }

    public static void main(String[] args) {
        new studentSystem();
    }
}

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值