基于JSP实现的学生成绩管理系统

Expiredlove

发布日期: 2018-11-05 12:31:35 浏览量: 2574
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1 引言

1.1 任务简介

  • 多用户管理:用户分管理员,学生

  • 网页界面设计:利用HTML和CSS实现客户端前台设计

  • 类间关系的设计、数据库表格设计

  • 数据库数据的增(录入)、删、改、查等基本功能

  • JSP中Requests Response内置对象的使用;

  • 数据库表格结构的生成(SQL脚本)

  • 前台JS校验设计

  • DOM技术实现

  • 其他扩展功能

  • 开发环境与技术:IDEA、Java 语言、JDK 1.7、MySQL 6.0

1.2 需求分析

本学生成绩管理系统分为管理员登录,学生登录,其中管理员可以实现增加学生成绩信息,删除学生成绩信息,修改学生成绩信息,查找学生成绩信息,按照学生GPA进行排名,其中学生可以实现登录查询成绩功能,能否成功登录取决于数据库中是否有该学生。

2可行性分析

2.1 社会可行性分析

成绩是每一个大学生都会接触到的东西,不仅学生为之心动,为了管理学生的成绩,如果不用计算机来实现,老师们也会感觉很头疼麻烦,开发学生成绩管理系统后,让学生的成绩管理变的更加方便,学生也可以实现自助查询成绩功能,老师们也可以对学生成绩进行排名等。

2.2 经济可行性分析

该系统的开发调查主要是需要软件,这些软件都是免费的。主要的花销在于服务器的维护,除此之外没有其他的花销。

2.3 法律可行性分析

系统开发及维护所使用工具和技术及数据信息不违反法律。

3系统设计

3.1 系统功能设计

学生成绩管理系统具备以下功能:管理员学生分权限登录,增加学生成绩信息,删除学生成绩信息,修改学生成绩信息,查询学生成绩,按照学生GPA进行排名。

  • 分权限登录:系统分为管理员和学生用户两个权限,因为管理员就一个,所以账号秘密固定,但是学生有很多,所以在学生登录的过程中要对数据库中的学生进行查询,如果存在,而且密码正确,才能成功登录

  • 增加学生成绩:该功能可以将学生的姓名,学号,一系列成绩,登录密码等信息录入系

  • 删除学生成绩:该功能可以将学生的信息全部列举出来,然后选择想要删除的学生的信

  • 修改学生成绩:该功能可以将学生的所有信息全部列举出来,然后再选择想要修改的学生的信息,然后弹出一个修改框,再做仔细的修改

  • 查询学生成绩信息:该功能可以在输入学号后显示出学生的各项成绩信息

  • 按照学生GPA进行排名:该功能可以将所有学生按照GPA进行排名,并显示出来

3.2 算法流程设计

根据需求分析,将本系统分为以下模块,模块图如下:

4 关键技术及代码实现

4.1 基本功能

4.1.1 Web前端设计与实现

4.1.1.1 HTML关键技术及应用

include file技术

  1. <html>
  2. <head>
  3. <title>
  4. 学生成绩管理系统
  5. </title>
  6. </head>
  7. <body bgcolor="#FFFFFF">
  8. <%@ include file="include_head_JSP2.jsp"%>
  9. </body>
  10. </html>

Bootstrap 框架技术

  1. <%@page contentType= "text/html; charset=UTF-8" language= "java" errorPage=""%> <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. body{
  6. background-image: url("1281116171866201.jpg");
  7. }
  8. </style>
  9. <title>学生管理系统</title>
  10. <meta name= "viewport" content = "width=device-width, initial-scale= 1.0">
  11. <!-引入Bootstrap->
  12. <link href="bootstrap.css" rel="stylesheet">
  13. </head>
  14. <body>
  15. <center> <hi>学生成绩管理系统</hi></center>
  16. <br>
  17. <center> <div class ="container">
  18. <a href= "selectLogin .j sp" class= "btn btn-info" role= "button">管理员</a>
  19. <a href= "studentLogin.jsp" class= "btn btn-info" role= "button">学生</a>
  20. </div></center>
  21. <!– jQuery (Bootstrap 的 JavaScript 插件需要引⼊ jQuery) –>
  22. <script src=”jquery-3.2.1.min.js”></script>
  23. <!– 包括所有已编译的插件 –>
  24. <script src=”bootstrap.min.js”></script>
  25. </body>
  26. </html>

4.1.1.2 CSS关键技术及应用

Bootstrap.css技术

大量运用Boostrap前段框架中的CSS样式,美化登录界面,表格,按钮。

响应式表格:

  1. <table class=”table table-condensed table-hover>

美化按钮:

  1. <a href=”Findinfo2.jsp” class=”btn btn-inforole=”button”> 返回 </a>

4.1.1.3 JS校验设计及应用

登录界面的校验

  1. <script language=”javascript type=””>
  2. function checkform()
  3. {
  4. //验证输⼊数据的合法性
  5. if (form1.teacherName.value==””)
  6. {
  7. alert(” ⽤户名不能为空。”);
  8. return false;
  9. }
  10. if (form1.teacherPassword.value==””)
  11. {
  12. alert(” 密码不能为空。”);
  13. return false;
  14. }
  15. }
  16. </script>

往数据库写⼊数据的检验

  1. function checkform()
  2. {
  3. //验证输⼊数据的合法性
  4. if (form1.id.value==””)
  5. {
  6. alert(” 学号不能为空。”);
  7. return false;
  8. }
  9. if (isNaN(form1.id.value))
  10. {
  11. alert(” 学号只能为数字”);
  12. return false;
  13. }
  14. if (form1.name.value==””)
  15. {
  16. alert(” 姓名不能为空。”);
  17. return false;
  18. }
  19. if (form1.cppstring.value==””)
  20. {
  21. alert(”C++ 成绩不能为空。”);
  22. return false;
  23. }
  24. if (isNaN(form1.cppstring.value))
  25. {
  26. alert(”C++ 成绩只能为数字”);
  27. return false;
  28. }
  29. else
  30. {
  31. var num=parseFloat(form1.cppstring.value);
  32. if (num<0||num>100)
  33. {
  34. alert(”C++ 成绩必须在 0-100 之间!”);
  35. return false;
  36. }
  37. }
  38. if (form1.cirstring.value==””)
  39. {
  40. alert(” 电路成绩不能为空。”);
  41. return false;
  42. }
  43. if (isNaN(form1.cirstring.value))
  44. {
  45. alert(” 电路成绩只能为数字”);
  46. return false;
  47. }
  48. else
  49. {
  50. var num=parseFloat(form1.cirstring.value);
  51. if (num<0||num>100)
  52. {
  53. alert(” 电路成绩必须在 0-100 之间!”);
  54. return false;
  55. }
  56. }
  57. if (form1.Ewritestring.value==””)
  58. {
  59. alert(” 英语读写成绩不能为空。”);
  60. return false;
  61. }
  62. if (isNaN(form1.Ewritestring.value))
  63. {
  64. alert(” 英语读写成绩只能为数字”);
  65. return false;
  66. }
  67. else
  68. {
  69. var num=parseFloat(form1.Ewritestring.value);
  70. if (num<0||num>100)
  71. {
  72. alert(” 英语读写成绩必须在 0-100 之间!”);
  73. return false;
  74. }
  75. }
  76. if (form1.Elistenstring.value==””)
  77. {
  78. alert(” 英语听说成绩不能为空。”);
  79. return false;
  80. }
  81. if (isNaN(form1.Elistenstring.value))
  82. {
  83. alert(” 英语听说成绩只能为数字”);
  84. return false;
  85. }
  86. else
  87. {
  88. var num=parseFloat(form1.Elistenstring.value);
  89. if (num<0||num>100)
  90. {
  91. alert(” 英语听说成绩必须在 0-100 之间!”);
  92. return false;
  93. }
  94. }
  95. if (form1.physicsstring.value==””)
  96. {
  97. alert(” ⼤学物理成绩不能为空。”);
  98. return false;
  99. }
  100. if (isNaN(form1.physicsstring.value))
  101. {
  102. alert(” ⼤学物理成绩只能为数字”);
  103. return false;
  104. }
  105. else
  106. {
  107. var num=parseFloat(form1.physicstring.value);
  108. if (num<0||num>100)
  109. {
  110. alert(” ⼤学物理成绩必须在 0-100 之间!”);
  111. return false;
  112. }
  113. }
  114. if (form1.prostring.value==””)
  115. {
  116. alert(” 概率论成绩不能为空。”);
  117. return false;
  118. }
  119. if (isNaN(form1.prostring.value))
  120. {
  121. alert(” 概率论成绩只能为数字”);
  122. return false;
  123. }
  124. else
  125. {
  126. var num=parseFloat(form1.prostring.value);
  127. if (num<0||num>100)
  128. {
  129. alert(” 概率论成绩必须在 0-100 之间!”);
  130. return false;
  131. }
  132. }
  133. if (form1.hisstring.value==””)
  134. {
  135. alert(” 近代史成绩不能为空。”);
  136. return false;
  137. }
  138. if (isNaN(form1.hisstring.value))
  139. {
  140. alert(” 近代史成绩只能为数字”);
  141. return false;
  142. }
  143. else {
  144. var num=parseFloat(form1.hisstring.value);
  145. if (num<0||num>100)
  146. {
  147. alert(” 近代史成绩必须在 0-100 之间!”);
  148. return false;
  149. }
  150. }
  151. if (form1.xingzhengstring.value==””)
  152. {
  153. alert(” 形势与政策成绩不能为空。”);
  154. return false;
  155. }
  156. if(isNaN(form1.xingzhengstring.value))
  157. {
  158. alert(” 形势与政策成绩只能为数字”);
  159. return false;
  160. }
  161. else
  162. {
  163. var num=parseFloat(form1.xingzhengstring.value);
  164. if (num<0||num>100)
  165. {
  166. alert(” 形势与政策成绩必须在 0-100 之间!”);
  167. return false;
  168. }
  169. }
  170. if (form1.pestring.value==””)
  171. {
  172. alert(” 体育成绩不能为空。”);
  173. return false;
  174. }
  175. if (isNaN(form1.pestring.value))
  176. {
  177. alert(” 体育成绩只能为数字”);
  178. return false;
  179. }
  180. else
  181. {
  182. var num=parseFloat(form1.pestring.value);
  183. if (num<0||num>100)
  184. {
  185. alert(” 体育成绩必须在 0-100 之间!”);
  186. return false;
  187. }
  188. }
  189. if (form1.discretestring.value==””)
  190. {
  191. alert(” 离散数学成绩不能为空。”);
  192. return false;
  193. }
  194. if (isNaN(form1.discretestring.value))
  195. {
  196. alert(” 离散数学成绩只能为数字”);
  197. return false;
  198. }
  199. else
  200. {
  201. var num=parseFloat(form1.discretestring.value);
  202. if (num<0||num>100)
  203. {
  204. alert(” 离散数学成绩必须在 0-100 之间!”);
  205. return false;
  206. }
  207. }
  208. if (form1.rank.value==””)
  209. {
  210. alert(” 查询密码成绩不能为空。”);
  211. return false;
  212. }
  213. if (form1.rank.value.length<1||form1.rank.value.length>20)
  214. {
  215. alert(” 密码超出了范围(1 20)”);
  216. return false;
  217. }
  218. }
  219. </script>

4.1.1.4 DOM 关键技术及应用

DOM 实际上是以面向对象方式描述的文档模型。DOM 定义了表⽰和修改⽂档所需的对象、这些对象的⾏为和属性以及这些对象之间的关系。可以把 DOM 认为是页面上数据和结构的一个树形表示,不过页面当然可能并不是以这种树的方式具体实现。 通过 JavaScript,您可以重构整个 HTML 文档。您可以添加、移除、改变或重排页面上的项目。 例如使用 Dom 技术来进⾏ Js 校验:

  1. <script language=”javascript type=””>
  2. function checkform()
  3. {
  4. //验证输⼊数据的合法性
  5. if (form1.teacherName.value==””)
  6. {
  7. alert(” ⽤户名不能为空。”);
  8. return false;
  9. }
  10. if (form1.teacherPassword.value==””)
  11. {
  12. alert(” 密码不能为空。”);
  13. return false;
  14. }
  15. }
  16. </script>

4.1.2 Web 后台设计及实现

本学生管理系统后台设计使用了 Java 脚本,Java servlet 过滤器,以及 Java 数据库技术等。

4.1.2.1 数据库设计及 SQL 脚本生成

数据库脚本

  1. CREATE TABLE grade (
  2. id varchar(30) NOT NULL,
  3. name varchar(30) NOT NULL,
  4. cpp varchar(30) NOT NULL,
  5. circuit varchar(30) NOT NULL,
  6. Ewrite varchar(30) NOT NULL,
  7. Elisten varchar(30) NOT NULL,
  8. physics varchar(30) NOT NULL,
  9. probability varchar(30) NOT NULL,
  10. history varchar(30) NOT NULL,
  11. xingzheng varchar(30) NOT NULL,
  12. pe varchar(30) NOT NULL,
  13. discrete varchar(30) NOT NULL,
  14. overall varchar(30) DEFAULT 0’,
  15. gpa varchar(30) DEFAULT 0’,
  16. rank varchar(30) DEFAULT 0
  17. )

4.1.2.2 增删改查功能实现

增加学生成绩信息

  1. String idstring=ChangeEncoding(request.getParameter(”id”).trim());
  2. String namestring=ChangeEncoding(request.getParameter(”name”).trim());
  3. String cppstring=request.getParameter(”cppstring”);
  4. String cirstring=request.getParameter(”cirstring”);
  5. String Ewritestring=request.getParameter(”Ewritestring”);
  6. String Elistenstring=request.getParameter(”Elistenstring”);
  7. String physicsstring=request.getParameter(”physicsstring”);
  8. String prostring=request.getParameter(”prostring”);
  9. String hisstring=request.getParameter(”hisstring”);
  10. String xingzhengstring=request.getParameter(”xingzhengstring”);
  11. String pestring=request.getParameter(”pestring”);
  12. String discretestring=request.getParameter(”discretestring”);
  13. String overallstring=getOvarall(cppstring,cirstring,Ewritestring,Elistenstring, physicsstring,prostring,hisstring,xingzhengstring,pestring,discretestring); String gpastring=getGPA(cppstring,cirstring,Ewritestring,Elistenstring, physicsstring,prostring,hisstring,xingzhengstring,pestring,discretestring); String rankstring=request.getParameter(”rank”);
  14. //构造 SQL 语句
  15. Stringsql=”insertintograde(id,name,cpp,circuit,Ewrite,Elisten,physics,probability,history,xingzheng”+”,pe,discrete,overall,gpa,rank)”+”VALUES(’”+idstring+”’,’”+namestring+”’,’”+cppstring+”’,’”+cirstring+”’,’”+Ewritestring+”’,’”+Elistenstring+”’,’”+physicsstring+”’,’”+prostring+”’,’”+hisstring+”’,’”+xingzhengstring+”’,’”+pestring+”’,’”+discretestring+”’,’”+overallstring+”’,’”+gpastring+”’,’”+rankstring+”’)”;
  16. String DBDRIVER = org.gjt.mm.mysql.Driver ;
  17. // 定义 MySQL 数据库的连接地址
  18. String DBURL = jdbc:mysql://localhost:3306/student”;
  19. // MySQL 数据库的连接⽤户名
  20. String DBUSER = root ;
  21. // MySQL 数据库的连接密码
  22. String DBPASS = xzk520521”;
  23. try {
  24. Class.forName(DBDRIVER).newInstance();
  25. }
  26. catch (ClassNotFoundException e) {
  27. out.print(” 错误”); e.printStackTrace();
  28. }
  29. try {
  30. Connection conn=DriverManager.getConnection(DBURL, DBUSER, DBPASS);
  31. Statement stmt=conn.createStatement();
  32. stmt.executeUpdate(sql);
  33. out.print(”<center>”);
  34. out.println(”<P><font size=2’>”+” 向数据库增加学⽣信息”+”</font>”);
  35. out.println(”<P><font size=2’>”+” 该学⽣信息数据已经成功添加到数据库。”+”</font>”);
  36. out.print(”</center>”);
  37. stmt.close();
  38. conn.close();
  39. }
  40. catch(SQLException e) {
  41. out.print(” 错误”);
  42. e.printStackTrace();
  43. }

删除学生成绩

  1. String DBDRIVER = org.gjt.mm.mysql.Driver ;
  2. // 定义 MySQL 数据库的连接地址
  3. String DBURL = jdbc:mysql://localhost:3306/student”;
  4. // MySQL 数据库的连接⽤户名
  5. String DBUSER = root ;
  6. // MySQL 数据库的连接密码
  7. String DBPASS = xzk520521”;
  8. String id=codeToString(request.getParameter(”id”).trim());
  9. //构造 SQL 语句
  10. String sql=”delete from grade where id=’”+id+”’”;
  11. try {
  12. Class.forName(DBDRIVER).newInstance();
  13. }
  14. catch (ClassNotFoundException e) {
  15. out.print(” 错误”);
  16. e.printStackTrace();
  17. }
  18. try{
  19. Connection conn=DriverManager.getConnection(DBURL, DBUSER, DBPASS);
  20. Statement stmt=conn.createStatement();
  21. stmt.executeUpdate(sql);
  22. out.print(”<center>”);
  23. out.println(”<P><font size=2 color=’blue’>”+” 向数据库删除学⽣信息数据”+”</font>”);
  24. out.println(”<P><fontsize=2’>”+”学号为:”+id+”的学⽣数据信息已经被成功删除。”+”</font>”);
  25. out.print(”</center>”);
  26. stmt.close();
  27. conn.close();
  28. }
  29. catch(SQLException e) {
  30. out.print(” 错误”);
  31. e.printStackTrace();
  32. }

查找学生成绩信息

  1. String DBDRIVER = org.gjt.mm.mysql.Driver ;
  2. // 定义 MySQL 数据库的连接地址
  3. String DBURL = jdbc:mysql://localhost:3306/student” ;
  4. // MySQL 数据库的连接⽤户名
  5. String DBUSER = root ;
  6. // MySQL 数据库的连接密码
  7. String DBPASS = xzk520521”;
  8. String id=request.getParameter(”id”);
  9. String sql=”select * from grade where id=’”+id+”’”;
  10. //设置查询 SQL 语句
  11. try {
  12. Class.forName(DBDRIVER).newInstance();
  13. }
  14. catch (ClassNotFoundException e) {
  15. out.print(” 错误”);
  16. e.printStackTrace();
  17. }
  18. try {
  19. Connection conn=DriverManager.getConnection(DBURL, DBUSER, DBPASS);
  20. Statement stmt=conn.createStatement();
  21. ResultSet rs=stmt.executeQuery(sql);
  22. if(!rs.next()) {
  23. out.print(”<center>”);
  24. out.println(”<P><fontsize=2color=’blue’>”+”该学⽣尚未录⼊系统,请前去录⼊!”+”</font>”);
  25. }
  26. else{
  27. dec.idField.setText(rs.getString(”id”));
  28. dec.nameField.setText(rs.getString(”name”));
  29. dec.cppField.setText(rs.getString(”cpp”));
  30. dec.cirField.setText(rs.getString(”circuit”));
  31. dec.EwriteField.setText(rs.getString(”Ewrite”));
  32. dec.ElistenField.setText(rs.getString(”Elisten”));
  33. dec.phyField.setText(rs.getString(”physics”));
  34. dec.proField.setText(rs.getString(”probability”));
  35. dec.historyField.setText(rs.getString(”history”));
  36. dec.xingzhengField.setText(rs.getString(”xingzheng”));
  37. dec.peField.setText(rs.getString(”pe”));
  38. dec.discreteField.setText(rs.getString(”discrete”));
  39. dec.overallField.setText(rs.getString(”overall”));
  40. dec.gpaField.setText(rs.getString(”gpa”));
  41. }
  42. rs.close();
  43. stmt.close();
  44. conn.close();
  45. }
  46. catch (SQLException e) {
  47. e.printStackTrace();
  48. }

修改学生成绩信息

  1. String idstring=ChangeEncoding(request.getParameter(”id”).trim());
  2. String namestring=ChangeEncoding(request.getParameter(”name”).trim());
  3. String cppstring=request.getParameter(”cpp”);
  4. String cirstring=request.getParameter(”circuit”);
  5. String Ewritestring=request.getParameter(”Ewrite”);
  6. String Elistenstring=request.getParameter(”Elisten”);
  7. String physicsstring=request.getParameter(”physics”);
  8. String prostring=request.getParameter(”probability”);
  9. String hisstring=request.getParameter(”history”);
  10. String xingzhengstring=request.getParameter(”xingzheng”);
  11. String pestring=request.getParameter(”pe”);
  12. String discretestring=request.getParameter(”discrete”);
  13. Stringoverallstring=getOvarall(cppstring,cirstring,Ewritestring,Elistenstring,physicsstring,prostring,hisstring,xingzhengstring,pestring,discretestring);
  14. Stringgpastring=getGPA(cppstring,cirstring,Ewritestring,Elistenstring,physicsstring,prostring,hisstring,xingzhengstring,pestring,discretestring);
  15. String rankstring=request.getParameter(”rank”);
  16. String DBDRIVER = org.gjt.mm.mysql.Driver ;
  17. // 定义 MySQL 数据库的连接地址
  18. String DBURL = jdbc:mysql://localhost:3306/student” ;
  19. // MySQL 数据库的连接⽤户名
  20. String DBUSER = root ;
  21. // MySQL 数据库的连接密码
  22. String DBPASS = xzk520521”;
  23. String id=ChangeEncoding(request.getParameter(”id”).trim());
  24. //构造 SQL 语句
  25. Stringsql=”updategradesetid=’”+idstring+”’,name=’”+namestring+”’,cpp=’”+cppstring+”’,circuit=’”+cirstring+”’,Ewrite=’”+Ewritestring+”’,Elisten=’”+Elistenstring+”’,physics=’”+physicsstring+”’,probability=’”+prostring+”’,history=’”+hisstring+ ”’,xingzheng=’”+xingzhengstring+”’,pe=’”+pestring+”’,discrete=’”+discretestring+”’,overall=’”+overallstring+”’,gpa=’”+ gpastring+”’,rank=’”+ rankstring+”’where id=’”+id+”’”;
  26. try {
  27. Class.forName(DBDRIVER).newInstance();
  28. }
  29. catch (ClassNotFoundException e) {
  30. out.print(” 错误”);
  31. e.printStackTrace();
  32. }
  33. try {
  34. Connection conn=DriverManager.getConnection(DBURL, DBUSER, DBPASS);
  35. Statement stmt=conn.createStatement();
  36. stmt.executeUpdate(sql);
  37. out.print(”<center>”);
  38. out.println(”<P><font size=2 color=’blue’>”+” 向数据库修改学⽣信息数据”+”</font>”); out.println(”<P><fontsize=2’>”+”学号为:”+id+”的学⽣数据信息已经被成功修改。”+”</font>”);
  39. out.print(”</center>”);
  40. stmt.close();
  41. conn.close();
  42. }
  43. catch(SQLException e) {
  44. out.print(” 错误”);
  45. e.printStackTrace();
  46. }

显⽰——按照学⽣的 GPA 进⾏排名并打印

  1. <% String DBDRIVER = org.gjt.mm.mysql.Driver ;
  2. // 定义 MySQL 数据库的连接地址
  3. String DBURL = jdbc:mysql://localhost:3306/student” ;
  4. // MySQL 数据库的连接⽤户名
  5. String DBUSER = root ;
  6. // MySQL 数据库的连接密码
  7. String DBPASS = xzk520521”;
  8. int realrank=1;
  9. String sql=”select * from grade ORDER BY gpa DESC”;
  10. //设置查询 SQL 语句
  11. try {
  12. Class.forName(DBDRIVER).newInstance();
  13. }
  14. catch (ClassNotFoundException e) {
  15. out.print(” 错误”);
  16. e.printStackTrace();
  17. }
  18. try {
  19. Connection conn=DriverManager.getConnection(DBURL, DBUSER, DBPASS);
  20. Statement stmt=conn.createStatement();
  21. ResultSet rs=stmt.executeQuery(sql);
  22. %>
  23. <center><h1> 学⽣成绩 GPA 排名表 </h1></center>
  24. <hr>
  25. <table class=”table table-condensed table-hover >
  26. <thead>
  27. <tr >
  28. <th> 学号 </th>
  29. <th> 姓名 </th>
  30. <th>C++ 成绩 </th>
  31. <th> 电路成绩 </th>
  32. <th> 英语读写 </th>
  33. <th> 英语听说 </th>
  34. <th> ⼤学物理 </th>
  35. <th> 概率论 </th>
  36. <th> 近代史 </th>
  37. <th> 形势与政策 </th>
  38. <th> 体育 </th>
  39. <th> 离散数学 </th>
  40. <th> 总分 </th>
  41. <th>GPA</th>
  42. <th> 排名 </th>
  43. </tr>
  44. </thead>
  45. <%
  46. while (rs.next()){
  47. //获取学⽣数据表中的记录
  48. %>
  49. <tr >
  50. <td><%=rs.getString(”id”)%></td>
  51. <td><%=rs.getString(”name”)%></td>
  52. <td><%=rs.getString(”cpp”)%></td>
  53. <td><%=rs.getString(”circuit”)%></td>
  54. <td><%=rs.getString(”Ewrite”)%></td>
  55. <td><%=rs.getString(”Elisten”)%></td>
  56. <td><%=rs.getString(”physics”)%></td>
  57. <td><%=rs.getString(”probability”)%></td>
  58. <td><%=rs.getString(”history”)%></td>
  59. <td><%=rs.getString(”xingzheng”)%></td>
  60. <td><%=rs.getString(”pe”)%></td>
  61. <td><%=rs.getString(”discrete”)%></td>
  62. <td><%=rs.getString(”overall”)%></td>
  63. <td><%=rs.getString(”gpa”)%></td>
  64. <td><%=realrank++%></td>
  65. </tr>
  66. <%
  67. }
  68. rs.close();
  69. stmt.close();
  70. conn.close();
  71. }
  72. catch (SQLException e){
  73. e.printStackTrace();
  74. }
  75. %>
  76. </table>

4.1.3 Java-Serviet设计与实现

Java-Serviet技术主要用于过滤器的实现,过滤器就是不能再未登录的情况下直接用URL 地址访问操作界面,用Java-Serviet技术实现如下:

userLoginCheckFilter.java

  1. package mywebapp;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.Filter;
  8. import javax.servlet.FilterChain;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import javax.servlet.http.HttpSession;
  14. public class userLoginCheckFilter implements Filter {
  15. public static final Stringloginpage = index.jsp”;
  16. public void destroy(){
  17. }
  18. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws ServletException, IOException {
  19. HttpServletRequest request = (HttpServletRequest)servletRequest;
  20. HttpServletResponse response = (HttpServletResponse)servletResponse;
  21. String currentURL = request.getRequestURI();
  22. String ctxPath = request.getContextPath();
  23. //除掉项⽬名称时访问页⾯当前路径
  24. String targetURL = currentURL.substring(ctxPath.length());
  25. System.out.println(targetURL);
  26. List<String>info = new ArrayList<String>();
  27. HttpSession session = request.getSession(false);
  28. //对当前页⾯进⾏判断,如果当前页⾯不为登录页⾯
  29. if(!((”/index.jsp”.equals(targetURL)) ||
  30. (”/selectLogin.jsp”.equals(targetURL)) ||
  31. (”/studentLogin.jsp”.equals(targetURL)))){
  32. //在不为登陆页⾯时,再进⾏判断,如果不是登陆页⾯也没有 session 则跳转到登录页⾯
  33. if(session == null || session.getAttribute(”admin”) == null){
  34. info.add(”You are not logged in!”);
  35. request.setAttribute(”info”,info);
  36. request.getRequestDispatcher(loginpage).forward(request,response);
  37. return;
  38. }
  39. else{
  40. //这⾥表⽰正确,会去寻找下⼀个链,如果不存在,则进⾏正常的页⾯跳转
  41. filterChain.doFilter(request, response);
  42. return;
  43. }
  44. }
  45. else{
  46. //这⾥表⽰如果当前页⾯是登陆页⾯,跳转到登陆页⾯
  47. try{
  48. filterChain.doFilter(request, response);
  49. }
  50. catch (Exception e){
  51. throw e;
  52. }
  53. return;
  54. }
  55. }
  56. public void init(FilterConfig filterConfig)throws ServletException{
  57. }
  58. }

web.xml ⽂件

  1. <?xml version=”1.0 encoding=”UTF-8”?>
  2. <web-app xmlns=”http://xmlns.jcp.org/xml/ns/javaee” version=”3.1”>
  3. <filter>
  4. <filter-name>userLoginCheckFilter</filter-name>
  5. <filter-class>mywebapp.userLoginCheckFilter</filter-class>
  6. </filter>
  7. <filter-mapping>
  8. <filter-name>userLoginCheckFilter</filter-name>
  9. <url-pattern>*.jsp</url-pattern>
  10. </filter-mapping>
  11. </web-app>

4.1.4 JSP内置对象的使用

本成绩管理系统用了4种JSP内置对象,分别是Request、Response、Out、Session。下面分别列出:

4.1.4.1 Request

  1. String idstring=ChangeEncoding(request.getParameter(”id”).trim());
  2. String namestring=ChangeEncoding(request.getParameter(”name”).trim());
  3. String cppstring=request.getParameter(”cpp”);
  4. String cirstring=request.getParameter(”circuit”);
  5. String Ewritestring=request.getParameter(”Ewrite”);
  6. String Elistenstring=request.getParameter(”Elisten”);
  7. String physicsstring=request.getParameter(”physics”);
  8. String prostring=request.getParameter(”probability”);
  9. String hisstring=request.getParameter(”history”);
  10. String xingzhengstring=request.getParameter(”xingzheng”);
  11. String pestring=request.getParameter(”pe”);
  12. String discretestring=request.getParameter(”discrete”);

4.1.4.2 Response

  1. response.sendRedirect(”teacharMenu.jsp”);

4.1.4.3 Out

  1. out.print(”<center>”);
  2. out.println(”<P><font size=2 color=’blue’>”+” 管理员⽤户或密码错误”+”</font>”);

4.1.4.4 Session

  1. session.setAttribute(”teacherName”,name); session.setAttribute(”teacherPassword”,password);
  2. String user=(String)session.getAttribute(”teacherName”);
  3. String pwd=(String)session.getAttribute(”teacherPassword”);

4.1.5 多用户管理设计与实现

首先进入系统时出现选择用户,如果选择管理员需要知道管理员账号密码,如果选择学生, 需要该学生的学号在数据库中而且密码正确。

5 系统演示

登录

增加

删除

查找

修改

排名

6 总结

6.1 系统缺陷与不足

  • 系统运用的查找算法都是暴力算法,如果面对很多数据的话,系统运行会缓慢,可以运用二分查找算法或者改变存储的数据结构进行优化

  • 系统编码不够灵活,编码转换方面容易产生乱码

6.2 系统可扩展功能

  • 增加选课功能

  • 增加多个管理员功能

  • 增加学生自助修改密码功能

  • 增加一系列功能做成教务系统

上传的附件 cloud_download 基于JSP实现的学⽣成绩管理系统.7z ( 2.04mb, 321次下载 )
error_outline 下载需要6点积分

发送私信

你最美丽的时光陪我度过那些年

5
文章数
5
评论数
最近文章
eject