學生成績管理系統


開頭:

個人的第一篇博客,同時也是第一個完整的實戰項目,由於經驗不足,只能做出簡單級別的當做練手.

第一篇博客!!!

第一個項目!!!

 

開發背景:

軟件名稱:學生成績管理系統(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