基于SSM,Spring, BootStrap 毕业设计管理系统的设计与实现

news2024/9/23 5:31:46

目录

一.前言介绍

二、主要技术

2.1  SSM框架介绍

2.2 MYSQL数据库

2.3 持久层框架MyBatis

2.4 前端框架BootStrap

三. 系统设计

3.1 系统架构设计

3.2 系统功能模块

3.2.1 学生模块

3.2.2 教师模块

3.2.3 管理员模块

四、数据库设计

4.1 数据分析

4.2 概念设计

4.3 重要E-R图

4.3.1 数据库文档处理的E-R图

 4.3.2 数据库文档处理的E-R图

 4.4 表设计

五、功能截图

5.1 学生模块部分页面

5.2 教师模块部分页面

5.3 管理员模块部分页面

 六、部分代码实现

6.1 用户模块controller代码实现

6.2 学生模块controller代码实现

七. 项目总结

八. 源码获取


一.前言介绍

毕业设计是本科教育的最后一个环节,整个过程包括课题拟定与审核、师生双选、开题报告、文档审核、中期检查、毕业答辩等多个环节,是一项系统而复杂的工作。开发一个适合本校的毕业设计管理系统,不仅能够极大地减少教务管理人员的工作量,还能较大地提高学生和教师的效率。

二、主要技术

2.1  SSM框架介绍

本课题程序开发使用到的框架技术,名称缩写是SSM,在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等,作为一个课题程序采用SSH框架也可以,SSM框架也可以,SpringMVC也可以。SSH框架是属于重量级别的框架,配置繁琐,不够灵活,修改程序需要修改好多个文件,并且运行起来也占用内存较高,CPU使用率相对也高,SpringMVC是Spring开发的一套MVC架构,更灵活更好用,SSM框架取中间值,既没有SSH臃肿,也没有SpringMVC简化,属于中间级别的,在配置过程和使用过程中更能编写和理解。MyBatis框架取代Hibernate框架是因为它更灵活,不需要完全在框架里操作,它在数据操作上可以写出更灵活的代码,它的性能也比Hibernate框架更稳定。总的来说,使用SSM框架是通过综合考虑而使用的,网上有很多的使用教程和心得体会,而且SSM又是这么的流行,用SSM框架开发是顺其自然的。

2.2 MYSQL数据库

Mysql的语言是非结构化的,用户可以在数据上进行工作。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。并且因为Mysql的语言和结构比较简单,但是功能和存储信息量很强大,所以得到了普遍的应用。Mysql数据库在编程过程中的作用是很广泛的,为用户进行数据查询带来了方便。Mysql数据库的应用因其灵活性强,功能强大,所以在实现某功能时只需要一小段代码,而不像其他程序需要编写大段代码。总体来说,Mysql数据库的语言相对要简洁很多。

2.3 持久层框架MyBatis

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

2.4 前端框架BootStrap

Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML、CSS、JavaScript 开发的简洁、直观、强悍的前端开发框架,使得 Web 开发更加快捷。

Bootstrap中包含了丰富的Web组件,根据这些组件,可以快速的搭建一个漂亮、功能完备的网站,其中包括以下组件:下拉菜单、按钮组、按钮下拉菜单、导航、导航条、路径导航、分页、排版、缩略图、警告对话框、进度条、媒体对象等。

三. 系统设计

3.1 系统架构设计

系统的组织架构如图所示,三种用户根据自己不同的权限对课题、文档、成绩、公告、任务五种数据信息进行处理,不同用户角色再根据这些数据信息进行交互通过课题进行交互,并且围绕着文档进行数据的传递和处理等。

img

本系统依据学生、导师、管理员三种不同用户角色的需求,分为了三个大的功能模块,三种用户角色在各自的模块进行操作,可以通过课题进行与其他两种用户角色之间的交互,并且围绕着文档进行各种数据(用户信息、文档信息、课题信息)的传递和处理等,这就形成了系统的体系结构,管理员发布课题给学生,学生选择课题呈现给导师,导师自拟课题向管理员申报,如图所示。

img

同时三种用户可对五种数据信息进行不同的处理(增删查改的权限不同),表现在系统上就是拥有不同的功能模块,所以分为三个大的模块,每个模块有相应的小的功能模块,系统的功能结构如图。

img

3.2 系统功能模块

本系统包含三种用户:学生、教师和管理员。通过本系统,学生可以获取指导教师和管理员发布的相关教学信息和教学资源;教师可以进行毕设进度的日常管理,发布任务、上传资料、审核文档等;管理员可以进行系统的管理和维护,并对教师、学生、课题和文档进行管理,确保系统的正常运行。系统总共分为3个模块。

img

3.2.1 学生模块

学生登录系统后进入该模块,在该模块中,学生能够修改个人资料和登录密码,选择感兴趣的课题及导师,下载导师上传的相关参考资料,上传自己已经完成的文档,查看发布的公告、任务和自己的阶段成绩等。

3.2.2 教师模块

教师登录系统后进入该模块,在该模块中,教师能够修改个人资料和登录密码,选择学生,上传拟好的课题题目给管理员审核,发布阶段任务,上传相关资料给学生参考,下载学生上传的阶段文档并审核和打分,查看公告及发布新公告等。

3.2.3 管理员模块

管理员登录系统后进入该模块,在该模块中,管理员可以增删查改导师和学生的信息,审核教师上传的课题,发布公告,查看各种信息,查看各种数据分析的结果和图表。

四、数据库设计

4.1 数据分析

本系统的主要数据表为存储学生、教师、文档、课题数据集的四个表。其余表大多作为外键关联用于完善四张表的信息。

4.2 概念设计

数据库主要围绕学生、教师、 课题、文档4个实体进行数据处理。即系统只要处理好这4个实体的数据,就可以完成系统的绝大部分功能并让毕业设计管理的整个流程顺利进行下去。其余的数据表则是围绕这4个实体相应展开,进行一些扩展和补充,以完善整个数据库的结构并加快数据库对请求的响应速度。

4.3 重要E-R图

4.3.1 数据库文档处理的E-R图

img

 4.3.2 数据库文档处理的E-R图

img

 4.4 表设计

数据库中一共设计了15张表,和学生相关的表有6张(包括学生信息、开题报告、文档成绩、毕设进度、学生疑问等),和教师相关的表有4张(包括教师信息、任务书、阶段任务、课题申报等),文档有1张表,课题涉及2张表,还有2张表属于公共信息表,用于进行一些补充以完善数据库。数据库的表清单如下表。

序号物理表名中文名称
1t_announcement公告表
2t_department学院表
3t_doubt疑问表
4t_major专业表
5t_student学生表
6t_student_opening_report_task_book学生开题报告表
7t_student_progress学生进度通知填写表
8t_student_score学生成绩表
9t_teacher教师表
10t_teacher_opening_report_task_book教师开题报告表
11t_teacher_progress_notification教师阶段任务表
12t_thesis_information文档提交表
13t_thesis_title教师提交课题表
14t_topic选题信息表
15t_user用户表

五、功能截图

5.1 学生模块部分页面

img

img

5.2 教师模块部分页面

img

img

5.3 管理员模块部分页面

img

img

 六、部分代码实现

6.1 用户模块controller代码实现

package com.zc.web;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

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.RequestMethod;

import com.zc.entity.Student;
import com.zc.entity.Teacher;
import com.zc.entity.User;
import com.zc.service.IDepartmentService;
import com.zc.service.IMajorService;
import com.zc.service.IStudentService;
import com.zc.service.ITeacherService;
import com.zc.service.IUserService;

/**
 * @date 2018-4-6
 * @author zhangC
 * adminLogin() 管理员登陆
 * teacherLogin() 教师登陆
 * studentLogin() 学生登陆
 * quitSystem() 退出系统
 * modifyPassword() 修改密码,由于管理员,教师,学生的修改密码相同,所以只用一个controller作为修改。
 *
 * @date 2018-4-11
 * @author zhangC
 * 修改了teacherLogin() 方法,新增了查询教师信息的功能。并且写入session中。
 *
 */

@Controller
public class UserController {
	
	@Autowired
	private IUserService userService;
	
	@Autowired
	private ITeacherService teacherService;
	
	@Autowired
	private IDepartmentService departmentService;
	
	@Autowired
	private IStudentService studentService;
	
	@Autowired
	private IMajorService majorService;
	
	@RequestMapping(value="/admin/login")
	public String adminLogin(String userNo,String password,Model model,HttpServletRequest request) {
		User currentUser = userService.login(userNo, password);
		if("".equals(currentUser)||currentUser==null) {
			model.addAttribute("message", "用户名或密码错误");
			return "../../admin/adminLogin.jsp";
		}
		if(currentUser.getPermission()==3) {
			// request.getSession().setAttribute("userNo", userNo);
			HttpSession session = request.getSession();
			session.setMaxInactiveInterval(3600);
			
			session.setAttribute("currentUser", currentUser);
			//model.addAttribute("userNo", userNo);
			return "admin/main.jsp";
		}else {
			model.addAttribute("message", "当前用户不是管理员");
			return "../../admin/adminLogin.jsp";
		}
	}
	
	@RequestMapping(value="/teacher/login")
	public String teacherLogin(String userNo,String password,Model model,HttpServletRequest request) {
		
		User currentUser = userService.login(userNo, password);
		if("".equals(currentUser)||currentUser==null) {
			model.addAttribute("message", "用户名或密码错误");
			return "../../teacher/teacherLogin.jsp";
		}
		if(currentUser.getPermission()==2) {
			HttpSession session = request.getSession();
			session.setMaxInactiveInterval(3600);
			// 在t_user表的信息
			session.setAttribute("currentUser", currentUser);
			
			// 完整的teacher信息
			Teacher teacher = teacherService.showInfoByNo(userNo);
			int depId = teacher.getDepartmentId();
			String depName = departmentService.getNameById(depId);
			teacher.setDepartmentName(depName);
			
			session.setAttribute("teacher", teacher);
			//model.addAttribute("userNo", userNo);
			return "teacher/main.jsp";
		}else {
			model.addAttribute("message", "当前用户不是教师");
			return "../../teacher/teacherLogin.jsp";
		}
	}
	@RequestMapping(value="/student/login")
	public String studentLogin(String userNo,String password,Model model,HttpServletRequest request) {
		
		User currentUser = userService.login(userNo, password);
		System.out.println(currentUser);
		if("".equals(currentUser)||currentUser==null) {
			model.addAttribute("message", "用户名或密码错误");
			//model.addAttribute("url", "../student/studentLogin.jsp");
			//return "error.jsp";
			return "../../student/studentLogin.jsp";
		}
		if(currentUser.getPermission()==1) {
			HttpSession session = request.getSession();
			session.setMaxInactiveInterval(3600);
			// t_user 表中的关于学生的信息
			session.setAttribute("currentUser", currentUser);
			
			// t_student 表中的信息
			Student student = studentService.getStudentByNO(userNo);
			int majorId = student.getMajorId();
			String majorName = majorService.getNameById(majorId);
			student.setMajorName(majorName);
			
			session.setAttribute("student", student);
			// model.addAttribute("userNo", userNo);
			return "student/main.jsp";
		}else {
			model.addAttribute("message", "当前用户不是学生");
			//return "error.jsp";
			return "../../student/studentLogin.jsp";
		}
	}
	
	@RequestMapping(value="/quit")
	public String quitSystem(Model model,HttpServletRequest request) { 
		
		request.getSession().invalidate();
		
		return "../../index.jsp";
	}
	
	@RequestMapping(value="/modifyPassword")
	public String modifyPassword(Model model,String newPassword1,String currentUserNo) {
		
		/*System.out.println("新的密码:"+newPassword1);
		System.out.println("账户:"+currentUserNo);*/
		int num = userService.modifyPassword(currentUserNo, newPassword1);
		System.out.println("修改了"+num+"条数据");
		model.addAttribute("num", num);
		return "modifySuccess.jsp";
	}
	
}

6.2 学生模块controller代码实现

package com.zc.web;

import java.io.File;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zc.entity.Announcement;
import com.zc.entity.Doubt;
import com.zc.entity.Student;
import com.zc.entity.StudentScore;
import com.zc.entity.StudentTaskBookOpening;
import com.zc.entity.TeacherProgress;
import com.zc.entity.TeacherTaskBookOpening;
import com.zc.entity.ThesisInformation;
import com.zc.entity.ThesisTitle;
import com.zc.entity.Topic;
import com.zc.entity.User;
import com.zc.entity.Zhiyuan;
import com.zc.service.IMajorService;
import com.zc.service.IStudentService;
import com.zc.service.ITeacherService;

/**
 * 
 * @author zhangC
 * addStudentForm() 主页跳转到添加界面
 * addStudent() 添加学生   以废除
 * studentInfo() 学生修改个人信息跳转
 * 
 * @date 2018-4-6
 * @author zhangC 
 * @desc 都是跳转页面
 * studentMainForm() 跳转学生管理主页
 * studentMofidyInfoForm() 跳转学生 修改个人信息页
 * studentMofidyPasswordForm() 跳转学生 修改密码页
 * studentThesis() 学生选题页
 * studentThesisResult() 学生选题结果页
 * studentViewTaskOpening() 查看任务书及开题报告
 * studentSectionTask() 填写阶段任务
 * studentUploadFile() 文件上传
 * studentResourcesDownload() 文件下载
 * studentAnnouncement() 查看公共
 * studentScore() 查询成绩
 * 
 * @date 2018-4-12
 * @author zhangC
 * 修改了studentThesis() 页面可以显示当前学生的选题状况,若是选择了课题则直接跳转到主页。
 * 修改了studentThesisResult() 显示学生的选题情况,若是为选择课题则不能查询选题结果,会直接跳转到主页
 * studentModifyInfoToDb() 修改学生信息
 * studentGetAllAvailableTopicForm() 获得可选择的课题,用于学生选题页
 * studentSelectTopic() 提交当前学生的选题情况
 * studentDeleteChosenTopic() 学生退选当前课题
 * 
 * @date 2018-4-15
 * @author zhangC
 * 修改了studentViewTaskOpening() 页面,用于查看学生所选课题的开题报告和任务书,并下载
 * 修改了 studentResourcesDownload() 也main,显示学生上传的内容
 * fileDownload() 文件下载
 * studentUploadTaskBook() 上传自己写的任务书 ---以废除不用
 * studentUploadOpening() 上传自己写的开题报告
 * fileDelete() 文件删除
 * studentOpeningResult() 学生查看自己开题报告的审核结果 (未提交--- 通过---- 不通过  )
 * 
 * @date 2018-4-16
 * @author zhangC
 * 修改了 studentSelectTopic() 方法 添加了 把选题信息保存到application 中,以便jsp页面的显示
 * getRealTimeTopic() 获得当前选题信息,并保存到application中
 * 
 * @date 2018-4-17
 * @author zhangC
 * 修改了studentResourcesDownload方法,可以显示上传为论文信息
 * 修改了fileDelete方法,可以删除上传的论文信息
 * studentUploadThesisInformation() 学生提交 学生论文信息
 * 
 * @date 2018-4-18
 * @author zhangC
 * studentQualification()  学生答辩资格的查看
 * 
 * @date 2018-5-9
 * @author zhangC
 * studentDoubtForm() 跳转到学生提出疑惑页面
 * studentDoubtListForm() 显示学生的疑惑,并查看是否有解决方案
 * studentDoubtToDb() 添加学生的疑惑道数据库
 * 
 */

@Controller
@RequestMapping(value="/student")
public class StudentController {

	@Autowired
	private IStudentService studentService;
	
	@Autowired
	private IMajorService majorService;
	
	@Autowired
	private ITeacherService teacherService;
	
	@RequestMapping(value="/add",method=RequestMethod.GET)
	public String addStudentForm() {
		return "student/addStudent.jsp";
	}
	
	private String realTimeTopicMessageOn = "";
	
	// 已废除
	@RequestMapping(value="/add",method=RequestMethod.POST)
	public String addStudent(HttpServletRequest request,String studentNo, String studentName,String sex,String grade ,String inputMan,String phone,String major,Model model) throws Exception {
		studentNo = new String(studentNo.getBytes("iso-8859-1"),"utf-8");
		studentName = new String(studentName.getBytes("iso-8859-1"),"utf-8");
		sex = new String(sex.getBytes("iso-8859-1"),"utf-8");
		grade = new String(grade.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");
		major = new String(major.getBytes("iso-8859-1"),"utf-8");
		Date currentTime = new Date();
		
		Student student = new Student();
		student.setStudentNo(studentNo);
		student.setStudentName(studentName);
		student.setSex(sex);
		student.setGrade(grade);
		student.setInputMan(inputMan);
		student.setPhone(phone);
		student.setMajorId(Integer.parseInt(major));
		student.setLastModifyTime(currentTime);
		
		int addNum = studentService.addStudent(student);
		System.out.println("添加数目:"+addNum);
		
		return "student/addSuccess.jsp";
	}
	
	@RequestMapping(value="/info",method=RequestMethod.GET)
	public String studentInfo() {
		return "student/studentPersionalInformation.jsp";
	}
	
	@RequestMapping(value="/main",method=RequestMethod.GET)
	public String studentMainForm() {
		return "student/main.jsp";
	}
	
	@RequestMapping(value="/modifyInfo",method=RequestMethod.GET)
	public String studentMofidyInfoForm() {
		return "student/studentModifyInfo.jsp";
	}
	
	@RequestMapping(value="/modifyPassword",method=RequestMethod.GET)
	public String studentMofidyPasswordForm() {
		return "student/studentModifyPassword.jsp";
	}
	
	@RequestMapping(value="/thesis",method=RequestMethod.GET)
	public String studentThesis(HttpServletResponse response,HttpServletRequest request,Model model) {
		User currentUser = (User)request.getSession().getAttribute("currentUser");
		String userNo = currentUser.getUserNo();
		//获取所有课题
		List<ThesisTitle> thesisList = teacherService.showAllThesisTitle();
		
		Student student = studentService.getStudentByNO(userNo);
		int studentId = student.getId();
		Topic topic = studentService.chosenThesisTitle(studentId);
		//ThesisTitle title = teacherService.getThesisInfoByThesisId(topic.getThesisId());
		
		//ThesisInformation topic2 = studentService.getInfoByStudentId(studentId);
		if(topic == null || "".equals(topic)) {
			model.addAttribute("thesisTitleList", thesisList);
			System.out.println("查询到的课题有:"+thesisList);
			return "student/studentThesis.jsp";
		}else {
			System.out.println(topic);
			model.addAttribute("topicMessage", "你已选择课题,不可多选");
			//model.addAttribute("Message", title.getThesisName());
			
			return "student/main.jsp";
		}
		
		
		
	}
	
	@RequestMapping(value="/thesisResult",method=RequestMethod.GET)
	public String studentThesisResult(HttpServletResponse response,HttpServletRequest request,Model model) {
		User currnetUser = (User)request.getSession().getAttribute("currentUser");
		String studentNo = currnetUser.getUserNo();
		Student student = studentService.getStudentByNO(studentNo);
		int studentId = student.getId();
		Topic topic = studentService.chosenThesisTitle(studentId);
		Zhiyuan zhiyuan = studentService.chosenZhiyuan(studentId);
		if(topic == null || "".equals(topic)) {
			if(zhiyuan == null || "".equals(zhiyuan)) {
				model.addAttribute("topicMessage", "还未选择课题");
				model.addAttribute("realTimeTopicMessage", realTimeTopicMessageOn);
			} else {
				model.addAttribute("topicMessage", "已选择课题,请等待导师选择");
				model.addAttribute("realTimeTopicMessage", realTimeTopicMessageOn);
			}
			
			return "student/main.jsp";
		}else {
			int thesisId = topic.getThesisId();
			
			ThesisTitle theisTitle = teacherService.getThesisById(thesisId);
			String topicName = theisTitle.getThesisName();
			String inputMan = theisTitle.getInputMan();
			String nandu = theisTitle.getNandu();
			String liang = theisTitle.getLiang();
			String from = theisTitle.getFrom();
			String leixing = theisTitle.getLeixing();
			String description = theisTitle.getDescription();
			
			model.addAttribute("topicName", topicName);
			model.addAttribute("inputMan", inputMan);
			model.addAttribute("nandu", nandu);
			model.addAttribute("liang", liang);
			model.addAttribute("from", from);
			model.addAttribute("leixing", leixing);
			model.addAttribute("description", description);
			
			model.addAttribute("realTimeTopicMessage", realTimeTopicMessageOn);
			
			return "student/studentThesisResult.jsp";
		}
		
	}
	
	@RequestMapping(value="/viewTaskOpening")
	public String studentViewTaskOpening(HttpServletRequest request,Model model) {
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		Topic topic = studentService.chosenThesisTitle(studentId);
		if(topic == null || "".equals(topic)) {
			model.addAttribute("message", "尚未选择课题");
			return "student/studentViewTaskBookAndOpening.jsp";
		}else {
			int thesisId = topic.getThesisId();
			TeacherTaskBookOpening ttbo = studentService.getFilePathByThesisId(thesisId);
			if(ttbo==null || "".equals(ttbo)) {
				return "student/studentViewTaskBookAndOpening.jsp";
			}else {
				// 获得数据库中的文件目录;
				String taskBookPath = ttbo.getTaskBook();
				String openingPath = ttbo.getOpeningReport();
				String keXingXingPath = ttbo.getKeXingXing();
				String xuQiuPath = ttbo.getXuQiu();
				String gaiYaoPath = ttbo.getGaiYao();
				String shuJuKuPath = ttbo.getShuJuKu();
				
				Map<String, String> fileList = new HashMap<String, String>();

				if(taskBookPath == null || "".equals(taskBookPath)) {
					
				}else {
					String[] str1 = taskBookPath.split("\\\\");
					String taskBookName = str1[str1.length-1].toString();
					fileList.put(taskBookName, taskBookPath);
				}
				
				if(openingPath == null || "".equals(openingPath)) {
					
				}else {
					String[] str2 = openingPath.split("\\\\");
					String openingName = str2[str2.length-1].toString();
					fileList.put(openingName, openingPath);
				}
				
				if(keXingXingPath == null || "".equals(keXingXingPath)) {
					
				}else {
					String[] str2 = keXingXingPath.split("\\\\");
					String keXingXingName = str2[str2.length-1].toString();
					fileList.put(keXingXingName, keXingXingPath);
				}
				
				if(xuQiuPath == null || "".equals(xuQiuPath)) {
					
				}else {
					String[] str2 = xuQiuPath.split("\\\\");
					String xuQiuName = str2[str2.length-1].toString();
					fileList.put(xuQiuName, xuQiuPath);
				}
				
				if(gaiYaoPath == null || "".equals(gaiYaoPath)) {
					
				}else {
					String[] str2 = gaiYaoPath.split("\\\\");
					String gaiYaoName = str2[str2.length-1].toString();
					fileList.put(gaiYaoName, gaiYaoPath);
				}
				
				if(shuJuKuPath == null || "".equals(shuJuKuPath)) {
					
				}else {
					String[] str2 = shuJuKuPath.split("\\\\");
					String shuJuKuName = str2[str2.length-1].toString();
					fileList.put(shuJuKuName, shuJuKuPath);
				}
				
				model.addAttribute("fileList", fileList);
				
				return "student/studentViewTaskBookAndOpening.jsp";
			}
			
		}
		
		
	}
	
	@RequestMapping(value="/sectionTask")
	public String studentSectionTask(HttpServletRequest request,Model model) {
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		
		List<TeacherProgress> progresses = studentService.getTeacherProgressByStudentId(studentId);
		
		for(int i=0;i<progresses.size();i++) {
			int state = progresses.get(i).getState();
			if(state ==0) {
				progresses.get(i).setStateName("教师还未查看");
			}else if(state ==1) {
				progresses.get(i).setStateName("未通过");
			}else {
				progresses.get(i).setStateName("已通过");
			}
			
		}
		
		
		model.addAttribute("progressList", progresses);
		
		return "student/studentSectionTask.jsp";
	}
	
	@RequestMapping(value="/uploadFile",method=RequestMethod.GET)
	public String studentUploadFile() {
		return "student/studentUploadFile.jsp";
	}
	
	@RequestMapping(value="/resourcesDownload")
	public String studentResourcesDownload(HttpServletRequest request,Model model) {
		
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		
		
		Map<String, String> fileList = studentService.getTaskBookOpeningToMap(studentId);
		if(fileList.isEmpty()) {
			return "student/studentResourcesDownload.jsp";
		}else {
			ThesisInformation thesisInformation4Db = studentService.getInfoByStudentId(studentId);
			if(thesisInformation4Db ==null) {
				
			}else {
				String filePath = thesisInformation4Db.getThesisText();
				String[] str = filePath.split("\\\\");
				String fileName = str[str.length-1].toString();
				fileList.put(fileName, filePath);
			}
			
			model.addAttribute("fileList", fileList);
			return "student/studentResourcesDownload.jsp";
		}
	}
	
	@RequestMapping(value="/announcement")
	public String studentAnnouncement(Model model) {
		List<Announcement> list = studentService.showAllAnnouncement();
		SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd"); 
		for(int i=0;i<list.size();i++) {
			Date time4db = list.get(i).getLastModifyTime();
			String formatTime = time.format(time4db);
			list.get(i).setTimeFormat(formatTime);
		}
		
		model.addAttribute("announcementList", list);
		
		return "student/studentAnnouncement.jsp";
	}
	
	@RequestMapping(value="/score")
	public String studentScore(HttpServletRequest request,Model model) {
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		StudentScore dbScore = teacherService.showInfoByStudentId(studentId);
		if(dbScore == null || "".equals(dbScore)) {
			model.addAttribute("message", "暂无成绩");
			return "student/main.jsp";
			
		}else {
			String studentName = teacherService.getStudentInfoByStudentId(studentId).getStudentName();
			int thesisId = teacherService.getTopicInfoByStudentId(studentId).getThesisId();
			String thesisName = teacherService.getThesisById(thesisId).getThesisName();
			int score = teacherService.showInfoByStudentId(studentId).getThesisResult();
			Student student = new Student();
			student.setStudentName(studentName);
			student.setThesisName(thesisName);
			student.setThesisScore(score);
			
			model.addAttribute("studentList", student);
			
			return "student/studentScore.jsp";
		}
		
	}
	
	@RequestMapping(value="/modifyInfoToDb",method=RequestMethod.POST)
	public String studentModifyInfoToDb(Model model,HttpServletRequest request,int id,String studentNo, String studentName,String sex,String majorOld,String major,String grade, String phone, String email) throws Exception {
		
		// 以下代码是学生修改学生信息
		int majorId = 0;
		majorOld = new String(majorOld.getBytes("iso-8859-1"),"utf-8");
		//departmentId =  departmentService.getIdByName(departmentOld);
		majorId = majorService.getIdByName(majorOld);
		studentNo = new String(studentNo.getBytes("iso-8859-1"),"utf-8");
		studentName = new String(studentName.getBytes("iso-8859-1"),"utf-8");
		grade = new String(grade.getBytes("iso-8859-1"),"utf-8");
		sex = new String(sex.getBytes("iso-8859-1"),"utf-8");
		User user = (User)request.getSession().getAttribute("currentUser");
		String inputMan = user.getUserNo();
		phone = new String(phone.getBytes("iso-8859-1"),"utf-8");
		email = new String(email.getBytes("iso-8859-1"),"utf-8");
		major = new String(major.getBytes("iso-8859-1"),"utf-8");
		Date currentTime = new Date();
		
		
		Student student = new Student();
		student.setId(id);
		student.setStudentNo(studentNo);
		student.setStudentName(studentName);
		
		if (major == null || "".equals(major)) {
			student.setMajorId(majorId);
		}else {
			student.setMajorId(Integer.parseInt(major));
		}
		student.setGrade(grade);
		student.setSex(sex);
		student.setInputMan(inputMan);
		student.setLastModifyTime(currentTime);
		student.setPhone(phone);
		student.setEmail(email);
		
		int num = studentService.updateStudent(student);
		System.out.println("修改学生数目:"+num);
		
		// 根据 院系id 获得专业name
		int majId = student.getMajorId();
		String majorNameNew = majorService.getNameById(majId);
		student.setMajorName(majorNameNew);
		
		HttpSession session = request.getSession();
		session.setAttribute("student", student);
		
		return "student/main.jsp";
	}
	
	@RequestMapping(value="/getAllAvailableTopic")
	public void studentGetAllAvailableTopicForm(HttpServletResponse response,HttpServletRequest request) throws Exception {
		
		List<ThesisTitle> thesisList = studentService.availableTopic();
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter write = response.getWriter();
		write.write(JSONArray.toJSONString(thesisList));
		write.close();
	}
	
	@RequestMapping(value="/selectTopic")
	public String studentSelectTopic(HttpServletResponse response,HttpServletRequest request,Model model,int id,int topic) throws Exception {
		
		/*System.out.println("id:"+id);
		System.out.println("topic:"+topic);*/
		Topic top = new Topic();
		top.setStudentId(id);
		top.setThesisId(topic);
		Date time = new Date();
		top.setSelectTime(time);
		
		int num = studentService.addTopicToDb(top);
		System.out.println("添加了"+num+"个选题");
		
		Student student = studentService.getStudentNameById(id);
		String studentNo = student.getStudentNo();
		
		ThesisTitle thesis = studentService.getThesisInfoByid(topic);
		String thesisName = thesis.getThesisName();
		
		
		StringBuffer sb = new StringBuffer();
		sb.append("学号为");
		sb.append(studentNo);
		sb.append("的学生,选择了");
		sb.append(thesisName);
		
		
		String infoMessage = sb.toString();
		
		this.realTimeTopicMessageOn = infoMessage;
		model.addAttribute("realTimeTopicMessage", realTimeTopicMessageOn);
		
		studentThesisResult(response, request, model);
		return "student/studentThesisResult.jsp";
	}
	
	@RequestMapping(value="/selectThesis")
	public String studentSelectThesis(HttpServletResponse response,HttpServletRequest request,Model model,int id,int thesis) throws Exception {
		
		/*System.out.println("id:"+id);
		System.out.println("topic:"+topic);*/
		Zhiyuan zhi = studentService.chosenZhiyuan(id);
		if(zhi == null || "".equals(zhi)) {
			Zhiyuan zhiyuan = new Zhiyuan();
			zhiyuan.setStudentId(id);
			zhiyuan.setThesisId(thesis);
			Date time = new Date();
			zhiyuan.setSelectTime(time);
			
			int num = studentService.addZhiyuanToDb(zhiyuan);
			System.out.println("添加了"+num+"个志愿");
			
			Student student = studentService.getStudentNameById(id);
			String studentNo = student.getStudentNo();
			
			ThesisTitle thesis1 = studentService.getThesisInfoByid(thesis);
			String thesisName = thesis1.getThesisName();
			
			
			StringBuffer sb = new StringBuffer();
			sb.append("学号为");
			sb.append(studentNo);
			sb.append("的学生,选择了");
			sb.append(thesisName);
			
			
			String infoMessage = sb.toString();
			
			this.realTimeTopicMessageOn = infoMessage;
			model.addAttribute("message", realTimeTopicMessageOn);
			
			studentThesisResult(response, request, model);
			return "student/main.jsp";
		}else {
			model.addAttribute("message", "已选择课题,不可再次选择");
			return "student/main.jsp";
		}
		
	}
	
	@RequestMapping(value="/deleteChosenTopic")
	public String studentDeleteChosenTopic(Model model,int studentId) throws Exception {
		
		// System.out.println(studentId);
		StudentTaskBookOpening stbo = studentService.getSTBOInfoById(studentId);
		if(stbo==null||"".equals(stbo)) {
			int num = studentService.deleteTopic(studentId); 
			System.out.println("成功退选 :"+num+"条数据");
			model.addAttribute("message", "成功退选");
			
			return "student/main.jsp";
		}else {
			model.addAttribute("message", "已上传开题报告,不可退选");
			return "student/main.jsp";
		}
	}
	
	@RequestMapping(value="/fileDownload")
	public ResponseEntity<byte[]> fileDownload(HttpServletRequest request, @RequestParam("filePath") String filePath,@RequestParam("fileName") String fileName, Model model) throws Exception {
		System.out.println(fileName);
		System.out.println(filePath);
		//fileName = new String(fileName.getBytes("iso-8859-1"),"utf-8");
		//filePath = new String(filePath.getBytes("iso-8859-1"),"utf-8");
		File file = new File(filePath);
		HttpHeaders headers = new HttpHeaders();
		String downloadFile = new String(fileName.getBytes("utf-8"), "iso-8859-1");
		headers.setContentDispositionFormData("attachment", downloadFile);
		headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
		return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers,HttpStatus.CREATED); 
	}
	
	@RequestMapping(value="/uploadTaskBook")
	public String studentUploadTaskBook(HttpServletRequest request, Model model,@RequestParam("file") MultipartFile file) throws Exception {
		
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		
		String studentIdToString = String.valueOf(studentId);
		
		if(!file.isEmpty()) {
			
			File fileRoot = new File("E:\\BSM\\student");
			File fileDb = new File(fileRoot, studentIdToString);
			String fileName = file.getOriginalFilename();
			
			File filePath = new File(fileDb, fileName);
			
			if(!filePath.getParentFile().exists()) {
				filePath.getParentFile().mkdirs();
			}
			
			file.transferTo(new File(fileDb+File.separator+fileName));
			
			int num = studentService.uploadTaskBook(studentId, filePath.toString());
			System.out.println("添加了"+num+"条信息");
			model.addAttribute("message", "上传任务书成功");
			return "student/main.jsp";
		}else {
			model.addAttribute("message", "上传任务书出错");
			return "error.jsp";
		}
	}
	
	@RequestMapping(value="/uploadOpening")
	public String studentUploadOpening(HttpServletRequest request, Model model,@RequestParam("file") MultipartFile file) throws Exception {
		
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		
		String studentIdToString = String.valueOf(studentId);
		
		Topic topic = studentService.chosenThesisTitle(studentId);
		if(topic == null || "".equals(topic)) {
			model.addAttribute("message", "无法上传开题报告");
			return "student/main.jsp";
		}else {
			if(!file.isEmpty()) {
				
				File fileRoot = new File("E:\\BSM\\student");
				File fileDb = new File(fileRoot, studentIdToString);
				String fileName = file.getOriginalFilename();
				
				File filePath = new File(fileDb, fileName);
				
				if(!filePath.getParentFile().exists()) {
					filePath.getParentFile().mkdirs();
				}
				
				file.transferTo(new File(fileDb+File.separator+fileName));
				
				int num = studentService.uploadOpening(studentId, filePath.toString());
				System.out.println("添加了"+num+"条信息");
				
				model.addAttribute("message", "上传开题报告成功");
				return "student/main.jsp";
			}else {
				model.addAttribute("message", "上传开题报告出错");
				return "student/main.jsp";
			}
		}
	}
	
	@RequestMapping(value="/uploadKexing")
	public String studentUploadKexing(HttpServletRequest request, Model model,@RequestParam("file") MultipartFile file) throws Exception {
		
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		
		String studentIdToString = String.valueOf(studentId);
		
		Topic topic = studentService.chosenThesisTitle(studentId);
		if(topic == null || "".equals(topic)) {
			model.addAttribute("message", "无法上传可行性分析报告");
			return "student/main.jsp";
		}else {
			if(!file.isEmpty()) {
				
				File fileRoot = new File("E:\\BSM\\student");
				File fileDb = new File(fileRoot, studentIdToString);
				String fileName = file.getOriginalFilename();
				
				File filePath = new File(fileDb, fileName);
				
				if(!filePath.getParentFile().exists()) {
					filePath.getParentFile().mkdirs();
				}
				
				file.transferTo(new File(fileDb+File.separator+fileName));
				
				int num = studentService.uploadKexing(studentId, filePath.toString());
				System.out.println("添加了"+num+"条信息");
				
				model.addAttribute("message", "上传可行性分析报告成功");
				return "student/main.jsp";
			}else {
				model.addAttribute("message", "上传可行性分析报告出错");
				return "student/main.jsp";
			}
		}
	}
	
	@RequestMapping(value="/uploadXuqiu")
	public String studentUploadXuqiu(HttpServletRequest request, Model model,@RequestParam("file") MultipartFile file) throws Exception {
		
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		
		String studentIdToString = String.valueOf(studentId);
		
		Topic topic = studentService.chosenThesisTitle(studentId);
		if(topic == null || "".equals(topic)) {
			model.addAttribute("message", "无法上传需求分析报告");
			return "student/main.jsp";
		}else {
			if(!file.isEmpty()) {
				
				File fileRoot = new File("E:\\BSM\\student");
				File fileDb = new File(fileRoot, studentIdToString);
				String fileName = file.getOriginalFilename();
				
				File filePath = new File(fileDb, fileName);
				
				if(!filePath.getParentFile().exists()) {
					filePath.getParentFile().mkdirs();
				}
				
				file.transferTo(new File(fileDb+File.separator+fileName));
				
				int num = studentService.uploadXuqiu(studentId, filePath.toString());
				System.out.println("添加了"+num+"条信息");
				
				model.addAttribute("message", "上传需求分析报告成功");
				return "student/main.jsp";
			}else {
				model.addAttribute("message", "上传需求分析报告出错");
				return "student/main.jsp";
			}
		}
	}
	
	@RequestMapping(value="/uploadGaiyao")
	public String studentUploadGaiyao(HttpServletRequest request, Model model,@RequestParam("file") MultipartFile file) throws Exception {
		
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		
		String studentIdToString = String.valueOf(studentId);
		
		Topic topic = studentService.chosenThesisTitle(studentId);
		if(topic == null || "".equals(topic)) {
			model.addAttribute("message", "无法上传概要设计报告");
			return "student/main.jsp";
		}else {
			if(!file.isEmpty()) {
				
				File fileRoot = new File("E:\\BSM\\student");
				File fileDb = new File(fileRoot, studentIdToString);
				String fileName = file.getOriginalFilename();
				
				File filePath = new File(fileDb, fileName);
				
				if(!filePath.getParentFile().exists()) {
					filePath.getParentFile().mkdirs();
				}
				
				file.transferTo(new File(fileDb+File.separator+fileName));
				
				int num = studentService.uploadGaiyao(studentId, filePath.toString());
				System.out.println("添加了"+num+"条信息");
				
				model.addAttribute("message", "上传概要设计报告成功");
				return "student/main.jsp";
			}else {
				model.addAttribute("message", "上传概要设计报告出错");
				return "student/main.jsp";
			}
		}
	}
	
	@RequestMapping(value="/uploadShujuku")
	public String studentUploadShujuku(HttpServletRequest request, Model model,@RequestParam("file") MultipartFile file) throws Exception {
		
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		
		String studentIdToString = String.valueOf(studentId);
		
		Topic topic = studentService.chosenThesisTitle(studentId);
		if(topic == null || "".equals(topic)) {
			model.addAttribute("message", "无法上传数据库设计报告");
			return "student/main.jsp";
		}else {
			if(!file.isEmpty()) {
				
				File fileRoot = new File("E:\\BSM\\student");
				File fileDb = new File(fileRoot, studentIdToString);
				String fileName = file.getOriginalFilename();
				
				File filePath = new File(fileDb, fileName);
				
				if(!filePath.getParentFile().exists()) {
					filePath.getParentFile().mkdirs();
				}
				
				file.transferTo(new File(fileDb+File.separator+fileName));
				
				int num = studentService.uploadShujuku(studentId, filePath.toString());
				System.out.println("添加了"+num+"条信息");
				
				model.addAttribute("message", "上传数据库设计报告成功");
				return "student/main.jsp";
			}else {
				model.addAttribute("message", "上传数据库设计报告出错");
				return "student/main.jsp";
			}
		}
	}
	
	@RequestMapping(value="/fileDelete")
	public String fileDelete(HttpServletRequest request,HttpServletResponse response, @RequestParam("filePath") String filePath,@RequestParam("fileName") String fileName, Model model) throws Exception {
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		fileName = new String(fileName.getBytes("iso-8859-1"),"utf-8");
		filePath = new String(filePath.getBytes("iso-8859-1"),"utf-8");
		File deleteFile = new File(filePath);
		String message = "";
		boolean flag = false;
		if(deleteFile.exists()) {
			flag = deleteFile.delete();
			if(flag ) {
				message = "删除成功";
			}else {
				message = "删除失败";
			}
			
		}else {
			message = "文件不存在";
		}
		
		ThesisInformation thesis = studentService.getInfoByFilePath(filePath);
		if(thesis== null || "".equals(thesis)) {
			
		}else {
			int num1 = studentService.deleteThesisInformation(studentId);
			System.out.println("成功删除论文文件");
		}
		
		StudentTaskBookOpening STBO = studentService.getInfoByTaskBookPath(filePath);
		if(STBO == null || "".equals(STBO)) {
			
		}else {
			int num = studentService.resetTaskBook(studentId);
			System.out.println("成功删除任务书");
		}
		
		StudentTaskBookOpening STBO2 = studentService.getInfoByOpeningPath(filePath);
		if(STBO2==null || "".equals(STBO2) ) {
			
		}else {
			int num = studentService.resetOpening(studentId);
			System.out.println("成功删除开题报告");
		}
		
		model.addAttribute("message", "成功删除一个文档");
	
		return "student/main.jsp";
	}
	
	@RequestMapping(value="/openingResult")
	public String studentOpeningResult(HttpServletRequest request,Model model) {
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		StudentTaskBookOpening STBO = studentService.getSTBOInfoById(studentId);
		if(STBO == null || "".equals(STBO)) {
			model.addAttribute("message", "尚未提交开题报告");
			return "student/studentOpeningResult.jsp";
		}else {
			int completion = STBO.getCompletion();
			if(completion == 0) {
				model.addAttribute("message", "你的开题报告还未审核,请耐心等待");
			}else if(completion == 1) {
				model.addAttribute("message", "你的开题报告未通过,请修改后重新提交");
			}else {
				model.addAttribute("message", "开题报告已通过");
			}
		}
		return "student/studentOpeningResult.jsp";
	}
	
	@RequestMapping(value="/wendangResult")
	public String studentwendangResult(HttpServletRequest request,Model model) {
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		StudentTaskBookOpening STBO = studentService.getSTBOInfoById(studentId);
		Map<String, String> wendangList = new HashMap<String, String>();
		wendangList.put("open", STBO.getOpenscore());
		wendangList.put("kexing", STBO.getKexingscore());
		wendangList.put("xuqiu", STBO.getXuqiuscore());
		wendangList.put("gaiyao", STBO.getGaiyaoscore());
		wendangList.put("shujuku", STBO.getShujukuscore());
/*		if(STBO == null || "".equals(STBO)) {
			model.addAttribute("message", "尚未提交开题报告");
			return "student/studentOpeningResult.jsp";
		}else {
			int completion = STBO.getCompletion();
			if(completion == 0) {
				model.addAttribute("message", "你的开题报告还未审核,请耐心等待");
			}else if(completion == 1) {
				model.addAttribute("message", "你的开题报告未通过,请修改后重新提交");
			}else {
				model.addAttribute("message", "开题报告已通过");
			}
		}*/
		System.out.println(wendangList);
		if(wendangList==null) {
			model.addAttribute("message", "还未提交任何文档");
		}
		model.addAttribute("wendangList", wendangList);
		return "student/studentWendangResult.jsp";
	}
	
	@RequestMapping(value="/getRealTimeTopic")
	public void getRealTimeTopic(HttpServletResponse response,HttpServletRequest request) throws Exception {
		String message = (String)request.getSession().getServletContext().getAttribute("realTimeTopicMessage");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter write = response.getWriter();
		write.write(JSONObject.toJSONString(message));
		write.close();
	}
	
	@RequestMapping(value="/uploadThesisInformation")
	public String studentUploadThesisInformation(HttpServletRequest request, Model model,@RequestParam("file") MultipartFile file) throws Exception {
		
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		
		String studentIdToString = String.valueOf(studentId);
		
		Topic topic = studentService.chosenThesisTitle(studentId);
		if(topic == null || "".equals(topic)) {
			model.addAttribute("message", "无法上传毕业论文");
			return "student/main.jsp";
		}else {
			
			StudentTaskBookOpening stbo  = studentService.getSTBOInfoById(studentId);
			if(stbo == null || "".equals(stbo)) {
				model.addAttribute("message", "开题报告还未上传或还未审核,无法上传");
				return "student/main.jsp";
			}else {
				int completion = stbo.getCompletion();
				if(completion == 2) {
					if(!file.isEmpty()) {
						
						File fileRoot = new File("E:\\BSM\\student");
						File fileDb = new File(fileRoot, studentIdToString);
						String fileName = file.getOriginalFilename();
						
						File filePath = new File(fileDb, fileName);
						
						if(!filePath.getParentFile().exists()) {
							filePath.getParentFile().mkdirs();
						}
						
						file.transferTo(new File(fileDb+File.separator+fileName));
						
						int num = studentService.uploadThesisInformation(studentId, filePath.toString());
						System.out.println("添加了"+num+"条信息");
						
						model.addAttribute("message", "上传论文成功");
						return "student/main.jsp";
					}else {
						model.addAttribute("message", "上传论文出错");
						return "student/main.jsp";
					}
					
				}else {
					
					model.addAttribute("message", "开题报告还未上传或还未审核,无法上传");
					return "student/main.jsp";
					
				}
				
				
				
			}
			}
			
			
	}
	
	
	@RequestMapping(value="/qualification")
	public String studentQualification(HttpServletRequest request,Model model) {
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		
		ThesisInformation thesis = studentService.getThesisInforInfoByStudentId(studentId);
		
		if(thesis == null || "".equals(thesis)) {
			model.addAttribute("message", "不具备答辩资格");
		}else {
			int status = thesis.getStatus();
			if(status == 0) {
				model.addAttribute("message", "不具备答辩资格");
			}else if(status == 1) {
				model.addAttribute("message", "不具备答辩资格");
			}else {
				model.addAttribute("message", "你已具备答辩资格");
			}
			
		}
		return "student/studentQualifications.jsp";
	}
	
	
	@RequestMapping(value="/studentDoubt")
	public String studentDoubtForm() {
		return "student/studentDoubt.jsp";
	}
	
	@RequestMapping(value="/studentDoubtList")
	public String studentDoubtListForm(Model model,HttpServletRequest request) {
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		List<Doubt> doubtList = studentService.getAllDoubtByStudent(studentId);
		for(int i= 0;i<doubtList.size();i++) {
			String answer = doubtList.get(i).getAnswer();
			if(answer == null || "".equals(answer)) {
				doubtList.get(i).setAnswer("教师还未做出解答");
			}
		}
		model.addAttribute("doubtList", doubtList);
		return "student/studentDoubtList.jsp";
	}
	
	@RequestMapping(value="/studentDoubtToDb")
	public String studentDoubtToDb(Model model,String doubt,HttpServletRequest request) throws Exception {
		Student currentUser = (Student)request.getSession().getAttribute("student");
		int studentId = currentUser.getId();
		doubt = new String(doubt.getBytes("iso-8859-1"),"utf-8");
		Doubt d = new Doubt();
		d.setStudentId(studentId);
		d.setStudentDoubt(doubt);
		studentService.addDoubt(d);
		model.addAttribute("message", "添加疑问成功");
		return "student/main.jsp";
	}
	
	@RequestMapping(value="/getThesisDescById")
	public void getThesisDescById(Model model,int topicId,HttpServletResponse response) throws Exception {
		String description = studentService.getThesisDesc(topicId);
		Map<String, String> map = new HashMap<String, String>();
		map.put("desc", description);
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter write = response.getWriter();
		write.write(JSONObject.toJSONString(map));
		write.close();
	}
}

七. 项目总结

通过对毕业设计管理系统的开发,让我深刻明白开发一个程序软件需要经历的流程,当确定要开发一个系统的时候,对其功能进行合理的需求分析,然后才是程序软件的功能的框架设计,数据库的实体与数据表设计,程序软件的功能详细界面实现,以及程序的功能测试等进行全方位的细致考虑,虽然在此过程中,各个环节都遇到了大大小小的困难,但是通过对这些问题进行反复的分析,深入的思考,借助各种相关文献资料提供的方法与解决思路成功解决面临的各个问题,最后成功的让系统得以正常运行。商毕业设计管理系统在功能上面是基本可以满足用户对系统的操作,但是这个程序软件也有许多方面是不足的,因此,在下一个时间阶段,有几点需要改进的地方需要提出来,它们分别是:

(1)操作页面可以满足用户简易操作的要求,但是在页面多样化设计层面上需要把一些比较丰富的设计结构考虑进来。

(2)程序软件的总体安全性能需要优化,例如程序的退出安全性,以及程序的并发性等问题都需要进行安全性升级。

(3)需要对程序的数据结构方面,程序的代码方面等进行优化,让运行起来的程序可以保持稳定运行,也让程序能够保证短时间内处理相关事务,节省处理事务的时间,提高事务处理的效率,同时对服务器上资源占用的比例进行降低。

   

八. 源码获取

想要源码的小伙伴,大家点赞、收藏、关注、评论啦。谢谢各位大大。

源码下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/357147.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot搭建SpringMVC项目

前言据我的了解&#xff0c;现在不管是大公司或是小公司&#xff0c;如果使用java开发一个web项目&#xff0c;大部分都会选择使用SpringBoot&#xff0c;关于Springboot的好处&#xff0c;就不在这里过多赘述&#xff0c;总之Springboot有一套完整的生态&#xff0c;从项目构建…

Java【七大排序】算法详细图解,一篇文章吃透

文章目录一、排序相关概念二、七大排序1&#xff0c;直接插入排序2&#xff0c;希尔排序3&#xff0c;选择排序4&#xff0c;堆排序5&#xff0c;冒泡排序5.1冒泡排序的优化6&#xff0c;快速排序6.1 快速排序的优化7&#xff0c;归并排序三、排序算法总体分析对比总结提示&…

多层感知机

多层感知机理论部分 本文系统的讲解多层感知机的pytorch复现&#xff0c;以及详细的代码解释。 部分文字和代码来自《动手学深度学习》&#xff01;&#xff01; 目录多层感知机理论部分隐藏层多层感知机数学逻辑激活函数1. ReLU函数2. sigmoid函数3. tanh函数多层感知机的从零…

Allegro如何快速把推挤的走线变平滑操作指导

Allegro如何快速把推挤的走线变平滑操作指导 Allegro有个非常强大的功能,推挤命令,可以快速的让走线以不报DRC的形式避让目标 推挤后的效果如下图 但是走线不够平滑,如果每一段都去再推一下比较费时间,下面介绍allegro本身自带的优化类似走线的功能 具体操作如下 点击Rout…

sklearn学习-朴素贝叶斯

文章目录一、概述1、真正的概率分类器2、sklearn中的朴素贝叶斯二、不同分布下的贝叶斯1、高斯朴素贝叶斯GaussianNB2、探索贝叶斯&#xff1a;高斯朴素贝叶斯擅长的数据集3、探索贝叶斯&#xff1a;高斯朴素贝叶斯的拟合效果与运算速度总结一、概述 1、真正的概率分类器 算法…

计算机组成与体系结构

目录 1.计算机结构 2.寻址方式 3.CISC与RISC 4.流水线 1.计算机结构 运算器 算术逻辑单元ALU&#xff1a;数据的算术运算和逻辑运算累加寄存器AC&#xff1a;通用寄存器&#xff0c;为ALU提供一个工作区&#xff0c;用在暂存数据数据缓存寄存器DR&#xff1a;写内存中&…

Linux LVM逻辑卷

目录 LVM逻辑卷 什么是LVM LVM常用术语 管理逻辑卷相关命令 创建LVM逻辑卷 LVM扩容 LVM缩小 LVM快照卷 删除LVM LVM逻辑卷 什么是LVM LVM&#xff08;Logical Volume Manager&#xff09;逻辑卷管理器&#xff0c;是一种硬盘的虚拟化技术&#xff0c;能够实现用户对硬…

基于微信小程序的校园顺路代送小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏览器…

还真不错,今天 Chatgpt 教会我如何开发一款小工具开发(Python 代码实现)

上次使用 Chatgpt 写爬虫&#xff0c;虽然写出来的代码很多需要修改后才能运行&#xff0c;但Chatgpt提供的思路和框架都是没问题。 这次让 Chatgpt 写一写GUI程序&#xff0c;也就是你常看到的桌面图形程序。 由于第一次测试&#xff0c;就来个简单点的&#xff0c;用Python…

Linux命令之grep

Linux grep是一个非常强大的文本搜索工具。按照给定的正则表达式对目标文本进行匹配检查&#xff0c;打印匹配到的行。grep命令可以跟其他命令一起使用&#xff0c;对其他命令的输出进行匹配。 grep语法如下&#xff1a; grep [options] [pattern] content 文本检索 grep可以对…

51单片机蜂鸣器的使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、有源蜂鸣器和无源蜂鸣器的区别二、代码编写总结前言 本文旨在介绍如何使用51单片机驱动蜂鸣器。 一、有源蜂鸣器和无源蜂鸣器的区别 有源蜂鸣器是一种电子…

easyExcel 写复杂表头

写模板 模板图片&#xff1a; 实体类&#xff08;这里没有用Data 是因为Lombok和easyExcal的版本冲突&#xff0c;在导入读取的时候获取不到值&#xff09; package cn.iocoder.yudao.module.project.controller.admin.goods.vo;import com.alibaba.excel.annotation.ExcelI…

编译安装MySQL

MySQL 5.7主要特性 随机root 密码&#xff1a;MySQL 5.7 数据库初始化完成后&#xff0c;会自动生成一个 rootlocalhost 用户&#xff0c;root 用户的密码不为空&#xff0c;而是随机产生一个密码。原生支持&#xff1a;Systemd 更好的性能&#xff1a;对于多核CPU、固态硬盘、…

【蓝桥集训】第四天——双指针

作者&#xff1a;指针不指南吗 专栏&#xff1a;Acwing 蓝桥集训每日一题 &#x1f43e;或许会很慢&#xff0c;但是不可以停下&#x1f43e; 文章目录1.字符串删减2.最长连续不重复子序列3.数组元素的目标和1.字符串删减 给定一个由 n 个小写字母构成的字符串。 现在&#xff…

GCC 同名符号冲突解决办法

一、绪论 作为 C/C 的开发者&#xff0c;大多数都会清楚课本上动态库以及静态库的优缺点&#xff0c;在教科书上谈及到动态库的一个优点是可以节约磁盘和内存的空间&#xff0c;多个可执行程序通过动态库加载的方式共用一段代码段 &#xff1b;而时至今日&#xff0c;再看看上…

数据库浅谈之常见树结构

数据库浅谈之常见树结构 HELLO&#xff0c;各位博友好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 这里是数据库浅谈系列&#xff0c;收录在专栏 DATABASE 中 &#x1f61c;&#x1f61c;&#x1f61c; 本系列阿呆将记录一些数据库领域相关的知识 &#…

metasploit穷举模块

目录 工具介绍 常用模块 参数介绍 工具使用 工具介绍 Metasploit框架(Metasploit Framework, MSF)是一个开源工具&#xff0c; 旨在方便渗透测试&#xff0c;它是由Ruby程序语言编写的模板化框架&#xff0c;具有很好的扩展性&#xff0c;便于渗透测试人员开发、使用定制的…

浅析C++指针与引用,栈传递的关系

目录 前言 C 堆指针 栈指针 常量指针 指针常量 引用 常量引用 总结 前言 目前做了很多项目&#xff0c;接触到各种语言&#xff0c;基本上用什么学什么&#xff0c;语言的边际就会很模糊&#xff0c;实际上语言的设计大同小异&#xff0c;只是语言具备各自的特性区别。…

Python学习-----模块3.0(正则表达式-->re模块)

目录 前言&#xff1a; 导入模块 1.re.match() 函数 &#xff08;1&#xff09;匹配单个字符 &#xff08;2&#xff09;匹配多个字符 (3) 匹配开头和结尾 2.re.search() 函数 3.re.findall() 函数 4.re.finditer() 函数 5.re.split() 函数 6.re.sub() 函数 7.re.sub…

JAVA BIO,NIO,AIO区别(建议收藏)

Java中的IO原理 首先Java中的IO都是依赖操作系统内核进行的&#xff0c;我们程序中的IO读写其实调用的是操作系统内核中的read&write两大系统调用。 操作系统内核是如何进行IO交互的呢&#xff1f; 网卡中的收到经过网线传来的网络数据&#xff0c;并将网络数据写到内存…