当前位置: 首页 > article >正文

基于Java+SSM+jsp的教学质量评价系统设计与实现【源码(完整源码请私聊)+论文+演示视频+包运行成功】

  博主介绍:专注于Java技术领域和毕业项目实战

🍅文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

Java项目精品实战案例(200套)

目录

一、效果演示

二、前言介绍

三、主要技术

四、系统设计(部分)

4.1、主要功能模块设计         

4.2、开发流程设计

五、运行截图

5.1管理员功能模块

5.1.1、管理员登录

5.1.2、教学质量评价系统

5.1.3、学院管理

5.1.4、学生管理

5.1.5、教师管理

5.1.6、督导管理

5.1.7、教师信息管理

5.1.8、学生评教管理

5.1.9、督导评教管理

5.2、学生功能模块 

5.2.1、教师信息管理

5.2.2、学生评教管理

5.3、教师功能模块

5.3.1教师信息管理

5.3.2、学生评教管理

5.4、督导功能模块

5.4.1、教师信息管理

5.4.2、督导评教管理

六、数据库设计(部分)

七、代码参考

八、源码获取


一、效果演示

基于jsp和SSM的教学质量评价评教系统演示视频

二、前言介绍

随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,教学质量评价系统当然也不能排除在外。教学质量评价系统是以实际运用为开发背景,运用软件工程开发方法,采用jsp技术构建的一个管理系统。整个开发过程首先对软件系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统总体结构设计、系统数据结构设计、系统功能设计和系统安全设计等;详细设计主要包括模块实现的关键代码,系统数据库访问和主要功能模块的具体实现等。最后对系统进行功能测试,并对测试结果进行分析总结,及时改进系统中存在的不足,为以后的系统维护提供了方便,也为今后开发类似系统提供了借鉴和帮助。

三、主要技术

技术名作用
SSM后端框架
jsp前端框架
MySQL数据库

四、系统设计(部分)

4.1、主要功能模块设计         

4.2、开发流程设计

 

五、运行截图

5.1管理员功能模块

5.1.1、管理员登录

图5-1管理员登录界面图

5.1.2、教学质量评价系统

图5-2管理员功能界面图

5.1.3、学院管理

图5-3学院管理界面图

5.1.4、学生管理

图5-4学生管理界面图

5.1.5、教师管理

图5-5教师管理界面图

5.1.6、督导管理

图5-6督导管理界面图

5.1.7、教师信息管理

图5-7教师信息管理界面图

5.1.8、学生评教管理

图5-8学生评教管理界面图

5.1.9、督导评教管理

图5-9督导评教管理界面图

5.2、学生功能模块 

公告信息管理,在公告信息管理页面通过填写公告标题、图片、内容、发布日期等信息进行查看、修改、删除如图5-10所示。

图5-10公告信息管理界面图

5.2.1、教师信息管理

图5-11教师信息管理界面图

5.2.2、学生评教管理

图5-12学生评教管理界面图

5.3、教师功能模块

公告信息管理,在公告信息管理页面通过填写公告标题、图片、内容、发布日期等信息进行查看、修改、删除如图5-13所示。

图5-13公告信息管理界面图

5.3.1教师信息管理

图5-14教师信息管理界面图

5.3.2、学生评教管理

图5-15学生评教管理界面图

5.4、督导功能模块

公告信息管理,在公告信息管理页面通过填写公告标题、图片、内容、发布日期等信息进行查看、修改、删除如图5-16所示。

图5-16公告信息管理界面图

5.4.1、教师信息管理

图5-17教师信息管理界面图

5.4.2、督导评教管理

 图5-18督导评教管理界面图

六、数据库设计(部分)

通过教学质量评价系统 的功能进行规划分成几个实体信息,实体信息将通过ER图进行说明,本系统的主要实体图如下:

管理员信息属性图如图4-5所示。

图4-5 管理员信息实体属性图

督导管理属性图如图4-6所示

 

图4-6督导管理属性图

 

七、代码参考

package com.controller;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baidu.aip.face.AipFace;
import com.baidu.aip.face.MatchRequest;
import com.baidu.aip.util.Base64Util;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.ConfigEntity;
import com.service.CommonService;
import com.service.ConfigService;
import com.utils.BaiduUtil;
import com.utils.FileUtil;
import com.utils.R;

/**
 * 通用接口
 */
@RestController
public class CommonController{
	@Autowired
	private CommonService commonService;
	
	@Autowired
	private ConfigService configService;
	
	private static AipFace client = null;
	
	private static String BAIDU_DITU_AK = null;
	
	@RequestMapping("/location")
	public R location(String lng,String lat) {
		if(BAIDU_DITU_AK==null) {
			BAIDU_DITU_AK = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "baidu_ditu_ak")).getValue();
			if(BAIDU_DITU_AK==null) {
				return R.error("请在配置管理中正确配置baidu_ditu_ak");
			}
		}
		Map<String, String> map = BaiduUtil.getCityByLonLat(BAIDU_DITU_AK, lng, lat);
		return R.ok().put("data", map);
	}
	
	/**
	 * 人脸比对
	 * 
	 * @param face1 人脸1
	 * @param face2 人脸2
	 * @return
	 */
	@RequestMapping("/matchFace")
	public R matchFace(String face1, String face2, HttpServletRequest request) {
		if(client==null) {
			/*String AppID = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "AppID")).getValue();*/
			String APIKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "APIKey")).getValue();
			String SecretKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "SecretKey")).getValue();
			String token = BaiduUtil.getAuth(APIKey, SecretKey);
			if(token==null) {
				return R.error("请在配置管理中正确配置APIKey和SecretKey");
			}
			client = new AipFace(null, APIKey, SecretKey);
			client.setConnectionTimeoutInMillis(2000);
			client.setSocketTimeoutInMillis(60000);
		}
		JSONObject res = null;
		try {
			File file1 = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+face1);
			File file2 = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+face2);
			String img1 = Base64Util.encode(FileUtil.FileToByte(file1));
			String img2 = Base64Util.encode(FileUtil.FileToByte(file2));
			MatchRequest req1 = new MatchRequest(img1, "BASE64");
			MatchRequest req2 = new MatchRequest(img2, "BASE64");
			ArrayList<MatchRequest> requests = new ArrayList<MatchRequest>();
			requests.add(req1);
			requests.add(req2);
			res = client.match(requests);
			System.out.println(res.get("result"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return R.error("文件不存在");
		} catch (IOException e) {
			e.printStackTrace();
		} 
		return R.ok().put("data", com.alibaba.fastjson.JSONObject.parse(res.get("result").toString()));
	}
    
	/**
	 * 获取table表中的column列表(联动接口)
	 * @param table
	 * @param column
	 * @return
	 */
	@RequestMapping("/option/{tableName}/{columnName}")
	@IgnoreAuth
	public R getOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,String level,String parent) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		if(StringUtils.isNotBlank(level)) {
			params.put("level", level);
		}
		if(StringUtils.isNotBlank(parent)) {
			params.put("parent", parent);
		}
		List<String> data = commonService.getOption(params);
		return R.ok().put("data", data);
	}
	
	/**
	 * 根据table中的column获取单条记录
	 * @param table
	 * @param column
	 * @return
	 */
	@RequestMapping("/follow/{tableName}/{columnName}")
	@IgnoreAuth
	public R getFollowByOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, @RequestParam String columnValue) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		params.put("columnValue", columnValue);
		Map<String, Object> result = commonService.getFollowByOption(params);
		return R.ok().put("data", result);
	}
	
	/**
	 * 修改table表的sfsh状态
	 * @param table
	 * @param map
	 * @return
	 */
	@RequestMapping("/sh/{tableName}")
	public R sh(@PathVariable("tableName") String tableName, @RequestBody Map<String, Object> map) {
		map.put("table", tableName);
		commonService.sh(map);
		return R.ok();
	}
	
	/**
	 * 获取需要提醒的记录数
	 * @param tableName
	 * @param columnName
	 * @param type 1:数字 2:日期
	 * @param map
	 * @return
	 */
	@RequestMapping("/remind/{tableName}/{columnName}/{type}")
	@IgnoreAuth
	public R remindCount(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("table", tableName);
		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) {
				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) {
				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));
			}
		}
		
		int count = commonService.remindCount(map);
		return R.ok().put("count", count);
	}
	
	/**
	 * 单列求和
	 */
	@RequestMapping("/cal/{tableName}/{columnName}")
	@IgnoreAuth
	public R cal(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		Map<String, Object> result = commonService.selectCal(params);
		return R.ok().put("data", result);
	}
	
	/**
	 * 分组统计
	 */
	@RequestMapping("/group/{tableName}/{columnName}")
	@IgnoreAuth
	public R group(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("column", columnName);
		List<Map<String, Object>> result = commonService.selectGroup(params);
		return R.ok().put("data", result);
	}
	
	/**
	 * (按值统计)
	 */
	@RequestMapping("/value/{tableName}/{xColumnName}/{yColumnName}")
	@IgnoreAuth
	public R value(@PathVariable("tableName") String tableName, @PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("table", tableName);
		params.put("xColumn", xColumnName);
		params.put("yColumn", yColumnName);
		List<Map<String, Object>> result = commonService.selectValue(params);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		for(Map<String, Object> m : result) {
			for(String k : m.keySet()) {
				if(m.get(k) instanceof Date) {
					m.put(k, sdf.format((Date)m.get(k)));
				}
			}
		}
		return R.ok().put("data", result);
	}
	
}

八、源码获取

大家点赞、收藏、关注、评论啦 、查看文章结尾👇🏻获取联系方式👇🏻

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

Java项目精品实战案例(200套)

私信我即可打包获取200多个项目源码+论文+演示视频~

​​​


http://www.kler.cn/a/6592.html

相关文章:

  • 常用的缓存技术都有哪些
  • ElasticSearch08-分析器详解
  • 阿里云虚拟主机ecs镜像如何转移到本地virtualbox上
  • python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django
  • (14)D-FINE网络,爆锤yolo系列
  • 【k8s集群应用】K8S二进制安装大致步骤(简略版)
  • ToBeWritten之理解嵌入式Web HTTP协议
  • 每日学术速递4.6
  • 【华为机试真题详解JAVA实现】—求小球落地5次后所经历的路程和第5次反弹的高度
  • ASA广告如何利用自定义产品页来吸引用户
  • Chatgpt在训练过程中过拟合的表现和解决办法
  • Oracle-ASM磁盘mismatch on ‘Group Creation Timestamp‘
  • Github库中的Languages显示与修改
  • 【学习OpenCV4】基于OpenCV的手写数字识别
  • Chrome 112 发布,删除 Chrome Apps、支持 CSS 嵌套
  • React的合成事件
  • C#收集SMD零件计数器数料机
  • AI大模型争议的背后,是技术以人为本的初衷
  • Tomcat面试题+http面试题+Nginx面试题+常见面试题
  • 读《高效能人士的七个习惯》的一些感悟
  • CSS基础
  • 从零开始实现一个C++高性能服务器框架----协程模块
  • 【MySQL】表的基本约束
  • CSS特殊样式
  • 编译Linux内核一定要知道的几个小Tips
  • 数据结构_第五关:单链表OJ题练习