学生成绩管理系统


开头:

个人的第一篇博客,同时也是第一个完整的实战项目,由于经验不足,只能做出简单级别的当做练手.

第一篇博客!!!

第一个项目!!!

 

开发背景:

软件名称:学生成绩管理系统(SSMS)

使用对象:大学

 

需求分析

1. 系统分析

该学生信息管理系统涉及到学生、教师、学号、学生成绩、课程。所有用户需输入账号、密码登录进入系统;管理员进入系统后可对学生、老师、班级、课程进行增删改查操作;学生进入系统,查看成绩、查看和修改自己的信息;老师进入系统后,对自己这门课程的学生设置课程成绩、查看和修改自己的信息,查看学生的信息和成绩、以及统计分析学生的成绩;

学生成绩分为两种, 一种是考试成绩占总成绩的百分之60,  一种是平时成绩占总成绩的百分之40.考试成绩出来后,老师进入系统选择该次考试为学生登记成绩。平时考试则是班级平时的考试,老师添加考试信息,登记成绩。成绩统计分析则是针对年级统考进行分析,主要涉及各学科分数名次,总分名次.

 

三、开发环境

系统环境:Windows10

开发工具:Idea

Java版本:JDK 1.8

服务器:tomcat 9.0.36

数据库:MySQL 8.0

系统采用技术:Servlet+Jsp+Jdbc+jQuery+Ajax

 

、代码实现

1、登陆界面 login:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆页面-学生成绩管理系统-javaweb</title>
    <style>
        #cont div {
            text-align: center;
            padding: 15px;
        }

        #cont div:last-child input:first-child {
            margin-right: 30px;
        }

        #cont div:last-child input:first-child {
            margin-left: 30px;
        }

        #cont div:last-child input:first-child {
            margin-right: 30px;
        }

    </style>
</head>
<body>
<div style="margin-top: 150px">
    <jsp:include page="top.jsp"/>
    <div id="cont">
        <%
            String message = (String) request.getAttribute("message");
            if (message!=null){
        %>
        <h3 style="color: #ff0000" align="center">出错信息${message}</h3>
        <%
            }
        %>

        <form action="<%= request.getContextPath()%>/loginServlet?type=trueLogin" method="post">
            <div>
                <label for="userName">
                    用户名:
                </label>
                <input type="text" name="userName" id="userName"/>
            </div>

            <div>
                <label>
                    &nbsp&nbsp&nbsp密码:
                    <input type="password" name="pwd"/>
                </label>
            </div>
            <div>
                <label>
                    &nbsp;验证码:
                    <input type="yangzheng" name="yanzheng"/>
                    <img src="${pageContext.request.contextPath}/main/webapp/WEB-INF/img.jpg"/>
                </label>

            </div>


            <div>
                <input type="submit" value="登陆"/>
                <input type="button" onclick="resetForm()" value="重置"/>
            </div>


        </form>
    </div>
    <jsp:include page="bottom.jsp"/>
</div>
<script>
    function resetForm(){
        document.forms[0].reset()
    }
</script>
</body>
</html>

 

 

 

2、登陆成功界面
  1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2 <html>
  3 <head>
  4     <title>学生管理-学生成绩管理系统-javaweb</title>
  5     <style>
  6         table {
  7             border-collapse: collapse;
  8             border-spacing: 0;
  9             border: 1px solid black;
 10         }
 11 
 12         tr {
 13             line-height: 2;
 14         }
 15 
 16         th, td {
 17             border: 1px solid black;
 18             padding: 0 10px;
 19         }
 20 
 21         #cont {
 22             text-align: left;
 23             margin-left: 540px;
 24             margin-top: 50px;
 25             line-height: 1.5;
 26         }
 27 
 28         .nav, .search, .page {
 29             line-height: 2;
 30         }
 31     </style>
 32 </head>
 33 <body>
 34 <div>
 35     <jsp:include page="../top.jsp"/>
 36     <div id="cont">
 37 <%--        <section class="nav">--%>
 38 <%--            <a href="#">学生管理</a>--%>
 39 <%--            <a href="#">成绩管理</a>--%>
 40 <%--        </section>--%>
 41         <section class="search">
 42             <%
 43                 TableResult<StudentDO> tableResult = (TableResult) request.getAttribute("tableResult");
 44 
 45             %>
 46 
 47             <a href="<%=request.getContextPath()%>/studentServlet?type=toAdd">新增学生</a>
 48             <form method="post" action="<%=request.getContextPath()%>/studentServlet?type=toStudentManage">
 49 <%--                <input type="text" name="studentName" value="<%= tableResult.getStudentName()%>"/>--%>
 50                 <!--value在没有被别人修改的情况下就是1,
 51                     由于不是ajax局部刷新,页面是整体刷新的,所以即便pageNow被就改了,查询结果出来的页面中的pageNow仍然还是1
 52                 -->
 53                 <input type="hidden" name="pageNow" id="pageNow" value="1"/>
 54 <%--                <input type="submit" value="查询">--%>
 55             </form>
 56         </section>
 57         <section>
 58             <table>
 59                 <thead>
 60                 <tr>
 61                     <th>编号</th>
 62                     <th>姓名</th>
 63                     <th>学号</th>
 64                     <th>科目名称</th>
 65                     <th>考勤成绩</th>
 66                     <th>作业成绩</th>
 67                     <th>考试成绩</th>
 68                     <th>操作</th>
 69 
 70 
 71 
 72 
 73                 </tr>
 74                 </thead>
 75                 <tbody>
 76                 <%
 77                     List<StudentDO> data = tableResult.getData();
 78 
 79                     for (int i = 0; i < data.size(); i++) {
 80                         StudentDO studentDO = data.get(i);
 81                 %>
 82                 <tr>
 83                     <td><%= studentDO.getId()%>
 84                     </td>
 85                     <td><%= studentDO.getName()%>
 86                     </td>
 87                     <td><%= studentDO.getNo()%>
 88                     </td>
 89                     <td><%= studentDO.getTask()%>
 90                     </td>
 91                     <td><%= studentDO.getKaoqin()%>
 92                     </td>
 93                     <td><%= studentDO.getZuoye()%>
 94                     </td>
 95                     <td><%= studentDO.getChengji()%>
 96                     <td><a href="<%=request.getContextPath()%>/studentServlet?type=delete&id=<%= studentDO.getId()%>">删除</a>
 97                         <a href="<%=request.getContextPath()%>/studentServlet?type=toUpdate&id=<%= studentDO.getId()%>">更新</a>
 98                     </td>
 99                 </tr>
100                 <%
101                     }
102                 %>
103                 </tbody>
104             </table>
105             <div class="page">
106                 <%
107                     //只要不是第一页就显示
108                     if (tableResult.getPageNow() != 1) {
109                 %>
110                 <a href="#" onclick="goFirst()">首页</a>
111                 <a href="#" onclick="goPre()">上一页</a>
112                 <%
113                     }
114                 %>
115                 <%
116                     //只要不是最后一页就显示
117                     if (tableResult.getPageNow() != tableResult.getPageCount()) {
118                 %>
119                 <a href="#" onclick="goNext()">下一页</a>
120                 <a href="#" onclick="goLast()">尾页</a>
121                 <%
122                     }
123                 %>
124                 <span>共<%=tableResult.getPageCount()%>页</span>
125                 <span>,共<%=tableResult.getTotalCount()%>条</span>
126                 <span>,当前是第<%=tableResult.getPageNow()%>页</span>
127             </div>
128         </section>
129     </div>
130     <jsp:include page="../bottom.jsp"/>
131 
132 </div>
133 <script>
134     function goFirst() {
135         document.forms[0].submit();
136     }
137 
138     //上一页
139     function goPre() {
140         //1、拿到当前页
141         var currentPageStr = "<%=tableResult.getPageNow()%>";
142         var prePage = parseInt(currentPageStr) - 1;
143         //2、修改搜索里面提交的pageNow
144         document.getElementById("pageNow").value = prePage;
145         document.forms[0].submit();
146     }
147     function goNext(){
148         //1、拿到当前页
149         var currentPageStr = "<%=tableResult.getPageNow()%>";
150         var nextPage = parseInt(currentPageStr) + 1;
151         //2、修改搜索里面提交的pageNow
152         document.getElementById("pageNow").value = nextPage;
153         document.forms[0].submit();
154     }
155     //尾页
156     function  goLast(){
157         //1、拿到当尾页
158         var pageCountStr = "<%=tableResult.getPageCount()%>";
159         //2、修改搜索里面提交的pageNow
160         document.getElementById("pageNow").value = parseInt(pageCountStr);
161         document.forms[0].submit();
162     }
163 
164 </script>
165 </body>
166 </html>


成功则进入系统界面

 

失败则进行提示用户名或密码验证码不正确(验证码不知道是浏览器的问题还是怎么回事就是加载不出来)

 

 

3、增加学生
<html>
<head>
    <title>添加学生页面-学生成绩管理系统-javaweb</title>
    <style>
        #cont{
            text-align: center;
            margin-top: 100px;
        }
        #cont div{
            padding: 15px;

        }
    </style>
</head>
<body>
<div>
    <jsp:include page="../top.jsp"/>
    <div id="cont">


        <form action="<%= request.getContextPath()%>/studentServlet?type=add" method="post">
            <div>
                <label>
                    学生姓名:
                    <input type="text" name="studentName" />
                </label>
            </div>
            <div>
                <label>
                    &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp学号:
                    <input type="text" name="no"/>
                </label>
            </div>
            <div>
                <label>
                    &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp科目:
                    <input type="text" name="task"/>
                </label>
            </div>
            <div>
                <label>
                    考勤成绩:
                    <input type="text" name="kaoqin"/>
                </label>
            </div>
            <div>
                <label>
                    作业成绩:
                    <input type="text" name="zuoye"/>
                </label>
            </div>
            <div>
                <label>
                    考试成绩:
                    <input type="text" name="chengji"/>
                </label>
            </div>
            <div>
                <input type="submit" value="增加"/>
            </div>


        </form>
    </div>
    <jsp:include page="../bottom.jsp"/>
</div>

</body>
</html>

 

 

4、更新学生信息
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>更新学生页面-学生成绩管理系统-javaweb</title>
    <style>
        #cont{
            text-align: center;
            margin-top: 100px;
        }
        #cont div{
            padding: 15px;

        }
    </style>
</head>
<body>
<div>
    <jsp:include page="../top.jsp"/>
    <div id="cont">


        <form action="<%= request.getContextPath()%>/studentServlet?type=update" method="post">
            <%
                StudentDO studentDO = (StudentDO)request.getAttribute("studentDO");
            %>
            <div>
                <label>
                    学生编号:
                    <!--disabled的不能提交,如果用了disabled又想提交,就要再加个hiddent的input来提交-->
                    <input type="text" readonly name="studentId" value="<%= studentDO.getId()%>"/>
                </label>
            </div>
            <div>
                <label>
                    学生姓名:
                    <input type="text" name="studentName" value="${studentDO.name}" />
                </label>
            </div>
            <div>
                <label>
                    &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp学号:
                    <input type="text" name="no" value="${requestScope.studentDO.no}"/>
                </label>
            </div>
            <div>
                <label>
                    &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp科目:
                    <input type="text" name="task" value="${studentDO.task}"/>
                </label>
            </div>
            <div>
                <label>
                    考勤成绩:
                    <input type="text" name="kaoqin" value="${studentDO.kaoqin}" />
                </label>
            </div>
            <div>
                <label>
                    作业成绩:
                    <input type="text" name="zuoye" value="${requestScope.studentDO.zuoye}"/>
                </label>
            </div>
            <div>
                <label>
                    考试成绩:
                    <input type="text" name="chengji" value="${studentDO.chengji}"/>
                </label>
            </div>
            <div>
                <input type="submit" value="更新"/>
            </div>


        </form>
    </div>
    <jsp:include page="../bottom.jsp"/>
</div>

</body>
</html>

 

 

 

5、数据库设计

 

 数据库连接与网页与数据库的交互

public class DBUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/student_javaweb?serverTimezone=UTC&characterEncoding=utf-8";
    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String USER_NAME = "root";//Mysql配置时的用户名
    private static final String PWD = "123456";//密码

    static {
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接
     * @return
     */
    public static Connection getConn() {
        try {
            return DriverManager.getConnection(URL, USER_NAME, PWD);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 关闭结果集
     * @return
     */
    public static void closeResultSet(ResultSet resultSet) {
        try {
           if (resultSet != null){
               resultSet.close();
           }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 关闭ps
     * @return
     */
    public static void closePs(PreparedStatement ps) {
        try {
            if (ps != null){
                ps.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 关闭连接
     * @return
     */
    public static void closeConn(Connection conn) {
        try {
            if (conn != null){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}




package com.roadjava.javaweb.student.dao.imol;


import com.roadjava.javaweb.student.beans.entity.AdminDO;
import com.roadjava.javaweb.student.beans.entity.StudentDO;
import com.roadjava.javaweb.student.beans.req.StudentRequest;
import com.roadjava.javaweb.student.beans.res.TableResult;
import com.roadjava.javaweb.student.dao.StudentDao;
import com.roadjava.javaweb.student.util.DBUtil;
import com.roadjava.javaweb.student.util.StringUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class StudentDaoImpl implements StudentDao {

@Override
public int addStudent(StudentDO studentDO) {
Connection conn = DBUtil.getConn();
if (conn == null){
return 0;
}
PreparedStatement ps = null;
StringBuilder sb = new StringBuilder();
sb.append(" insert into student(name,no,task,kaoqin,zuoye,chengji) ");
sb.append(" values(?,?,?,?,?,?) ");
try {
ps = conn.prepareStatement(sb.toString());
ps.setObject(1,studentDO.getName());
ps.setObject(2,studentDO.getNo());
ps.setObject(3,studentDO.getTask());
ps.setObject(4,studentDO.getKaoqin());
ps.setObject(5,studentDO.getZuoye());
ps.setObject(6,studentDO.getChengji());
//打印最终执行的sql语句
System.out.println("addStudent执行的sql:"+ps.toString());
return ps.executeUpdate();


} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.closePs(ps);
DBUtil.closeConn(conn);
}
return 0;
}

@Override
public TableResult<StudentDO> queryStudentByPage(StudentRequest studentRequest) {
TableResult<StudentDO> tableResult = new TableResult<>();
Connection conn = DBUtil.getConn();
if (conn == null){
return null;
}
PreparedStatement ps = null;
ResultSet rs = null;
//查询学生列表

StringBuilder sb = new StringBuilder();
sb.append(" select * from student ");
appendWhere(studentRequest,sb);
sb.append(" order by id desc limit ").append(studentRequest.getStart())
.append(",").append(studentRequest.getPageSize());
try {
ps = conn.prepareStatement(sb.toString());
if (StringUtil.isNotBlank(studentRequest.getStudentName())){
ps.setObject(1,studentRequest.getStudentName());
}

//打印最终执行的sql语句
System.out.println("queryStudentByPage查询学生的sql:"+ps.toString());
rs = ps.executeQuery();
List<StudentDO> list = new ArrayList<>();
while (rs.next()){
StudentDO studentDO = buildStudent(rs);
list.add(studentDO);
}
tableResult.setData(list);//设置数据
/*
查询总条数
*/
sb.setLength(0);
sb.append(" select count(*) from student ");
appendWhere(studentRequest,sb);
ps = conn.prepareStatement(sb.toString());
if (StringUtil.isNotBlank(studentRequest.getStudentName())){
ps.setObject(1,studentRequest.getStudentName());
}
//打印最终执行的sql语句
System.out.println("queryStudentByPage查询学生总条数的sql:"+ps.toString());
rs = ps.executeQuery();
if (rs.next()){
int totalCount = rs.getInt(1);
tableResult.setTotalCount(totalCount);//设置总条数
}
return tableResult;
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.closePs(ps);
DBUtil.closeConn(conn);
DBUtil.closeResultSet(rs);
}
return null;
}

@Override
public StudentDO getStudentById(long studentId) {
Connection conn = DBUtil.getConn();
if (conn == null){
return null;
}
PreparedStatement ps = null;
ResultSet rs = null;
StringBuilder sb = new StringBuilder();
sb.append(" select * from student where id = ? ");
try {
ps = conn.prepareStatement(sb.toString());
ps.setObject(1,studentId);
//打印最终执行的sql语句
System.out.println("getStudentById执行的sql:"+ps.toString());
rs = ps.executeQuery();
if(rs.next()){
return buildStudent(rs);
}

} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.closePs(ps);
DBUtil.closeConn(conn);
DBUtil.closeResultSet(rs);
}
return null;
}


@Override
public int updateStudent(StudentDO studentDO) {
Connection conn = DBUtil.getConn();
if (conn == null){
return 0;
}
PreparedStatement ps = null;
StringBuilder sb = new StringBuilder();
sb.append(" update student set name=?,no=?,task=?,kaoqin=?,zuoye=?,chengji=? ");
sb.append(" where id = ? ");
try {
ps = conn.prepareStatement(sb.toString());
ps.setObject(1,studentDO.getName());
ps.setObject(2,studentDO.getNo());
ps.setObject(3,studentDO.getTask());
ps.setObject(4,studentDO.getKaoqin());
ps.setObject(5,studentDO.getZuoye());
ps.setObject(6,studentDO.getChengji());
ps.setObject(7,studentDO.getId());
//打印最终执行的sql语句
System.out.println("updateStudent执行的sql:"+ps.toString());
return ps.executeUpdate();

} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.closePs(ps);
DBUtil.closeConn(conn);
}
return 0;
}

@Override
public int deleteStudentById(long studentId) {
Connection conn = DBUtil.getConn();
if (conn == null){
return 0;
}
PreparedStatement ps = null;
StringBuilder sb = new StringBuilder();
sb.append(" delete from student where id = ? ");
try {
ps = conn.prepareStatement(sb.toString());
ps.setObject(1,studentId);
//打印最终执行的sql语句
System.out.println("deleteStudentById执行的sql:"+ps.toString());
return ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.closePs(ps);
DBUtil.closeConn(conn);
}
return 0;
}

private StudentDO buildStudent(ResultSet rs) throws SQLException{


long id = rs.getLong("id");
String name = rs.getString("name");
String no = rs.getString("no");
String task = rs.getString("task");
String kaoqin = rs.getString("kaoqin");
String zuoye = rs.getString("zuoye");
String chengji = rs.getString("chengji");
StudentDO studentDO = new StudentDO();
studentDO.setId(id);
studentDO.setName(name);
studentDO.setTask(task);
studentDO.setNo(no);
studentDO.setZuoye(zuoye);
studentDO.setKaoqin(kaoqin);
studentDO.setChengji(chengji);

return studentDO;


}

private void appendWhere(StudentRequest studentRequest, StringBuilder sb) {
String studentName = studentRequest.getStudentName();
if(StringUtil.isNotBlank(studentName)){
sb.append(" where name = ? ");
}
}
}




package com.roadjava.javaweb.student.dao.imol;

import com.roadjava.javaweb.student.beans.entity.AdminDO;
import com.roadjava.javaweb.student.dao.AdminDao;
import com.roadjava.javaweb.student.util.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class AdminDaoImpl implements AdminDao {
@Override
public AdminDO validateLogin(String userName) {
Connection conn = DBUtil.getConn();
if (conn == null){
return null;
}
PreparedStatement ps = null;
ResultSet rs = null;
StringBuilder sb = new StringBuilder();
sb.append(" select * from admin where user_name = ? ");
try {
ps = conn.prepareStatement(sb.toString());
ps.setObject(1,userName);
//打印最终执行的sql语句
System.out.println("balidateLogin执行的sql:"+ps.toString());
rs = ps.executeQuery();
if(rs.next()){
long id = rs.getLong("id");
String pwd = rs.getString("pwd");
AdminDO adminDO = new AdminDO();
adminDO.setId(id);
adminDO.setUser_name(userName);
adminDO.setPwd(pwd);
return adminDO;
}

} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.closePs(ps);
DBUtil.closeConn(conn);
DBUtil.closeResultSet(rs);
}
return null;
}
}

未完待续.......

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM