当前位置: 首页 > article >正文

简易的考试系统设计(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不会发生改变。
(三)将正确答案以及选项的顺序写死,会带来安全隐患。需要改进,使其每次访问页面,题目的顺序以及选项的顺序都会随机改变。

相关文章:

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

简易的考试系统设计&#xff08;Web实验&#xff09; 1.实验内容与设计思想&#xff08;一&#xff09;实验需求&#xff08;二&#xff09;设计思路 2.代码展示3.实验小结 1.实验内容与设计思想 &#xff08;一&#xff09;实验需求 1.编写两个页面程序&#xff0c;一个HTML…...

【嵌入式开发-SDIO】

嵌入式开发--SDIO ■ SDIO-简介■■■■■ ■ SDIO-简介 SDIO(Secure Digital Input and Output)&#xff0c;即安全数字输入输出接口。它是在SD卡接口的基础上发展而来&#xff0c;它可以兼容之前的SD卡&#xff0c;并可以连接SDIO接口设备&#xff0c;比如&#xff1a;蓝牙、…...

基于Kubernetes的Apache Pulsar云原生架构解析与集群部署指南(上)

#作者&#xff1a;闫乾苓 文章目录 概念和架构概述主要特点消息传递核心概念Pulsar 的消息模型Pulsar 的消息存储与分发Pulsar 的高级特性架构BrokerBookKeeperZooKeeper 概念和架构 概述 Pulsar 是一个多租户、高性能的服务器到服务器消息传递解决方案。Pulsar 最初由雅虎开…...

车载网络TOP20核心概念科普

一、基础协议与总线技术 CAN总线 定义&#xff1a;控制器局域网&#xff0c;采用差分信号传输&#xff0c;速率最高1Mbps&#xff0c;适用于实时控制&#xff08;如动力系统&#xff09;。形象比喻&#xff1a;如同“神经系统”&#xff0c;负责传递关键控制信号。 LIN总线 定…...

使用JAVA对接Deepseek API实现首次访问和提问

一、标题 参考&#xff1a;https://www.cnblogs.com/saoge/p/18866776 使用JAVA对接Deepseek API实现首次访问和 提问&#xff1a;我有50万能做什么小本生意&#xff0c;举例3个! 二、代码 import java.io.BufferedReader; import java.io.InputStreamReader; import java.…...

【C语言】文件操作(续)

目录 复习&#xff1a; 一⽂件的顺序读写 例子&#xff1a; 前言&#xff1a; 在上篇文章中介绍了文件的类型&#xff0c;文件指针&#xff0c;流&#xff0c;操作的函数。 在本篇文章继续为大家带来文件细节分享&#xff0c;如 顺序读写等等。 复习&#xff1a; fopen是…...

基于CBOW模型的词向量训练实战:从原理到PyTorch实现

基于CBOW模型的词向量训练实战&#xff1a;从原理到PyTorch实现 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;词向量是将单词映射为计算机可处理的数值向量的重要方式。通过词向量&#xff0c;单词之间的语义关系能够以数学形式表达&#xff0c;为后续的文本分…...

mac连接lniux服务器教学笔记

从你的检查结果看&#xff0c;容器内已经安装了 XFCE 桌面环境&#xff08;xfce.desktop 和 xubuntu.desktop 的存在说明桌面环境已存在&#xff09;。以下是针对 Docker 容器环境的远程桌面配置方案&#xff1a; 一、容器内快速配置远程桌面&#xff08;XFCE VNC&#xff09;…...

vue3 - keepAlive缓存组件

在Vue 3中&#xff0c;<keep-alive>组件用于缓存动态组件或路由组件的状态&#xff0c;避免重复渲染&#xff0c;提升性能。 我们新建两个组件&#xff0c;在每一个组件里面写一个input&#xff0c;在默认情况下当组件切换的时候&#xff0c;数据会被清空&#xff0c;但…...

阀门产业发展方向报告(石油化工阀门应用技术交流大会)

本文大部分内容来自中国通用机械工业协会副会长张宗列在“2024全国石油化工阀门应用技术交流大会”上发表的报告。 一、国外阀门产业发展 从全球阀门市场分布看&#xff0c;亚洲是最大的工业阀门市场&#xff0c;美洲是全球第二大工业阀门市场&#xff0c;欧洲位列第三。 从国…...

Windows Server 2025 安装AMD显卡驱动

运行显卡驱动安装程序&#xff0c;会提示出问题。但是此时资源已经解压 来到驱动路径 C:\AMD\AMD-Software-Installer\Packages\Drivers\Display\WT6A_INF 打开配置文件&#xff0c;把这两行替换掉 %ATI% ATI.Mfg, NTamd64.10.0...16299, NTamd64.10.0, NTamd64.6.0, NTamd64.…...

用 CodyBuddy 帮我写自动化运维脚本

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴”。 #CodeBuddy首席试玩官 背景 我个人是非常喜欢 Jenkins 自动化部署工具的&#xff0c;之前都是手写 Jenki…...

从单体到微服务:基于 ABP vNext 模块化设计的演进之路

&#x1f680; 从单体到微服务&#xff1a;基于 ABP vNext 模块化设计的演进之路 &#x1f9e9; 引言 在需求多变且性能压力日益增大的背景下&#xff0c;传统单体应用在部署、维护和扩展方面存在显著挑战。 ABP vNext 作为基于 ASP.NET Core 的框架&#xff0c;自带模块化设…...

USB集线器芯片革新之战:CH334U如何以工业级性能重新定义HUB控制器

一、当工业智能化遭遇接口瓶颈 在智能制造与边缘计算蓬勃发展的今天&#xff0c;工程师们正面临一个看似微小却至关重要的挑战——如何让USB集线器在极端工况下保持稳定&#xff1f;传统HUB控制器在-20℃以下频繁出现信号失真&#xff0c;产线突然断电导致的静电击穿更是让设备…...

C#学习7_面向对象:类、方法、修饰符

一、类 1class 1)定义类 访问修饰符class 类名{ 字段 构造函数&#xff1a;特殊的方法&#xff08;用于初始化对象&#xff09; 属性 方法... } eg: public class Person { // 字段 private string name; private int a…...

基于 Spring Boot 瑞吉外卖系统开发(十)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;十&#xff09; 修改菜品 修改菜品是在原有的菜品信息的上对菜品信息进行更新&#xff0c;对此修改菜品信息之前需要将原有的菜品信息在修改界面进行展示&#xff0c;然后再对菜品信息进行修改。 修改菜品分为回显菜品信息和更…...

C++ 与 Lua 联合编程

在软件开发的广阔天地里&#xff0c;不同编程语言各有所长。C 以其卓越的性能、强大的功能和对硬件的直接操控能力&#xff0c;在系统开发、游戏引擎、服务器等底层领域占据重要地位&#xff0c;但c编写的程序需要编译&#xff0c;这往往是一个耗时操作&#xff0c;特别对于大型…...

中介者模式(Mediator Pattern)详解

文章目录 1. 中介者模式概述1.1 定义1.2 基本思想2. 中介者模式的结构3. 中介者模式的UML类图4. 中介者模式的工作原理5. Java实现示例5.1 基本实现示例5.2 飞机空中交通控制示例5.3 GUI应用中的中介者模式6. 中介者模式的优缺点6.1 优点6.2 缺点7. 中介者模式的适用场景8. 中介…...

Linux系统(OpenEuler22.03-LTS)部署FastGPT

在 openEuler 22.03 LTS 系统上通过 Docker Compose 安装 FastGPT 的步骤如下&#xff1a; 官方参考文档&#xff1a;https://doc.fastgpt.cn/docs/development/docker/ 1. 安装 Docker 和 Docker Compose 可以参考我之前离线安装Docker的文章&#xff1a;openEuler 22.03 LT…...

Kubernetes控制平面组件:Controller Manager 之 内置Controller详解

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

结合Splash与Scrapy:高效爬取动态JavaScript网站

在当今的Web开发中&#xff0c;JavaScript的广泛应用使得许多网站的内容无法通过传统的请求-响应模式直接获取。为了解决这个问题&#xff0c;Scrapy开发者经常需要集成像Splash这样的JavaScript渲染引擎。本文将详细介绍Splash JS引擎的工作原理&#xff0c;并探讨如何将其与S…...

用于构建安全AI代理的开源防护系统

大家读完觉得有帮助记得及时关注&#xff01;&#xff01;&#xff01; 大型语言模型&#xff08;LLMs&#xff09;已经从简单的聊天机器人演变为能够执行复杂任务的自主代理&#xff0c;例如编辑生产代码、编排工作流程以及基于不受信任的输入&#xff08;如网页和电子邮件&am…...

算法与数据结构 - 常用图算法总结

在图论中&#xff0c;图算法非常重要&#xff0c;广泛应用于计算机科学、网络分析、社交网络、地理信息系统等领域。下面是一些常用的图算法&#xff0c;按不同功能和应用场景分类&#xff1a; 1. 图的遍历 图遍历算法用于遍历图中的节点和边。主要有两种常见的图遍历方法&am…...

克里金模型+多目标优化+多属性决策!Kriging+NSGAII+熵权TOPSIS!

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 克里金模型多目标优化多属性决策&#xff01;KrigingNSGAII熵权TOPSIS&#xff01;&#xff01;matlab2023b语言运行&#xff01; 1.克里金模型&#xff08;Kriging Model&#xff09;是一种基于空间统计学的插值方法…...

LLM 论文精读(三)Demystifying Long Chain-of-Thought Reasoning in LLMs

这是一篇2025年发表在arxiv中的LLM领域论文&#xff0c;主要描述了长思维链 Long Chain-of-Thought 对LLM的影响&#xff0c;以及其可能的生成机制。通过大量的消融实验证明了以下几点&#xff1a; 与shot CoT 相比&#xff0c;long CoT 的 SFT 可以扩展到更高的性能上限&…...

【Prompt工程—文生图】案例大全

目录 一、人物绘图 二、卡通头像 三、风景图 四、logo设计图 五、动物形象图 六、室内设计图 七、动漫风格 八、二次元图 九、日常场景图 十、古风神化图 十一、游戏场景图 十二、电影大片质感 本文主要介绍了12种不同类型的文生图技巧&#xff0c;通过加入不同的图像…...

本地可执行命令的智能体部署方案

本地可执行命令的智能体部署方案&#xff0c;目标是让大语言模型&#xff08;LLM&#xff09;在本地接收自然语言指令&#xff0c;并自动调用系统命令、脚本或应用程序&#xff0c;完成任务自动化。这类系统通常被称为 LLM Agent with Tool Use 或 本地 Agent 实体系统。 &…...

rust程序静态编译的两种方法总结

1. 概述 经过我的探索&#xff0c;总结了两种rust程序静态编译的方法,理论上两种方法都适用于windows、mac os和linux(mac os未验证)&#xff0c;实测方法一性能比方法二好&#xff0c;现总结如下&#xff0c;希望能够帮到你. 2.方法一 2.1 添加配置文件 在项目的同级文件夹下新…...

验证码(笔记)

为什么要有验证码&#xff1a; 为什么验证码这么让人厌烦&#xff0c;每个网站还要使用它呢&#xff1f;换句话说&#xff0c;这些网站为什么要“故意为难”用户呢&#xff1f; 其实验证码主要是为了区分用户是计算机还是人。假设一个黑客知道了你的账号&#xff0c;根据账号可…...

【Linux系列】目录大小查看

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...