基于SSM的学籍证明打印系统设计与实现。

news2025/2/25 19:14:21

项目描述

临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问题,今天给大家介绍一篇基于SSM的学籍证明打印系统的设计与实现。

功能需求

本系统的开发采用JSP进行动态网页设计,WEB 服务器是采用开源的ApacheTomcat,数据库服务器是采用MySQL 这一图形化工具来管理数据库,开发平台采用 MyEclipse,使计算机对学生学籍证明进行处理,通过internet实现网络信息处理功能。基于B/S架构。
1.建立学生数据库:
(1)在学校教务处允许的情况下读取学校教务系统学生数据;
(2)采用电子表格导入。
2.系统前端界面的设计。
3.中、英文不同学籍证明模板的设计。
4.自定义支付的实现。
5.打印系统模块:负责将数据生成报表并打印(包括数据导入、报表的生成及打印两个模块)中、英文不同学籍证明模板的设计。

具备以下功能:

打印系统可以连接到教务系统数据库,学生通过校园卡或者账户/密码来验证身份,然后显示个人的信息,调出信息。学生通过屏幕提示 ,自助完成学籍证明打印。也有需要管理员进行干预的自助方式,例如,管理员需要设置好不同类型的学生的方式以及收费方式,学生就可以在自助机上通过刷校园卡查询自己的成绩来选择打印,打印时根据设置来判断是否需要收费:按不同的身份可以打印的成绩单免费份数;按不同的身份设 置不同的扣费方式,比如本科生打印的费用,研究生打印的费用等。第二类的自助打印系统的流程是,学生首先在网上进行预约,学生的预约经过管理员的审核确认已经缴费 和符合其他条件以后学生就可以在预约的时间里进行打印,如果打印的时间过后,就得重新预约。(除了学籍证明,还希望有成绩单,结业证明,专业证明,绩点等等可以打印的文件)

系统总体设计

在这里插入图片描述

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

在这里插入图片描述

部分效果图

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

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

数据库设计

系统中用到了10张表,针对每个表都进行了设计,下面对部分核心表进行汇总罗列展示。

CREATE TABLE `apply` (
  `resourceId` varchar(255) COLLATE utf8_bin NOT NULL,
  `applyName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `applyType` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `applyContext` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `startDate` datetime DEFAULT NULL,
  `endDate` datetime DEFAULT NULL,
  `studentId` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `studentName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `xueLi` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `userId` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `userName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `authorDate` datetime DEFAULT NULL,
  `authorContext` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `authorType` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `money` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `payType` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `fileName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `fileURL` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `creatorId` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `creatorName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `updaterId` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `updaterName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `updateTime` datetime DEFAULT NULL,
  `createTime` datetime DEFAULT NULL,
  PRIMARY KEY (`resourceId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;



DROP TABLE IF EXISTS `log`;
CREATE TABLE `log` (
  `resourceId` varchar(255) COLLATE utf8_bin NOT NULL,
  `logName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `logAddress` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `creatorId` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `creatorName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `updaterId` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `updaterName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `updateTime` datetime DEFAULT NULL,
  `createTime` datetime DEFAULT NULL,
  PRIMARY KEY (`resourceId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
  `personId` varchar(255) COLLATE utf8_bin NOT NULL,
  `personName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `password` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `role` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `personNo` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `cardNo` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `personMobile` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `sex` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`personId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `resourceId` varchar(255) COLLATE utf8_bin NOT NULL,
  `studentNo` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `schoolNo` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `password` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `studentName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `sex` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `birthDay` datetime DEFAULT NULL,
  `idCard` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `schoolName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `xueYuan` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `zhuanYe` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `className` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `xueLi` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `ruXueYear` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `xueZhi` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `creatorId` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `creatorName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `updaterId` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `updaterName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `updateTime` datetime DEFAULT NULL,
  `createTime` datetime DEFAULT NULL,
  PRIMARY KEY (`resourceId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


DROP TABLE IF EXISTS `studentscore`;
CREATE TABLE `studentscore` (
  `resourceId` varchar(255) COLLATE utf8_bin NOT NULL,
  `studentId` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `studentName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `xueYear` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `xueQi` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `zhuanYePM` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `zhuanYeRS` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `creatorId` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `creatorName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `updaterId` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `updaterName` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `updateTime` datetime DEFAULT NULL,
  `createTime` datetime DEFAULT NULL,
  `jd` float(3,1) DEFAULT NULL,
  PRIMARY KEY (`resourceId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- ---
-- ----------------------------
部分代码

	@RequestMapping("findStudent")
	public String find(ModelMap modelMap,String id,HttpServletRequest request){
		Student student = studentService.findById(id);
		modelMap.addAttribute("pageEntity", student);
		
		logService.addLogInfo(request,"查询学生个人信息","findStudent.do");
		return "forward:/view/student/add_student.jsp";
	}
	@RequestMapping("updateStudent")
	public String update(ModelMap modelMap,Student student,HttpServletRequest request,HttpServletResponse response){
		//初始化新增的数据
		InitEntity initEntity = new InitEntity();
		try {
			student = initEntity.initUpdateInfo(student, request.getSession());
			studentService.updateStudent(student);
			
			logService.addLogInfo(request,"更新学生个人信息","updateStudent.do");
		} catch (Exception e) {
			e.printStackTrace();
		}
		String role = (String)request.getSession().getAttribute("role");
		if(role == null || "".equals(role)){
			return "redirect:/login.jsp";
		}else if(!"admin".equals(role)){
			return "redirect:/findStudent.do?id="+student.getResourceId();
		}
		return "redirect:/listStudent.do";
	}
	@RequestMapping("delteStudent")
	public String delte(String id,HttpServletRequest request){
		studentService.deteleStudent(id);
		
		logService.addLogInfo(request,"删除学生个人信息","delteStudent.do");
		return "redirect:/listStudent.do";
	}
	@RequestMapping("listStudent")
	public String list(ModelMap modelMap,HttpServletRequest request,Student student){
		PagerList pagerList = new PagerList(request);
		pagerList.setPageSize(StaticValue.pageSize);
		pagerList = this.studentService.findPagerList(pagerList,student);
		modelMap.addAttribute("pagerList", pagerList);
		modelMap.addAttribute("searchList", student);
		
		logService.addLogInfo(request,"学生个人信息列表","listStudent.do");
		return "forward:/view/student/list_student.jsp";
	}
	@RequestMapping("listSelectStudent")
	public String listSelectStudent(ModelMap modelMap,HttpServletRequest request,Student student){
		PagerList pagerList = new PagerList(request);
		pagerList.setPageSize(StaticValue.pageSize);
		pagerList = this.studentService.findPagerList(pagerList, student);
		modelMap.addAttribute("pagerList", pagerList);
		modelMap.addAttribute("searchList",  student);
		return "forward:/view/student/select_student.jsp";
	}
	
	@RequestMapping("addStudent")
	public String add(Student student,HttpServletRequest request,HttpServletResponse response){
		try {
			//初始化新增的数据
			InitEntity initEntity = new InitEntity();
			student = initEntity.initAddInfo(student, request.getSession());
			studentService.addStudent(student);
			
			logService.addLogInfo(request,"添加学生个人信息","addStudent.do");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "redirect:/listStudent.do";
	}
	
	
	@RequestMapping("exportStudent")
	public String export(HttpServletRequest request,HttpServletResponse response,Student student){
		PagerList pagerList = new PagerList(request);
		pagerList.setPageSize(999999);
		pagerList.setPageIndex(1);
		PagerList pagelet = this.studentService.findPagerList(pagerList,student);
		ObjectToExcel objectToExcl = ObjectToExcel.getInstance(pagelet, null, new String[]{"主键","学生名称","密码" ,"权限","登录名","身份证","电话","性别"},
				new String[]{"studentId","studentName","password","role","studentNo","cardNo","studentMobile","sex"}, null, null);
		String fileId = objectToExcl.convertToExcel();
		String root = StaticValue.ATTACH_PATH;
		DownFileHelper.downFile(response,root,fileId);
		return null;
	}
	
	@RequestMapping("importStudent")
	public void importExcl(@RequestParam("file") CommonsMultipartFile file,
			HttpServletRequest request,HttpServletResponse response,Student student) throws Exception{
		JSONObject json = new JSONObject();
		try{
			List<?> impList = ExcelToObject.getInstance().parseExcel(file.getInputStream(),
					new String[]{"studentNo","schoolNo","password","studentName","sex","birthDay","idCard","schoolName","xueYuan","zhuanYe","className","xueLi","ruXueYear","xueZhi"},
					Student.class);
			//List<Student> studentList = new ArrayList<Student>();
			if(impList != null && impList.size() > 0){
				//自己在设置自己需要的值
				for(Object obj:impList){
					Student detail = (Student)obj;
					//studentList.add(detail);
					this.studentService.addStudent(detail);
				}
				logService.addLogInfo(request,"导入学生个人信息","importStudent.do");
				json.put("result", true);
				json.put("msg", "导入成功!导入"+impList.size()+"条数据");
			}else{
				json.put("result", false);
				json.put("msg", "导入失败!导入的excel没数据或解析excel失败");
			}
		}catch(Exception e){
			e.printStackTrace();
			json.put("result", false);
			json.put("msg", e.getMessage());
		}
		response.setCharacterEncoding("UTF-8");
		response.getWriter().print(json.toString());
	}
}

安装部署需求

eclipse、idea运行启动

系统部署

系统开发后,在生产环境配置项目运行环境,具体步骤如下:
安装linux或者windows10操作系统;
安装JDK1.8并配置环境变量;
安装MySQL5.7版本以上版本数据库,创建数据库并执行脚本创建表;
在IDEA中编辑进行打包;
下载并配置Tomcat8.0服务器,配置系统服务,上传项目打包文件

本项目用到的技术和框架

1.开发语言:Java
2.开发模式:B/S
3.数据库:MySQL
4.框架:jsp+SSM

本项目中的关键点

此系统的开发采用java语言开发,基于B/S结构,这些开发环境使系统更加完善。使用到的工具和技术都是开源免费的。

环境工具

开发工具 Eclipse/IDEA
语言 JDK1.8 、jsp、CSS、SSM
硬件:笔记本电脑;
软件:Tomcat8.0 Web服务器、Navicat数据库客户端、MySQL;
操作系统:Windows 10;
其它软件:截图工具、常用浏览器;
以上是本系统的部分功能展示,如果你的选题正好相符,那么可以做毕业设计或课程设计使用。

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

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

相关文章

QT下TCP协议实现数据网络传输

QT开发框架以其跨平台的优势&#xff0c;在全世界IT界如雷贯耳。其封装了功能齐全的各种类&#xff0c;大大的提高了开发者的效率。本篇内容将介绍如何使用QT 6.4.1框架开发服务器和客户端程序&#xff0c;让两端能够首发消息&#xff0c;服务端往客户端发送文件&#xff08;客…

Spark在Yarn集群的两种提交模式

目录 一.Yarn Client(yarn的客户端模式) 二.Yarn Cluster(yarn的集群节点模式) 三.两者的差异 一.Yarn Client(yarn的客户端模式) 第一步&#xff1a;Driver端会在提交的本地机上运行 第二步&#xff1a;Driver端启动后会跟ResourceManager(RM)进行通信,申请启动一个Applic…

Linux安装Samba服务,基于Fedora

Linux安装Samba服务&#xff0c;基于Fedora1 安装samba服务2 启动samba服务3 更改配置信息4 使用windows系统进行连接5 其他说明1 安装samba服务 1 关闭防火墙及关闭防火墙开机自启 [whs02fedora ~]$ &#xff1a;sudo systemctl stop firewalld.service [whs02fedora ~]$ &a…

splay树:hdu4453 Looploop

题目链接如下&#xff1a; Problem - 4453 主要是要对区间操作和这种splay树的性质比较清楚。 关于区间我们设立两个额外节点&#xff0c;用来设立最开始的左右区间。 性质方面&#xff0c;其实就是二叉搜索树的性质&#xff0c;这里的体现就是中序遍历就是顺时针访问输入数…

《统计学习方法》 第十四章 聚类方法

聚类方法 1.聚类是针对给定的样本&#xff0c;依据它们属性的相似度或距离&#xff0c;将其归并到若干个“类”或“簇”的数据分析问题。一个类是样本的一个子集。直观上&#xff0c;相似的样本聚集在同类&#xff0c;不相似的样本分散在不同类。 2.距离或相似度度量在聚类中…

压力传感器

压力传感器 压力传感器是最常用的一种传感器&#xff0c;其应用范围有各种工业互通环境&#xff0c;涉及航空&#xff0c;航天&#xff0c;军工&#xff0c;石化&#xff0c;电力等。按照不同的测试&#xff0c;压力类型可分表压传感器&#xff0c;差压传感器&#xff0c;绝压…

现代密码学导论-19-基于伪随机函数的CPA安全

目录 3.5.2 基于伪随机函数的CPA安全 基于伪随机函数的加密示意图 CONSTRUCTION 3.28 构造基于伪随机函数的CPA安全的加密方案 THEOREM 3.29 方案3.28是CPA安全的 THEOREM 3.29 的证明 3.5.2 基于伪随机函数的CPA安全 基于伪随机函数的加密示意图 CONSTRUCTION 3.28 构造…

历史中的密码

角色 发送者、接收者和窃听者 当某个人向另一个人发送信息时&#xff0c;发出信息的人称为发送者&#xff0c;而收到信息的人称为接收者&#xff0c;被发送的信息有时也统称为消息&#xff08; message )。 窃听者 Eve 并不一定是人类&#xff0c;有可能是安装在通信设备上的某…

【JVM】jvm中的方法区简介

jvm中的方法区简介一、JVM体系结构二、方法区是什么&#xff1f;三、方法区能干什么&#xff1f;四、方法区总结一、JVM体系结构 二、方法区是什么&#xff1f; 本文所讲内容在上图中处于运行时数据区内的左侧部分&#xff0c;即 Method Area&#xff08;方法区&#xff09;&a…

REHL7.6静默安装Oracle19C

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61…

【轨迹跟踪】基于matlab拓展卡尔曼滤波时序四旋翼无人机状态跟踪【含Matlab源码 2246期】

⛄一、拓展卡尔曼滤波时序四旋翼无人机状态跟踪 卡尔曼滤波算法为获得最优估计和最小误差方差&#xff0c;将从目标模型中得到的测量值一步步递推&#xff0c;实时获取新时刻的状态估计值。 假设目标状态方程和观测方程分别为&#xff1a; 其中&#xff0c;k为离散时间&…

投入产出公开数据集:世界投入产出表(1995-2014)、全国投入产出表(1990-2018)、分省市投入产出表(1997-2017)

一、数据介绍 数据名称&#xff1a;世界、全国、各省-投入产出表 数据年份&#xff1a;世界投入产出表(1995-2014)、全国投入产出表(1990-2018)、分省市投入产出表(1997-2017) 数据来源&#xff1a;WIOD、自计算 ① 世界投入产出表&#xff08;1995-2014&#xff09; downlo…

用JSX来写Vue3,瞬间找到React 的感觉

Ⅰ. vue3 的 JSX 写法 对于熟悉react 的小伙伴, 可以通过 jsx 来 做 vue3喜欢 jsx 写法做 vue&#xff0c;代码结构更加美观&#xff0c;让我们一起来踩坑 &#x1f447; 文章目录Ⅰ. vue3 的 JSX 写法Ⅱ. JSX 安装和配置1. 通过 webpack 构建的2. 通过 vite 构建的Ⅳ. JSX 的…

Yocto buildhistory介绍

Yocto buildhistory介绍 在yocto中会频繁的编译修改镜像&#xff0c;当多人多次修改镜像的时候会导致镜像难以维护&#xff0c;我们希望能有一个类似git一样的工具能够显示每次编译的差异性修改&#xff0c;这样当我想要回退到某个日期的某个镜像时能够清晰的知道镜像内部的具…

Dockerfile文件详解

组成部分 说明 基础镜像信息 使用 FROM 关键字指定基础镜像信息&#xff0c;必须是 Dockerfile 文件的第1条指令。 维护者信息 使用 MAINTAINER 关键字指定&#xff0c;可以使用 Dockerfile 文件创建者的姓名或者电子邮件作为维护者信息。 镜像操作指令 每执行一条镜像操…

vue3+Element-plus el-select 下拉选择 多选增加全选封装组件

一、效果图&#xff08;含适用于条件查询组件中使用&#xff09; 二、参数配置 1、代码示例&#xff1a; <t-selectplaceholder"请选择工序"v-model"selectVlaue":optionSource"state.stepList"valueKey"label"change"selec…

部署SpringBoot+Vue3 项目实战,打造企业级在线办公系统

文章目录一、安装docker二、安装2.1. 安装mysql2.2. 安装MongoDB2.3. 安装Redis程序2.4. 安装RabbitMQ2.5. 在云主机上面开放端口三、部署后端项目3.1. 下载JDK镜像3.2. 部署工作流项目3.3. 部署emos-api项目四、在Docker中部署前端项目4.1. 修改前端代码4.2. 打包VUE项目4.3. …

【Hack The Box】linux练习-- time

HTB 学习笔记 【Hack The Box】linux练习-- time &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月24日&#x1f334; &#x1f36d…

Android~Compose脚手架和Toast

系列文章目录 Android~Compose初探Android~Compose之自定义ViewAndroid~Compose相关概念总结Android~Compose脚手架和ToastAndroid~Compose路由Navigation和传参 文章目录系列文章目录目标脚手架基于Snackbar自定义Toast实现效果目标 熟悉Compose中脚手架使用自定义Toast样式…

人工智能轨道交通行业周刊-第24期(2022.11.21-11.27)

追风赶月莫停留&#xff0c;平芜尽处是春山。 --《田歆华夏说》 本期关键词&#xff1a;BIM应用、地铁控制中心、车辆检修智能化、模型轻量化、隧道通风 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交…