基于springBoot mybatis在线编程网

 为了让本专业的学生有针对性的往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 "评论成功!";
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿毕业分享网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值