使用JSP技术实现一个简单的在线测试系统的实例详解

 更新时间:2020-08-16 23:21:16   作者:佚名   我要评论(0)

1、登陆界面

实现:
本界面由三部分构成,Footer.jsp,Index.jsp,Header.jsp
Header.jsp


<center>
<h2>在线测试系统</h2>
<p>
<a href="Index.jsp" rel="ex

1、登陆界面

实现:

本界面由三部分构成,Footer.jsp,Index.jsp,Header.jsp

Header.jsp

<center>
	<h2>在线测试系统</h2>
	<p>
		<a href="Index.jsp" rel="external nofollow" >登录</a>
		|
		<a href="/page/665.html" rel="external nofollow" >在线测试</a>
		|
		<a href="scorelist.jsp" rel="external nofollow" >成绩榜</a>
	</p>
</center>

果博东方该部分主要实现主界面的头部信息,显示三个链接,分别可以跳转到登陆界面,在线测试界面,以及成绩榜界面

果博东方 Footer.jsp

<%!int pageCount = 0;%>
<% pageCount++; %>
<center>
 <p>Copyright @ 2018 | 访问次数:<%=pageCount%></p>
</center>

果博东方该部分显示登录页面的底部信息,即显示访问次数等其他信息

 Index.jsp

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:include page="Header.jsp" />
<center>
<form action="check.jsp" method="get">
用户名<input type="text" name="username" />
<br>
密码<input type="password" name="psd" />
<br><br>
<button type="submit">登录</button>
<button type="reset">重填</button>
</center>
<jsp:include page="Footer.jsp" />
</form>
</body>
</html>

果博东方该部分主要显示登陆界面的中间界面,用户可以输入用户名和密码实现登陆系统

 2、登陆检测

当用户点击登陆按钮,系统后台会获取用户输入的用户名以及密码,并与预设的进行比对,由于本例没有使用数据库,所以使用Map存储用户名及密码

<%!
Map<String,String> userlist= new HashMap<String,String>();
%>
 
<%
userlist.put("qq", "11");
userlist.put("ww","22");
userlist.put("ee","33");
%>
 
<%!
boolean check(String username,String psd){
	if(userlist.containsKey(username)){
		if(userlist.get(username).equals(psd)){
			return true;
		}
	}
	
	return false;
}
 
%>
 
 
<%
String username=request.getParameter("username");
String psd=request.getParameter("psd");
if(check(username,psd)){
	session.setAttribute("username", username);
	
	out.print("欢迎"+username);
	out.print("<a href='/show/lianghuivlog.html'>开始测试</a>");
}
else{
	out.print("登陆失败,3秒钟后重新登录");
	response.setHeader("refresh", "3;url='Index.jsp'");
}
 
%>

当用户输入的用户名及密码正确时,系统会显示用户姓名,以及跳转链接,同时使用session保存用户名,密码不正确时,3秒后返回登陆界面,

 3、测试页面

果博东方用户输入用户名及密码后便进入测试页面,测试页面的第一行显示用户名,之后显示题目信息。

<%
String username=(String)session.getAttribute("username"); 
if(username==null){
	out.print("未登陆,3秒钟后重新登录");
	response.setHeader("refresh", "3;url='Index.jsp'");
}
else{
	%>
	
	考生:<%=session.getAttribute("username") %>
 
<h3>在线测试题</h3>
<form action="submit.jsp" onsubmit="return confirm('确定提交吗?')">
		第1题:湖北省会是
		<input type="text" name="q1" />
		<br><br>
		第2题:宋朝开国皇帝是
		<br>
		<input type="radio" value="赵匡胤" name="q2">
		赵匡胤
		<input type="radio" value="朱元璋" name="q2">
		朱元璋
		<input type="radio" value="李渊" name="q2">
		李渊
		<br><br>
		第3题:四大名著有
		<br>
		<input type="checkbox" value="红楼梦" name="q3">
		红楼梦
		<input type="checkbox" value="水浒传" name="q3">
		水浒传
		<input type="checkbox" value="J2EE编程技术" name="q3">
		J2EE编程技术
		<br><br>
		<button type="submit">提交</button>
</form>
	
<%}%>

果博东方进入页面之前,会再次检测用户是否登录,以防止用户通过其他路径访问到该页面。

果博东方点击提交时,系统会提示是否提交,点击确定后,系统后台要做两件事,第一件事就是注销session,另一件事就是通过答案获取相应的分数,并且将用户名和分数保存。

4、提交页面

用户完成题目点击提交后,系统会获取用户的答案,并与标准答案对比,获取相应的分数,同时使用application保存用户名和成绩,这样就可以在成绩榜中显示每个用户的成绩信息

<%!
Map<String, Integer> score_list = new HashMap<String, Integer>(); //存放用户名+成绩 
%>
<%
int score=0;
String q1=request.getParameter("q1");
String q2=request.getParameter("q2");
String[] q3=request.getParameterValues("q3");
 
if(q1!=null&&q1.equals("武汉")){	score+=10;	}
if(q2!=null&&q2.equals("赵匡胤")){	score+=10;	}
if(q3!=null&&q3.length==2&&q3[0].equals("红楼梦")&&q3[1].equals("水浒传")){
	score+=10;	}
//out.print("<h2>你的成绩=" + score + "</h2>");
 
score_list.put((String)session.getAttribute("username"), score);
application.setAttribute("scorelist", score_list);
response.sendRedirect("logout.jsp");
%>

 5、成绩榜

果博东方成绩榜通过application显示所有登陆用户的用户名及成绩,并按照成绩进行排序‘'

<h1>成绩榜</h1>
<%!
//降序排序
public <K, V extends Comparable<? super V>> Map<K, V> sortByValueDescending(Map<K, V> map)
 {
  List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>(map.entrySet());
  Collections.sort(list, new Comparator<Map.Entry<K, V>>()
  {
   
   public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2)
   {
    int compare = (o1.getValue()).compareTo(o2.getValue());
    return -compare;
   }
  });
 
  Map<K, V> result = new LinkedHashMap<K, V>();
  for (Map.Entry<K, V> entry : list) {
   result.put(entry.getKey(), entry.getValue());
  }
  return result;
 }
%>
<%
if(application.getAttribute("scorelist")==null){
	out.print("<h3>没有成绩</h3>");
}
else{ //遍历显示所有成绩(Map遍历)
	Map<String, Integer> score_list= (Map<String, Integer>)application.getAttribute("scorelist");
	score_list=sortByValueDescending(score_list);
	Set s=score_list.keySet();
	Iterator it=s.iterator();
	while(it.hasNext()){
		String username=(String)it.next();
		int score=score_list.get(username);
		out.print("<h3>"+username+":"+score+"</h3>");
	}	
}
%>

 6、完整流程

到此这篇关于使用JSP技术实现一个简单的在线测试系统的实例详解的文章就介绍到这了,更多相关JSP技术实现一个简单的在线测试系统内容请搜索脚本之家以前的文章或继续浏览下面的果博东方相关的文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

  • JSP实现在线考试与成绩评测
  • jsp利用application统计在线人数的方法
  • jdbc+jsp实现简单员工管理系统
  • JSP实现简单人事管理系统
  • JSP实现客户信息管理系统
  • JSP学生信息管理系统设计
  • 基于jsp实现新闻管理系统 附完整源码
  • JSP学生信息管理系统

果博东方相关的文章

  • 使用JSP技术实现一个简单的在线测试系统的实例详解

    使用JSP技术实现一个简单的在线测试系统的实例详解

    1、登陆界面 实现: 本界面由三部分构成,Footer.jsp,Index.jsp,Header.jsp Header.jsp <center> <h2>在线测试系统</h2> <p> <a href="Index.jsp" rel="ex
    2020-08-16
  • Yii使用DbTarget实现日志功能的示例代码

    Yii使用DbTarget实现日志功能的示例代码

    一:在配置文件的log组件中配置DbTarget 'log' => [ 'traceLevel' => YII_DEBUG &#63; 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'l
    2020-08-16
  • php实现统计IP数及在线人数的示例代码

    php实现统计IP数及在线人数的示例代码

    写在前面的话 很多人有这样的需求,就是统计网站访问IP以及在线的人数。今天我们就看一下具体实现方法。 开启依赖函数模块 实现这个功能,需要依赖putenv()函数。下
    2020-08-16
  • PHP代码覆盖率统计详解

    PHP代码覆盖率统计详解

    一 安装php环境 二 统计php代码覆盖率 1 需要安装xdebug 安装步骤: //www.jb51.net/article/116419.htm 测试环境 LNMP 军哥一键包1.3版本 PHP 7.0.7 Xdebug
    2020-08-16
  • PHP安全之register_globals的on和off的区别

    PHP安全之register_globals的on和off的区别

    一、register_globals=Off和register_globals=On的区别 register_globals是php.ini里的一个配置,这个配置影响到php如何接收传递过来的参数. register_globals的值可
    2020-08-16
  • php实现商城购物车的思路和源码分析

    php实现商城购物车的思路和源码分析

    本文介绍一个php实现的购物车代码,功能实现完整,具有一定的参考价值 这里我们为你提供个简单的php购物车代码,从增加购物产品与发生购买了,在商城开发中,这个功能是
    2020-08-16
  • php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)

    php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)

    记录每个赞的点赞用户,以及对赞的数量统计 首先判断用户是否点赞。根据是否点赞,载入不同的html,调用不同的方法 已点赞 如果已点赞,显示已点赞的html,
    2020-08-16
  • Laravel中如何轻松容易的输出完整的SQL语句

    Laravel中如何轻松容易的输出完整的SQL语句

    前言 laravel 中自带的查询构建方法 toSql 得到的 sql 语句并未绑定条件参数,类似于这样 select * fromuserswhereid= &#63; ,所以写了个扩展包 laravel-dump-sql
    2020-08-16
  • 关于PHP中interface的用处详解

    关于PHP中interface的用处详解

    确实,PHP 接口是有它的目的的。 它们是契约,是给其他开发人员的说明手册。然而,还是很难理解接口有什么用。 基础 接口是抽象的类,无法直接实例化,但是可被实现
    2020-08-16
  • PHP与Web页面的交互示例详解二

    PHP与Web页面的交互示例详解二

    前言 在《PHP学习笔记-PHP与Web页面的交互1》笔记中讲解了form表单的一些属性,包括它的输入域标记、选择域标记和文字域标记的写法,接下来的内容就是讲如何获取表单
    2020-08-16

最新评论

教育孩子天使与龙的轮舞黄子韬微博哈萨克斯坦4.8级地震四川黑熊袭击村民三少爷的剑房价会降还是会涨苹果股价历史新高