学生基本信息管理

本文记录了一次Java项目实战,使用Swing GUI构建学生信息管理系统,包括登录、查询、添加、修改和删除功能,配合MySQL数据库操作。项目重点展示了事件处理、模糊查询、数据库连接和GUI界面设计的过程。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
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

学生信息管理系统 源码和报告 要求一个简单的界面系统,可实现对界面内显示的功能进行使用,并且用完后可重新返回界面。 主要功能一共有9项:0返回。1.编辑学生信息。2.显示学生信息。3.查询学生信息。4.更新学生信息5.添加学生信息。6.删除学生信息。7.计算学生成绩。8显示学生名次。 输入学生信息:输入信息包括学生姓名,性别,学生ID,以及学生考试的两门课的成绩。 显示学生信息:显示用户所输入所有的学生信息。 查询学生信息:查 询已入录的信息,要求有按姓名查找和按ID查找两种方式。 更新学生信息: 添加学生信息:入录新的学生信息。 删除学生信心:删除指定学生的信息。 计算学生成绩:计算学生两门课的成绩,计算总分和平均成绩。 显示学生名次:对学生的总成绩进行排名,并且按照成绩从高到低的输出。 返回:返回上一层界面要求一个简单的界面系统,可实现对界面内显示的功能进行使用,并且用完后可重新返回界面。 主要功能一共有9项:0返回。1.编辑学生信息。2.显示学生信息。3.查询学生信息。4.更新学生信息5.添加学生信息。6.删除学生信息。7.计算学生成绩。8显示学生名次。 输入学生信息:输入信息包括学生姓名,性别,学生ID,以及学生考试的两门课的成绩。 显示学生信息:显示用户所输入所有的学生信息。 查询学生信息:查 询已入录的信息,要求有按姓名查找和按ID查找两种方式。 更新学生信息: 添加学生信息:入录新的学生信息。 删除学生信心:删除指定学生的信息。 计算学生成绩:计算学生两门课的成绩,计算总分和平均成绩。 显示学生名次:对学生的总成绩进行排名,并且按照成绩从高到低的输出。 返回:返回上一层界面
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值