1 设计题目
学生档案管理系统
2 开发环境
硬件环境:微机系列,内存在1G以上,软件环境:Microsoft Windows XP
3 开发工具
Eclipse、tomcat、mysql
4 完成时间
2020.12.14-2020.12.22
5 设计思想
5.1 总体流程图
图1 程序主要功能
5.2 总体设计思想
首先建立数据库,插入学生档案等信息表,然后连接数据库,在然后做出一个登录页面login.jsp,然后在写个登录数据处理程序LoginCheckServlet.java用来处理登录成功后跳转页面,登录成功后通过LOginCheckServlet.Java来跳转到学生档案首页,然后在学生档案首页中放入学生档案首页按钮、录入学生档案按钮、查询学生档案按钮用来跳转页面。
5.3 系统功能总框图
图2系统功能的总流程图
6 设计过程及设计步骤
6.1 mysql表的创建
①创建一个名称为mydatabase的数据库
CREATE DATABASE mydatabase;
②在该数据库中创建一个stuinfo表
USE mydatabase;
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
stuNumber INT,
stuName VARCHAR(40),
stuSex VARCHAR(40),
stuAge INT,
stuMajor VARCHAR(60)
)CHARACTER SET utf8 COLLATE utf8_general_ci;
然后向其中插入1条数据
set names gbk;
INSERT INTO stuinfo VALUES(101012415,'无与信','男',18,'物联网1182');
以下是表中的数据图:
图3 mySQL表
6.2 登录功能与失败的实现
首先建立login.jsp登录页面、LoginCheckServlet.java处理登录页面的数据、fail.jsp失败页面,以下是具体实现代码:
登录页面代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面< /title>
</head>
<body bgcolor="pink">
<form action="LoginCheckServlet" method=post >
<table align="center">
<tr><td>学生档案管理系统 <hr /></td></tr>
<hr />
<tr>
<td>输入用户名: <hr /></td>
<td><input type="text" name="name" size="16"></td>
</tr>
<tr>
<td>输 入 密 码: <hr /></td>
<td><input type="password" name="password" size="18"> <hr /></td>
</tr>
<tr>
<td><input type="submit" value="登录"> <hr /></td>
</tr>
</table>
</form>
</body>
</html>
LoginCheckServlet.Java代码:
package cn.huaxia;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginCheckServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String name=request.getParameter("name");
String password=request.getParameter("password");
if(name.equals("admin")&&password.equals("123")){
request.getRequestDispatcher("/index.jsp").forward(request, response);
}else{
request.getRequestDispatcher("/fail.jsp").forward(request, response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
失败界面的代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="pink" >
<form action="login.jsp" method=post>
<table align="center">
<tr> <td>账户或密码错误,请重新输入!<hr /></td></tr>
<tr>
<td><input type="submit" value="重新输入"><hr /></td>
</tr>
</table>
</form>
</body>
</html>
6.3连接数据库
建立JDBCUtils.java在其中加入连接数据库和关闭数据库连接的代码,以下是具体实现函数:
package cn.huaxia;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtils {
// 加载驱动,并建立数据库连接
public static Connection getConnection() throws SQLException,ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "476142";
Connection conn = DriverManager.getConnection(url, username,password);
return conn;
}
// 关闭数据库连接,释放资源
public static void release(Statement stmt, Connection conn) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
public static void release(ResultSet rs, Statement stmt,Connection conn){
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
release(stmt, conn);
}
}
6.4添加、删除、修改、查询学生档案信息
建立StulnfoDao.java。在其中加入连接数据库的代码,由于连接数库的代码封装好了,所有直接用了就行(conn=JDBCUtils.getConnection(); )
以下是添加、删除、修改、查询学生档案信息的具体代码:
package cn.huaxia;
import java.sql.*;
import java.util.*;
public class StuInfoDao {
//添加学生信息的操作
public int insert(StuInfo stuinfo){
Connection conn=null;
PreparedStatement prestmt=null;
try{
int stuNumber=stuinfo.getStuNumber();
String stuName=stuinfo.getStuName();
String stuSex=stuinfo.getStuSex();
int stuAge=stuinfo.getStuAge();
String stuMajor=stuinfo.getStuMajor();
//获得与数据库的连接
conn=JDBCUtils.getConnection();
//SQL语句
String sql="insert into stuinfo VALUES(?,?,?,?,?)";
prestmt=conn.prepareStatement(sql);
prestmt.setInt(1,stuNumber);
prestmt.setString(2,stuName);
prestmt.setString(3,stuSex);
prestmt.setInt(4,stuAge);
prestmt.setString(5,stuMajor);
int number=prestmt.executeUpdate();
return number;
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(prestmt,conn);
}
return -1;
}
//删除学生信息的操作
public int deleteById(String id){
Connection conn=null;
Statement stmt=null;
try{
//获得与数据库的连接
conn=JDBCUtils.getConnection();
stmt=conn.createStatement();
//SQL语句
String sql="delete from stuinfo where stuNumber="+id;
int number=stmt.executeUpdate(sql);
return number;
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(stmt,conn);
}
return -1;
}
//修改学生信息的操作
public int update(StuInfo stuinfo){
Connection conn=null;
PreparedStatement prestmt=null;
try{
int stuNumber=stuinfo.getStuNumber();
String stuName=stuinfo.getStuName();
String stuSex=stuinfo.getStuSex();
int stuAge=stuinfo.getStuAge();
String stuMajor=stuinfo.getStuMajor();
//获得与数据库的连接
conn=JDBCUtils.getConnection();
//SQL语句
String sql="update stuinfo set stuName=?,stuSex=?,stuAge=?,stuMajor=? where stuNumber="+stuNumber;
prestmt=conn.prepareStatement(sql);
prestmt.setString(1,stuName);
prestmt.setString(2,stuSex);
prestmt.setInt(3,stuAge);
prestmt.setString(4,stuMajor);
int number=prestmt.executeUpdate();
return number;
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(prestmt,conn);
}
return -1;
}
//查询所有的学生信息的操作
public ArrayList<StuInfo> findAll(){
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
ArrayList<StuInfo> list=new ArrayList<StuInfo>();
try{
//获得与数据库的连接
conn=JDBCUtils.getConnection();
stmt=conn.createStatement();
//SQL语句
String sql="select * from stuinfo";
rs=stmt.executeQuery(sql);
//处理结果集
while(rs.next()){
StuInfo stuinfo=new StuInfo();
stuinfo.setStuNumber(rs.getInt("stuNumber"));
stuinfo.setStuName(rs.getString("stuName"));
stuinfo.setStuSex(rs.getString("stuSex"));
stuinfo.setStuAge(rs.getInt("stuAge"));
stuinfo.setStuMajor(rs.getString("stuMajor"));
list.add(stuinfo);
}
return list;
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(rs,stmt,conn);
}
return null;
}
//根据学号查询学生信息的操作
public ArrayList<StuInfo> findById(int stuNumber){
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
ArrayList<StuInfo> list=new ArrayList<StuInfo>();
try{
//获得与数据库的连接
conn=JDBCUtils.getConnection();
stmt=conn.createStatement();
//SQL语句
String sql="select * from stuinfo where stuNumber="+stuNumber;
rs=stmt.executeQuery(sql);
//处理结果集
while(rs.next()){
StuInfo stuinfo=new StuInfo();
stuinfo.setStuNumber(rs.getInt("stuNumber"));
stuinfo.setStuName(rs.getString("stuName"));
stuinfo.setStuSex(rs.getString("stuSex"));
stuinfo.setStuAge(rs.getInt("stuAge"));
stuinfo.setStuMajor(rs.getString("stuMajor"));
list.add(stuinfo);
}
return list;
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(rs,stmt,conn);
}
return null;
}
//根据姓名查询学生信息的操作
public ArrayList<StuInfo> findByName(String stuName){
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
ArrayList<StuInfo> list=new ArrayList<StuInfo>();
try{
//获得与数据库的连接
conn=JDBCUtils.getConnection();
stmt=conn.createStatement();
//SQL语句
String sql="select * from stuinfo where stuName='"+stuName+"'";
rs=stmt.executeQuery(sql);
//处理结果集
while(rs.next()){
StuInfo stuinfo=new StuInfo();
stuinfo.setStuNumber(rs.getInt("stuNumber"));
stuinfo.setStuName(rs.getString("stuName"));
stuinfo.setStuSex(rs.getString("stuSex"));
stuinfo.setStuAge(rs.getInt("stuAge"));
stuinfo.setStuMajor(rs.getString("stuMajor"));
list.add(stuinfo);
}
return list;
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(rs,stmt,conn);
}
return null;
}
}
6.5 建立insert.Jsp和insertServlet.java
建立这两个文件用来跳转连接到StulnfoDao.java用来实现学生档案录入功能,以下是具体代码。
insert.jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>insert</title>
</head>
<body align="center" bgcolor="#E6E6E6">
<h3 align="center">录入学生档案</h3>
<hr />
<form action="/student/InsertServlet" method="post">
<table align="center">
<tr>
<td>学号</td>
<td><input type="text" name="stuNumber"></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="stuName"></td>
</tr>
<tr>
<td>性别</td>
<td><input type="text" name="stuSex"></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="stuAge"></td>
</tr>
<tr>
<td>专业</td>
<td><input type="text" name="stuMajor"></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="提交"><input type="reset" value="复位"></td>
</tr>
</table>
</form>
</body>
</html>
InsertServlet.java代码:
package cn.huaxia;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class InsertServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String stuNumber=request.getParameter("stuNumber");
String stuName=request.getParameter("stuName");
String stuSex=request.getParameter("stuSex");
String stuAge=request.getParameter("stuAge");
String stuMajor=request.getParameter("stuMajor");
StuInfo stuinfo=new StuInfo();
stuinfo.setStuNumber(Integer.parseInt(stuNumber));
stuinfo.setStuName(stuName);
stuinfo.setStuSex(stuSex);
stuinfo.setStuAge(Integer.parseInt(stuAge));
stuinfo.setStuMajor(stuMajor);
StuInfoDao stuinfodao=new StuInfoDao();
stuinfodao.insert(stuinfo);
request.getRequestDispatcher("/list.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);}}
6.6 学生查询的实现
建立query.jsp和QuerySerlet.java文件用来实现页面的显示和连接stuinfoDao.java文件,实现学生查询功能,以下是具体代码:
Query.jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询学生信息</title>
</head>
<body align="center" bgcolor="#E6E6E6">
<h3 align="center">查询学生信息</h3>
<hr />
<p align="center">请输入学号或者姓名</p>
<form action="/student/QueryServlet" method="post">
<table align="center">
<tr>
<td>学号</td>
<td><input type="text" name="stuNumber"></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="stuName"></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="查询"><input type="reset" value="复位"></td>
</tr>
</table>
</form>
</body>
</html>
QureySerlet.java代码:
package cn.huaxia;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class QueryServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
ArrayList<StuInfo> list=null;
String stuNumber=request.getParameter("stuNumber");
String stuName=request.getParameter("stuName");
StuInfoDao stuinfodao=new StuInfoDao();
if(!stuNumber.isEmpty()){
list=stuinfodao.findById(Integer.parseInt(stuNumber));
}else if(!stuName.isEmpty()){
list=stuinfodao.findByName(stuName);
}
request.setAttribute("list", list);
request.getRequestDispatcher("/list.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
6.7 修改学生信息的实现
建立update.jSp和updateServlet.java文件,实现页面的显示和连接主函数stuinfoDao.java,用来实现修改学生信息,以下是具体代码:
update.jSp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.sql.*" import="cn.huaxia.*" import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body align="center" bgcolor="#E6E6E6">
<h3 align="center">更新学生信息</h3>
<hr />
<form action="/student/UpdateServlet" method="post">
<%
ArrayList<StuInfo> list=null;
String id=request.getParameter("stuNumber");
if(id!=null){
StuInfoDao stuinfodao=new StuInfoDao();
list=stuinfodao.findById(Integer.parseInt(id));
}
String stuNumber="";
String stuName="";
String stuSex="";
String stuAge="";
String stuMajor="";
if(list!=null)
{
stuNumber=Integer.toString(list.get(0).getStuNumber());
stuName=list.get(0).getStuName();
stuSex=list.get(0).getStuSex();
stuAge=Integer.toString(list.get(0).getStuAge());
stuMajor=list.get(0).getStuMajor();
}
%>
<table align="center">
<tr>
<td>学号</td>
<td><input type="text" name="stuNumber" value="<%=stuNumber %>" readonly="true"}></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="stuName" value="<%=stuName %>"></td>
</tr>
<tr>
<td>性别</td>
<td colspan="2"><input type="text" name="stuSex" value="<%=stuSex %>"></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="stuAge" value="<%=stuAge %>"></td>
</tr>
<tr>
<td>专业</td>
<td><input type="text" name="stuMajor" value="<%=stuMajor %>"></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="更新"><input type="reset" value="复位"></td>
</tr>
</table>
</form>
</body>
</html>
UpdateServlet.java代码:
package cn.huaxia;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UpdateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String stuNumber=request.getParameter("stuNumber");
String stuName=request.getParameter("stuName");
String stuSex=request.getParameter("stuSex");
String stuAge=request.getParameter("stuAge");
String stuMajor=request.getParameter("stuMajor");
StuInfo stuinfo=new StuInfo();
stuinfo.setStuNumber(Integer.parseInt(stuNumber));
stuinfo.setStuName(stuName);
stuinfo.setStuSex(stuSex);
stuinfo.setStuAge(Integer.parseInt(stuAge));
stuinfo.setStuMajor(stuMajor);
StuInfoDao stuinfodao=new StuInfoDao();
stuinfodao.update(stuinfo);
request.getRequestDispatcher("/list.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
6.8删除学生信息的实现
建立DeleteServlet.Java文件,在其中输入具体删除代码:
package cn.huaxia;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DeleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String stuNumber=request.getParameter("stuNumber");
//String stuNumber="1007";
StuInfoDao stuinfodao=new StuInfoDao();
stuinfodao.deleteById(stuNumber);
request.getRequestDispatcher("/list.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
7 测试运行
每个网站都会有登录界面,而我的学生档案管理系统也用上了登录页面,以下是登录页面:
图 4登录页面
图5 输入管理员账号
输入账号后进入学生档案管理系统,以下是学生档案管理页面:
图6 学生档案管理首页
进入学生档案管理首页后,点击右边的录入学生档案按钮就会进入录入学生档案系统,
以下是它的运行截图:
图7学生档案录入截图
图8 录入学生档案页面
录入完成之后,点击回到学生档案首页就回看到录入的信息:
图9 学生档案管理首页
学生这么多,想要一个一个的看,眼睛会看不过来的,所以用到了查询,以下是查询的截图:
图10 查询学生档案页面
输入学生学号,然后点击查询就可以看到学号相同的学生档案:
图11 输入学生学号
图12 查询结果
至此还加入了修改学生档案的功能,以下是修改学生档案的页面
图13 修改学生专业页面
图14 修改后的页面
需要打包源码的同学可以私信我