【开源分享】java+swing+mysql简单学生信息管理系统设计与实现

news2024/9/22 23:29:09

个人主页:程序员杨工

个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验

博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战

文末有本人名片,希望和大家一起共同努力,一起进步,顶峰相见。

源码下载见文末(本系统源码开源免费、无套路)。

开发背景:

最近好多小伙伴们找我咨询关于java、mysql代码方面的各种问题,大家一般都是刚接触编程,因此很容易遇到各种问题,在完成老师给定的小作业或者数据库设计的时候,往往无从下手。比如如何去进行swing-gui的界面设计,如何在java代码中连接数据库,如何使用jdbc去操作数据库进行增删改查数据操作。我们今天就用一个学生信息管理案例的形式,去简单介绍一下如何完成一个增删改查的小功能。

系统亮点:

简单学生信息管理系统,功能比较简单,就是一个学生信息的增删改查。

需求分析:

本系统为java+swing+mysql的简单学生信息管理系统,希望功能可以做到如下:按学号或者姓名查询学生信息;输入学生基本信息之后,点击添加可以添加新的学生;选中某一行记录之后,点击修改,可以修改学生信息;选中某行之后,点击删除,可以删除学生信息。此外,由于学号具有唯一性,因此添加学生时,需要保证学号唯一验证。

开发工具:

Jdk环境:jdk1.8

数据库版本:MySQL5.6或以上

开发工具:eclipse(Idea)

开发技术:

Java Swing、MySQL与JDBC之间的关联主要体现在Java桌面应用程序开发中,它们共同协作以实现数据的可视化展示、用户交互以及数据的存储与管理。以下是它们之间的关联和介绍:

Java Swing是Java的一个图形用户界面工具包,它提供了一套丰富的GUI组件用于构建复杂的桌面应用程序。Swing组件包括按钮、文本框、标签、菜单、表格等,这些组件允许开发者创建具有图形界面的应用程序,使用户能够通过点击、输入等方式与应用程序进行交互。

MySQL是一个流行的开源关系数据库管理系统(RDBMS),它使用SQL(结构化查询语言)来管理或操作数据库中的数据。MySQL数据库支持大型数据库,具有高性能、可靠性和易用性等特点,广泛应用于Web应用程序和桌面应用程序中。MySQL数据库能够存储、检索、更新和删除数据,为应用程序提供数据支持。

JDBC(Java Database Connectivity)是Java语言中用于与关系型数据库进行交互的API。它提供了一组类和接口,允许Java应用程序连接到数据库,执行SQL语句,并处理结果。JDBC使得Java应用程序能够以一种统一的方式与不同的数据库进行交互,而不需要针对每种数据库编写特定的代码。JDBC还提供了事务管理、批处理操作和元数据访问等功能,增强了数据库操作的灵活性和效率。

数据库设计:

数据库设计很简单,为了保存学生基本信息,设计了一个学生表,字段如下:

DROP TABLE IF EXISTS `t_student`;
CREATE TABLE `t_student` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生ID',
  `username` varchar(32) DEFAULT NULL COMMENT '学号',
  `nickname` varchar(32) DEFAULT NULL COMMENT '姓名',
  `sex` int(11) DEFAULT NULL COMMENT '性别:0男,1女',
  `birthday` varchar(32) DEFAULT NULL COMMENT '生日',
  `telephone` varchar(32) DEFAULT NULL COMMENT '电话',
  `email` varchar(32) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='学生表';

系统实现: 

系统功能包含学生查询、添加、修改、删除。这里我们简单实现,在一个界面上完成这些功能,如下:

学生管理

​添加

​删除

 代码实现: 

实体类

package com.xiaoniucr.entity;

import java.io.Serializable;
import java.util.Date;

/**
 * 用户信息
 */
public class Student implements Serializable{
	
	/**
	 * ID
	 */
	private Integer id;
	
	
	/**
	 * 账号
	 */
	private String username;
	
	
	
	/**
	 * 姓名
	 */
	private String nickname;
	
		
	/**
	 * 性别: 0男,1女
	 */
	private Integer sex;
	
	
	/**
	 * 生日
	 */
	private String birthday;

	
	/**
	 * 电话
	 */
	private String telephone;
	
	
	/**
	 * 邮箱
	 */
	private String email;
	

	public Integer getId() {
		return id;
	}


	public void setId(Integer id) {
		this.id = id;
	}


	public String getUsername() {
		return username;
	}


	public void setUsername(String username) {
		this.username = username;
	}


	public String getNickname() {
		return nickname;
	}


	public void setNickname(String nickname) {
		this.nickname = nickname;
	}


	public Integer getSex() {
		return sex;
	}


	public void setSex(Integer sex) {
		this.sex = sex;
	}


	public String getBirthday() {
		return birthday;
	}


	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}


	public String getTelephone() {
		return telephone;
	}


	public void setTelephone(String telephone) {
		this.telephone = telephone;
	}


	public String getEmail() {
		return email;
	}


	public void setEmail(String email) {
		this.email = email;
	}
	

}

数据库操作Dao

package com.xiaoniucr.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.xiaoniucr.entity.Student;
import com.xiaoniucr.utils.JDBCUtils;

/**
 * 学生数据库操作
 *
 */
public class StudentDao {

	/**
	 * 查询学生列表
	 * 
	 * @param username
	 *            账号
	 * @param nickname
	 *            姓名
	 * @return
	 */
	public List<Student> queryList(String username, String nickname) {

		List<Student> list = new ArrayList<Student>();
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			con = JDBCUtils.getConnection();
			List<Object> params = new ArrayList<>();
			StringBuffer sb = new StringBuffer("select * from t_student where 1=1 ");
			if (nickname != null && !"".equals(username)) {
				sb.append("and username like ? ");
				params.add("%" + username + "%");
			}
			if (nickname != null && !"".equals(nickname)) {
				sb.append("and nickname like ? ");
				params.add("%" + nickname + "%");
			}
			pstmt = con.prepareStatement(sb.toString());
			if (params != null && params.size() > 0) {
				for (int i = 0; i < params.size(); i++) {
					pstmt.setObject(i + 1, params.get(i));
				}
			}
			rs = pstmt.executeQuery();
			while (rs.next()) {
				Student student = new Student();
				student.setId(rs.getInt("id"));
				student.setUsername(rs.getString("username"));
				student.setNickname(rs.getString("nickname"));
				student.setSex(rs.getInt("sex"));
				student.setBirthday(rs.getString("birthday"));
				student.setTelephone(rs.getString("telephone"));
				student.setEmail(rs.getString("email"));
				list.add(student);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCUtils.close(con, pstmt, rs);
		}
		return list;

	}

	/**
	 * 保存学生信息
	 * 
	 * @param user
	 *            学生信息
	 * @return
	 */
	public boolean save(Student student) {

		Connection con = null;
		String sql = "insert into t_student(username,nickname,sex,birthday,telephone,email) values(?,?,?,?,?,?)";
		PreparedStatement pstmt = null;
		try {
			con = JDBCUtils.getConnection();
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, student.getUsername());
			pstmt.setString(2, student.getNickname());
			pstmt.setInt(3, student.getSex());
			pstmt.setString(4, student.getBirthday());
			pstmt.setString(5, student.getTelephone());
			pstmt.setString(6, student.getEmail());
			int rows = pstmt.executeUpdate();
			if (rows > 0) {
				return true;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCUtils.close(con, pstmt, null);
		}
		return false;

	}

	/**
	 * 修改学生信息
	 * 
	 * @param user
	 *            学生信息
	 * @return
	 */
	public boolean update(Student student) {

		Connection con = null;
		String sql = "update t_student set username=?,nickname=?,sex=?,birthday=?,telephone=?,email=? where id=?";
		PreparedStatement pstmt = null;
		try {
			con = JDBCUtils.getConnection();
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, student.getUsername());
			pstmt.setString(2, student.getNickname());
			pstmt.setInt(3, student.getSex());
			pstmt.setString(4, student.getBirthday());
			pstmt.setString(5, student.getTelephone());
			pstmt.setString(6, student.getEmail());
			pstmt.setInt(7, student.getId());
			int rows = pstmt.executeUpdate();
			if (rows > 0) {
				return true;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCUtils.close(con, pstmt, null);
		}
		return false;

	}

	/**
	 * 删除学生信息
	 * 
	 * @param id
	 *            主键ID
	 * @return
	 */
	public boolean delete(int id) {

		Connection con = null;
		String sql = "delete from t_student where id=?";
		PreparedStatement pstmt = null;
		try {
			con = JDBCUtils.getConnection();
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, id);
			int rows = pstmt.executeUpdate();
			if (rows > 0) {
				return true;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCUtils.close(con, pstmt, null);
		}
		return false;

	}

	/**
	 * 根据ID查询学生
	 * 
	 * @param id
	 *            主键ID
	 * @return
	 */
	public Student getById(int id) {

		Student student = null;
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			con = JDBCUtils.getConnection();
			String sql = "select * from t_student where id = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setObject(1, id);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				student = new Student();
				student.setId(rs.getInt("id"));
				student.setUsername(rs.getString("username"));
				student.setNickname(rs.getString("nickname"));
				student.setSex(rs.getInt("sex"));
				student.setBirthday(rs.getString("birthday"));
				student.setTelephone(rs.getString("telephone"));
				student.setEmail(rs.getString("email"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCUtils.close(con, pstmt, rs);
		}
		return student;

	}
	
	/**
	 * 根据账号查询学生
	 * 
	 * @param username
	 * @return
	 */
	public Student getByUsername(String username) {

		Student student = null;
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			con = JDBCUtils.getConnection();
			String sql = "select * from t_student where username = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, username);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				student = new Student();
				student.setId(rs.getInt("id"));
				student.setUsername(rs.getString("username"));
				student.setNickname(rs.getString("nickname"));
				student.setSex(rs.getInt("sex"));
				student.setBirthday(rs.getString("birthday"));
				student.setTelephone(rs.getString("telephone"));
				student.setEmail(rs.getString("email"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCUtils.close(con, pstmt, rs);
		}
		return student;

	}


}

 界面设计:

package com.xiaoniucr.view;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

import com.xiaoniucr.dao.StudentDao;
import com.xiaoniucr.entity.Student;

import sun.swing.table.DefaultTableCellHeaderRenderer;

/**
 * 学生管理
 * 
 * @author Lenovo
 *
 */
public class StudentView extends JFrame {

	private JPanel contentPane;
	private JTable table;
	private JTextField usernameStrText, nicknameStrText;
	private JLabel usernameStrLabel, nicknameStrLabel;
	private StudentDao studentDao = new StudentDao();
	private JTextField usernameText;
	private JTextField nicknameText;
	private JLabel sexLabel;
	private JTextField birthdayText;
	private JTextField telephoneText;
	private JTextField emailText;
	private JRadioButton maleRadio,femaleRadio;
	private JButton searchBtn, addBtn, updateBtn, deleteBtn;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					StudentView frame = new StudentView();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public StudentView() {

		this.setTitle("学生管理");
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.setBounds(100, 100, 969, 440);
		this.setLocationRelativeTo(null);

		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(null);
		setContentPane(contentPane);

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(6, 55, 635, 324);
		contentPane.add(scrollPane);
		
		usernameStrLabel = new JLabel("学号:");
		usernameStrLabel.setBounds(6, 14, 43, 30);
		contentPane.add(usernameStrLabel);

		usernameStrText = new JTextField();
		usernameStrText.setBounds(45, 15, 107, 30);
		usernameStrText.setColumns(10);
		contentPane.add(usernameStrText);

		nicknameStrLabel = new JLabel("姓名:");
		nicknameStrLabel.setBounds(162, 14, 52, 30);
		contentPane.add(nicknameStrLabel);

		nicknameStrText = new JTextField();
		nicknameStrText.setBounds(197, 15, 107, 30);
		contentPane.add(nicknameStrText);
		nicknameStrText.setColumns(10);

		searchBtn = new JButton("查询");
		searchBtn.setBackground(Color.LIGHT_GRAY);
		searchBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				clearData();
				getData(usernameStrText.getText(), nicknameStrText.getText());
			}
		});
		searchBtn.setBounds(314, 15, 65, 30);
		contentPane.add(searchBtn);

		Object[] columns = { "ID", "学号", "姓名", "性别", "生日", "电话", "邮箱" };// 字段
		Object[][] data = null;// 需要展示的数据,一般是二维数组
		DefaultTableModel model = new DefaultTableModel(data, columns);
		table = new JTable(model);
		table.setRowHeight(30);

		table.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(0);
		table.getTableHeader().getColumnModel().getColumn(0).setMinWidth(0);
		table.getTableHeader().getColumnModel().getColumn(0).setPreferredWidth(0);

		DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();// 设置table内容居中
		tcr.setHorizontalAlignment(SwingConstants.CENTER);// 这句和上句作用一样
		tcr.setVerticalAlignment(SwingConstants.CENTER);
		table.setDefaultRenderer(Object.class, tcr);
		// 设置表头居中显示
		DefaultTableCellHeaderRenderer hr = new DefaultTableCellHeaderRenderer();
		hr.setHorizontalAlignment(JLabel.CENTER);
		table.getTableHeader().setDefaultRenderer(hr);
		table.getTableHeader().setFont(new Font("黑体", Font.PLAIN, 14));
		table.getTableHeader().setPreferredSize(new Dimension(1, 30));
		table.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub
				if (e.getClickCount() == 1) {
					int row = table.getSelectedRow();
					int id = Integer.valueOf(table.getValueAt(row, 0).toString());
					Student student = studentDao.getById(id);
					usernameText.setText(student.getUsername());
					nicknameText.setText(student.getNickname());
					if(student.getSex() == 0){
						maleRadio.setSelected(true);
						femaleRadio.setSelected(false);
					}else{
						maleRadio.setSelected(false);
						femaleRadio.setSelected(true);
					}
					birthdayText.setText(student.getBirthday());
					telephoneText.setText(student.getTelephone());
					emailText.setText(student.getEmail());
				}
			}
		});


		getData(null, null);
		scrollPane.setViewportView(table);


		JLabel usernameLabel = new JLabel("学号:");
		usernameLabel.setBounds(662, 55, 54, 30);
		contentPane.add(usernameLabel);

		usernameText = new JTextField();
		usernameText.setBounds(699, 56, 216, 30);
		contentPane.add(usernameText);
		usernameText.setColumns(10);

		JLabel nicknameLabel = new JLabel("姓名:");
		nicknameLabel.setBounds(662, 106, 54, 30);
		contentPane.add(nicknameLabel);

		nicknameText = new JTextField();
		nicknameText.setBounds(699, 107, 216, 30);
		contentPane.add(nicknameText);
		nicknameText.setColumns(10);

		sexLabel = new JLabel("性别:");
		sexLabel.setBounds(662, 152, 54, 30);
		contentPane.add(sexLabel);

		maleRadio = new JRadioButton("男");
		maleRadio.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				maleRadio.setSelected(true);
				femaleRadio.setSelected(false);
			}
		});
		maleRadio.setSelected(true);
		maleRadio.setBounds(699, 152, 65, 30);
		contentPane.add(maleRadio);

		femaleRadio = new JRadioButton("女");
		femaleRadio.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				maleRadio.setSelected(false);
				femaleRadio.setSelected(true);
			}
		});
		femaleRadio.setBounds(766, 152, 65, 30);
		contentPane.add(femaleRadio);

		JLabel birthdayLabel = new JLabel("生日:");
		birthdayLabel.setBounds(662, 192, 54, 30);
		contentPane.add(birthdayLabel);

		birthdayText = new JTextField();
		birthdayText.setColumns(10);
		birthdayText.setBounds(699, 193, 216, 30);
		contentPane.add(birthdayText);

		JLabel telephoneLabel = new JLabel("电话:");
		telephoneLabel.setBounds(662, 241, 54, 30);
		contentPane.add(telephoneLabel);

		telephoneText = new JTextField();
		telephoneText.setBounds(699, 242, 216, 30);
		contentPane.add(telephoneText);
		telephoneText.setColumns(10);

		JLabel emailLabel = new JLabel("邮箱:");
		emailLabel.setBounds(662, 288, 54, 30);
		contentPane.add(emailLabel);

		emailText = new JTextField();
		emailText.setBounds(699, 289, 216, 30);
		contentPane.add(emailText);
		emailText.setColumns(10);

		addBtn = new JButton("添加");
		addBtn.setBackground(Color.LIGHT_GRAY);
		addBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String username = usernameText.getText();
				String nickname = nicknameText.getText();
				Integer sex = 0;
				//获取性别
				for(Component c : contentPane.getComponents()){
		            if(c instanceof JRadioButton){
		                if(((JRadioButton) c).isSelected()){
		                	String text = ((JRadioButton)c).getText();
		                	if("男".equals(text)){
		                		sex = 0;
		                	}else{
		                		sex = 1;
		                	}
		                }
		            }
		        }
				String birthday = birthdayText.getText();
				String telephone = telephoneText.getText();
				String email = emailText.getText();
				if(username == null || "".equals(username)){
					JOptionPane.showMessageDialog(contentPane, "请输入学号", "系统提示",JOptionPane.WARNING_MESSAGE);
					return;
				}
				if(nickname == null || "".equals(nickname)){
					JOptionPane.showMessageDialog(contentPane, "请输入姓名", "系统提示",JOptionPane.WARNING_MESSAGE);
					return;
				}
				if(birthday == null || "".equals(birthday)){
					JOptionPane.showMessageDialog(contentPane, "请输入生日", "系统提示",JOptionPane.WARNING_MESSAGE);
					return;
				}
				if(telephone == null || "".equals(telephone)){
					JOptionPane.showMessageDialog(contentPane, "请输入电话", "系统提示",JOptionPane.WARNING_MESSAGE);
					return;
				}
				if(email == null || "".equals(email)){
					JOptionPane.showMessageDialog(contentPane, "请输入邮箱", "系统提示",JOptionPane.WARNING_MESSAGE);
					return;
				}
				Student student = studentDao.getByUsername(username);
				if(student != null){
					JOptionPane.showMessageDialog(contentPane, "学号已存在", "系统提示",JOptionPane.WARNING_MESSAGE);
					return;
				}
				student = new Student();
				student.setUsername(username);
				student.setNickname(nickname);
				student.setSex(sex);
				student.setBirthday(birthday);
				student.setTelephone(telephone);
				student.setEmail(email);
				boolean flag = studentDao.save(student);
				if(flag){
					JOptionPane.showMessageDialog(contentPane, "保存成功!");
					clearData();
					getData(null, null);
				}else{
					JOptionPane.showMessageDialog(contentPane, "保存失败!", "系统提示",JOptionPane.WARNING_MESSAGE);
					return;
				}
			}
		});
		addBtn.setBounds(699, 341, 65, 30);
		contentPane.add(addBtn);

		updateBtn = new JButton("修改");
		updateBtn.setBackground(Color.LIGHT_GRAY);
		updateBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 获取选中行
				int row = table.getSelectedRow();
				if (row < 0) {
					JOptionPane.showMessageDialog(contentPane, "请选择一条记录", "系统提示", JOptionPane.WARNING_MESSAGE);
					return;
				}
				int id = Integer.valueOf(table.getValueAt(row, 0).toString());
				String username = usernameText.getText();
				String nickname = nicknameText.getText();
				Integer sex = 0;
				//获取性别
				for(Component c : contentPane.getComponents()){
		            if(c instanceof JRadioButton){
		                if(((JRadioButton) c).isSelected()){
		                	String text = ((JRadioButton)c).getText();
		                	if("男".equals(text)){
		                		sex = 0;
		                	}else{
		                		sex = 1;
		                	}
		                }
		            }
		        }
				String birthday = birthdayText.getText();
				String telephone = telephoneText.getText();
				String email = emailText.getText();
				if(username == null || "".equals(username)){
					JOptionPane.showMessageDialog(contentPane, "请输入学号", "系统提示",JOptionPane.WARNING_MESSAGE);
					return;
				}
				if(nickname == null || "".equals(nickname)){
					JOptionPane.showMessageDialog(contentPane, "请输入姓名", "系统提示",JOptionPane.WARNING_MESSAGE);
					return;
				}
				if(birthday == null || "".equals(birthday)){
					JOptionPane.showMessageDialog(contentPane, "请输入生日", "系统提示",JOptionPane.WARNING_MESSAGE);
					return;
				}
				if(telephone == null || "".equals(telephone)){
					JOptionPane.showMessageDialog(contentPane, "请输入电话", "系统提示",JOptionPane.WARNING_MESSAGE);
					return;
				}
				if(email == null || "".equals(email)){
					JOptionPane.showMessageDialog(contentPane, "请输入邮箱", "系统提示",JOptionPane.WARNING_MESSAGE);
					return;
				}
				Student student = studentDao.getById(id);
				if(!student.getUsername().equals(username)){
					Student exist = studentDao.getByUsername(username);
					if(exist != null){
						JOptionPane.showMessageDialog(contentPane, "学号已存在", "系统提示",JOptionPane.WARNING_MESSAGE);
						return;
					}
				}
				student.setUsername(username);
				student.setNickname(nickname);
				student.setSex(sex);
				student.setBirthday(birthday);
				student.setTelephone(telephone);
				student.setEmail(email);
				boolean flag = studentDao.update(student);
				if(flag){
					JOptionPane.showMessageDialog(contentPane, "保存成功!");
					clearData();
					getData(null, null);
				}else{
					JOptionPane.showMessageDialog(contentPane, "保存失败!", "系统提示",JOptionPane.WARNING_MESSAGE);
					return;
				}
			}
		});
		updateBtn.setBounds(775, 341, 65, 30);
		contentPane.add(updateBtn);

		deleteBtn = new JButton("删除");
		deleteBtn.setBackground(Color.LIGHT_GRAY);
		deleteBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 获取选中行
				int row = table.getSelectedRow();
				if (row < 0) {
					JOptionPane.showMessageDialog(contentPane, "请选择一条记录", "系统提示", JOptionPane.WARNING_MESSAGE);
					return;
				}
				int result = JOptionPane.showConfirmDialog(contentPane, "确定删除此记录吗?", "提示", JOptionPane.YES_NO_OPTION);
				if (result == 0) {
					int id = Integer.valueOf(table.getValueAt(row, 0).toString());
					boolean flag = studentDao.delete(id);
					if (flag) {
						JOptionPane.showMessageDialog(contentPane, "删除成功!");
						clearData();
						getData(null, null);
					} else {
						JOptionPane.showMessageDialog(contentPane, "操作失败", "系统提示", JOptionPane.WARNING_MESSAGE);

					}
				}
				return;
			}
		});
		deleteBtn.setBounds(850, 341, 65, 30);
		contentPane.add(deleteBtn);

	}

	// 填充表格数据
	public void getData(String username, String nickname) {
		List<Student> list = studentDao.queryList(username, nickname);
		DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
		tableModel.setRowCount(0);// 清除原有行
		// 填充数据
		for (Student item : list) {
			String[] arr = new String[7];
			arr[0] = item.getId() + "";
			arr[1] = item.getUsername();
			arr[2] = item.getNickname();
			arr[3] = item.getSex() == 0 ? "男" : "女";
			arr[4] = item.getBirthday();
			arr[5] = item.getTelephone();
			arr[6] = item.getEmail();
			// 添加数据到表格
			tableModel.addRow(arr);
		}
	}
	
	
	private void clearData(){
		usernameText.setText("");
		nicknameText.setText("");
		maleRadio.setSelected(true);
		femaleRadio.setSelected(false);
		birthdayText.setText("");
		telephoneText.setText("");
		emailText.setText("");
	}
}

 数据库工具类:

package com.xiaoniucr.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 数据库连接
 *
 */
public class JDBCUtils {

	//数据库连接地址
	public static String URL = "jdbc:mysql://localhost:3306/db_student?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8";
	//数据库驱动
	public static String DRIVER = "com.mysql.cj.jdbc.Driver";
	//数据库用户名
	public static String USER = "root";
	//数据库密码
	public static String PWD = "123456";

	/*
	 * 数据库连接
	 */
	public static Connection getConnection() {

		Connection con = null;
		try {
			Class.forName(DRIVER);
			con = DriverManager.getConnection(URL, USER, PWD);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return con;
	}

	/**
	 * 关闭连接资源
	 * @param con	连接对象
	 * @param pstmt	预编译对象
	 * @param rs	结果集
	 */
	public static void close(Connection con, PreparedStatement pstmt, ResultSet rs) {

		try {
			if (rs != null){
				rs.close();
			}
			if (pstmt != null){
				pstmt.close();
			}
			if (con != null){
				con.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

}

总结:

java+swing+mysql简单学生信息管理,系统非常简单,就是一个学生信息的增删改查和模块,对于初学者具有较强的学习意义,有需要可以下载参考。本人具备多年软件开发经验,有问题可以共同探讨。

 源码下载:

开源分享java+swing+mysql简单学生信息管理系统(GUI图形界面)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2078684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型学习全面教程:零基础入门至精通,一篇文章全掌握

人人都看得懂的大模型简介 大模型就像一座庞大的图书馆&#xff0c;里面有非常多的书籍。但与普通图书馆不同的是&#xff0c;这座图书馆中的每本书都是关于不同事物的描述和知识。而这些书籍中的每一页都代表了这个事物的一些特征或细节。现在&#xff0c;想象一下&#xff0…

蓝牙耳机哪个品牌最具有性价比?四大性价比拉满产品推荐!

蓝牙耳机哪个品牌最具有性价比&#xff1f;目前市面上的蓝牙耳机层出不重&#xff0c;蓝牙耳机的的品类也五花八门的&#xff0c;想要选择一款满意的蓝牙耳机也是需要花费一定的时间&#xff0c;大家购买时一定要格外注意&#xff0c;劣质耳机产品不仅使耳朵受到伤害&#xff0…

Python与Plotly实现多维度数据的动态可视化——交互式股票价格

目录 准备工作安装必要的库导入库 获取数据数据预处理创建交互式图表方法一&#xff1a;基本多线图方法二&#xff1a;带有滚动和区间选择的交互式图表方法三&#xff1a;可视化股票每日回报率的箱线图方法四&#xff1a;添加注释和标记的交互式图表 完整代码 在金融数据分析中…

ubuntu 小技巧 upower 查看电源模块之电池等功能

电脑使用时间久了&#xff0c;电池不耐用了&#xff0c;查看一下具体还剩多少容量&#xff0c;怎么看&#xff1f; ros2ros2-aspire4741:~$ upower -e /org/freedesktop/UPower/devices/battery_BAT0 /org/freedesktop/UPower/devices/line_power_ADP1 /org/freedesktop/UPowe…

C++ TinyWebServer项目总结(11. 定时器)

网络程序需要处理定时事件&#xff0c;如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件&#xff0c;有效地组织这些定时事件&#xff0c;使其在预期的时间被触发且不影响服务器的主要逻辑&#xff0c;对于服务器的性能有至关重要的影响。为此&#xff0c;…

“信”欣向荣,共“创”共赢 | 华宇TAS应用中间件认证工程师培训报名通道开启

信创&#xff0c;即“信息技术应用创新”。我国自主信息产业聚焦信息技术应用创新&#xff0c;旨在通过对IT硬件、软件等各个环节的重构&#xff0c;基于我国自有IT底层架构和标准&#xff0c;形成自有开放生态&#xff0c;从根本上解决本质安全问题&#xff0c;实现信息技术可…

牛客周赛 Round 57

A-小红喜欢1_牛客周赛 Round 57 (nowcoder.com) 思路&#xff1a; 简单记录一下 代码&#xff1a; #include<iostream> #include<algorithm> #include<cstring> #include<vector> #include<queue> #include<cmath> #define int long long…

CH340K的一个小bug

如果CH340和MCU在同一张PCB上&#xff0c;但是CH340用VUSB来供电&#xff0c;MCU用另外的3.3V电源单独供电。两块芯片只有TX&#xff0c;RX和GND直接相连接&#xff0c;DTR串联一个电容连接到MCU的Reset引脚。也就是说正常工作环境下不通过USB连接电脑&#xff0c;只有MUC工作&…

深度学习入门-08

基于小土堆学习 神经网络的搭建 神经网络pytorch官方文档&#xff1a; pytorch官方说明文档 torch.nn是pytorch存放神经网络的工具箱 Containers Containers&#xff08;容器&#xff09;在神经网络中通常不是一个特指的技术术语&#xff0c;但在编程和数据处理中&#xff0…

流体力学告诉你,如何最快地炫一瓶啤酒?

夏季的夜晚&#xff0c;是属于烧烤和啤酒的。三五好友聚会&#xff0c;总有人能在你面前快速且优雅地炫一瓶啤酒&#xff0c;成为桌上的明星。 浅浅研究一下&#xff0c;水从瓶子里流出的过程&#xff0c;慢放后发现&#xff0c;包含两步。第一步&#xff0c;水从瓶口流出&…

直流充电桩测试仪的步骤和规范

直流充电桩测试仪是一种用于检测和评估直流充电桩性能的设备。它可以对充电桩的输出电压、电流、功率等参数进行精确测量&#xff0c;以确保充电桩的正常工作和安全使用。以下是直流充电桩测试仪的步骤和规范&#xff1a; 1. 准备工作&#xff1a;首先&#xff0c;需要确保测试…

每年节约上亿元!法大大“音视频双录”助力深圳营商环境优化

8月26日&#xff0c;深圳经济特区迎来44周岁。深视新闻栏目推出系列报道&#xff0c;首篇便聚焦改革&#xff0c;并重点呈现了“音视频双录签名模式”如何帮助营商环境优化。 营商环境往往被视为一座城市的“金字招牌”&#xff0c;而经商兴业的第一步是注册企业&#xff1a;在…

ACL的原理

随着网络的飞速发展&#xff0c;网络安全和网络服务质量QoS (Quality of Service)问题日益突出。访问控制列表 (ACL, Access Control List)是与其紧密相关的一个技术。ACL可以通过对网络中报文流的精确识别&#xff0c;与其他技术结合&#xff0c;达到控制网络访问行为、防止网…

解构德赛西威“长期主义”战略

变则通&#xff0c;通则久&#xff0c;中国汽车行业的创新演变史&#xff0c;是对长期主义价值观的生动诠释。从燃油车到新能源汽车&#xff0c;从国外品牌技术引进&#xff0c;到国产自主品牌崛起&#xff0c;沿着这条行业发展曲线的起伏跌宕&#xff0c;德赛西威敏捷会意时代…

RPA自动化流程机器人在企业财务中的安全与合规性考虑

随着企业对数字化转型的需求不断增加&#xff0c;财务系统变得更加复杂和集成&#xff0c;而新技术的应用将改变企业财务管理传统的运营模式&#xff0c;帮助企业提质增效的同时也可能带来系统安全性的挑战。RPA自动化流程机器人作为最受企业欢迎的数字化转型工具之一&#xff…

CRMEB多商户2.2.1小程序授权问题

多商户2.2.1版本更新了小程序登录授权增加隐私协议&#xff0c;但是重新发布后有部分用户无法授权&#xff0c;具体表现为点击同意隐私协议以后&#xff0c;授权无反应&#xff0c;主要原因是因为腾讯更新了授权指引相关信息&#xff0c;这里给出的处理办法是在小程序后台增加获…

asp.net core在win上的发布和部署

一、asp.net core两种发布方式 1、两个发布方式——【框架依赖发布】和【独立发布】 2、两种发布方式的差别 二、发布的详细过程 1、【生成】->【发布】 2、框架依赖发布 设置发布参数&#xff0c;然后进行发布 发布好的文件&#xff0c;把它们放到一个新的目录文件夹里 …

R 语言学习教程,从入门到精通,R 绘图 散点图(25)

1、R 绘图 散点图 散点图是将所有的数据以点的形式展现在直角坐标系上&#xff0c;以显示变量之间的相互影响程度&#xff0c;点的位置由变量的数值决定&#xff0c;每个点对应一个 X 和 Y 轴点坐标。 散点图可以使用 plot() 函数来绘制&#xff0c;语法格式如下&#xff1a; …

数据库安全技术的重要性,避免成为SQL注入攻击的下一个目标

数据库里存储了大量个人信息&#xff0c;包括一些非常敏感的资料&#xff0c;让必须管理数据库的公司十分头痛。如今&#xff0c;运用各种高级工具和技术&#xff0c;数据库开发人员可以在保持信息私密的状态下放心执行各种操作。 这些解决方案靠的是数学的巧妙应用。其中一些…

一文彻底搞懂Fine-tuning - 超参数(Hyperparameter)

Hyperparameter 超参数&#xff08;Hyperparameter&#xff09;&#xff0c; 是机器学习算法中的调优参数&#xff0c;用于控制模型的学习过程和结构。与模型参数&#xff08;Model Parameter&#xff09;不同&#xff0c;模型参数是在训练过程中通过数据学习得到的&#xff0…