欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 简易的考试系统设计(Web实验)

简易的考试系统设计(Web实验)

2025/5/9 12:36:57 来源:https://blog.csdn.net/2301_81616961/article/details/147805844  浏览:    关键词:简易的考试系统设计(Web实验)

简易的考试系统设计(Web实验)

  • 1.实验内容与设计思想
    • (一)实验需求
    • (二)设计思路
  • 2.代码展示
  • 3.实验小结

1.实验内容与设计思想

(一)实验需求

1.编写两个页面程序,一个HTML页面作为准化考试页面(含有单选、多选、判断题),另一个是JSP评分页面,用于呈现最终的成绩以及其它答题信息反馈。

2.编写后台程序,基于Servlet类,处理提交的答题信息,并返回给评分页面。

(二)设计思路

一、考试页面
1.h1标签设置标题,添加居中样式
2.h3标签显示题型
3.form标签用来创建表单,指明action=‘./result’,method=‘post’
4.label标签显示题目以及选项,添加for=‘id’,使其点击label标签等于点击对应的单选(复选)框,能够增大点击范围
5.input标签,设置type值为radio、checkbox,创建单选框以及复选框,设置name以及id
6.button标签,用来提交表单

效果:
在这里插入图片描述
二、后台数据处理
1.获取所有题目的正确答案:创建一维数组(String[] sum)来存储正确答案
2.获取提交的答案:创建String[] 型变量s1,通过request.getParameter()获取用户选择的答案赋值给s1
3.统计总分以及答对总数:创建变量score以及一维数组n[4](n数组的1~3下标用来存放各个题型的答对题数),遍历sum以及s1,判断二者是否相等。若相等,则score累加10(默认每题10分),n[0]++,用来统计答对的总提数。并且对于不同的题型,进行不同的累加
4.通过request.setAttribute(),将score以及n数组存储起来,并通过请求转发给评分页面,使得评分页面能够获取这些数据
通过
三、评分页面
使用el表达式${},将后台传来的数据嵌入Html代码中,展示出来
使用ul列表,将各种题型答对的总数展示出来

效果:
在这里插入图片描述
在这里插入图片描述

2.代码展示

考试页面:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>C引言考试</title><style>*{margin: 0;padding: 0;}body{background-color: #716969;}.divs{background-color: rgba(255,255,255,0.4);;margin: auto;width: 600px;padding: 15px;}.d1{margin-top: 10px;margin-bottom: 10px;}h1{text-align: center;}label{margin-right: 35px;}button{display: block;margin: auto;margin-bottom: 7px;}</style>
</head>
<body>
<!--单选题-->
<!--多选题-->
<!--判断题--><div class="divs"><h1>C语言测试</h1><form action="./result" method="post"><h3>单选题(共三道,30分)</h3><div class="d1"><label>1.&nbsp;&nbsp;什么是构成C语言程序的基本单位</label><br><input type="radio" name="q1" id="l11" value="A"><label for="l11">A.&nbsp;函数</label><input type="radio" name="q1" id="l12" value="B"><label for="l12">B.&nbsp;过程</label><input type="radio" name="q1" id="l13" value="C"><label for="l13">C.&nbsp;子程序</label><input type="radio" name="q1" id="l14" value="D"><label for="l14">D.&nbsp;子例程</label></div><div class="d1"><label>2.&nbsp;&nbsp;C语言表达式(    )的值不等于1。</label><br><input type="radio" name="q2" id="l21" value="A"><label for="l21">A.&nbsp;123/100</label><input type="radio" name="q2" id="l22" value="B"><label for="l22">B.&nbsp;901%10</label><input type="radio" name="q2" id="l23" value="C"><label for="l23">C.&nbsp;76%3</label><input type="radio" name="q2" id="l24" value="D"><label for="l24">D.&nbsp;625%5</label></div><div class="d1"><label>3.&nbsp;&nbsp;C语言表达式(    )的值不等于1。</label><br><input type="radio" name="q3" id="l31" value="A"><label for="l31">A.&nbsp;*</label><input type="radio" name="q3" id="l32" value="B"><label for="l32">B.&nbsp;==</label><input type="radio" name="q3" id="l33" value="C"><label for="l33">C.&nbsp;=</label><input type="radio" name="q3" id="l34" value="D"><label for="l34">D.&nbsp;%</label></div><h3>多选题(共两道,20分,全选对才有分)</h3><div class="d1"><label>4.&nbsp;&nbsp;C语言表达式(    )的值不等于1。</label><br><input type="checkbox" name="q4" id="l41" value="A"><label for="l41">A.&nbsp;*</label><input type="checkbox" name="q4" id="l42" value="B"><label for="l42">B.&nbsp;==</label><input type="checkbox" name="q4" id="l43" value="C"><label for="l43">C.&nbsp;=</label><input type="checkbox" name="q4" id="l44" value="D"><label for="l44">D.&nbsp;%</label></div><div class="d1"><label>5.&nbsp;&nbsp;C语言表达式(    )的值不等于1。</label><br><input type="checkbox" name="q5" id="l51" value="A"><label for="l51">A.&nbsp;*</label><input type="checkbox" name="q5" id="l52" value="B"><label for="l52">B.&nbsp;==</label><input type="checkbox" name="q5" id="l53" value="C"><label for="l53">C.&nbsp;=</label><input type="checkbox" name="q5" id="l54" value="D"><label for="l54">D.&nbsp;%</label></div><h3>判断题(共五道,50分)</h3><div class="d1"><label>6.&nbsp;&nbsp;如果变量已经正确定义,则表达式fahr ++ 与fahr + 1等价。</label><br><input type="radio" name="q6" id="l61" value="A"><label for="l61">&nbsp;T</label><input type="radio" name="q6" id="l62" value="B"><label for="l62">&nbsp;F</label></div><div class="d1"><label>7.&nbsp;&nbsp;C程序中,用一对大括号{}括起来的多条语句称为复合语句,复合语句在语法上被认为是一条语句。  </label><br><input type="radio" name="q7" id="l71" value="A"><label for="l71">&nbsp;T</label><input type="radio" name="q7" id="l72" value="B"><label for="l72">&nbsp;F</label></div><div class="d1"><label>8.&nbsp;&nbsp;循环体如包括有一个以上的语句,则必须用一对大括号{}括起来,组成复合语句,复合语句在语法上被认为是一条语句。 </label><br><input type="radio" name="q8" id="l81" value="A"><label for="l81">&nbsp;T</label><input type="radio" name="q8" id="l82" value="B"><label for="l82">&nbsp;F</label></div><div class="d1"><label>9.&nbsp;&nbsp;在C语言中,仅由一个分号(;)构成的语句称为空语句,它什么也不做。   </label><br><input type="radio" name="q9" id="l91" value="A"><label for="l91">&nbsp;T</label><input type="radio" name="q9" id="l92" value="B"><label for="l92">&nbsp;F</label></div><div class="d1"><label>10.&nbsp;&nbsp;调用输入输出库函数时,编译预处理命令为#include &ltstdio.h&gt。   </label><br><input type="radio" name="q10" id="l101" value="A"><label for="l101">&nbsp;T</label><input type="radio" name="q10" id="l102" value="B"><label for="l102">&nbsp;F</label></div><button>提交</button></form>
</div>
</body>
</html>

后台数据处理:

package com;import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
@WebServlet("/result")
public class result extends HttpServlet {protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {response.setContentType("text/plain;charset=UTF-8");
//        存放前端答案String[] s1=new String[10];
//        应该将答案放在数据库中,需要时读取String[] sum={"A","D","C","AB","CD","A","A","A","A","A"};String s2="q";for(int i=0;i<10;i++){int t=i+1;s1[i]=request.getParameter(s2+t);}int[] n=new int[4];double score=0;
//        多选,单选,判断没分开for(int i=0;i<10;i++){int yy=0;if(s1[i]==null){i++;continue;}for(int j=0;j<s1[i].length();j++){if(s1[i].charAt(j)!=sum[i].charAt(j)){yy=1;break;}}if(yy==0){n[0]++;score+=10;if(i<3){n[1]++;}else if(i<5){n[2]++;}else{n[3]++;}}}request.setAttribute("score",score);request.setAttribute("n",n);request.getRequestDispatcher("result.jsp").forward(request, response);}
}

评分页面:

<%--Created by IntelliJ IDEA.User: 86135Date: 2025/5/8Time: 19:56To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><style>.tc{color: green;}h1{text-align: center;}div{font-size: 20px;}</style>
</head>
<body>
<%int[] n=(int[]) request.getAttribute("n");int yy=0;if(n[0]==10){yy=1;out.println("<h1 class=\"tc\" >恭喜你,全部答题正确</h1>");}
%>
<h1>本次得分为${score},共答对${n[0]}道题</h1>
<div><label>各类题型答对题数:</label><br><ul><li>单选题:${n[1]}</li><li>多选题:${n[2]}</li><li>判断题:${n[3]}</li></ul>
</div></body>
</html>

3.实验小结

(一)在Jsp中,将数据嵌套在html代码中,可以通过out.print()将html代码与数据拼接,在页面中展示;也可以通过el表达式${},直接在html代码嵌入。
(二)使用请求转发 request.getRequestDispatcher(“page”).forward(request, response),可以共享request以及response,实现数据的共享,并且页面的url不会发生改变。
(三)将正确答案以及选项的顺序写死,会带来安全隐患。需要改进,使其每次访问页面,题目的顺序以及选项的顺序都会随机改变。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词