为了让本专业的学生有针对性的往JAVA方向进行语言学习,并进行有学习深度的编程算法学习,提高自己的技术水平,增强自己的编程思维,本课题以Java为主,设计并实现一个在线编程网站,可以实现查看题库、在线编程、在线评论、论坛讨论、用户管理等功能。网站整体功能可以让学生在编程时,碰到问题可以有一个讨论的圈子渠道,加深学习氛围,必要时可以参考一些同学发的答案思路,并且可以在论坛进行互动与交流,既可以减轻学生的排斥心理,还可以降低学生到处找题练手所浪费的时间,提高学习效率。
通过对本网站的开发,不仅是对自己四年来所学的知识进行总结,同时也是一次宝贵的实践经验,还可以学习到新的技术,提高自己的技术水平。
采用SpringBoot+MyBatis框架进行开发,使用MySQL数据库进行数据管理,最后设计并实现一个较为完善的在线编程网站。通过对系统进行的一系列需求分析、设计、编码与测试等工作,系统实现了题库管理、评论管理、用户管理、在线编程、信息管理、论坛讨论等功能。具体需求如下:
(1)个人信息管理:普通用户/管理员可以对自己的账户信息、个人详细信息进行查看与修改,用户密码采用MD5加密算法存储。
(2)记录信息:普通用户/管理员可以对自己做题的提交记录、收藏列表、提交的评论信息进行查看,其中收藏列表可以删除收藏,评论信息里可以删除自己的评论。
(3)题目管理:管理员可以对题库进行查看,并添加题目、修改指定题目信息或删除指定题目。
(4)用户管理:管理员可以对用户进行删除,可以修改指定用户的权限,将其提升为管理员,系统采用Java安全框架,执行身份认证、授权、加密和会话管理。
(5)评论管理:管理员可以查看所有题目相关的评论数量,也可以清空相关题目的评论。
(6)在线编程:普通用户/管理员根据相关的题目信息,进行在线编程,完成代码后可以执行代码查看结果,之后可以提交代码保存模板并添加一条提交记录。
(7)论坛:提供一个可供普通用户/管理员对相关题目进行讨论的平台,可以对其他用户的评论进行点赞、发表评论。
【530】基于springBoot mybatis在线编程网源码论文开题报告任务书
随着互联网的发展,教育制度的完善,知识获取的难度越来越低,使得软件工程专业的我们可以选择的学习方向越来越多,例如编程语言中就有JAVA、C、C++、python、php等各种语言,配套的数据库又可以有Sql Server、Oracle、Mysql等,人的精力与时间是有限的,若只针对语言进行学习,对学生来说,肯定会存在杂而不精的问题,所以说,结合本专业的java学习方向,就需要有一个可以让学生往java方向进行深度学习的方法或工具,为此,一个专属于本专业的在线编程网便是一个很好的学习工具,引导学生的学习方向。
时代在进步,现代教育技术快速发展,学习的方式也发生了翻天覆地的变化,不仅是传统的教学模式,各种个性化的教学、学习方式层出不穷,随着互联网的发展,教育方式也发生了变革,那就是在线教育。在线教育,也称为网络教育,是指在网络环境下,以现代教育思想和学习理论为指导,使教师与学生得以以网络在线的方式进行教授与学习,无论相隔多远都可以进行面对面教学,且还能充分发挥网络的各种教育功能,利用网络教育的丰富资源,用以提高教学水平与学生的接受程度。在这个互联网时代,互联网技术与传统教育的结合,相比起传统教育,其优势有三:第一,突破时间与空间的优势,不用场地,录制好的视频也可让学生随时进行学习,知识获取的方式更加灵活;第二,碎片化学习,随着移动互联网的发展,尤其是5G时代的来临,使得智能手机等便携式移动设备的网速飙升,可以支撑人们随时随地打开视频进行学习;第三,资源整合,以网络的便捷性,可以轻松地将各种教育知识分类并整合,让学生一目了然,如基础教育、高等教育、软件工程专业教育等其他教育。这种在线教育的学习模式,学生可以根据个人的需求,自主灵活地选择学习内容和在线交流。
package cxsy.dgut.online_programming.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import cxsy.dgut.online_programming.entity.*;
import cxsy.dgut.online_programming.service.*;
import cxsy.dgut.online_programming.service.serviceimpl.ThumbTableServiceImpl;
import cxsy.dgut.online_programming.utils.CodeSubmit;
import cxsy.dgut.online_programming.utils.JudgeCharacter;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@Controller
public class ProblemController {
@Autowired
ProblemBankService problemBankService;
@Autowired
ProblemCommentService problemCommentService;
@Autowired
ProgrammingRecordService programmingRecordService;
@Autowired
UserProgrammingService userProgrammingService;
@Autowired
JudgeCharacter judgeCharacter;
@Autowired
CodeSubmit codeSubmit;
@Autowired
ProblemCollectService problemCollectService;
@Autowired
ThumbTableServiceImpl thumbTableService;
/**
* 点击题目,跳转到响应题目的编程页面
* @param model
* @param request
* @return
*/
@RequestMapping("/programming")
public String programming(Model model,HttpServletRequest request){
String problem_id=request.getParameter("problemId");
UserInformation userInformation=(UserInformation)request.getSession().getAttribute("userInformation");
if(problem_id!=null||!problem_id.equals(""))
model.addAttribute("problem_information",problemBankService.selectByProblemId(Integer.parseInt(problem_id))); //查询此题目的信息
model.addAttribute("problem_number",problemBankService.selectAllProblemNumber()); //查询题目总数量
if(userProgrammingService.selectProgramming(Integer.parseInt(problem_id),userInformation.getUserId())!=null)
model.addAttribute("user_programming",userProgrammingService.selectProgramming(Integer.parseInt(problem_id),userInformation.getUserId())); //查询此题目是否提交过,是的话提取上次提交的代码
ProblemCommentExample example=new ProblemCommentExample();
ProblemCommentExample.Criteria criteria=example.createCriteria();
criteria.andProblemIdEqualTo(Integer.parseInt(problem_id));
model.addAttribute("problem_comment",problemCommentService.selectByExample(example));
ProgrammingRecordExample programmingRecordExample=new ProgrammingRecordExample();
ProgrammingRecordExample.Criteria criteria1=programmingRecordExample.createCriteria();
criteria1.andProblemIdEqualTo(Integer.parseInt(problem_id.trim()));
criteria1.andUserIdEqualTo(userInformation.getUserId());
model.addAttribute("problem_record",programmingRecordService.selectByExample(programmingRecordExample));
ProblemCollectExample collectexample=new ProblemCollectExample();
ProblemCollectExample.Criteria collectcriteria=collectexample.createCriteria();
collectcriteria.andUserIdEqualTo(userInformation.getUserId());
collectcriteria.andProblemIdEqualTo(Integer.parseInt(problem_id));
List<ProblemCollect> listCollect=problemCollectService.selectByExample(collectexample);
if(listCollect.size()!=0)
model.addAttribute("collect",listCollect);
ThumbTable thumbTable=thumbTableService.selectThumbSelect(Integer.parseInt(problem_id),userInformation.getUserId());
if(thumbTable==null) {
thumbTable=new ThumbTable();
thumbTable.setThumbSelect(0);
model.addAttribute("thumb_select", thumbTable);
}else if(thumbTable.getThumbSelect()==1)
{
model.addAttribute("thumb_select", thumbTable);
}else{
model.addAttribute("thumb_select", thumbTable);
}
return "freemarker/programming";
}
/**
* 执行代码,返回代码执行结果
* @param request
* @param response
* @throws IOException
*/
@RequestMapping("/code")
@ResponseBody
public void code(HttpServletRequest request, HttpServletResponse response) throws IOException {
String code=request.getParameter("code");
String json= JSON.toJSONString(codeSubmit.programmingcode(code));
response.setCharacterEncoding("utf-8");
response.getWriter().print(json);
}
/**
* 题库页面,包含题目数据与难度数据等统计数据
* @param model
* @param response
* @param request
* @return
*/
@RequestMapping("/problembank")
public String Problembank(Model model,HttpServletResponse response,HttpServletRequest request){
HttpSession session=request.getSession();
UserInformation userInformation=(UserInformation) session.getAttribute("userInformation");
model.addAttribute("problem_bank",problemBankService.selectAllProblem()); //查询所有题目
model.addAttribute("problem_number",problemBankService.selectAllProblemNumber()); //查询题目总数量
model.addAttribute("problem_solve",programmingRecordService.selectSolveRecord(userInformation.getUserId(),"1")); //查询已解决的题目条数
model.addAttribute("problem_easy",programmingRecordService.selectSolveRecordEasy(userInformation.getUserId(),"1","1")); //已解决的简单难度的题
model.addAttribute("problem_medicum",programmingRecordService.selectSolveRecordMedium(userInformation.getUserId(),"1","2")); //已解决的中等难度的题
model.addAttribute("problem_difficult",programmingRecordService.selectSolveRecordDifficult(userInformation.getUserId(),"1","3")); //已解决的困难难度的题
return "freemarker/problembank";
}
/**
* 每个题目的评论数
* @return
*/
@RequestMapping("/getProblemCommentNumber")
@ResponseBody
public String getProblemCommentNumber(@Param("problemId")String problemId){
return String.valueOf(problemCommentService.selectProblemCommentNumberById(Integer.parseInt(problemId)));
}
/**
* 题库页面,包含题目数据与难度数据等统计数据,筛选难度
* @param model
* @param response
* @param request
* @return
*/
@RequestMapping("/problembankSelect")
public String ProblembankSelect(Model model,HttpServletResponse response,HttpServletRequest request){
HttpSession session=request.getSession();
UserInformation userInformation=(UserInformation) session.getAttribute("userInformation");
String dit=request.getParameter("dit");
ProblemBankExample problemBankExample=new ProblemBankExample();
ProblemBankExample.Criteria criteria=problemBankExample.createCriteria();
criteria.andProblemDifficultyEqualTo(Integer.parseInt(dit));
model.addAttribute("problem_bank",problemBankService.selectByExample(problemBankExample)); //查询所选难度的题目
model.addAttribute("problem_number",problemBankService.selectAllProblemNumber()); //查询题目总数量
model.addAttribute("problem_solve",programmingRecordService.selectSolveRecord(userInformation.getUserId(),"1")); //查询已解决的题目条数
model.addAttribute("problem_easy",programmingRecordService.selectSolveRecordEasy(userInformation.getUserId(),"1","1")); //已解决的简单难度的题
model.addAttribute("problem_medicum",programmingRecordService.selectSolveRecordMedium(userInformation.getUserId(),"1","2")); //已解决的中等难度的题
model.addAttribute("problem_difficult",programmingRecordService.selectSolveRecordDifficult(userInformation.getUserId(),"1","3")); //已解决的困难难度的题
return "freemarker/problembank";
}
/**
* 提交代码到数据库
* @param response
* @return 返回结果
*/
@Autowired
UserProgramming userProgramming;
@RequestMapping("/codesubmit")
@ResponseBody
public String codesubmit(@Param("problemId")String problemId,@Param("userId")String userId,@Param("code")String code){
userProgramming.setProblemId(Integer.parseInt(problemId.trim()));
userProgramming.setUserId(Integer.parseInt(userId.trim()));
userProgramming.setProgramming(code);
if(userProgrammingService.selectProgramming(Integer.parseInt(problemId.trim()),Integer.parseInt(userId.trim()))!=null){
UserProgrammingExample example=new UserProgrammingExample();
UserProgrammingExample.Criteria criteria=example.createCriteria();
criteria.andUserIdEqualTo(Integer.parseInt(userId.trim()));
criteria.andProblemIdEqualTo(Integer.parseInt(problemId.trim()));
userProgrammingService.updateByExampleSelective(userProgramming,example);
}else {
userProgrammingService.insertSelective(userProgramming);
}
return "提交成功";
}
/**
* 回归上一次保存的代码
* @param
* @return
*/
@RequestMapping("/userprogramming")
@ResponseBody
public String userprogramming(HttpServletRequest request,@Param("problemId")String problemId,@Param("userId")String userId){
System.out.println("看看第一个"+problemId+"---看看第二个"+userId);
System.out.println(request.getParameter("problemId")+"-----"+request.getParameter("userId"));
UserProgramming userProgramming=userProgrammingService.selectProgramming(Integer.parseInt(problemId),Integer.parseInt(userId));
if(userProgramming!=null)
return userProgramming.getProgramming();
else
return "无记录";
}
/**
* 查看题目列表
* @param model
* @param request
* @return
*/
@RequestMapping("/problemList")
@ResponseBody
public String problemList(Model model,HttpServletRequest request){
List<ProblemBank> list=problemBankService.selectAllProblem();
String json=JSONArray.toJSONString(list);
return json;
}
/**
* 搜索题目
* @param model
* @param request
* @param content
* @return
*/
@RequestMapping("/problemListSearch")
@ResponseBody
public String problemListSearch(Model model,HttpServletRequest request,@Param("content")String content){
List<ProblemBank> list;
if(judgeCharacter.NumberCharacter(content.trim())){ //判断是数字还是字符串还是空值
ProblemBankExample example=new ProblemBankExample();
ProblemBankExample.Criteria criteria=example.createCriteria();
criteria.andProblemIdEqualTo(Integer.parseInt(content.trim()));
list=problemBankService.selectByExample(example);
}else{
ProblemBankExample example=new ProblemBankExample();
ProblemBankExample.Criteria criteria=example.createCriteria();
criteria.andProblemNameLike("%"+content.trim()+"%");
list=problemBankService.selectByExample(example);
}
String json=JSONArray.toJSONString(list);
return json;
}
/**
* 判断提交的代码是否正确
* @param problemId
* @param userId
* @param code
* @param problemDifficulty
* @return
*/
@RequestMapping("/answerReply")
@ResponseBody
public String answerReply(@Param("problemId")String problemId,@Param("userId")String userId,@Param("code")String code,@Param("problemDifficulty")String problemDifficulty){
ProgrammingRecord programmingRecord=new ProgrammingRecord();
programmingRecord.setUserId(Integer.parseInt(userId.trim()));
programmingRecord.setProblemId(Integer.parseInt(problemId.trim()));
programmingRecord.setProblemDifficulty(problemDifficulty.trim());
CodeSubmit codeSubmit=new CodeSubmit();
Map map=codeSubmit.programmingReply(code,problemId.trim(),problemBankService);
if(map.get("reply").equals(true)){
programmingRecord.setProgrammingSubmitResults("1");
programmingRecord.setProgrammingUsetime((String) map.get("runTakeTime"));
}else
programmingRecord.setProgrammingSubmitResults("0");
programmingRecordService.insertSelective(programmingRecord);
return "";
}
/**
* 提交评论
* @param model
* @param problemId
* @param userId
* @param content
* @param username
* @return
*/
@RequestMapping("/problemComment")
@ResponseBody
public String problemComment(Model model,@Param("problemId")String problemId,@Param("userId")String userId,@Param("content")String content,@Param("username")String username){
ProblemComment problemComment=new ProblemComment();
problemComment.setCommentContent(content);
problemComment.setProblemId(Integer.parseInt(problemId.trim()));
problemComment.setUserId(Integer.parseInt(userId.trim()));
problemComment.setUsername(username.trim());
problemCommentService.insertSelective(problemComment);
return "评论成功!";
}
}