iCoding项目----题库页面实现_icodef题库-程序员宅基地

技术标签: 在读程序猿  javaweb  

iCoding项目----题库页面实现

功能简介–分页面

  1. 首页
  2. 题库页面
  3. 题解页面
  4. 讨论区
  5. 吐槽
  6. 登陆注册
  7. 个人空间

题库页面实现

  1. 问题动态展示和翻页

    ①.通过ajaxgetpageServlet传两个参数currentPagetype(question/answer,代表问题页或题解页)。
    ②. 在getpageServlet中向Page实体类中封装currentPage,调用servicegetAnsPage方法,再调用Dao层中的getAnsPage方法返回封装完成的Page(内涵当前页的具体问题,问题的qid,title)
    ③.ajax的返回函数代码为

			success:function(dataJson){
    	
					//显示部分
					var $tbody = $(".questionContent");
					$tbody.empty();
					var queList = dataJson.queList;
					var question = "question";
					for(i=0;i<queList.length;i++)
					{
    
						var $tr = $("<tr></tr>");
						$tr.html(
								"<td></td>"+
                        		 "<td><span style='color: grey;'>"+queList[i].qid+"</span></td>"+
                        		 "<td><a href='getquestionByid?qid="+queList[i].qid+"&uid=0&type="+question+"'>"+queList[i].questionTitle+"</a></td>"+
                        		 "<td><span style='color: grey;'>简单</span></td>"+
                        		 "<td><span class='label label-success round'>100%</span></td>"
                        		);
                        $tbody.append($tr);
						
					}
					//翻页部分
					var maxPage = dataJson.pageNum;
					var $li = $(".flag");
					for(var i=maxPage;i>0;i--)
					{
    
						var $myli = $("<li class='#' id='"+i+"'></li>");
						$myli.html(
									"<a href = '#'>"+i+"</a>"
									);
						$myli.click(function(){
    							
							changePage( $(this).text() );
						});
						$li.after($myli);
						
					}
					$("#1").attr("class","active");
					$("#page_sta").click(function(){
    
						changePage( 1 );
					});
					$("#page_end").click(function(){
    
						changePage( maxPage );
					});
				}

④. Dao层具体实现为

	public Page getPage(Page page) {
    
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		try {
    	
			conn = JDBCUtil.getConnection();
			String sql = "select * from questionbank limit ?,?";
			ps = conn.prepareStatement(sql);
			int firstParam = (page.getCurPage()-1)*page.getQueNum();
			ps.setInt(1, firstParam);
			ps.setInt(2, page.getQueNum());
			rs = ps.executeQuery();
			
			while(rs.next()) {
    
				//填充当前页展示的具体问题
				Code code = new Code();
				code.setQid(rs.getInt(1));
				code.setQuestionTitle(rs.getString(2));
				code.setQuestionDescription(rs.getString(3));
				code.setInputFormat(rs.getString(4));
				code.setOutputFormat(rs.getString(5));
				code.setInputSample(rs.getString(6));
				code.setOutputSample(rs.getString(7));		
				
				List<Code> codeList = page.getQueList();
				codeList.add(code);
			}
			//codes中题解的总数
			sql = "select count(1) from codes";
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			rs.next();
			int totalNum = rs.getInt(1);
			int pageNum = 1;
			if(totalNum<page.getQueNum()) {
    
				pageNum = 1;
			}else if(totalNum%page.getQueNum()==0) {
    
				pageNum = totalNum/page.getQueNum();
			}else if(totalNum%page.getQueNum()!=0) {
    
				pageNum = totalNum/page.getQueNum()+1;
			}
			page.setPageNum(pageNum);
			
			return page;
			
		} catch (ClassNotFoundException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
    
			try {
    
				JDBCUtil.closeConnection(rs,ps, conn);
			} catch (SQLException e) {
    
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return page;
	}

⑤.翻页函数

	function changePage(num)
	{
    
		var question = "question";
		$.ajax({
    
			url:"getPage?currentPage="+num+"&type="+question,
			type:"post",
			data:{
    },
			dataType:"json",
			success:function(dataJson){
    	
				var $tbody = $(".questionContent");
				$tbody.empty();
				var queList = dataJson.queList;
				var question = "question";
				for(i=0;i<queList.length;i++)
				{
    
					var $tr = $("<tr></tr>");
					$tr.html(
							"<td></td>"+
                    		 "<td><span style='color: grey;'>"+queList[i].qid+"</span></td>"+
                    		 "<td><a href='getquestionByid?qid="+queList[i].qid+"&uid=0&type="+question+"'>"+queList[i].questionTitle+"</a></td>"+
                    		 "<td><span style='color: grey;'>简单</span></td>"+
                    		 "<td><span class='label label-success round'>100%</span></td>"
                    		);
                    $tbody.append($tr);	
				}
				//当前是那一页
				for(var j=1;j<=dataJson.pageNum;j++)
				{
    
					$("#"+j+"").attr("class","#");
				}
				$("#"+num+"").attr("class","active");				
			}			
		});	
	}
  1. 查找功能
    ①ajax代码
			$("#searchbutton").click(function(){
    
				
				$.ajax({
    
					url:"searchServlet?curpage="+1,
					type:"post",
					data:{
    
						"searchContent":$("#search_content").val()
					},
					dataType:"json",
					success:function(dataJson)
					{
    
						var $tbody = $(".questionContent");
						$tbody.empty();
						var queList = dataJson.queList;
						var question = "question";
						for(i=0;i<queList.length;i++)
						{
    
							var $tr = $("<tr></tr>");
							$tr.html(
									"<td></td>"+
	                        		 "<td><span style='color: grey;'>"+queList[i].qid+"</span></td>"+
	                        		 "<td><a href='getquestionByid?qid="+queList[i].qid+"&type="+question+"'>"+queList[i].questionTitle+"</a></td>"+
	                        		 "<td><span style='color: grey;'>简单</span></td>"+
	                        		 "<td><span class='label label-success round'>100%</span></td>"
	                        		);
	                        $tbody.append($tr);
							
						}
						var lastmaxpage = ${
    maxpage};
						for(var i=1;i<=lastmaxpage;i++)
						{
    
							$("#"+i+"").remove();
						}
						var $li = $(".flag");	
						var $myli = $("<li class='#' id='1'></li>");
						$myli.html(
									"<a href = '#'>1</a>"
								  );
						$li.after($myli);
						$("#1").attr("class","active");
					}
				});
			});
			
		});
②.Dao层实现
	public Page searchQueDao(String SearchContent,Page page) {
    
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
    
			conn = JDBCUtil.getConnection();
			//模糊匹配
			String sql = "select * from questionbank where questionTitle like '%"+SearchContent+"%';";
			ps = conn.prepareStatement(sql);
			//ps.setString(1, SearchContent);
			rs = ps.executeQuery();
			
			
			for(int first = 1;rs.next();first++)
			{
    
				Code code = new Code();
				code.setQid(rs.getInt(1));
				code.setQuestionTitle(rs.getString(2));
				code.setQuestionDescription(rs.getString(3));
				code.setInputFormat(rs.getString(4));
				code.setOutputFormat(rs.getString(5));
				code.setInputSample(rs.getString(6));
				code.setOutputSample(rs.getString(7));		
				
				
				List<Code> codeList = page.getQueList();
				codeList.add(code);
				page.setQueNum(first);
			}
			int pagenum = 1;
			page.setPageNum(pagenum);
			
			return page;
		} catch (ClassNotFoundException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
    
			try {
    
				JDBCUtil.closeConnection(rs,ps, conn);
			} catch (SQLException e) {
    
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return page;
	}

具体题目页面

通过超链接
"<td><a href='getquestionByid?qid="+queList[i].qid+"&type="+question+"'>"+queList[i].questionTitle+"</a></td>"
将参数qid,(uid),type传到getquestionByidservlet–type用来区分是题目页面还是题解页面。
getquestionByidservlet代码:

@WebServlet("/getquestionByid")
public class getQuestionByidServlet extends HttpServlet {
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
		request.setCharacterEncoding("utf-8");
		String qid = request.getParameter("qid");
		String type = request.getParameter("type");
			
		Code code = new Code();
		code.setQid(Integer.valueOf(qid));
				
		if("question".equals(type))
		{
    
			GetQuestionByidService gs = new GetQuestionByidServiceImpl();
			code = gs.getQuestionByidService(code);
			request.setAttribute("qid", code.getQid());
			request.setAttribute("tit", code.getQuestionTitle());
			request.setAttribute("des", code.getQuestionDescription());
			request.setAttribute("format_in", code.getInputFormat());
			request.setAttribute("format_out", code.getOutputFormat());
			request.setAttribute("example_in", code.getInputSample());
			request.setAttribute("example_out", code.getOutputSample());
			request.getRequestDispatcher("questionEditor.jsp").forward(request, response);
		}
		if("answer".equals(type))
		{
    
			List<Code> codes = new ArrayList<Code>();
			String uidStr = request.getParameter("uid");
			code.setUid(Integer.valueOf(uidStr));
			
			GetQuestionByidService gs = new GetQuestionByidServiceImpl();
			codes = gs.getQuestionByidAnsService(code);					
			
			request.setAttribute("qid", codes.get(1).getQid());
			request.setAttribute("tit", codes.get(1).getQuestionTitle());
			request.setAttribute("des", codes.get(1).getQuestionDescription());
			request.setAttribute("code", codes.get(1).getCode());
			request.setAttribute("author",codes.get(1).getUsername());
			request.setAttribute("pertit", codes.get(0).getQuestionTitle());
			request.setAttribute("perqid", codes.get(0).getQid());
			request.setAttribute("peruid", codes.get(0).getUid());
			request.setAttribute("nexttit", codes.get(2).getQuestionTitle());
			request.setAttribute("nextqid", codes.get(2).getQid());
			request.setAttribute("nextuid", codes.get(2).getUid());
			request.getRequestDispatcher("questionAns.jsp").forward(request, response);
		}
		
	}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39814130/article/details/95750327

智能推荐

C++宏-程序员宅基地

文章浏览阅读240次。C/C++中的宏定义,给程序员提供了更加简洁的表达方式,但是里面的也有一些需要注意的地方:# - 把当前的标识符转化成字符串## - 连接两个标识符,成为一个新的标识符,新的标识符必须是已经有变量名或者宏名称#@ - 把当前的一个字符的标识符转换成变量一个字符,多余多个字符则会提出警告,只取最后一个字符#pragma once#define MSUM(a, b, s){\ s ..._c++宏

UserDefault数据读取_子线程读 userdefault-程序员宅基地

文章浏览阅读756次。//GameScene.h#include "cocos2d.h"USING_NS_CC;class GameScene : public cocos2d::Layer{public: static cocos2d::Scene* createScene(); virtual bool init(); void menuCallback(Ref* pSender)_子线程读 userdefault

CTF图片拼图&安装坑点-程序员宅基地

文章浏览阅读9.2k次,点赞10次,收藏32次。背景作为一小白初次了解ctf,遇到每一题都磕磕绊绊,记录一拼图的题目。题目是给一张图片,然后找出flag。当我们获得一堆小图片(如下图所示)时,便可以通过 montage 进行拼图,进而通过 gaps 优化获得所需的flag信息。一些报错ImportError: No module named 'skbuild'ERROR: Command errored out with exit status 1: /usr/bin/python /usr/local/lib/python2.7/dist-

NodeJS之NPM模块管理器_npm管理node-程序员宅基地

文章浏览阅读1.2k次。文章目录1 npm模块管理器1.1 npm简介1.2 npm常用命令1.2.1 npm init1.2.2 npm set1.2.3 npm info1.2.4 npm search1.2.5 npm list1.2.6 npm install1.2.7 npm update,npm uninstall1.2.8 npm run1.2.8.1 参数1.2.9 通配符1.2.10 npm versi..._npm管理node

vue 行内样式加背景图不显示问题-程序员宅基地

文章浏览阅读2.8k次。vue图片放在assets里面,在标签上动态绑定一个背景图样式,不显示问题。<div class="login" :style="{backgroundImage:'url('+loginImage+')'}"></div>图片路径loginImage:'../assets/images/login-background.jpg' //默认图最开始以为路径写错了,就在样式位置直接加,但是显示是正常的。<style rel="stylesheet/scss" lan

使用Dev-C++调试,变量的值 not found in current context,下一步是灰色无法点击-程序员宅基地

文章浏览阅读1w次,点赞10次,收藏13次。在学习使用Dev-C++进行调试时,设断点之后遇到了变量的值 not found in current context,下一步等是灰色无法点击这样的问题,如图。(1)在百度后了解到,应把工具->编译选项->代码生成/优化->连接器中的产生调试信息项改成YES,如图。这样就应该解决了问题。(2)但我还无法成功调试,后来发现是自己粗心,保存时将C语言的代码保存成.cpp为后缀而不是.c。.c代表C的源程序,.cpp代表c++源程序。重新保存成后缀为.c,就可以正常调试了。.._not found in current context

随便推点

ZOJ 1464 Cable Master(二分)-程序员宅基地

文章浏览阅读474次。首先对所有的cables按长度从大到小排个序,然后对0.0到最大长度的cable进行二分.#include #include #include #include #include using namespace std;#define eps 1e-4const int maxn=10010;double cb[maxn];int n,m;int main(){ int

树与二叉树的学习总结_树与二叉树的结论有哪些-程序员宅基地

文章浏览阅读8.2k次,点赞20次,收藏121次。文章目录一般树二叉树一般二叉树满二叉树完全二叉树二叉排序树二叉树的遍历红黑树B树B+树经过Python的学习,顺便系统的学习了与树相关的数据结构与算法,因此就记录一下吧,留待以后回忆参考。一般树二叉树一般二叉树满二叉树完全二叉树二叉排序树二叉树的遍历红黑树B树B+树..._树与二叉树的结论有哪些

nodeJS之流stream_nodejs stream-json-程序员宅基地

文章浏览阅读1k次。概述  流(stream)在Nodejs中是处理流数据的抽象接口。stream模块提供了基础的API 。使用这些API可以很容易地来构建实现流接口的对象。Nodejs提供了多种流对象。 例如,HTTP请求和process.stdout都是流的实例  流可以是可读的、可写的,或是可读写的。所有的流都是 EventEmitter 的实例。  尽管所有的 Node.js 用户_nodejs stream-json

Elasticsearch(9) --- 聚合查询(Bucket聚合)_elasticsearch nest bucket聚合-程序员宅基地

文章浏览阅读457次。Elasticsearch(9) --- 聚合查询(Bucket聚合)系统小说 www.kuwx.net上一篇讲了Elasticsearch聚合查询中的Metric聚合:Elasticsearch(8) --- 聚合查询(Metric聚合)说明 本文主要参考于Elasticsearch 官方文档 7.3版本。 Bucket Aggregations概念:Bucket 可以理解为一..._elasticsearch nest bucket聚合

【大数据】三、相似项发现(Jaccard、Shingling、MinHashing)_shingling的作用-程序员宅基地

文章浏览阅读943次,点赞2次,收藏8次。文章目录1. Jaccard1.1 例题2. shingling2.1 k-shingle2.2 k 值大小的选择2.3 例题3. MinHashing3.1 minhashing 作用:压缩3.2 算法步骤、例题4. LSH 行条化策略的分析5. 距离测度1. Jaccard定义 Jaccard 相似度计算公式:定义 Jaccard 距离:1.1 例题不重复重复 (bag),最大值为 1 / 22. shingling将文档用短字符集合来表示2.1 k-shinglech_shingling的作用

EditText电话号码格式_edittext中的电话格式-程序员宅基地

文章浏览阅读514次。看了网上一些文章,自己改了改,小白/** * * @author Damon * 电话格式EditText */public class PhoneNumberEditText extends EditText implements TextWatcher { public PhoneNumberEditText(Context context, AttributeSet at_edittext中的电话格式