项目运行环境:IntelliJ IDEA
服务器:Tomcat
数据库:MySQL
数据库可视化工具:Navicat Premium 12
将功能细化,降低数据冗余,表达到三范式
考生表的主要信息包括学生Id(Sid)、姓名(Sname)、密码(Spwd)、报考状态(Sstatus:0为未报考,1为已报考)、成绩(Grade)
这里的Sid设为自动递增,后续注册时自动为用户生成一个唯一标识,用户用此id进行登录
仅包括管理员的用户名和密码。因为经过分析,管理员与考生之间无直接联系,仅是考场分配和成绩录入的操作。
功能主要分为管理员功能和考生功能,简单的数据库增删改查操作即可实现。
涉及到的数据库操作为表的查询和增加。
用户登录功能关键代码
int flag = -1; //-1:系统异常 0:用户名或密码异常 1:登陆成功
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/testproject", "root", "123456");
String sql = "select count(*) from student where Sid =? and Spwd =?";
pstmt = connection.prepareStatement(sql);
pstmt.setString(1, login.getSid());
pstmt.setString(2, login.getSpwd());
rs = pstmt.executeQuery();
if (rs.next()) {
result = rs.getInt(1);
}
if (result > 0) {
return 1;
} else {
return 0;//登陆失败(用户名或密码有误!)
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
return -1; //登陆失败(系统异常!)
} catch (SQLException e) {
e.printStackTrace();
return -1;
} catch (Exception e) {
e.printStackTrace();
return -1;
} finally {
{
try {
if (pstmt != null) pstmt.close();
if (rs != null) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
查询数据库中有没有发过来的指定字段,如果ResultSet rs 查到值,则 result = rs.getInt(1); 并给servlet返回1,servlet借此判断登陆成功,跳转至登录成功界面
public int registerUser(Register register){
String sql = "insert into Student(Sname,Spwd,Ssex,Sphone) values(?,?,?,?)";
PreparedStatement pstmt = DButils.getPreparedStatement(sql,register.getSname(),register.getSpwd(),register.getSsex(),register.getSphone());
try {
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
这里只是简单的插入数据 操作,就不赘述了
注册并登录成功后,跳转至用户首页:
这里是对数据库的多表查询,稍有些复杂。此外,用户的考场号需要等待管理员分派后才可以显示,默认为0.
select student.Sname,student.Ssex,student.Sid,exam.Ename,student.Rid from student,exam where student.Sid=18130 and(select Ename from exam where student.Eid in(select student.Eid from student where student.Sid=18130))
管理员给用户成绩赋值后,用户方可查询成绩。这里涉及的sql操作也比较简单。
<%
String statue = "0";
String id = String.valueOf(request.getAttribute("id"));
statue = String.valueOf(request.getAttribute("statue"));
if (statue == "1") {
%>
<script src="layer.js"></script>
<script>
layer.open({
title: '注册成功,您的用户名为'
, content: <%=id%>
});
</script>
<%
} else {
%>
<script src="layer.js"></script>
<script>
layer.msg('请选择登录或注册');
</script>
<%
}
%>