2020届软工期中考试总结(1)
题目要求:
石家庄铁道大学在校学生行程统计(20分)
考试时间:180分钟
1、项目需求:
为了有效防止新冠疫情的传播,急需开发一套在校学生行程统计系统,完成信息统计,提前准备,有效保护在校学生的安全。
2.系统要求与功能设计
2.1 页面功能要求
(1)能够在Tomcat服务器中正确部署,并通过浏览器查看;(1分)
(2)网站页面整体风格统一;
(3)石家庄铁道大学在校学生行程统计页面,页面效果如图所示:(15分)
页面详细信息如下表所示:
信息标题 |
信息类型 |
填写要求 |
姓名 |
文本框 |
|
学号 |
文本框 |
要求输入八位数字 |
学生类别 |
单选框 |
单选项:本科生或者研究生 |
院系 |
下拉列表框 |
下来列表框内容包括(土木学院、机械学院、交通学院、信息学院、经管学院) |
联系电话 |
文本框 |
要求输入11位数字 |
健康码颜色 |
单选框 |
单选选项(绿码、黄码、红码) |
行程统计 |
复选框 |
□10月30日去过人民医院 □10月25日以来去过深泽县人民医院 □10月16日以来去过深泽县庄泽村 □10月29日以来去过黑龙江哈尔滨市或者黑河市 □10月18日以来途径贵州遵义市;北京丰台、昌平 □10月17日以来到过湖南长沙;青海海东市 (以上选项可以多选) |
其他涉疫信息需要填报的 |
文本框 |
|
②点击“提交”按钮,保存成功则提示信息“填报成功”,失败则提示“信息填报错误”,并返回当前页面
评分标准:
①完成石家庄铁道大学在校学生行程统计页面(未完成0分,完成2分);
②保存行程信息入库(未完成0分,完成6分);
③学号和联系电话判断是否为指定位数的数字。(未完成0分,完成一个0.5,全部完成1分);
④学生类别和健康码颜色实现单选框选择功能(未完成0分,完成一个0.5,全部完成1分);
⑤实现院系下拉框功能(未完成0分,完成1分)。
⑥实现行程统计复选框功能(未完成0分,完成2分)
⑦实现提交后信息提示功能;(未完成0分,完成2分)
2.2 功能要求
(1)设计出合理的数据库和数据表,要求使用mysql、sqlserver、oracle三种数据库中一种(1分)
(2)使用Serverlet实现信息提交功能(1分)。
(3)使用Java Bean封装数据库连接操作(2分。)
此次代码目录
Web页面dengji.html文件
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <div id="addSubjectForm" align="center"> <form action="dengji" method="post"> <tr> <h2>请输入学生信息</h2> </tr> <table align="center"> <tr> <td>姓名:</td> <td> <input type="text" name="name"> </td> </tr> <tr> <td>学号:</td> <td> <input type="text" name="number" onblur="isCardxuehao(this.value)"> </td> </tr> <tr> <td>学生类别:</td> <td> <input type="radio" name="leibie" value="本科生">本科生<br> <input type="radio" name="leibie" value="研究生" checked>研究生 </td> </tr> <tr> <td>院系:</td> <td> <select name="yuanxi"> <option value="土木学院">土木学院</option> <option value="交通学院">交通学院</option> <option value="机械学院">机械学院</option> <option value="经管学院" selected>经管学院</option> <option value="信息学院">信息学院</option> </select> </td> </tr> <tr> <td>联系电话</td> <td> <input type="text" name="telnumber" onblur="isCardtelnumber(this.value)"> </td> </tr> <tr> <td> 健康码颜色:</td> <td> <input type="radio" name="jiankangma" value="绿码">绿码 <input type="radio" name="jiankangma" value="黄码" checked>黄码 <input type="radio" name="jiankangma" value="红码">红码 </td> </tr> <tr> <td>行程统计:</td> <td> <input type="checkbox" name="a1" value="10月30日去过人民医院">10月30日去过人民医院 <br> <input type="checkbox" name="a2" value="10月25日以来去过深泽县人民医院" checked>10月25日以来去过深泽县人民医院<br> <input type="checkbox" name="a3" value="10月16日以来去过深泽县庄泽村">10月16日以来去过深泽县庄泽村<br> <input type="checkbox" name="a4" value="10月29日以来去过黑龙江哈尔滨市或者黑河市">10月29日以来去过黑龙江哈尔滨市或者黑河市<br> <input type="checkbox" name="a5" value="10月18日以来途径贵州遵义市;北京丰台、昌平">10月18日以来途径贵州遵义市;北京丰台、昌平<br> <input type="checkbox" name="a6" value="10月17日以来到过湖南长沙;青海海东市">10月17日以来到过湖南长沙;青海海东市<br> </td> </tr> <tr> <td>其他:</td> <td> <input type="text" name="qita"> </td> </tr> <tr> <td colspan="2"><div align="center"> <input type="submit" value="录入"> </div> </td> </tr> </form> </div> </body> <script type="text/javascript"> function isCardxuehao(card) { // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^\d{8}$)/; if(reg.test(card) === false) { alert("学号输入不合法"); document.getElementById('number').value=""; } } function isCardtelnumber(card) { // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^\d{11}$)/; if(reg.test(card) === false) { alert("电话号码输入不合法"); document.getElementById('telnumber').value=""; } } </script> </html>
com.Bean包下的Information文件,主要用于封装接收的信息,简化html文件
package com.Bean; public class Information { private String name; private String number; private String leibie; private String yuanxi; private String telnumber; private String jiankangma; private String xingcheng; private String qita; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public String getLeibie() { return leibie; } public void setLeibie(String leibie) { this.leibie = leibie; } public String getYuanxi() { return yuanxi; } public void setYuanxi(String yuanxi) { this.yuanxi = yuanxi; } public String getTelnumber() { return telnumber; } public void setTelnumber(String telnumber) { this.telnumber = telnumber; } public String getJiankangma() { return jiankangma; } public void setJiankangma(String jiankangma) { this.jiankangma = jiankangma; } public String getXingcheng() { return xingcheng; } public void setXingcheng(String xingcheng) { this.xingcheng = xingcheng; } public String getQita() { return qita; } public void setQita(String qita) { this.qita = qita; } }
com.Dao文件下的mannger文件,主要用于连接数据库表,添加表信息
package com.Dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import com.Bean.Information; import com.Util.utils; public class mannger { // TODO Auto-generated method stub public int add(Information A) throws ClassNotFoundException, SQLException { Connection connection = utils.getConnection(); String sql = "insert into stdxc values(?,?,?,?,?,?,?,?)";//修改你的表格名称 PreparedStatement preparedStatement = null; int i=0; try { //创建语句传输对象 preparedStatement = connection.prepareStatement(sql); // preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, A.getName()); preparedStatement.setString(2, A.getNumber()); preparedStatement.setString(3, A.getLeibie()); preparedStatement.setString(4, A.getYuanxi()); preparedStatement.setString(5,A.getTelnumber()); preparedStatement.setString(6, A.getJiankangma()); preparedStatement.setString(7, A.getXingcheng()); preparedStatement.setString(8, A.getQita()); i = preparedStatement.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { } return i; } }
com.Until包下的utils文件,主要用于连接数据库
package com.Util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * JDBC快速入门 */ public class utils { public static Connection getConnection() throws ClassNotFoundException, SQLException { Connection connection = null;//连接数据库 PreparedStatement ps = null;//Statement 对象用于将 SQL 语句发送到数据库中。 ResultSet rs = null; //1. 导入驱动jar包 //2.注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/zjr?serverTimezone=UTC","root", "Zhaowenzhe1007");//修改你的数据库名称以及密码 return connection; } public static void close(Connection connection ) { try { if (connection != null) { connection.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void close(PreparedStatement preparedStatement ) { try { if (preparedStatement != null) { preparedStatement.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void close(ResultSet resultSet ) { try { if (resultSet != null) { resultSet.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Serlvet文件下的dingzhi文件,主要用于专门用来接收客户端的请求,专门接收客户端的请求数据,然后调用底层service处理数据并生成结果传导给数据库,跳转Dao包,并记录数据是否成功添加
package Servlet; import java.io.IOException; import java.sql.SQLException; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import com.Dao.mannger; import com.Bean.Information; /** * Servlet implementation class dengji */ @WebServlet("/dengji")//对应html中的action表单 public class dengji extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public dengji() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("utf-8"); //设置相应的文本类型 response.setContentType("text/html;charset=utf-8");//设置响应类型,并防止中文乱码 mannger A =new mannger(); int i = 0; String name = request.getParameter("name"); String number = request.getParameter("number"); String leibie = request.getParameter("leibie"); String yuanxi = request.getParameter("yuanxi"); String telnumber = request.getParameter("telnumber"); String jiankangma = request.getParameter("jiankangma"); String qita = request.getParameter("qita"); String a1=null; String a2=null; String a3=null; String a4=null; String a5=null; String a6=null; if(request.getParameter("a1")!=null) { a1=request.getParameter("a1")+' '; } else a1=" "; if(request.getParameter("a2")!=null) { a2=request.getParameter("a2")+' '; } else a2=" "; if(request.getParameter("a3")!=null) { a3=request.getParameter("a3")+' '; } else a3=" "; if(request.getParameter("a4")!=null) { a4=request.getParameter("a4")+' '; } else a4=" "; if(request.getParameter("a5")!=null) { a5=request.getParameter("a5")+' '; } else a5=" "; if(request.getParameter("a6")!=null) { a6=request.getParameter("a6")+' '; } else a6=" "; String xingcheng=a1+a2+a3+a4+a5+a6; Information B = new Information(); B.setName(name); B.setNumber(number); B.setYuanxi(yuanxi); B.setLeibie(leibie); B.setTelnumber(telnumber); B.setJiankangma(jiankangma); B.setXingcheng(xingcheng); B.setQita(qita); try { i= A.add(B); } catch (ClassNotFoundException | SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(i==1) response.getWriter().append("添加成功!"); else response.getWriter().append("添加失败!"); } }