基于JavaSpringMVC+Mybatis+Jquery高校毕业设计管理系统设计和实现

举报
Java李杨勇 发表于 2022/03/31 22:05:25 2022/03/31
【摘要】 ​ 🍅 作者主页:Java李杨勇 🍅 简介:Java领域优质创作者🏆、【java李杨勇】公号作者✌  简历模板、学习资料、面试题库【关注我,都给你】🍅文末获取源码联系🍅前言:      随着信息时代计算机网络技术的发展给人们带来了极大的方便,传统的毕业设计过程在很大程度上给学生、教师和管理人员带来了不便。而毕业论文对于高校学生而言是对自己在学校所学的专业知识和技能的总结,对高校的教...

 🍅 作者主页:Java李杨勇 

🍅 简介:Java领域优质创作者🏆、【java李杨勇】公号作者✌  简历模板、学习资料、面试题库【关注我,都给你】

🍅文末获取源码联系🍅

前言:

      随着信息时代计算机网络技术的发展给人们带来了极大的方便,传统的毕业设计过程在很大程度上给学生、教师和管理人员带来了不便。而毕业论文对于高校学生而言是对自己在学校所学的专业知识和技能的总结,对高校的教育而言是对毕业学生最后的一次全面的考核。在毕业论文完成整个的过程中,需要学生与导师、人员的密切合作。但在现实中,某个环节内的角色由于某些原因不能一直保持着工作状态,会导致毕业论文完成的停滞。为了避免这种情况的发生,为方便教师、学生和管理者顺利完成对应角色的任务,高校需要一个专业的针对毕业论文的管理系统把完成毕业论文的所有操作都集中到一个系统中。与此同时,各种信息网站的普及给许多企业或用户带来了良好的体验和高效的管理。本系统针对现代高校计算机技术的发展,为了应对过去高校毕业生在毕业设计管理过程中遇到的效率低、交互性差、工作量大等问题而采用软件工程的设计思想,构建一个适合高校使用的基于javaweb的毕业设计管理系统。本系统是基于Windows操作系统作为服务平台,后台数据库采用MySQL数据库,服务器使用Tomcat容器、Eclipse开发工具创建java语言来构建服务页面。选择毕业设计课题管理、绩效管理等功能模块及其关系。本次毕业设计的目的是运用现代网络管理技术解决毕业设计管理中存在的问题,减少学生选择毕业设计选题的时间,和加强毕业设计过程的监控,降低教师和管理人员的工作强度。采用SpringMVC框架提高了系统开发的效率,降低了系统的复杂性,使数据库访问更加灵活。通过测试,系统的应用方便了教师和学生之间的交流,加强了过程管理,方便了结果的保存和显示。

功能设计:



1.用户模块管理:用户登录、多角色登录、用户的查询、删除操作、用户分为不同权限、可以通过角色来灵活控制。

2.导师管理:管理员登录后可以对导师信息进行管理和添加。

3.学生管理:管理员以及老师登录后可以对学生信息进行管理和添加。

4.公告管理:管理员及老师登录后可以对公告进行管理和添、学生可以查看。

5.数据分析:管理员登录后可以查看数据分析和分数占比等。

6.审核选题:管理员登录后可以进行审核操作、同意或拒绝。

7.论文管理:管理员登录后可以查看下载论文

8.修改资料:用户可以修改自己的密码。

9.课程管理:老师上传选题课程、及查看改课程是否通过选题。

10.发布内容:老师发布任务书、开题报告、需求分析和数据库设计等。

11.审核文档:老师可以审核任务书、开题报告、需求分析和数据库设计等。

12.文档管理:老师可以查看和上传学生的论文文档。

13.提问管理:老师可以查看和回答学生的提问信息、学生可以提问

14.成绩管理:老师可以管理和查看学生的成绩信息。

15.毕业设计管理:老师可以审核学生论文及查看答辩资格名单。

16.进度管理:学生可以查看各文档的进度完成情况、比如任务书、开题等。

视频演示:java计算机毕业设计之高校毕业设计论文管理系统【源码+论文】实战_哔哩哔哩_bilibili很不错的一个高校毕业设计管理系统!适合毕业设计和课程设计篇【源码+论文】三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连三连 https://www.bilibili.com/video/BV1x5411f7G6?spm_id_from=333.999.0.0

功能截图:

系统首页

分角色登录、不同角色不同权限功能

管理员主要功能设计

数据分析:

审核选题:

学生管理:

添加导师:

学生用户主要功能:

修改个人资料:

查看选题:

文档管理:各文档完成情况、查看课题资料和下载等

上传各阶段文档:和查看已经上传的文档

毕业设计提问以及查看问题老师回答:

查看公告信息、成绩信息和自己的答辩资格

老师端主要功能设计:

课题管理:

学生管理:

发布内容:

审核文档:

文档管理:

成绩管理:

公告管理:

论文审核及查看答辩资格:

主要数据库设计:

表t_announcement(公告表)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

int

10

0

N

Y

公告表

2

context

varchar

300

0

Y

N

内容

3

inputMan

varchar

20

0

Y

N

发布者

4

lastModifyTime

datetime

19

0

Y

N

时间

表t_department

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

int

10

0

N

Y

院系表,id为主键

2

departmentName

varchar

30

0

Y

N

名称

表t_doubt

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

int

10

0

N

Y

Id主键

2

studentId

int

10

0

N

N

学生id

3

studentDoubt

varchar

255

0

Y

N

提问

4

answer

varchar

255

0

Y

N

回答

表t_major

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

int

10

0

N

Y

专业表,id为主键

2

majorName

varchar

30

0

Y

N

名称

3

departmentId

int

10

0

Y

N

关联院系

表t_project_source

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

int

10

0

N

Y

项目源码表

2

studentId

int

10

0

N

N

学生id

3

projectScore

varchar

100

0

Y

N

分数

4

description

varchar

300

0

Y

N

描述

表t_student

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

int

10

0

N

Y

Id

2

studentNo

varchar

20

0

Y

N

学生编号

3

studentName

varchar

20

0

Y

N

学生名称

4

sex

varchar

4

0

Y

N

性别

5

majorId

int

10

0

N

N

专业id

6

grade

varchar

10

0

Y

N

班级

7

inputMan

varchar

20

0

Y

N

发布者

8

lastModifyTime

datetime

19

0

Y

N

时间

9

phone

varchar

11

0

Y

N

手机号

10

email

varchar

25

0

Y

N

邮箱


部分代码: 


@Controller
@RequestMapping(value="/teacher")
public class TeacherController {
	
	
	@Autowired
	private ITeacherService teacherService;
	
	@Autowired
	private IStudentService studentService;
	
	@Autowired
	private IDepartmentService departmentService;
	
	@Autowired
	private IAnnouncementService announcementService;
	
	
	
	/*@RequestMapping(value="/add",method=RequestMethod.GET)
	public String addTeacherForm(Model model) {
		return "teacher/addTeacher.jsp";
	}
	
	@RequestMapping(value="/add",method=RequestMethod.POST)
	public String addTeacher(HttpServletRequest request,String teacherNo, String teacherName,String sex,String inputMan,String phone,String department,Model model) throws Exception {
		teacherNo = new String(teacherNo.getBytes("iso-8859-1"),"utf-8");
		teacherName = new String(teacherName.getBytes("iso-8859-1"),"utf-8");
		sex = new String(sex.getBytes("iso-8859-1"),"utf-8");
		inputMan = new String(inputMan.getBytes("iso-8859-1"),"utf-8");
		phone = new String(phone.getBytes("iso-8859-1"),"utf-8");
		department = new String(department.getBytes("iso-8859-1"),"utf-8");
		
		Date currentTime = new Date();
		
		Teacher teacher = new Teacher();
		teacher.setTeacherNo(teacherNo);
		teacher.setTeacherName(teacherName);
		teacher.setDepartmentId(Integer.parseInt(department));
		teacher.setSex(sex);
		teacher.setInputMan(inputMan);
		teacher.setLastModifyTime(currentTime);
		teacher.setPhone(phone);
		
		int addNum = teacherService.addTeacher(teacher);
		System.out.println("添加数目:"+addNum);
		
		return "teacher/addSuccess.jsp";
	}*/
	
	@RequestMapping(value="/main",method=RequestMethod.GET)
	public String teacherMainForm() {
		return "teacher/main.jsp";
	}
	
	@RequestMapping(value="/modifyInfo",method=RequestMethod.GET)
	public String teacherModifyInfoForm() {
		return "teacher/teacherModifyInfo.jsp";
	}
	
	@RequestMapping(value="/modifyPassword",method=RequestMethod.GET)
	public String teacherModifyPasswordForm() {
		return "teacher/teacherModifyPassword.jsp";
	}
	
	@RequestMapping(value="/uploadThesisTitle",method=RequestMethod.GET)
	public String teacherUploadThesisTitleForm() {
		return "teacher/teacherUploadThesisTitle.jsp";
	}
	
	@RequestMapping(value="/modifyThesisTitle",method=RequestMethod.GET)
	public String teacherModifyThesisTitleForm() {
		return "teacher/teacherModifyThesisTitle.jsp";
	}
	
	@RequestMapping(value="/thesisResult",method=RequestMethod.GET)
	public String teacherThesisResultForm(Model model,HttpServletRequest request) {
		teacherShowAllThesisTitle(model, request);
		
		return "teacher/teacherThesisResult.jsp";
	}
	
	@RequestMapping(value="/uploadTaskBook",method=RequestMethod.GET)
	public String teacherUploadTaskBookForm() {
		return "teacher/teacherUploadTakeBook.jsp";
	}

	@RequestMapping(value="/uploadOpening",method=RequestMethod.GET)
	public String teacherUploadOpeningForm() {
		return "teacher/teacherUploadOpeningReport.jsp";
	}
	
	@RequestMapping(value="/uploadKeXingXing",method=RequestMethod.GET)
	public String teacherUploadKeXingXingForm() {
		return "teacher/teacherUploadKeXingXing.jsp";
	}
	
	@RequestMapping(value="/uploadXuQiu",method=RequestMethod.GET)
	public String teacherUploadXuQiuForm() {
		return "teacher/teacherUploadXuQiu.jsp";
	}
	
	@RequestMapping(value="/uploadGaiYao",method=RequestMethod.GET)
	public String teacherUploadGaiYaoForm() {
		return "teacher/teacherUploadGaiYao.jsp";
	}
	
	@RequestMapping(value="/uploadShuJuKu",method=RequestMethod.GET)
	public String teacherUploadShuJuKuForm() {
		return "teacher/teacherUploadShuJuKu.jsp";
	}

	@RequestMapping(value="/checkOppening")
	public String teacherCheckOppeningForm(HttpServletRequest request,Model model) {
		Teacher currentTeacher = (Teacher)request.getSession().getAttribute("teacher");
		int teacherId = currentTeacher.getId();
		List<Student> students = teacherService.getAllStudentInfo(teacherId);
		for(int i=0;i<students.size();i++) {
			int studentId = students.get(i).getId();
			StudentTaskBookOpening STBO = teacherService.getStudentOpeningByStudentId(studentId);
			if(STBO == null || "".equals(STBO)) {
				
			}else {
				String openingPath = STBO.getStudentOpeningResport();
				if(openingPath==null) {
					students.get(i).setStudentOpeningName("未上传");
					students.get(i).setOpenscore("未上传");
				}else {
					students.get(i).setStudentOpeningPath(openingPath);
					String[] str = openingPath.split("\\\\");
					String fileName = str[str.length-1].toString();
					students.get(i).setStudentOpeningName(fileName);
					students.get(i).setOpenscore(STBO.getOpenscore());
				}
				
//				int completion = STBO.getCompletion();
//				if(completion==0) {
//					students.get(i).setCompletionName("未审核");
//				}else if(completion==1) {
//					students.get(i).setCompletionName("未通过");
//				}else {
//					students.get(i).setCompletionName("审核通过");;
//				}
			}
		}
		model.addAttribute("studentList", students);
		
		return "teacher/teacherCheckOpeningReport.jsp";
	}
	
	@RequestMapping(value="/checkKexing")
	public String teacherCheckKexingForm(HttpServletRequest request,Model model) {
		Teacher currentTeacher = (Teacher)request.getSession().getAttribute("teacher");
		int teacherId = currentTeacher.getId();
		List<Student> students = teacherService.getAllStudentInfo(teacherId);
		for(int i=0;i<students.size();i++) {
			int studentId = students.get(i).getId();
			StudentTaskBookOpening STBO = teacherService.getStudentOpeningByStudentId(studentId);
			if(STBO == null || "".equals(STBO)) {
				
			}else {
				String kexingPath = STBO.getStudentKeXingXing();
				if(kexingPath==null) {
					students.get(i).setStudentKexingName("未上传");
					students.get(i).setKexingscore("未上传");
				}else {
					students.get(i).setStudentKexingPath(kexingPath);
					String[] str = kexingPath.split("\\\\");
					String fileName = str[str.length-1].toString();
					students.get(i).setStudentKexingName(fileName);
					students.get(i).setKexingscore(STBO.getKexingscore());
				}
				
			}
		}
		model.addAttribute("studentList", students);
		
		return "teacher/teacherCheckKeXing.jsp";
	}
	
	@RequestMapping(value="/checkXuqiu")
	public String teacherCheckXuqiuForm(HttpServletRequest request,Model model) {
		Teacher currentTeacher = (Teacher)request.getSession().getAttribute("teacher");
		int teacherId = currentTeacher.getId();
		List<Student> students = teacherService.getAllStudentInfo(teacherId);
		for(int i=0;i<students.size();i++) {
			int studentId = students.get(i).getId();
			StudentTaskBookOpening STBO = teacherService.getStudentOpeningByStudentId(studentId);
			if(STBO == null || "".equals(STBO)) {
				
			}else {
				String xuqiuPath = STBO.getStudentXuQiu();
				if(xuqiuPath==null) {
					students.get(i).setStudentXuqiuName("未上传");
					students.get(i).setXuqiuscore("未上传");
				}else {
					students.get(i).setStudentXuqiuPath(xuqiuPath);
					System.out.println(xuqiuPath);
					String[] str = xuqiuPath.split("\\\\");
					String fileName = str[str.length-1].toString();
					students.get(i).setStudentXuqiuName(fileName);
					students.get(i).setXuqiuscore(STBO.getXuqiuscore());
				}
				
			}
		}
		model.addAttribute("studentList", students);
		
		return "teacher/teacherCheckXuQiu.jsp";
	}
	
	
	@RequestMapping(value="/uploadThesisTitle",method=RequestMethod.POST)
	public String teacherUploadThesisTitle(Model model,HttpServletRequest request,String thesisTitle,String nandu,String liang,String from,String leixing,String thesisDesc) throws Exception {
		thesisTitle = new String(thesisTitle.getBytes("iso-8859-1"),"utf-8");
		nandu = new String(nandu.getBytes("iso-8859-1"),"utf-8");
		liang = new String(liang.getBytes("iso-8859-1"),"utf-8");
		from = new String(from.getBytes("iso-8859-1"),"utf-8");
		leixing = new String(leixing.getBytes("iso-8859-1"),"utf-8");
		thesisDesc = new String(thesisDesc.getBytes("iso-8859-1"),"utf-8");
		
		if(thesisTitle == null || "".equals(thesisTitle)) {
			model.addAttribute("message", "上传课题题目不能为空");
			return "teacher/main.jsp";
		}else if(thesisDesc == null || "".equals(thesisDesc)) {
			model.addAttribute("message", "上传课题描述不能为空");
			return "teacher/main.jsp";
		}else if(nandu == null || "".equals(nandu)) {
			model.addAttribute("message", "上传课题难度不能为空");
			return "teacher/main.jsp";
		}else if(liang == null || "".equals(liang)) {
			model.addAttribute("message", "上传课题工作量不能为空");
			return "teacher/main.jsp";
		}else if(from == null || "".equals(from)) {
			model.addAttribute("message", "上传课题来源不能为空");
			return "teacher/main.jsp";
		}else if(leixing == null || "".equals(leixing)) {
			model.addAttribute("message", "上传课题类型不能为空");
			return "teacher/main.jsp";
		}else {
			Teacher currentTeacher = (Teacher)request.getSession().getAttribute("teacher");
			int teacherId = currentTeacher.getId();
			String teacherName = currentTeacher.getTeacherName();
			Date time = new Date();
			
			ThesisTitle thesis = new ThesisTitle();
			thesis.setThesisName(thesisTitle);
			thesis.setTeacherId(teacherId);
			thesis.setSubmitTime(time);
			thesis.setInputMan(teacherName);
			thesis.setNandu(nandu);
			thesis.setLiang(liang);
			thesis.setFrom(from);
			thesis.setLeixing(leixing);
			thesis.setDescription(thesisDesc);
			
			int num = teacherService.uploadThesisTitle(thesis);
			System.out.println("添加的课题数:"+num);
			
			model.addAttribute("message", "上传成功");
			return "teacher/teacherUploadThesisTitle.jsp";
		}
		
	}
	
	
	
	
	
	@RequestMapping(value="/uploadThesis4pass")
	public String teacherUploadThesis4pass(HttpServletRequest request,@RequestParam("studentList")int studentList,@RequestParam("file") MultipartFile file, Model model) throws Exception, IOException {
		
		// System.out.println("上传课题id:"+topic4Teacher);
		
		Teacher currentTeacher = (Teacher)request.getSession().getAttribute("teacher");
		String teacherName = currentTeacher.getTeacherName();
		String studentId = String.valueOf(studentList);
		// System.out.println("当前用户:"+teacherNo);
		if(!file.isEmpty()) {
			
			File fileRoot = new File("E:\\BSM\\thesis");
			File fileDb = new File(fileRoot, studentId);
			String fileName = file.getOriginalFilename();
			
			File filePath = new File(fileDb, fileName);
			
			// filePath 是必须的 , 文件保存的路径,若是注释掉会出现,空文件异常
			if(!filePath.getParentFile().exists()) {
				filePath.getParentFile().mkdirs();
			}
			
			file.transferTo(new File(fileDb+File.separator+fileName));
			
			ThesisPaper paper = new ThesisPaper();
			paper.setStudentId(studentList);
			paper.setPaperInfo(filePath.toString());
			
			
			teacherService.uploadThesis4Pass(paper);
			
			model.addAttribute("message", "上传学生论成功");
			
			return "teacher/main.jsp";
		}else {
			model.addAttribute("message", "上传任务书出错");
			return "error.jsp";
		}
	}
	
	
	@RequestMapping(value="/checkDoubt")
	public String teacherCheckDoubtForm(HttpServletRequest request,Model model) {
		Teacher currentTeacher = (Teacher)request.getSession().getAttribute("teacher");
		int teacherId = currentTeacher.getId();
		
		List<Student> students = teacherService.getAllStudentInfo(teacherId);
		List<Doubt> doubtList = new ArrayList<Doubt>();
		for(int i=0;i<students.size();i++) {
			int studentId = students.get(i).getId();
			List<Doubt> doubts = teacherService.getAllDoubtByStudentId(studentId);
			int nn = doubts.size();
			for(int j=0;j<nn;j++) {
				Doubt db = doubts.get(j);
				String answer = db.getAnswer();
				if(answer == null || "".equals(answer)) {
					doubtList.add(db);
				}
			}
		}
		model.addAttribute("doubtList", doubtList);
		
		return "teacher/teacherCheckDoubt.jsp";
	}
	
	@RequestMapping(value="/answerDoubtForm")
	public String teacherAnswerDoubtForm() {
		return "teacher/teacherAnswerDoubt.jsp";
	}
	
	@RequestMapping(value="/answerDoubt")
	public String teacherAnswerDoubt(Model model,int id,String answer) throws Exception {
		
		answer = new String(answer.getBytes("iso-8859-1"),"utf-8");
		Doubt doubt = new Doubt();
		doubt.setId(id);
		doubt.setAnswer(answer);
		int num = teacherService.updateDoubt(doubt);
		if(num == 1) {
			model.addAttribute("message", "回复成功");
		}else {
			model.addAttribute("message", "回复失败");
		}
		
		return "teacher/main.jsp";
	}
	
	

论文报告:

 总结:

       经过近期对 java 面向对象程序设计、前端知识以及JAVA 框架的掌握和学习,以及这段时间这个毕业设计管理系统的开发,让我更加了解到 java 学习的重要性。在开发这个系统是哪个,我完成了多个实验以及毕业设计管理平台的功能测试,阶段的系统开发学习当中,我从认识到熟悉java,而后到能够自主运用相关技术,我发现了它确实有很多方便之处,比如java集抽象性和封装性以及继承性和多态性于一体,实现了对代码重用和代码扩充功能,提高了整体软件开发的速度和效率。比如管理员添加用户的时候报java.lang.NullPointException、解决的方法:查看控制台打印信息、发现添加的时候未填写相关信息、报java.lang.NullPointException、通过断电调试发现用户信息为空的数据项、在前端保存的时候必须填写用户完整相关信息或者数据库设置字段可以为空都可以解决、 我学习程序设计的主要目的就是提高自己实际问题的程序解决方案的关键技能和技术。 

源码获取: 

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻

打卡 文章 更新 191/  365天

 精彩专栏推荐订阅:在下方专栏👇🏻👇🏻👇🏻👇🏻

Java项目精品实战案例《100套》

web前端期末大作业网页实战《100套》

书籍介绍:免费送

随着云计算、大数据、人工智能、虚拟现实等应用的兴起,企业对于开发人员的算法要求也越来越高。本书全 面讲解在 Java 编程中涉及的常用数据结构及算法,辅以大量的实战案例,图文并茂,让读者易于理解掌握。本书主要面向对 Java 数据结构及算法感兴趣的学生、开发人员、架构师。主要介绍了介绍数据结构和算法的基本概念,并演示如何搭建开发环境、编写测试用例。 介绍常见的数据结构,包括数组、链表、矩阵、栈、队列、跳表、散列、树、图等。 介绍常用的算法,包括分而治之、动态规划、贪心算法、回溯、遗传算法、 蚂蚁算法等。 以及商业实战介绍汉诺塔游戏的实现等。



 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200