原始工程下载地址:
链接:https://pan.baidu.com/s/1yycn5pQYw1M3WjtybC7N7g
提取码:fj6p
修改后工程下载地址:
链接:https://pan.baidu.com/s/15YFpJCJGW06ANgGOmv7KKg
提取码:64dn
该工程完成了一个管理学生成绩信息的网页管理系统,使用了jsp以及servlet程序完成了该系统的前端和后端程序,在学生信息的管理上,采用了MySQL数据库进行数据信息的管理,但该工程仅仅只是完成了学生信息的增加和查询,并没有很好的实用价值,下面本人将对这一系统做出改进。
但该系统有一个很好的优点,将与数据库的交互用一个类包装了起来,再通过javabean的成员函数对数据库操作函数进行调用,最后,在servlet中,通过对javabean实例成员的成员函数调用实现对数据库的修改,本人的修改将会建立在这一层次结构之上。
首先是完善系统的基本功能,在现有的基础上添加修改的功能。
1 package Servlet;
2
3 import Bean.Student;
4
5 import javax.servlet.ServletException;
6 import javax.servlet.http.HttpServlet;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9 import java.io.IOException;
10 import java.sql.SQLException;
11
12 public class ModifyStudentServlet extends HttpServlet {
13 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
14 request.setCharacterEncoding("utf-8");
15 //获取新的数据
16 String originalID = request.getParameter("originalID");
17 Integer ID = Integer.parseInt(request.getParameter("ID"));
18 String Name = request.getParameter("Name");
19 String Class = request.getParameter("Class");
20 String Gender = request.getParameter("Gender");
21 String Course = request.getParameter("Course");
22 double Grade = Double.parseDouble(request.getParameter("Grade"));
23
24 //向数据库中添加数据
25 Student student = new Student(ID, Name, Gender, Class, Course, Grade);
26 try {
27 student.modifyStudentInformation(originalID);
28 } catch (SQLException throwables) {
29 throwables.printStackTrace();
30 }
31 }
32
33 @Override
34 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
35 req.setCharacterEncoding("utf-8");
36 String originalID = req.getParameter("originalID");
37 String name = req.getParameter("Name");
38 String gender = req.getParameter("Gender");
39 String Class = req.getParameter("Class");
40 String course = req.getParameter("Course");
41 String grade = req.getParameter("Grade");
42 Student student = new Student(Integer.parseInt(originalID), name, gender, Class, course, Double.parseDouble(grade));
43 req.setAttribute("student", student);
44 req.getRequestDispatcher("modify.jsp").forward(req, resp);
45 }
46 }
- 做好与数据库的沟通
- 在MySQLUtils类中添加函数,通过Map获取信息,并将数据库中的信息进行修改
1 static public void updateInformation(String Schema, String primaryKey, String primaryValue, Map<String, String> valueMap) throws SQLException {
2 String valueList = "";
3 for(Map.Entry<String, String> entry : valueMap.entrySet()){
4 valueList += String.format(entry.getKey() + "='" + entry.getValue() + "',");
5 }
6 valueList = valueList.substring(0, valueList.length() - 1);
7 String sql = "UPDATE " + "information" + " SET " + valueList + " WHERE " + primaryKey + " = " + primaryValue;
8 Statement statement = ConnectSQL(Schema);
9 statement.execute(sql);
10 }
- 在Student这一javabean中添加函数,该函数将会将Student类实例中保存的信息整合,并发送至MySQLUtils.updateInformation函数中
1 public void modifyStudentInformation(String originalPrimaryValue) throws SQLException {
2 Map<String, String> valueMap = new HashMap<>();
3 valueMap.put("id", String.valueOf(this.ID));
4 valueMap.put("name", this.Name);
5 valueMap.put("gender", this.Gender);
6 valueMap.put("classes", this.Classes);
7 valueMap.put("course", this.Course);
8 valueMap.put("grade", String.valueOf(this.Grade));
9 MySQLUtils.updateInformation("student", "id", originalPrimaryValue, valueMap);
10 }
- 编写jsp页面
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2 <!DOCTYPE html>
3 <html>
4 <head>
5 <title>修改学生信息</title>
6 <style>
7 .deng{
8 width:300px;
9 height: 400px;
10 background-color: #d9e3e8;
11 margin: 200px auto;
12 border-radius: 10px;
13 border: 1px #000000;
14 }
15 .ding{
16 width: 100%;
17 height: 50px;
18 background-color: #093f63;
19 float:left;
20 border-radius: 10px 10px 0px 0px;
21 color: white;
22 text-align: center;
23 line-height: 50px;
24 }
25 .ref{
26 width: 280px;
27 height: 40px;
28 margin-left: 10px;
29 margin-top: 5px;
30 float: left;
31 text-align: center;
32 line-height: 40px;
33 }
34 </style>
35 </head>
36 <body bgcolor="#e6e6fa">
37
38 <table align="center" border="0px" cellpadding="10px" cellspacing="10px">
39
40
41 <form action="${pageContext.request.contextPath}/modifyStudent" method="post" onsubmit="return check()">
42 <div class="deng">
43 <input type="hidden" value="${requestScope.student.ID}" name="originalID">
44 <div class="ding">学生信息填写</div>
45 <div class="ref">学号:<input type="text" name="ID" id="ID" placeholder="${requestScope.student.ID}"></div>
46 <div class="ref">姓名:<input type="text" name="Name" id="Name" placeholder="${requestScope.student.name}"></div>
47 <div class="ref">性别:<input type="radio" name="Gender" value="男">男<input type="radio" name="Gender" value="女">女</div>
48 <div class="ref">班级:<input type="text" name="Class" id="Class" placeholder="${requestScope.student.classes}"></div>
49 <div class="ref">所修课程:<input type="text" name="Course" id="Course" placeholder="${requestScope.student.course}"></div>
50 <div class="ref">课程成绩:<input type="text" name="Grade" id="Grade" placeholder="${requestScope.student.grade}"></div>
51 <div class="ref"><a href="manager_left.jsp" style="text-decoration: none">返回菜单</a> <input type="submit" value="提交"></div>
52 </div>
53 </form>
54 </table>
55 </body>
56 </html>
至此,修改功能已完成添加。
修改信息的过程如下:
修改前:
修改后:
接着,是向这个系统添加条件筛选功能,为了实现这个功能,我才用了select标签,这是一个html下拉菜单,可以选择要筛选的条件
- 添加比较枚举类型,此枚举类型用于定义大于、小于和等于三种比较方式
1 public enum Condition {
2 LessThan,
3 MoreThan,
4 Equal
5 }
- 向MySQLUtils类中添加筛选查找函数,该函数主要用于查询符合条件的所有项
1 static public ResultSet conditionScreening(String Schema, String key, String value, Condition condition) throws SQLException {
2 String sql = "SELECT * FROM " + "information" + " WHERE " + key;
3 if(condition.equals(Condition.LessThan)){
4 sql += "<'" + value + "'";
5 } else if(condition.equals(Condition.MoreThan)){
6 sql += ">'" + value + "'";
7 } else if(condition.equals(Condition.Equal)){
8 sql += "='" + value + "'";
9 }
10 System.out.println(sql);
11 Statement statement = ConnectSQL(Schema);
12 return statement.executeQuery(sql);
13 }
- 修改jsp页面
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3 <!DOCTYPE html>
4 <html>
5 <head>
6 <meta charset="UTF-8">
7 <title >查询结果</title>
8 <style>
9 .deng{
10 width:600px;
11 height: 800px;
12 background-color: #d9e3e8;
13 margin: 100px auto;
14 border-radius: 10px;
15 border: 1px #000000;
16 }
17 .ding{
18 width: 100%;
19 height: 50px;
20 background-color: #093f63;
21 float:left;
22 border-radius: 10px 10px 0px 0px;
23 color: white;
24 text-align: center;
25 line-height: 50px;
26 }
27 </style>
28 </head>
29 <body bgcolor="#e6e6fa">
30 <div class="deng">
31 <div class="ding">学生信息列表
32 <tr>
33 <td><a href="manager_left.jsp" style="color: white">返回菜单</a></td>
34 </tr>
35
36 </div>
37 <table cellpadding="10px">
38 <tr>
39 <td>学生学号</td>
40 <td>学生姓名</td>
41 <td>学生性别</td>
42 <td>学生所在班级</td>
43 <td>所选课程</td>
44 <td>课程成绩</td>
45 </tr>
46
47 <c:forEach var="item" items="${requestScope.studentList}">
48 <tr>
49 <td>${item.ID}</td>
50 <td>${item.name}</td>
51 <td>${item.gender}</td>
52 <td>${item.classes}</td>
53 <td>${item.course}</td>
54 <td>${item.grade}</td>
55 <td><a href="${pageContext.request.contextPath}/modifyStudent?originalID=${item.ID}&Name=${item.name}&Gender=${item.gender}&Class=${item.classes}&Course=${item.course}&Grade=${item.grade}" methods="get">修改</a></td>>
56 </tr>
57 </c:forEach>
58 </table>
59 </div>
60 </body>
61 </html>
至此,条件筛选的修改就全部完成了,下面来看一下实际运行的效果
查询结果:
通过这次的修改,我更深入地学习了他人代码的长处,并实践了阅读他人代码的方法,阅读他人代码不是一件简单的事情,需要搞懂的地方有很多,比如代码最初编写时编写的思路,工程整体的结构以及核心代码的作用。
这次的修改使我受益匪浅,以后也将多多学习他人编写的优秀代码,并不断联系阅读他人代码的能力,是自身得到快速的进步!