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

智能推荐

预加载 Skeleton Screen(骨架屏)介绍_首页预加载骨架-程序员宅基地

文章浏览阅读589次。用户体验一直是前端开发需要考虑的重要部分,在数据请求时常见到锁屏的loading动画,而现在越来越多的产品倾向于使用Skeleton Screen Loading(骨架屏)替代,以优化用户体验。_首页预加载骨架

Git中常用术语-程序员宅基地

文章浏览阅读562次。Key Terms版本控制系统(VCS)或源代码管理器(SCM):一个VCS允许您:将文件恢复到以前的状态,将整个项目恢复到以前的状态,回顾随时间变化的变化,看谁最后修改了可能引起的事情。一个问题,谁提出了一个问题,什么时候,等等。Version Control System (VCS) or Source Code Manager ..._git常用术语

Windows内核模式开发笔记___imp_rtlntstatustodoserror-程序员宅基地

文章浏览阅读2.4k次。* 通过 NTSTATUS 获得相应的字符串 使用函数RtlNtStatusToDosError可以获得与NTSTATUS相对应的Windows错误码。 微软网站上说用API函数 FormatMessage 可获得相应的字符串,但是在调用前必须先用 LoadLibrary 载入 "NTDLL.DLL"。 文章链接 - http://support.microsoft.___imp_rtlntstatustodoserror

浅谈Android Studio中项目结构中project模式的各个文件和文件夹_androidstudio怎么project模式-程序员宅基地

文章浏览阅读337次。致敬郭霖,这些知识是从第一行代码第二版中直接码下来的,谢谢他,注意每个条目前是否有.1..gradle和.idea这两个目录下放置的都是Android Studio自动生成的一些文件,我们无需关心,也不要去手动改动他们2.app项目中的代码,资源等内容几乎全部都放置在这个目录下3.build这个目录也不要过多关心,它主要包含了一些在编译时自动生成的文件4.gradl..._androidstudio怎么project模式

jquery 的each方法怎么判断是否执行到了最后一个元素_each 怎么判断是最后一个-程序员宅基地

文章浏览阅读3.9k次。if (i === len - 1)<!DOCTYPE HTML><html lang="en-US"><head><meta charset="UTF-8"><title>menu</title><style type="text/css"></style><script typ..._each 怎么判断是最后一个

Git分支创建命令_创建名为test的本地分支-程序员宅基地

文章浏览阅读3.1w次,点赞19次,收藏79次。一、 创建test分支提交步骤1.列出所有分支# git branch -a2.创建test分支 # git branch test3.切换到test分支: # git checkout test4.添加add修改:# git add .5.添加commit注释# git commit -m "第一次提交代码"6.提..._创建名为test的本地分支

随便推点

Java 比较两个字符串的相似度算法(Levenshtein Distance)_java中文字符串相似度算法-程序员宅基地

文章浏览阅读9.8k次,点赞10次,收藏35次。Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。算法实现原理图解:a.首先是有两个字符串,这里写一个简单的 abc 和 abeb.将..._java中文字符串相似度算法

CSS 文本对齐_css 标题和第一行对齐-程序员宅基地

文章浏览阅读1k次。text-align 水平对齐 right left centervertical-align 垂直对齐 top middle bottom属性:AbsBottom 图像的下边缘与同一行中最大元素的下边缘对齐。 AbsMiddle 图像的中间与同一行中最大元素的中间对齐。 Baseline 图像的下边缘与第一行文本的下边缘对齐。 Bottom 图_css 标题和第一行对齐

git配置user.name和user.email-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏5次。github在统计提交的时候,会判断邮箱是否跟github的登陆邮箱匹配,不匹配则不计算活跃度,即不生成小绿块。查看配置git config user.emailgit config user.name设置当前仓库的user.name/user.emailgit config user.email yourEmailNamegit config user.name yourName设置全局user.name/user.emailgit config --global use._user.name

Mac终端指令大全_mac yard-程序员宅基地

文章浏览阅读904次。目录操作命令名功能描述使用举例mkdir创建一个目录mkdir dirnamermdir删除一个目录rmdir dirnamemvdir移动或重命名一个目录mvdir dir1 dir2cd改变当前目录cd dirnamepwd显示当前目录的路径名pwdls显示当前目录的内容ls -ladircmp比较两个目录的内容dircmp dir1 dir2文件操作命令名功能描述使用举例cat显示或连接文件..._mac yard

linux su用法_linux的su -和su的区别-程序员宅基地

文章浏览阅读355次。su切换用户有两种方式:1.su username2.su - username#su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了。用echo $PATH命令看一下su和su -以后的环境变量有_linux的su -和su的区别

SSIS数据转换组件_聚合转换_ssis847-程序员宅基地

文章浏览阅读1k次。 聚合转换功能类似于sql语句中的聚合函数。它应用列值,并将结果作为新列复制到转换输出中。聚合转换支持下列运算功能运算说明Group by将数据集划分为组。任何数据类型的列都可用于分组。Sum对列中的值求和。只能对数值数据类型的列求和。Average返回列中值的平均值。只能对数值数据类型的列求平均值。Co..._ssis847

推荐文章

热门文章

相关标签