💕💕作者:计算机源码社
💕💕个人简介:本人七年开发经验,擅长Java、微信小程序、Python、Android等,大家有这一块的问题可以一起交流!
💕💕学习资料、程序开发、技术解答、代码讲解、文档报告

💕💕JavaWeb项目
💕💕微信小程序项目
💕💕Python项目
💕💕Android项目

1、绪论

1.1 项目背景

  如今,各大高校传统的教育模式和管理模式也在互联网的自动化技术中取其精华去其糟粕,将传统教育与计算机网络相结合。将计算网络技术运用到学校教育中,不仅可以提高学校的教学管理水平和教学办公效率,实现教学管理的信息化,更是有利于对学校培养方式和教学方式的管理。
 &emsp高校学生的毕业设计是学生大学四年所学知识的综合检测,是高校教学实践的水平的重要体现,是学生离开校园迈向社会前,在学校最后的一项重要工作。传统的选题模式是由符合指导资格的教师进行课题的申报,然后由学生进行选题,指导教师进行反选,最后未被指导教师选择的学生,需要再次进行选择;接着学生完成任务书、开题报告及论文的撰写等工作;在此期间,学校将对学生的毕业设计或论文进行中期检查;最后由指导老师对学生提交的论文进行批改、审核并归档等。
 &emsp然而在完成毕业设计或毕业论文的过程中,每一项工作都需要学生和指导教师进行沟通交流,因此传统的通过面对面或者邮件、电话等方式进行联系不仅导致工作效率低下而且成本过高。对于教务管理者和学生来说,传统的毕业设计模式无法及时的获取毕业设计或毕业论文的整体进度,给学校对毕业设计的管理工作带来了一定的困难,致使毕业设计的进展和质量不能达到理想的预期。因此,改变传统的选题管理模式,运用信息技术进行科学的管理,将大大提高教学管理的效率。

1.2 项目现状

  本系统以Web技术为基础,借鉴Internet的研究成果,设计了高校毕业设计选题管理系统。本系统可以在本地和外地同时进行,极大地扩展了系统的应用灵活性。目前,各大高校都已经建立了自己的校园网,选题管理方式也由传统线下选题向线上选题转变,题目都存放在网络服务器上,教师们可以通过账号和密码直接进行网络登录,规范选题并查看选题信息等。学生可以通过账号和密码直接在线登录,可以在第一时间获取学生选题结果信息及学生答辩信息等。因此,我们需要设计一个信息化,便捷化的高校毕业设计选题管理系统,它不仅具有实用性强,通用性强,网上选题现代化等优点,而且极大地方便了毕业生与导师之间的沟通与交流,提升教育人员的办公效率。

2、核心功能模块

2.1 系统角色分配

  基于SSM高校毕业设计选题系统采用Java语言,B/S的结构,同时也使用JavaWeb技术在动态页面上进行了设计,后台上采用Mysql数据库,高校毕业设计选题系统的主要实现功能包括:
  ①管理员:首页、个人中心、个人信息、学生管理、教师管理、文件模板管理 、论坛管理 、系统管理、在线选题管理、开题报告管理、中期报告管理、毕业论文管理等等。
在这里插入图片描述
  ②教师管理:个人中心、个人信息、文件模板管理 、在线选题管理、老师答疑管理、开题报告管理、中期报告管理、毕业论文管理、学生提题管理、论文进度管理等等。
在这里插入图片描述
  ③学生管理:个人中心、个人信息、学生提问管理、 老师答疑管理、开题报告管理、中期报告管理、毕业论文管理、学生提题管理、论文进度管理、我的收藏管理等等功能。通过这些功能模块的设计,基本上实现了整个毕业设计管理系统的过程。
在这里插入图片描述

2.2 系统功能结构图

在这里插入图片描述

2.3 文档报告目录

在这里插入图片描述
在这里插入图片描述

3、项目展示

3.1 查看文件模板

在这里插入图片描述

3.2 在线选题

在这里插入图片描述

3.3 填写开题报告

在这里插入图片描述

3.4 论坛发帖

在这里插入图片描述
3.4 学生后台开题报告管理
在这里插入图片描述
3.5 学生设计进度管理
在这里插入图片描述
3.6 教师答疑管理
在这里插入图片描述
3.7 教师审核开题
在这里插入图片描述
3.8 管理员在线选题管理
在这里插入图片描述

4、 核心代码

/**
     * 后端课题列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,ZaixianxuantiEntity zaixianxuanti, HttpServletRequest request){

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("jiaoshi")) {
			zaixianxuanti.setJiaoshigonghao((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<ZaixianxuantiEntity> ew = new EntityWrapper<ZaixianxuantiEntity>();
		PageUtils page = zaixianxuantiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, zaixianxuanti), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端课题列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,ZaixianxuantiEntity zaixianxuanti, HttpServletRequest request){
        EntityWrapper<ZaixianxuantiEntity> ew = new EntityWrapper<ZaixianxuantiEntity>();
		PageUtils page = zaixianxuantiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, zaixianxuanti), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 课题列表
     */
    @RequestMapping("/lists")
    public R list( ZaixianxuantiEntity zaixianxuanti){
       	EntityWrapper<ZaixianxuantiEntity> ew = new EntityWrapper<ZaixianxuantiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( zaixianxuanti, "zaixianxuanti")); 
        return R.ok().put("data", zaixianxuantiService.selectListView(ew));
    }

	 /**
     * 查询选题信息
     */
    @RequestMapping("/query")
    public R query(ZaixianxuantiEntity zaixianxuanti){
        EntityWrapper< ZaixianxuantiEntity> ew = new EntityWrapper< ZaixianxuantiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( zaixianxuanti, "zaixianxuanti")); 
		ZaixianxuantiView zaixianxuantiView =  zaixianxuantiService.selectView(ew);
		return R.ok("查询在线选题成功").put("data", zaixianxuantiView);
    }
	
    /**
     * 后端前端查看选题信息详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        ZaixianxuantiEntity zaixianxuanti = zaixianxuantiService.selectById(id);
        return R.ok().put("data", zaixianxuanti);
    }

    /**
     * 前端查看选题信息详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") String id){
        ZaixianxuantiEntity zaixianxuanti = zaixianxuantiService.selectById(id);
        return R.ok().put("data", zaixianxuanti);
    }

    /**
     * 后端保存选题信息
     */
    @RequestMapping("/save")
    public R save(@RequestBody ZaixianxuantiEntity zaixianxuanti, HttpServletRequest request){
    	zaixianxuanti.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(zaixianxuanti);

        zaixianxuantiService.insert(zaixianxuanti);
        return R.ok();
    }
    
    /**
     * 选题内容保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody ZaixianxuantiEntity zaixianxuanti, HttpServletRequest request){
    	zaixianxuanti.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(zaixianxuanti);

        zaixianxuantiService.insert(zaixianxuanti);
        return R.ok();
    }

    /**
     * 修改更新选题
     */
    @RequestMapping("/update")
    public R update(@RequestBody ZaixianxuantiEntity zaixianxuanti, HttpServletRequest request){
        //ValidatorUtils.validateEntity(zaixianxuanti);
        zaixianxuantiService.updateById(zaixianxuanti);//全部更新
        return R.ok();
    }
    

    /**
     * 删除选题记录
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        zaixianxuantiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null && !map.get("remindstart").toString().equals("")) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null && !map.get("remindend").toString().equals("")) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<ZaixianxuantiEntity> wrapper = new EntityWrapper<ZaixianxuantiEntity>();
		if(map.get("remindstart")!=null && !map.get("remindstart").toString().equals("")) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null && !map.get("remindend").toString().equals("")) {
			wrapper.le(columnName, map.get("remindend"));
		}

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("jiaoshi")) {
			wrapper.eq("jiaoshigonghao", (String)request.getSession().getAttribute("username"));
		}

		int count = zaixianxuantiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐