0013Java程序设计-基于Vue的上课签到系统的设计与实现

文章目录

    • **摘 要**
    • 目录
    • 系统设计
    • 4.2学生签到
    • 4.3 签到信息列表
    • 4.4 用户信息管理
    • 5.1系统登录
      • 5.1.1 登录
      • 5.1.2 清除用户登记记录
      • 5.1.3 登录拦截
    • 5.2用户管理
      • 5.2.2 用户添加
      • 5.2.3 用户编辑
      • 5.2.4 用户删除
      • 5.2.5 用户分页
    • 5.3签到信息
      • 5.3.1签到信息列表
    • 5.4学生签到
      • 5.4.1学生签到
    • 开发环境

编程技术交流、源码分享、模板分享、网课分享

企鹅🐧@裙:776871563

摘 要

如今,随着信息化技术的深入、发展和应用普及,在很大程度上改变了人们的工作、生活和习惯。多媒体以及各种电子设备进入了学生的眼中增加了学生的学习兴趣,使得各校每年的招生人数的得到大幅度增加,在这样的情况下,学生管理就成了一大难题,为此编写了本系统为方便教师对学生的教学情况进行管理,本系统能为学生提供签到服务,教师可通过登录自己的账号查看自身课程所对应的教学情况,同时设置管理员对教师与学生的个人信息进行一个统一管理。本系统通过这种方式增强学校对学生的管理,同时也可以检验教师的教学情况。

系统分为学生登录、教师登录和管理员登录模块,管理员登录可以管理学生信息、教师信息对其进行查询、添加、修改和删除。学生对当前教师课程进行签到,教师对学生课程签到的情况进行统计。

系统采用技术包括Vue.js、element-ui等。上课签到系统以Vue.js为前端的框架,通过axios实现数据交互,页面布局采用element-ui搭建了简易的页面。

**关键词:**上课签到系统;Vue.js;element-ui;

目录

摘 要… 2

Abstract… 3

第一章 引言… 5

1.1系统开发背景… 5

1.2设计思路和方法… 6

第二章 相关技术简介… 7

2.1 Vue.js… 7

2.2 Element-ui… 8

2.3 Axios… 9

2.4 B/S架构… 9

2.5开发工具和开发环境… 10

操作系统:Windows10… 10

第三章 系统需求分析与设计… 10

3.1可行性分析… 10

3.1.1 发展可行性… 11

3.1.2 经济可行性… 11

3.1.3 技术可行性… 11

3.1.4 操作可行性… 12

3.2功能简介… 12

3.2.1用户系统结构分析… 12

3.2.2管理员系统结构分析… 12

3.3用例分析图… 13

3.4 活动图分析… 14

3.4.1 登录分析… 14

3.4.2 添加用户分析… 15

3.5 ER图设计… 16

3.5.1 签到实体设计… 16

3.5.2 用户实体设计… 17

3.5.4 ER图设计… 17

第四章 用户登录系统实现… 18

4.1系统登录页面… 18

4.2学生签到页面… 19

4.3 签到信息列表… 20

this.load();//页面刷新… 20

第五章 管理员系统实现… 21

5.1系统登录… 21

5.1.1 登录… 22

5.1.2 清除用户登记记录… 22

5.1.3 登录拦截… 23

5.2用户管理… 23

5.2.1 用户列表… 24

5.2.2 用户添加… 24

5.2.3 用户编辑… 25

5.2.4 用户删除… 25

5.2.5 用户分页… 26

5.3签到信息… 26

5.3.1签到信息列表… 26

5.4学生签到… 26

5.4.1学生签到功能… 27

第六章 系统测试… 27

6.1可用性测试… 27

6.2性能测试… 28

6.3 兼容性测试… 28

6.4 功能测试… 29

6.4.1登录测试… 29

6.4.2 管理员用户管理测试… 30

6.4.4 签到信息组合查询测试… 30

6.4.4 学生签到测试… 31

6.5 测试结果分析… 31

第七章 系统总结… 32

参考文献… 41

系统设计

登录界面如图4.1.1登录所示,总共分为用户登录和管理员登录,登录成功后进入相对应的系统界面。

img

​ 图4.1.1系统登录界面图

4.2学生签到

学生登录进系统后,可以根据要求对课程进行签到。

img

图 4.2.1 学生签到图

//--------------------------------------------------学生签到操作

selectQD() {

​ requset.post(“/selectqd?user_id=”+this.ruleForm.user_id + “&course_name=”+this.ruleForm.course_name + “&course_teacher=”+ this.ruleForm.course_teacher).then(res => {

​ console.log(typeof(res))

​ if(res === 1){

​ alert(“您已签到”)

​ }else {

​ requset.post(“/signQD”,this.ruleForm).then(res => {

​ console.log(res.data)

​ this.$message.success(“签到成功”);

​ })

​ }

​ })

},

4.3 签到信息列表

教师登录系统后可以对学生的签到信息进行管理。

img

图 4.3.1 签到信息图

select() {

​ request.get(‘/selectOne?course_name=’+ this.course_name +‘&course_teacher=’+ this.course_teacher).then(res => {

​ console.log(“----:”+JSON.stringify(res))

​ // var array=[];

​ // array.push(res)

​ this.tableData =res;

​ })

​ }

4.4 用户信息管理

管理员登录系统后可对学生与教师信息进行管理。

img

img

图 4.4.1 用户信息管理图

handleuser(index) {

if(index == “1”) {

​ this.$router.push(“/studentinfoView”)

}else if(index == “2”){

​ this.$router.push(“/teacherinfoView”)

}else if(index == “3”) {

​ this.$router.push(“/admininfoView”)

}

},

5.1系统登录

5.1.1 登录

如图5.1.1.1管理员登录所示,登陆时通过axios从后端获取到用户信息,登录成功后信息保存在网页的浏览器后台上,下次访问的时候系统会优先获取axios的信息,先在后台进行验证,验证通过时,根据角色定位到相应页面,通过用户的请求在进行页面的逻辑处理。

img

图 5.1.1.1 管理员登录

requset.post(“/login”,this.ruleForm).then(res => {

if(res.code === ‘200’) {

console.log(“res.data:” + JSON.stringify(res.data))//res.data存放的是数据库中的内容 (账号密码名字权限)

localStorage.setItem(“user”,JSON.stringify(res.data))

​ console.log(JSON.stringify(res.data))

​ console.log(res.data.user_qx)

​ if(res.data.user_qx === ‘0’) {

​ this.$router.push(“/student”)

​ }else if(res.data.user_qx === “1”) {

​ this.$router.push(“/teacher”)

​ }else if (res.data.user_qx === “2”){

​ this.$router.push(“/admin”)

​ }else {

​ alert(“没有该账号,请点击注册按钮注册”)

​ this.$router.push(“/”)

​ }

​ }

​ })

​ } else {

​ console.log(‘error submit!!’);

​ this.$router.push(“/login”)

​ }

​ });

},

5.1.2 清除用户登记记录

用户登录成功后信息保存在网页的浏览器后台上,localStorage用于持久化存储本地数据,除非主动删除数据,否者数据是永久存在的,这就造成了用户不需要登录就可以进入系统界面,所以有必要清除用户登记记录。

methods:{

​ logout(){

​ localStorage.removeItem(“user”);

}

5.1.3 登录拦截

登录拦截器通过配置文件,在此之前除了登录页面所有的路径都会进行拦截,为了防止用户不进行登录就进入系统界面,在访问之前进行判断一下是否登录,如果没有登录,就跳到登录页面,如果登陆了,就跳到用户相对应的系统界面。

router.beforeEach((to, from, next)=>{

let userStr=localStorage.getItem(“user”)

if(userStr){

next();

}else{

if(to.path === ‘/login’){

​ next();

}else if(to.path === ‘/register’){

​ next();

}else{

​ next({

​ path:‘/login’

​ });

}

}

})

5.2用户管理

5.2.1 用户列表

用户列表如图5.2.1.1用户列表所示,可根据用户的用户ID进行查找。

img

img

图 5.2.1.1 用户列表

async showEditDialog(user_id) {

request.get(“/finduser?user_id=” + user_id).then((res) => {

​ console.log(“--------” + JSON.stringify(res));

​ this.editForm = res;

​ this.editDialogVisible = true;

});

},

5.2.2 用户添加

用户添加如图5.2.2.1用户添加所示,添加用户时要在数据库中检测用户号是否存在,如果存在,添加用户不成功,如果不存在,则成功添加用户。

img

图 5.2.2.1 用户添加

adduser() {

request.post(“/insert”, this.addform).then((res) => {

​ if (res.code === “200”) {

​ this.$message.success(“添加用户成功”);

​ //隐藏添加对话框

​ this.addDialogVisible = false;

​ this.load();

​ } else {

​ this.$message.error(“添加用户失败”);

​ }

});

},

5.2.3 用户编辑

用户编辑如图5.2.2.1用户编辑所示,点击编辑时,列表应显示原先有的信息,在原有的信息上进行修改,管理员修改信息是不能修改用户号,用户的用户号在用户中为唯一标识。

img

​ 图 5.2.3.1 用户编辑

editUserInfo() {

request

​ .post(“/edituser?user_id=” + this.editForm.user_id, {

​ user_id: this.editForm.user_id,

​ user_name: this.editForm.user_name,

​ user_account: this.editForm.user_account,

​ user_pwd: this.editForm.user_pwd,

​ user_phone: this.editForm.user_phone,

​ user_home: this.editForm.user_home,

​ user_qx: this.editForm.user_qx,

​ })

​ .then((res) => {

​ if (res.code === “200”) {

​ this.$message.success(“更新用户成功”);

​ //隐藏添加对话框

​ this.editDialogVisible = false;

​ this.load();

​ } else {

​ this.$message.error(“更新用户失败”);

​ }

​ });

},

5.2.4 用户删除

用户删除如图5.2.4.1用户删除所示,用户删除只能单个删除,删除时提示用户删除操作,是否继续,防止用户不小心误删。

img

​ 图 5.2.4.1 用户删除

async removeuserById(user_id) {

const confirmResult = await this.$confirm(

​ “此操作将永远删除该用户,是否继续”,

​ “提示”,

​ {

​ confirmButtonText: “确定”,

​ cancelButtonText: “取消”,

​ type: “warning”,

​ }

).catch((err) => {

​ return err;

});

if (confirmResult !== “confirm”) {

​ return this.$message(“取消删除”);

}

request.get(“/deluser?user_id=” + user_id).then((res) => {

​ if (res.code !== “200”) {

​ return this.$message.error(“删除用户失败”);

​ }

​ this.$message.success(“删除成功”);

​ this.load();

});

},

},

5.2.5 用户分页

用户分页图如图4.5.1用户分页图所示,用户数量日复一日的增长,页面一次性显示出所有用户信息,看着比较不美观,而且杂乱,有了分页可以清晰的看出用户记录和总条数。

img

图 4.5.1 用户分页图

this.request

​ .get(“/usertable/page”, {

​ params: {

​ pageNum: this.pageNum,

​ pageSize: this.pageSize,

​ },

​ })

​ .then((res) => {

​ this.tableData = res;

​ });

this.request

​ .get(“/usertable/rows”, {

​ params: {

​ pageNum: this.pageNum,

​ pageSize: this.pageSize,

​ },

​ })

5.3签到信息

5.3.1签到信息列表

签到信息列表如图5.3.1.1签到信息列表所示,可根据课程名与授课教师进行查找。

img

图 5.3.1.1 签到信息列表

5.4学生签到

5.4.1学生签到

学生签到如图5.4.1.1通过填写信息对课程进行签到。

img

图 5.4.1.1 学生签到功能

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbUtil {
	private String dbUrl="jdbc:mysql://127.0.0.1:3306/database?serverTimezone=UTC&useSSL=false"; // 数据库连接地址
	private String dbUserName="root"; // 用户名
	private String dbPassword="123456"; // 密码
	private String jdbcName="com.mysql.cj.jdbc.Driver"; // 驱动名称
	/**
	 * 获取数据库连接
	 * @return
	 * @throws Exception
	 */
	public Connection getCon(){
		try {
			Class.forName(jdbcName);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Connection con = null;
		try {
			con = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return con;
	}
	/**
	 * 关闭数据库连接
	 * @param con
	 * @throws Exception
	 */
	public void closeCon(Connection con)throws Exception{
		if(con!=null){
			con.close();
		}
	}
	
	public static void main(String[] args) {
		DbUtil dbUtil=new DbUtil();
		try {
			dbUtil.getCon();
			System.out.println("数据库连接成功!");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("数据库连接失败");
		}
	}
}


开发环境

开发工具:idea、Navicat

数据库:MySQL8.0

环境配置:jdk1.8 、Tomcat8.5

开发人员:IT012201

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【超详细教程】FL Studio 21中文破解版,让你的音乐制作更出彩啦!

嗨小仙女们!今天小助理要跟大家分享一个超赞的消息!你们知道吗,FL Studio 21中文破解版终于来啦! FL Studio 21是一款超级火爆的音乐制作软件,不仅功能强大,而且操作简单,适合各种水平的音乐制…

基于SSM的java衣服商城

基于SSM的java衣服商城 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 项目类型:Java EE项目 项目名称:基于SSM的美衣商城 项目架构:B/S架构 开发语言:Java语言 前端技术:Layui等 后端技术…

2023新型智能优化算法-小龙虾优化算法

1 灵感来源 COA的灵感来源于小龙虾的觅食、避暑和竞争行为。觅食阶段和竞争阶段是COA的开发阶段,避暑阶段是COC的探索阶段。 2 数学模型 2.1 初始化种群 采用随机初始化种群,相信大家都能看懂,直接原文献截图。 2.2 确定小龙虾的温度和摄入…

使用git push太慢怎么办

使用git push太慢怎么办 修改host文件: windows 的路径应该在 C:\Windows\System32\drivers\etc\hosts 在host文件的最后一行加上 151.101.72.249 github.global.ssl.fastly.nethost不允许修改就复制一份,修改好了再替换掉,可能会让你输入…

量子芯片技术:未来的计算革命

量子芯片技术:未来的计算革命 一、引言 随着科技的不断发展,人类正在进入一个全新的技术时代,即量子时代。量子芯片技术作为这个时代的重要代表,正逐渐改变我们对计算和信息处理的理解。本文将深入探讨量子芯片技术的基本原理、…

乔拓云平台:微信小程序开发的全新视角与高效路径

随着微信小程序的日益普及,越来越多的人开始关注如何开发自己的小程序。对于没有开发经验的人来说,借助第三方平台如乔拓云,可以轻松实现小程序的开发。本文将介绍微信小程序开发需要学习的东西,并探讨如何借助乔拓云平台进行无经…

uniapp实战 —— 弹出层 uni-popup (含vue3子组件调父组件的方法)

效果预览 弹出的内容 src\pages\goods\components\ServicePanel.vue <script setup lang"ts"> // 子组件调父组件的方法 const emit defineEmits<{(event: close): void }>() </script><template><view class"service-panel"…

X86汇编语言:从实模式到保护模式(代码+注释)--c6

X86汇编语言&#xff1a;从实模式到保护模式&#xff08;代码注释&#xff09;–c6 标志寄存器FLAGS&#xff1a; 6th&#xff1a;ZF位&#xff08;Zero Flag&#xff09;&#xff1a;零标志&#xff0c;执行算数或者逻辑运算之后&#xff0c;会将该位置位。10th&#xff1a;D…

学会用bash在linux写脚本 (一)

本章主要介绍如何使用bash写脚本。 了解通配符 了解变量 了解返回值和数值运算 grep的用法是“grep 关键字 file”&#xff0c;意思是从file中过滤出含有关键字的行。 例如&#xff0c;grep root /var/log/messages&#xff0c;意思是从/var/log/messages 中过滤出含有root …

智慧能源:数字孪生压缩空气储能管控平台

压缩空气储能在解决可再生能源不稳定性和提供可靠能源供应方面具有重要的优势。压缩空气储能&#xff0c;是指在电网负荷低谷期将电能用于压缩空气&#xff0c;在电网负荷高峰期释放压缩空气推动汽轮机发电的储能方式。通过提高能量转换效率、增加储能密度、快速启动和调节能力…

因小失大,一个普通的postman多接口顺序执行,让项目瘫痪了一天

Runner的使用 postman不仅可以单独运行某个接口&#xff0c;postman的 Runner模块可以运行多个接口&#xff0c;可以实现真正意义上的自动化接口测试 Runner的主要功能如下 按顺序调用接口&#xff0c;执行用例&#xff1b; 批量发送请求&#xff1b; 对接口数据进行参数化…

Spring Cloud Alibaba实践 --Sentinel

sentinel简介 Sentinel的官方标题是&#xff1a;分布式系统的流量防卫兵。从名字上来看&#xff0c;很容易就能猜到它是用来作服务稳定性保障的。对于服务稳定性保障组件&#xff0c;如果熟悉Spring Cloud的用户&#xff0c;第一反应应该就是Hystrix。但是比较可惜的是Netflix…

一文讲解关于MCU启动原理的几个关键问题

MCU最开始一启动后去哪里读代码&#xff1f; CPU上电启动后被设计为去地址0x00000000位置处读取代码&#xff1b;首先会连续读取两个字&#xff0c;分别是栈指针初始值和复位异常处理函数的地址&#xff1b;然后跳去执行复位异常处理函数。 当然在一些早期的ARM处理器设计中&a…

对数据处理

例子&#xff1a; <Select v-model"type" placeholder"请选择..."> <Option v-for"item in list" :value"item.id__item.name">{{item.name}}</Option> </Select>

一个简单的postman设置断言,为何会难住一个工作5年的测试?

postman设置断言 作为一款接口测试工 具&#xff0c;postman需要对发送请求后返回的结果是否正确做验证&#xff0c;在postman中通过 tests页签做请求的验证&#xff0c;也称为断言。 postman设置断言的流程 1、在tests页签截取要对比的实际响应信息&#xff08;响应头、响应…

船舶机电设备智能故障诊断系统

1 船舶电气设备故障诊断专家系统 体系结构 整个系统的体系结构采用浏览器&#xff0f; 服务器 &#xff08;B&#xff0f; S&#xff09; 三层体系结构 &#xff08; 如图 1 所示 &#xff09;。B&#xff0f;S 模式是一种 以 Web 技术为基础的系统平台模式 。 把传统…

基于SuperMap iObjects Java生成地图瓦片

作者&#xff1a;dongyx 前言 在GIS领域&#xff0c;地图瓦片技术作为GIS领域的关键技术&#xff0c;是提高地图服务性能的关键手段之一。通过预先生成地图的瓦片数据&#xff0c;可以显著提升用户访问地图时的响应速度和体验。SuperMap iObjects for Java作为一款强大的GIS开…

xxl-job详解

目录 1、xxl-job介绍1.1 xxl-job的原理1.1.1 执行器的注册和发现1.1.2 调度中心调用执行器 1.2 quartz和xxl-job对比 2、快速入门2.1 下载并启动2.2 在调度中心新增定时任务2.3 任务运行模式(BEAN、GLUE)2.4 xxl-job的总结 3、后端专属技术群 1、xxl-job介绍 ​ xxl-job是一个…

LeetCode-478. 在圆内随机生成点【几何 数学 拒绝采样 随机化】

LeetCode-478. 在圆内随机生成点【几何 数学 拒绝采样 随机化】 题目描述&#xff1a;解题思路一&#xff1a;一个最简单的方法就是在一个正方形内生成随机采样的点&#xff0c;然后拒绝不在内切圆中的采样点。解题思路二&#xff1a;具体思想是先生成一个0到r的随机数len&…

进制 + 原码,反码,补码

进制转换 整数部分 小数部分 原码 反码 补码 原码转补码&#xff1a; 左边和右边第一个1不变&#xff0c;中间取反。-0 除外。 计算机系统中数值一律用补码来存储的原因 其他 术语 进制表 进制数的表示 详细教程可转 爱编程的大丙
最新文章