基于GUI+MySQL技术的简单学生信息管理系统

简单的学生信息管理系统

  • 1、 需求分析
    • 1.1 系统总体分析
    • 1.2 用户系统分析
  • 2、 课题及任务功能描述
    • 2.1 课题研究背景
    • 2.2 功能描述
  • 3、 总体设计
    • 3.1 系统总体设计
    • 3.2 系统数据库设计
      • 3.2.1 数据库概念设计
      • 3.2.2 数据库表设计
  • 4、 功能实现
    • 4.1 登录
    • 4.2 修改密码
    • 4.3 添加学生
    • 4.4 添加班级
    • 4.5 查询班级
    • 4.6 修改删除班级信息
  • 5 总结

1、 需求分析

1.1 系统总体分析

整个系统的使用简单易懂,系统采用GUI布局使得界面拥有比较友好的交互,同时采用MVC设计模式将应用的输入、处理、输出流程按照Model、View、Controller的方式进行几次分离,即,将一个应用分成模型层、视图层、控制层这三个层,确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换,最重要是的低耦合,将视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。并且整个系统的运行配置要求也很低,基本运行环境要求:
1.数据库 MySQL 5.4
2.开发工具 Eclipse
3.GUI辅助开发工具 windowbuilder

1.2 用户系统分析

该学生信息管理系统涉及到学生、教师、系统管理员、班级、学生信息、老师信息。设置一个系统管理员对系统进行管理。所有用户需输入账号、密码登录进入系统;管理员进入系统后可对学生、老师、班级、进行增删改查操作,同时管理员还可以修改密码、添加用户;学生进入系统,可以查看自己的信息和修改密码;老师进入系统后,可以查看自己所带的班级信息、查看和添加学生的信息,查看自己的信息、以及修改密码;老师可以查看其他老师的信息(可以当成是老师的通讯录),查看学生的信息,学生可以查看班级的信息。

2、 课题及任务功能描述

2.1 课题研究背景

在这个高速发展的时代,人们的生活水平有了显著的提高,计算机已经涉及到各个领域。现在的大学越来越多,以后的大学生也就越来越多,同时学校的人数也会越来越多,为了帮助学校加强对班级和学生的管理,以此为动机开发一套学生信息管理系统,以便于帮助学校的教师和管理人员更高效的对学生信息的管理,同时该管理系统的后台管理就体现对学生信息的录入工作,实现了学生信息的可查询化,对学生信息实时变更的可操作化。

2.2 功能描述

根据学生信息管理系统的需求一共分为三个模块,分别是管理员模块、教师模块和学生模块。
1)管理员模块的功能主要是添加教师、添加班级、添加学生和修改密码,管理员用例图下图所示:
基于GUI+MySQL技术的简单学生信息管理系统_第1张图片
2) 教师模块的功能主要是添加班级,添加学生,修改自己的密码和查看信息,教师用例图下图所示:
基于GUI+MySQL技术的简单学生信息管理系统_第2张图片
3)学生模块的功能主要是查看自己的信息和修改密码,学生用例图下图所示:
基于GUI+MySQL技术的简单学生信息管理系统_第3张图片

3、 总体设计

3.1 系统总体设计

本次设计的学生信息管理系统包含了管理员模块、教师模块以及学生模块,然后根据管理员模块、教师模块以及学生模块这三个模块的功能分析,主要由以下几个功能:
基于GUI+MySQL技术的简单学生信息管理系统_第4张图片
管理员模块包含:添加用户功能、添加班级功能、添加学生功能、修改密码功能、添加用户功能。
教师模块包含:添加学生功能、查看信息功能、添加班级功能、修改密码。
学生模块包含:查看信息功能、修改密码。

3.2 系统数据库设计

3.2.1 数据库概念设计

在学生信息管理系统的数据库设计中,包含了管理员、教师、学生、班级四个实体,每个实体都有自己的的属性,管理员实体的属性有:管理员编号、管理员姓名、登录密码,教师实体的属性有:教师编号,教师姓名,登录密码,性别,班级,学生实体的属性有:学生编号,学生姓名,登录密码,性别,所在班级。而各个实体之间有一定的关系,具体的描述由下方E-R图表现:
基于GUI+MySQL技术的简单学生信息管理系统_第5张图片

3.2.2 数据库表设计

学生信息管理系统一共包含四张表,它们分别是:管理员表、教师表、学生表、班级表,具体的数据库表设计如下描述:
1、管理员表(s_admin):用来存储管理员的信息。它包含的字段有:adminID、adminName、adminPassword。管理员实体图如下图所示:
基于GUI+MySQL技术的简单学生信息管理系统_第6张图片
管理员表具体设计如下表所示:
基于GUI+MySQL技术的简单学生信息管理系统_第7张图片
2、学生表(s_student):用来查看和存储学生的信息。它包含的字段有:ID、Name、 Password、sex、classId。学生实体图如下图所示:
基于GUI+MySQL技术的简单学生信息管理系统_第8张图片
学生表具体设计如下表所示:
基于GUI+MySQL技术的简单学生信息管理系统_第9张图片

3、教师表(s_teacher):用来查看信息以及添加学生。它包含的字段有:ID、Name、 Password、sex、classId。房间实体图如下图所示:
基于GUI+MySQL技术的简单学生信息管理系统_第10张图片
教师表具体设计如下表所示:
基于GUI+MySQL技术的简单学生信息管理系统_第11张图片
4、班级表(s_class):用来存储班级的信息。它包含的字段有:ID、Name、Info。班级实体图如下图所示:
基于GUI+MySQL技术的简单学生信息管理系统_第12张图片
班级表具体设计如下表所示:
基于GUI+MySQL技术的简单学生信息管理系统_第13张图片

4、 功能实现

4.1 登录

输入用户名、密码以及用户类型,点击“登录”按钮,则跳转到LoginFrame类中的loginAct方法中,如果用户名、密码以及用户类型输入正确,即可正常登录同时会弹出“欢迎您登录”界面:
基于GUI+MySQL技术的简单学生信息管理系统_第14张图片
输入要登录的信息,点击登录按钮“loginButton ”会调用LoginFrame类中的loginAct方法,进一步调用AdminDao类中的login方法下的数据库,并根据Admin中的配置进行加载,然后将其登录的用户名、密码以及用户类型与数据库进行匹配,若数据库中不存在此信息则显示用户名或密码错误,然后返回登录界面重新登录。若在输入信息时输入错误可以点击重置按钮“resetButton”,清空输入的信息。若数据库中已经存才此用户名、密码以及用户类型,且登录时输出的信息都正确,则显示“欢迎登录”。即调用了管理员表(s_admin)中的adminID、adminName、adminPassword三个字段,与之登录的进行匹配。代码如下:

重置代码:
protected void restValue(ActionEvent ae) {
     
		userNameTextField.setText("");
		passwordTextField.setText("");
		userTypeComboBox.setSelectedIndex(0);	
	}
}
登录代码:
	String sql="select * from s_admin where name=? and password=?";
		Admin adminRst=null;//登录现实对象
	try{
     
	PreparedStatement  prat=con.prepareStatement(sql);//把sql语句传给数据库
	prat.setString(1,admin.getName());
	prat.setString(2,admin.getPassword());
	ResultSet executeQuery = prat.executeQuery();
     	if(executeQuery.next()){
     
       	    adminRst =new Admin();
			adminRst.setId(executeQuery.getInt("id"));
			adminRst.setName(executeQuery.getString("name"));
			adminRst.setPassword(executeQuery.getString("password"));
			adminRst.setCreateDate(executeQuery.getString("createDate"));
			}
}

4.2 修改密码

登陆成功后会从登录界面面跳转到主界面,在此界面点击系统设置下拉框的修改密码,输入旧密码以及要修改的新密码即可:
基于GUI+MySQL技术的简单学生信息管理系统_第15张图片
输入旧密码以及要修改的密码,点击确认按钮“submiButton ”会调用ChangePawordFrame类中的actionPerFormde方法,进一步调用数据库,如果旧密码输入错误,则回调用数据库中的配置,进行检验,若两次输入的密码不一致,则调用ChangePawordFrame类中的actionPerFormde方法,如密码修改成功则根据Admin中的配置进行加载,然后将其修改的密码写入数据库,若在输入信息时输入错误可以点击重置按钮“resetButton”,清空输入的信息。代码如下:

默认用户名代码:
if("系统管理员".equals(MainFrame.userType.getName())){
     
			Admin admin=(Admin)MainFrame.userObject;
			currentUserLabel.setText("【系统管理员】"+admin.getName());
		}		
重置代码:
protected void resetValue(ActionEvent ae) {
     
		oldPasswordTextField.setText("");
		newPasswordTextField.setText("");
		confirmPasswordTextField.setText("");
	}
修改密码代码:
	protected void subjectCh(ActionEvent ae) {
     
	String oldPassword=oldPasswordTextField.getText().toString();
	String newPassword=newPasswordTextField.getText().toString();
	String confirmPassword=confirmPasswordTextField.getText().toString();
		if(StringUtil.isEmpty(oldPassword)){
     
			JOptionPane.showMessageDialog(this, "请填写旧密码");
				return;
}
		if(StringUtil.isEmpty(newPassword)){
     
			JOptionPane.showMessageDialog(this, "请填写新密码");
				return;
		}
		if(StringUtil.isEmpty(confirmPassword)){
     
			JOptionPane.showMessageDialog(this, "请确认新密码");
				return;
		}
		if(!newPassword.equals(confirmPassword)){
     
			JOptionPane.showMessageDialog(this, "两次密码输入不一致,请重新输入!");
				return;
		}
		if("系统管理员".equals(MainFrame.userType.getName())){
     
			AdminDao adminDao=new AdminDao();
			Admin adminTmp=new Admin();
			Admin admin=(Admin)MainFrame.userObject; 
			adminTmp.setName(admin.getName());
			adminTmp.setPassword(oldPassword);
			JOptionPane.showMessageDialog(this, adminDao.changePassword(adminTmp,newPassword));
				return;
		}
		}
调用代码:
      public String changePassword(Admin admin,String newPassword){
     
		 String sql="select * from s_admin where name=? and password=?"; 
		 PreparedStatement prat=null;
		 int id=0;
		 	try{
     
		 		 prat=con.prepareStatement(sql);	//把sql语句传给数据
				 prat.setString(1,admin.getName());
				 prat.setString(2,admin.getPassword());
			 	ResultSet executeQuery = prat.executeQuery();
			if(!executeQuery.next()){
     
				 String retString="旧密码错误!";
				 return retString;
			}
			id=executeQuery.getInt("id");
		 }catch(Exception e){
     
			 e.printStackTrace();
		 }
		  String retString="修改失败";
		  String sqlString="update s_admin set password= ? where id=? ";
		  
		  try {
     
			 prat=con.prepareStatement(sqlString);	//把sql语句传给数据库
			 prat.setString(1,newPassword);
			 prat.setInt(2, id);
			 int rst = prat.executeUpdate();
			 if(rst >0){
     
				 retString="密码修改成功!";
			 }
		} catch (SQLException e) {
     
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		  return retString;  
	  }

4.3 添加学生

登陆成功后会从登录界面面跳转到主界面,在此界面点击学生管理下拉框的添加学生,输入要添加的学生即可:
基于GUI+MySQL技术的简单学生信息管理系统_第16张图片
在姓名后的文本框“studentTextField”输入要添加的学生姓名,在所属班级下拉框“studentClassComboBox”选择学生所在的班级,然后在登录密码(第一次登录系统默认的密码)“studentPasswordTextField”输入登录时的密码,然后点击学生性别“JRadioButton”,选择学生的性别,最后点击确认按钮“submiButton ”会调用studentDao类中的addStudent方法,进一步调用数据库,若添加成功会跳出“添加成功”界面,若添加失败则会跳出“添加失败”界面,最后把添加的学生信息写入数据库,若在输入信息时输入错误可以点击重置按钮“resetButton”,清空输入的信息。代码如下:

添加学生代码
protected void studentAddAct(ActionEvent ae) {
     
	String studentName= studentNameTextField.getText().toString();
	String studentPassword= studentPasswordTextField.getText().toString();
			if(StringUtil.isEmpty(studentName)){
     
				JOptionPane.showMessageDialog(this, "请填写学生的名字");
					return;	
		}
			if(StringUtil.isEmpty(studentPassword)){
     
				JOptionPane.showMessageDialog(this, "请填写密码");
	     			return;	
		}
		Student sc=(Student) studentClassComboBox.getSelectedItem();
		String sex=studentSexManRadioButton.isSelected() ? studentSexManRadioButton.getText() :(studentSexFemalRadioButton.isSelected() ? studentSexFemalRadioButton.getText():studentSexUnkownRadioButton.getText());
	Student student = new Student();
	student.setName(studentName);
	student.setClassId(sc.getId());
	student.setPassword(studentPassword);
	student.setSex(sex);
	StudentDao studentDao =new StudentDao();
		if(studentDao.addStudent(student)){
     
			JOptionPane.showMessageDialog(this, "添加成功");
	}else{
     
		JOptionPane.showMessageDialog(this, "添加失败");
	}
		resetValue(ae);
	}	
调用数据库代码:
public class StudentDao extends BaseDao {
     
	public  boolean addStudent(Student  student){
     
		String sql="insert into s_class values(null,?,?,?,?)";
			try {
     
				java.sql.PreparedStatement pre=con.prepareStatement(sql);
				pre.setString(1, student.getName());
				pre.setInt(2, student.getId());
				pre.setString(3, student.getPassword());
				pre.setString(4, student.getSex());
			if(pre.executeUpdate() >0)
				return true;
		} catch (SQLException e) {
     
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
			return false;
		}
	}
重置代码:
protected void resetValue(ActionEvent ae) {
     
		// TODO Auto-generated method stub
		studentNameTextField.setText("");
		studentPasswordTextField.setText("");	
	}

4.4 添加班级

登陆成功后会从登录界面面跳转到主界面,在此界面点击班级管理下拉框的添加班级,输入要添加的班级即可:
基于GUI+MySQL技术的简单学生信息管理系统_第17张图片
输入要添加班级的信息,点击登录按钮“submitButton ”会调用StudentClassStudent类中的submitClass()方法,进一步调用ClassDao类中的addClass方法下的数据库,并根据StudentClass中的配置进行加载,若添加成功会跳出“添加成功”界面,若添加失败则会跳出“添加失败”界面,然后将其班级名、班级信息写入数据库,若在输入信息时输入错误可以点击重置按钮“resetButton”,清空输入的信息。即调用了学生班级表(s_class)中的ID、Name、Info三个字段。代码如下:

添加班级代码:
public class ClassDao extends BaseDao {
     
		public boolean addClass(StudentClass cl){
     
		String sql="insert into s_class values(null,?,?)";
			try {
     
				java.sql.PreparedStatement pre=con.prepareStatement(sql);
				pre.setString(1, cl.getName());
				pre.setString(2, cl.getInfo());
					if(pre.executeUpdate() >0)
						return true;
		} catch (SQLException e) {
     
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
			
				return false;
		}
		adminRst.setId(executeQuery.getInt("id"));
		adminRst.setName(executeQuery.getString("name"));
		adminRst.setPassword(executeQuery.getString("password"));
		adminRst.setCreateDate(executeQuery.getString("createDate"));
			}
}
弹出界面代码:
protected void submitClass(ActionEvent ae) {
     
		// TODO Auto-generated method stub
		String className=classNameTextField.getText().toString();
		String classInfo=classInfoTextArea.getText().toString();
			if(StringUtil.isEmpty(className)){
     
				JOptionPane.showMessageDialog(this, "班级名称不能为空!");
					return;
		}
		StudentClass sc=new StudentClass();
		sc.setName(className);
		sc.setInfo(classInfo);
		ClassDao classDao=new ClassDao();
			if(classDao.addClass(sc)){
     
				JOptionPane.showMessageDialog(this, "班级添加成功!");
		}else{
     
				JOptionPane.showMessageDialog(this, "班级添加失败 !");
			
		}
				resetValue(ae);
	}
重置代码:	
protected void resetValue(ActionEvent ae) {
     
		// TODO Auto-generated method stub
		classNameTextField.setText("");
		classInfoTextArea.setText("");
	}
}

4.5 查询班级

登陆成功后会从登录界面面跳转到主界面,在此界面点击班级管理下拉框的班级管理,输入要查询的班级即可:
基于GUI+MySQL技术的简单学生信息管理系统_第18张图片
输入要查询班级的信息,点击登录按钮“searchButton ”会调用ClassMangerStudent类中的actionPerformed()方法,进一步调用ClassDao类中的getClasList方法下的数据库,并即调用了学生班级表(s_class)中的ID、Name、Info三个字段。代码如下

查询班级代码:
	protected void selectedTable(MouseEvent me) {
     
	DefaultTableModel dft = (DefaultTableModel) classListTable.getModel();
	editClassNameTextField.setText(dft.getValueAt(classListTable.getSelectedRow(), 1).toString());
editClassInfoTextArea.setText(dft.getValueAt(classListTable.getSelectedRow(), 2).toString());
	}

private void setTable(StudentClass studentClass){
     
DefaultTableModel dft=(DefaultTableModel) classListTable.getModel();
		dft.setRowCount(0);
		ClassDao classDao=new ClassDao();
		List<StudentClass> classList = classDao.getClassList(new StudentClass());
		for( StudentClass sc:classList){
     
			Vector v = new Vector();
			v.add(sc.getId());
			v.add(sc.getName());
			v.add(sc.getInfo());
			dft.addRow(v);		
		}
	}
调用数据库代码:
public List<StudentClass> getClassList(StudentClass studentClass){
     
	List<StudentClass> re=new ArrayList<StudentClass>();
	String sqlString="select * from s_class";
	if(!StringUtil.isEmpty(studentClass.getName())){
     
		sqlString += "where name like '%"+studentClass.getName()+"%'";
		}
		try {
     
			PreparedStatement pre= con.prepareStatement(sqlString);
			ResultSet executeQuery = pre.executeQuery();
			while(executeQuery.next()){
     
			StudentClass sc=new StudentClass();
			sc.setId(executeQuery.getInt("id"));
			sc.setName(executeQuery.getString("name"));
			sc.setInfo(executeQuery.getString("info"));
			re.add(sc);		
					}
			} catch (SQLException e) {
     
				e.printStackTrace();
			}		
			return re;
		}

4.6 修改删除班级信息

登陆成功后会从登录界面面跳转到主界面,在此界面点击班级管理下拉框的班级管理,输入要删除或者修改信息的班级即可:
基于GUI+MySQL技术的简单学生信息管理系统_第19张图片
输入要更改班级的信息,点击确认修改按钮“sudmitEditButton ”会调用ClassMangerStudent类中的subminEidAct()方法,进一步调用ClassDao类中的update方法下的数据库,并根据StudentClass中的配置进行加载,如更新成功则会弹出“更新成功”界面若更新失败,则会弹出“更新失败”界面。若想删除某个班级,输入要上班的班级,点击删除按钮“submitDeleteButton”会调用ClassMangerStudent类中的deleteClassAct()方法,进一步调用ClassDao类中的delete()方法下的数据库,并根据StudentClass中的配置进行加载,然后弹出“你是确定删除”界面,并即调用了学生班级表(s_class)中的ID、Name、Info三个字段。代码如下

修改班级代码:
protected void submitEidAct(ActionEvent ae) {
     
	ClassDao classDao=new ClassDao();
	int index = classListTable.getSelectedRow();
	if(index == -1){
     
	JOptionPane.showMessageDialog(this, "请选中要修改的数据&&");
	return;		
		}
DefaultTableModel dft = (DefaultTableModel) classListTable.getModel();
	String className=dft.getValueAt(classListTable.getSelectedRow(), 1).toString();
	String classInfo=dft.getValueAt(classListTable.getSelectedRow(), 2).toString();
	String editClassName=editClassNameTextField.getText().toString();
	String editClassInfo = editClassInfoTextArea.getText().toString();
	if(StringUtil.isEmpty(editClassName)){
     
		JOptionPane.showMessageDialog(this, "请填写修改的名称");
			return;
		}
	if(className.equals(editClassName) && classInfo.equals(editClassInfo)){
     
		JOptionPane.showMessageDialog(this, "您还没有做任何修改");
		   return;
		}
	int id =Integer.parseInt(dft.getValueAt(classListTable.getSelectedRow(), 0).toString());
	   StudentClass sc=new StudentClass();
	   sc.setId(id);
	   sc.setName(editClassName);
	   sc.setInfo(editClassInfo);
		if(classDao.update(sc)){
     
			JOptionPane.showMessageDialog(this, "更新成功!");
		}else{
     
			JOptionPane.showMessageDialog(this, "更新失败");
		}
		setTable(new StudentClass());
		}
	
修改班级调用数据库代码:
public boolean update(StudentClass sc){
     
	String sql="update  s_class set name=? , info=?  where id=? ";
	try{
     
	PreparedStatement pre= con.prepareStatement(sql);		pre.setString(1,sc.getName());
	pre.setString(1, sc.getInfo());
	pre.setInt(3, sc.getId());
	if(pre.executeUpdate() > 0){
     
			return true;
			}
		}catch (SQLException e) {
     
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
删除班级代码:
protected void deleteClassAct(ActionEvent ae) {
     
		if(JOptionPane.showConfirmDialog(this, "您确定删除吗?") != JOptionPane.OK_CANCEL_OPTION){
     
			return;
		}
		int index = classListTable.getSelectedRow();
		if(index == -1){
     
			JOptionPane.showMessageDialog(this, "请选中要删除的数据&&");
			return;
		}
		DefaultTableModel dft = (DefaultTableModel) classListTable.getModel();
		int id =Integer.parseInt(dft.getValueAt(classListTable.getSelectedRow(), 0).toString());
		ClassDao classDao=new ClassDao();
		if(classDao.delete(id)){
     
			JOptionPane.showMessageDialog(this, "删除成功!");
		}else{
     
			JOptionPane.showMessageDialog(this, "删除失败");
		}
	setTable(new StudentClass());
	}
删除班级调用数据库代码:
public  boolean delete(int id){
     
		String sql="delete from s_class where id=? ";
		try {
     
			PreparedStatement pre= con.prepareStatement(sql);
			pre.setInt(1,id);
			if(pre.executeUpdate() > 0){
     
				return true;
			}
		} catch (SQLException e) {
     
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}

以上代码均为核心代码

5 总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,通过本次课程设计,我感受颇多,尽管上课时也认真听了老师的讲课,但是刚开始面对自己的所选的题目时,还是有些不知所措,后来查看了自己以前学习的笔记新的,然后去博客查了些相关的只是,心里在感觉有了一些底。经过这差不多快一周来的学习与写代码,总算还是收获不少,对Act和数据库的认识也更加的深刻了。
这次课程设计让我学习到很多东西,大多数都是课本上没有接触到的知识,我运用到的框架虽然是简单的框架,但是也是我一步步去查实,一步步去写的。在这个过程中除了查阅书籍,也很感谢同学们对我的帮助,在我遇到困难同学帮助了我,在我思维混乱的时候是同学给我建议。在以后的学习生活中我会继续将这段时间学到的知识运用下去。同时也在老师的身上我学得到很多实用的知识,在次我表示感谢!

这只是一个简单的信息管理系统,还可以在此基础上添加其他功能,也可以为今后学习java Web提供一些基础

你可能感兴趣的:(Java,GUI项目,windowbuilder,mysql,java,gui)