目录
1、前言介绍
学生信息管理系统是一个教育单位不可缺少的部分。一个功能齐全、简单易用的信息管理系统不但能有效地减轻学校相关工作人员的工作负担,它的内容对于学校的决策者和管理者来说都至关重要。所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案、统计和查询数据,这种管理方式存在着许多缺点,如:效率低、保密性差,人工的大量浪费;另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少困难。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着来越重要的作用。
作为计算机应用的一部分,使用计算机对学校的各类信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查询方便、效率高、可靠性好、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学校信息管理的效率,也是一个单位科学化、正规化管理,与世界接轨的重要条件。
2、主要技术
技术名 |
作用 |
---|---|
Java + Struts2 | 后端框架 |
Jsp | 前端框架 |
MySQL | 数据库 |
3、系统基本功能需求
系统中涉及系统管理员一种权限;接下来针对这种权限说明下功能结构;
3.1 系统结构
主要功能有:
系统管理员:学生信息管理,班级信息管理,年级信息管理,系统管理(包括数据字典管理,数据字典类别管理,修改密码)
系统业务流程图:
3.2 数据库需求分析
根据上面业务流程图所涉及到的内容,数据库要设计的表有:学生表,班级表,年级表,数据字典类别表,数据字典表,管理表
3.3 系统目标
本选题系统的设计主要将实现以下目标:
- .人性化设计:系统界面友好,操作简单;
.实现对学生信息的管理,班级信息的管理,年级信息的管理;
4、数据库表的设计
(1). 管理员信息表
字段名 |
数据类型 |
长度 |
是否主键 |
描述 |
UserId |
Int |
是 |
自动编号 |
|
Username |
varchar |
20 |
用户名 |
|
Password |
varchar |
20 |
密码 |
(2). 学生表
字段名 |
数据类型 |
长度 |
是否主键 |
描述 |
studentId |
varchar |
40 |
是 |
UUID |
stuNo |
varchar |
20 |
学号 |
|
stuName |
varchar |
20 |
学生姓名 |
|
stuSex |
varchar |
10 |
学生性别 |
|
stuBirthday |
date |
出生日期 |
||
stuRxsj |
date |
入学时间 |
||
stuNation |
varchar |
20 |
民族 |
|
stuZzmm |
varchar |
20 |
政治面貌 |
|
classId |
int |
11 |
班级编号 |
|
stuDesc |
text |
备注 |
||
stuPic |
varchar |
20 |
学生照片 |
- . 班级表
字段名 |
数据类型 |
长度 |
是否主键 |
描述 |
classId |
Int |
11 |
是 |
自动编号 |
className |
varchar |
20 |
班级名称 |
|
gradeId |
Int |
11 |
年级外键 |
|
classDesc |
Text |
班级描述 |
- . 年级表
字段名 |
数据类型 |
长度 |
是否主键 |
描述 |
gradeId |
Int |
11 |
是 |
自动编号 |
gradeName |
Varchar |
20 |
年级名称 |
|
gradeDesc |
text |
年级备注 |
- . 数据字典表
字段名 |
数据类型 |
长度 |
是否主键 |
描述 |
ddId |
Int |
11 |
是 |
自动编号 |
ddTypeId |
int |
11 |
数据字典类别 |
|
ddValue |
varchar |
20 |
数据字典值 |
|
ddDesc |
text |
备注 |
- . 数据字典类别表
字段名 |
数据类型 |
长度 |
是否主键 |
描述 |
ddTypeId |
Int |
11 |
是 |
自动编号 |
ddTypeName |
varchar |
20 |
数据字典类别 |
|
ddTypeDesc |
text |
备注 |
5、系统的详细设计与实现
5.1 系统设计实现
5.1.1 登录界面实现
效果图:
相关说明:
用户进入系统登录界面,用户输入用户名,密码,和验证码,输入正确则进入系统主界面;
关键代码实现:
public User login(Connection con,User user)throws Exception{
User resultUser=null;
String sql="select * from t_user where userName=? and password=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, user.getUserName());
pstmt.setString(2, user.getPassword());
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
resultUser=new User();
resultUser.setUserId(rs.getInt("userId"));
resultUser.setUserName(rs.getString("userName"));
resultUser.setPassword(rs.getString("password"));
}
return resultUser;
}
5.1.2 系统主界面
相关说明:
用户输入正确的用户名,密码和验证码,点击登录,后台验证成功,则进入系统主界面,主要包括四大功能,学生信息管理,班级信息管理,年级信息管理,系统管理;
关键代码实现:
公共页面head.jsp
<div class="row-fluid">
<div class="span12">
<div class="head">
<div class="headLeft">
<img src="${pageContext.request.contextPath}/images/logo.png"/>
</div>
<div class="headRight">
欢迎管理员:<font color="red">${currentUser.userName }</font> <font id="today" class="currentDateTime"></font>
</div>
</div>
</div>
</div>
公共页面menu.jsp
<div class="row-fluid">
<div class="span12">
<div class="navbar">
<div class="navbar-inner">
<a class="brand" href="main.jsp">首页</a>
<ul class="nav">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">学生信息管理 <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="student!preSave">学生信息添加</a></li>
<li><a href="student!list">学生信息维护</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">班级信息管理 <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="class!preSave">班级信息添加</a></li>
<li><a href="class!list">班级信息维护</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">年级信息管理 <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="grade!preSave">年级信息添加</a></li>
<li><a href="grade!list">年级信息维护</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">系统管理 <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="dataDic!list">数据字典维护</a></li>
<li><a href="dataDicType!list">数据字典类别维护</a></li>
<li><a href="user!preSave">修改密码</a></li>
<li class="divider"></li>
<li><a href="javascript:logOut()">退出系统</a></li>
</ul>
</li>
</ul>
公共页面foot.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<div class="row-fluid" style="margin-top: 30px;">
<div class="span12">
<div class="foot">Copyright © 2013-2014 XXX 版权所有</div>
</div>
</div>
5.1.3 学生信息管理实现
学生信息添加:
学生信息修改:
查看学生信息:
删除学生信息:
相关说明:
学生信息维护模块包括以上功能:学生信息显示,学生信息查询,学生信息添加,修改,删除;
关键代码实现:
学生信息查询:
public List<Student> studentList(Connection con,Student s_student,PageBean pageBean)throws Exception{
List<Student> studentList=new ArrayList<Student>();
...此处省略sql拼接代码
if(pageBean!=null){
sb.append(" limit "+pageBean.getStart()+","+pageBean.getPageSize());
}
System.out.println(sb.toString());
PreparedStatement pstmt=con.prepareStatement(sb.toString());
ResultSet rs=pstmt.executeQuery();
while(rs.next()){
Student student=new Student();
student.setStudentId(rs.getString("studentId"));
student.setStuNo(rs.getString("stuNo"));
student.setStuName(rs.getString("stuName"));
student.setStuSex(rs.getString("stuSex"));
student.setStuBirthday(DateUtil.formatString(rs.getString("stuBirthday"),"yyyy-MM-dd"));
student.setStuRxsj(DateUtil.formatString(rs.getString("stuRxsj"),"yyyy-MM-dd"));
student.setStuNation(rs.getString("stuNation"));
student.setStuZzmm(rs.getString("stuZzmm"));
student.setClassId(rs.getInt("classId"));
student.setClassName(rs.getString("className"));
student.setStuDesc(rs.getString("stuDesc"));
student.setStuPic(rs.getString("stuPic"));
student.setGradeId(rs.getInt("gradeId"));
student.setGradeName(rs.getString("gradeName"));
studentList.add(student);
}
return studentList;
}
学生信息添加:
public int studentAdd(Connection con,Student student)throws Exception{
String sql="insert into t_student values(?,?,?,?,?,?,?,?,?,?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, UUIDUtil.getUUID());
pstmt.setString(2, student.getStuNo());
pstmt.setString(3, student.getStuName());
pstmt.setString(4, student.getStuSex());
pstmt.setString(5, DateUtil.formatDate(student.getStuBirthday(), "yyyy-MM-dd"));
pstmt.setString(6, DateUtil.formatDate(student.getStuRxsj(), "yyyy-MM-dd"));
pstmt.setString(7, student.getStuNation());
pstmt.setString(8, student.getStuZzmm());
pstmt.setInt(9, student.getClassId());
pstmt.setString(10, student.getStuDesc());
pstmt.setString(11, student.getStuPic());
return pstmt.executeUpdate();
}
学生信息修改:
public int studentUpdate(Connection con,Student student)throws Exception{
String sql="update t_student set stuNo=?,stuName=?,stuSex=?,stuBirthday=?,stuRxsj=?,stuNation=?,stuZzmm=?,classId=?,stuDesc=?,stuPic=? where studentId=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, student.getStuNo());
pstmt.setString(2, student.getStuName());
pstmt.setString(3, student.getStuSex());
pstmt.setString(4, DateUtil.formatDate(student.getStuBirthday(), "yyyy-MM-dd"));
pstmt.setString(5, DateUtil.formatDate(student.getStuRxsj(), "yyyy-MM-dd"));
pstmt.setString(6, student.getStuNation());
pstmt.setString(7, student.getStuZzmm());
pstmt.setInt(8, student.getClassId());
pstmt.setString(9, student.getStuDesc());
pstmt.setString(10, student.getStuPic());
pstmt.setString(11, student.getStudentId());
return pstmt.executeUpdate();
}
学生信息删除:
public int studentDelete(Connection con,String studentId)throws Exception{
String sql="delete from t_student where studentId=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, studentId);
return pstmt.executeUpdate();
}
学生信息查看:
public Student getStudentById(Connection con,String studentId)throws Exception{
String sql="select * from t_student t1,t_class t2,t_grade t3 where t1.classId=t2.classId and t2.gradeId=t3.gradeId and t1.studentId=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, studentId);
ResultSet rs=pstmt.executeQuery();
Student student=null;
while(rs.next()){
student=new Student();
student.setStudentId(rs.getString("studentId"));
student.setStuNo(rs.getString("stuNo"));
student.setStuName(rs.getString("stuName"));
student.setStuSex(rs.getString("stuSex"));
student.setStuBirthday(DateUtil.formatString(rs.getString("stuBirthday"),"yyyy-MM-dd"));
student.setStuRxsj(DateUtil.formatString(rs.getString("stuRxsj"),"yyyy-MM-dd"));
student.setStuNation(rs.getString("stuNation"));
student.setStuZzmm(rs.getString("stuZzmm"));
student.setClassId(rs.getInt("classId"));
student.setClassName(rs.getString("className"));
student.setStuDesc(rs.getString("stuDesc"));
student.setStuPic(rs.getString("stuPic"));
student.setGradeId(rs.getInt("gradeId"));
student.setGradeName(rs.getString("gradeName"));
}
return student;
}
5.1.4 班级信息管理
效果图:
班级信息查询:
班级信息添加:
班级信息修改:
班级信息删除:
相关说明:
班级信息管理模块包含一下功能:班级信息查询,班级信息添加,修改,删除;
关键代码实现:
班级信息查询:
public List<Class> classList(Connection con,Class s_class)throws Exception{
List<Class> classList=new ArrayList<Class>();
StringBuffer sb=new StringBuffer("select * from t_class t1,t_grade t2 where t1.gradeId=t2.gradeId");
if(s_class!=null && s_class.getGradeId()!=-1){
sb.append(" and t1.gradeId="+s_class.getGradeId());
}
PreparedStatement pstmt=con.prepareStatement(sb.toString());
ResultSet rs=pstmt.executeQuery();
while(rs.next()){
Class c=new Class();
c.setClassId(rs.getInt("classId"));
c.setClassName(rs.getString("className"));
c.setGradeId(rs.getInt("gradeId"));
c.setGradeName(rs.getString("gradeName"));
c.setClassDesc(rs.getString("classDesc"));
classList.add(c);
}
return classList;
}
班级信息添加:
public int classAdd(Connection con,Class c)throws Exception{
String sql="insert into t_class values(null,?,?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, c.getClassName());
pstmt.setInt(2, c.getGradeId());
pstmt.setString(3, c.getClassDesc());
return pstmt.executeUpdate();
}
班级信息修改:
public int classUpdate(Connection con,Class c)throws Exception{
String sql="update t_class set className=?,gradeId=?,classDesc=? where classId=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, c.getClassName());
pstmt.setInt(2, c.getGradeId());
pstmt.setString(3, c.getClassDesc());
pstmt.setInt(4, c.getClassId());
return pstmt.executeUpdate();
}
班级信息删除:
public int classDelete(Connection con,String Id)throws Exception{
String sql="delete from t_class where classId=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1,Id);
return pstmt.executeUpdate();
}
5.1.5 年级信息管理
效果图:
年级信息查询:
年级信息添加:
年级信息修改:
年级信息删除:
相关说明:
年级信息管理模块包含一下功能:年级信息查询,年级信息添加,修改,删除;
关键代码实现:
年级信息查询:
public List<Grade> gradeList(Connection con)throws Exception{
List<Grade> gradeList=new ArrayList<Grade>();
String sql="select * from t_grade";
PreparedStatement pstmt=con.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
while(rs.next()){
Grade grade=new Grade();
grade.setGradeId(rs.getInt("gradeId"));
grade.setGradeName(rs.getString("gradeName"));
grade.setGradeDesc(rs.getString("gradeDesc"));
gradeList.add(grade);
}
return gradeList;
}
年级信息添加:
public int gradeAdd(Connection con,Grade grade)throws Exception{
String sql="insert into t_grade values(null,?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, grade.getGradeName());
pstmt.setString(2, grade.getGradeDesc());
return pstmt.executeUpdate();
}
年级信息修改:
public int gradeUpdate(Connection con,Grade grade)throws Exception{
String sql="update t_grade set gradeName=?,gradeDesc=? where gradeId=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, grade.getGradeName());
pstmt.setString(2, grade.getGradeDesc());
pstmt.setInt(3, grade.getGradeId());
return pstmt.executeUpdate();
}
年级信息删除:
public int gradeDelete(Connection con,String gradeId)throws Exception{
String sql="delete from t_grade where gradeId=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1,gradeId);
return pstmt.executeUpdate();
}
5.1.6 数据字典类别管理
添加数据字典类别:
相关说明:
数据字典类别信息管理模块包含一下功能:数据字典类别查询,数据字典类别添加,修改,删除;
关键代码实现:
数据字典类别信息查询:
public List<DataDicType> dataDicTypeList(Connection con)throws Exception{
List<DataDicType> dataDicTypeList=new ArrayList<DataDicType>();
String sql="select * from t_dataDicType";
PreparedStatement pstmt=con.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
while(rs.next()){
DataDicType dataDicType=new DataDicType();
dataDicType.setDdTypeId(rs.getInt("ddTypeId"));
dataDicType.setDdTypeName(rs.getString("ddTypeName"));
dataDicType.setDdTypeDesc(rs.getString("ddTypeDesc"));
dataDicTypeList.add(dataDicType);
}
return dataDicTypeList;
}
数据字典类别信息添加:
public int dataDicTypeAdd(Connection con,DataDicType dataDicType)throws Exception{
String sql="insert into t_dataDicType values(null,?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, dataDicType.getDdTypeName());
pstmt.setString(2, dataDicType.getDdTypeDesc());
return pstmt.executeUpdate();
}
5.1.8 系统相关设置
功能说明:
用户输入原密码,新密码,确认新密码,都是必填,而且原密码要正确,新密码和确认新密码必须一致,否则提示错误信息;
关键代码:
public int modifyPassword(Connection con,User user)throws Exception{
String sql="update t_user set password=? where userId=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, user.getPassword());
pstmt.setInt(2, user.getUserId());
return pstmt.executeUpdate();
}