提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
java课设,使用java swing 和 MySQL数据库。
学生基本信息管理
参考博客:https://www.bilibili.com/video/BV1bQ4y1f7At?spm_id_from=333.1007.top_right_bar_window_view_later.content.click&vd_source=3d7fcbcd3536a7d2534aaa12587e3f55
附上我的源码GitHub链接:https://github.com/en2mouse/stuysy
提示:以下是本篇文章正文内容,下面案例可供参考
一、功能要求
1)需要管理的学生信息有:学号、姓名、性别、出生日期、政治面貌、家庭住址、电话、宿舍号。
2)实现查询、增、删、改等功能。
数据存储:数据库或文件。
二、功能实现
分为三个模块:登录模块、主界面模块、信息交互模块。
登录模块主要负责登录相关内容,通过与数据库链接获取用户名和密码,通过比对确定准入。
主界面模块负责调用信息交互模块信息,使其可以打开不同的功能模块。
信息交互模块负责信息与数据库之间传递和修改。
三、代码详情
共分有四个包来存放代码
dao包用来编写事件处理代码。
model包用来存放基本变量和方法。
util包用来和数据库连接。
view包中存有gui界面和基本事件处理。
检索功能:
对已有的学生对象进行检索,使用模糊查询的代码,遍历输出查询到的每一个结果。
/*
*学院 查询事件处理
*/
private void departmentSeearchActionPerformed(ActionEvent e) {
String s_depart_name=this.s_depart_nameTxt.getText() ;
Department department = new Department();
department.setDepart_name(s_depart_name);
this. fillTable(department);
}
/**
* 学生查询事件处理
*/
private void StudentSearchActionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String stuName = this.s_stu_nameTxt.getText();
String stuId = this.s_stu_idTxt.getText();
Department department = (Department) this.s_departjcb.getSelectedItem();
int departmentId = department.getId();
Student student = new Student(stuName, stuId, departmentId);
this.fillTable(student);
}
/*
* 信息查询(模糊)
*/
public ResultSet list(Connection con, Student student) throws Exception {
StringBuilder strb = new StringBuilder("select *from student stu, department depart where stu.departmentId=depart.id");
if (StringUtil.isNotEmpty(student.getStuName())) {
strb.append(" and stu.stuName like '%" + student.getStuName() + "%'");
}
if (StringUtil.isNotEmpty(student.getStuId())) {
strb.append(" and stu.stuId like '%" + student.getStuId() + "%'");
}
if (student.getDepartmentId()!=null&&student.getDepartmentId() != -1) {
strb.append(" and stu.departmentId =" + student.getDepartmentId());
}
PreparedStatement pstmt = con.prepareStatement(strb.toString());
return pstmt.executeQuery();
}
数据的填充功能:
将读到的数据填充到目标栏中,并且可在目标栏中修改。最难的是对于combobox的数据填充,经过学习和舍友的帮助下,先初始化下拉框,再通过调用数据库中的信息对其进行匹配填充,最后解决了该问题。
/**
* 表格点击事件
*
* @param e
*/
private void stuTableMousePressed(MouseEvent e) {
// TODO Auto-generated method stub
int row = this.stutable.getSelectedRow();
this.xg_idTxt.setText((String) this.stutable.getValueAt(row, 0));
this.xg_nameTxt.setText((String) this.stutable.getValueAt(row, 1));
this.xg_stuidTxt.setText((String) this.stutable.getValueAt(row, 2));
this.xg_birthTxt.setText((String) this.stutable.getValueAt(row, 4));
this.xg_faceTxt.setText((String) this.stutable.getValueAt(row, 5));
this.xg_addressTxt.setText((String) this.stutable.getValueAt(row, 6));
this.xg_phoneTxt.setText((String) this.stutable.getValueAt(row, 7));
this.xg_dormitoryTxt.setText((String) this.stutable.getValueAt(row, 8));
if (this.stutable.getValueAt(row, 3).equals("男")) {
this.xg_man.setSelected(true);
} else {
this.xg_woman.setSelected(true);
}
Connection con = null;
try {
con = dbUtil.getCon();
Student student = new Student((String) this.stutable.getValueAt(row, 1),(String) this.stutable.getValueAt(row, 2));
ResultSet rs1 = studentDao.list(con, student);
String departmentId = null;
while(rs1.next()){
departmentId = rs1.getString("departmentId");
}
ResultSet rs = departmentDao.list(con, new Department());
int departmentIndex = 1;
while (rs.next()) {
if (rs.getString("id").equals(departmentId)) {
break;
}
departmentIndex++;
}
this.xg_departjcb.setSelectedIndex(departmentIndex);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
try {
dbUtil.closeCon(con);
} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
}
添加功能:
创建一个新的学生对象,并向学生对象添加基本信息,学院的信息要能够跟随学院的变换一起变换,是一个难点。
/*
* 信息添加事件
*/
private void studentAddAactionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String stuName=this.stu_nameTxt.getText();
String stuId=this.stu_idTxt.getText();
String birth=this.stu_birthTxt.getText();
String face=this.faceTxt.getText();
String adress=this.addressTxt.getText();
String phone=this.phoneTxt.getText();
String dormitory=this.dormitoryTxt.getText();
if (StringUtil.isEmpty(stuName)) {
JOptionPane.showMessageDialog (null, "姓名不能为空! ");
return;
} if (StringUtil.isEmpty(stuId)) {
JOptionPane.showMessageDialog(null,"学号不能为空! ");
return;
}
if (StringUtil.isEmpty(birth)) {
JOptionPane.showMessageDialog (null, "生日不能为空! ");
return;
} if (StringUtil.isEmpty(face)) {
JOptionPane.showMessageDialog(null,"政治面貌不能为空! ");
return;
}
if (StringUtil.isEmpty(adress)) {
JOptionPane.showMessageDialog (null, "家庭地址不能为空! ");
return;
} if (StringUtil.isEmpty(phone)) {
JOptionPane.showMessageDialog(null,"电话不能为空! ");
return;
}
if (StringUtil.isEmpty(dormitory)) {
JOptionPane.showMessageDialog(null,"宿舍号不能为空! ");
return;
}
String sex="";
if (this.man.isSelected()) {
sex="男";
}else {
sex="女";
}
Department department=(Department) this.departJCB.getSelectedItem();
int departmentId=department.getId();
Student student=new Student( stuName, stuId, sex, birth, face, adress, phone, dormitory,departmentId);
Connection con=null;
try {
con=dbUtil.getCon();
int addnum= studentDao.add(con,student);
if (addnum==1) {
JOptionPane.showMessageDialog(null, "添加成功!") ;
resetValues();
}else {
JOptionPane.showMessageDialog(null, "添加失败!") ;
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
JOptionPane.showMessageDialog(null, "添加失败!") ;
}finally {
try {
dbUtil.closeCon(con);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
修改功能:
对已有的学生对象的基本信息进行修改和删除。
/**
* 修改事件处理
* @param e
*/
private void updateStu(ActionEvent e) {
String xg_id = this. xg_idTxt.getText() ;
String xg_name=this.xg_nameTxt . getText() ;
String xg_stuid=this. xg_stuidTxt.getText() ;
String xg_birth=this. xg_birthTxt.getText() ;
String xg_face=this. xg_faceTxt.getText() ;
String xg_address=this. xg_addressTxt.getText() ;
String xg_phone=this. xg_phoneTxt.getText() ;
String xg_dormitory=this.xg_dormitoryTxt.getText() ;
String sex = "";
if (this.xg_man.isSelected()) {
sex = "男";
} else {
sex = "女";
}
Department department = (Department) this.xg_departjcb.getSelectedItem();
int departmentId = department.getId();
if (StringUtil. isEmpty(xg_id)) {
JOptionPane.showMessageDialog(null,"请选择要修改的记录! ");
return;
}
if (StringUtil. isEmpty(xg_name)) {
JOptionPane . showMessageDialog(null,"名字不能为空! ");
return;
}
if (StringUtil. isEmpty(xg_stuid)) {
JOptionPane. showMessageDialog(null, "学号不能为空! ");
return;
}
if (StringUtil. isEmpty(xg_birth)) {
JOptionPane. showMessageDialog(null, "生日不能为空! ");
return;
}
if (StringUtil. isEmpty(xg_face)) {
JOptionPane. showMessageDialog(null, "政治面貌不能为空! ");
return;
}
if (StringUtil. isEmpty(xg_address)) {
JOptionPane. showMessageDialog(null, "家庭地址不能为空! ");
return;
}
if (StringUtil. isEmpty(xg_phone)) {
JOptionPane. showMessageDialog(null, "电话不能为空! ");
return;
}
if (StringUtil. isEmpty(xg_dormitory)) {
JOptionPane. showMessageDialog(null, "宿舍号不能为空! ");
return;
}
if(xg_departjcb.getSelectedIndex()==0){
JOptionPane.showMessageDialog(null, "请选择所在学院!");
return;
}
Student student = new Student( Integer.parseInt(xg_id),xg_name, xg_stuid,sex,xg_birth,xg_face,xg_address,xg_phone,xg_dormitory,departmentId);
Connection con=null;
try {
con=dbUtil.getCon() ;
int num=studentDao.update(con, student ) ;
if (num==1) {
JOptionPane. showMessageDialog(null,"修改成功! ");
this.resetNull();
this.fillTable(new Student());
}else {
JOptionPane.showMessageDialog(null,"修改失败! ");
}
} catch (Exception e1) {
// TODO 自动生成的catch块
e1. printStackTrace() ;
}finally {
try {
dbUtil.closeCon(con);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
四、实机演示
正在审核,审核结束后会上传至此处。
学生信息管理系统实机演示
总结
作为我的第一个java项目,尽管有GUI也有MySQL数据库,但是 GUI 界面没有进行美化和细节调整,有些地方感官体验还不够,界面过于单一。使用 JDBC 链接数据库的时候,没法直接建立数据库,必须在数据库里创建才能调用,也是不尽人意的地方。但是调用也会漏洞百出,修一个小bug有时要花几个小时,不得不感谢我的室友“杰哥”,没有杰哥的鼎力相助,我的项目也不会出现在这里。但是我发现我的bug有相当一部分是遗漏或者打错代码,和代码结构关系不大,说明我对于代码的掌控并不熟练,还有一个缺点是直接在代码上修改,杰哥亲切称呼我的代码为“屎山”,不论是修改难度还是查找难度都会增加。或许还有不足,请各位大佬批评指正。
附上源码GitHub链接:https://github.com/en2mouse/stuysy