springboot+vue+element简单实现教学课程申报管理系统

目录

一、项目预览

二、项目效果图及说明

1.项目说明

 1.登录

 2.欢迎页

 3.教师管理

4.课程申报

​5.管理员管理

三、代码实现

1.后端项目结构图

2.数据库表脚本

3.路由配置

四、总结


一、项目预览

  • 在线预览:点击访问
  • 其他项目访问:点击访问
  • 后端实现框架:SpringBoot+OAuth2+Spring Security+Redis+mybatis-plus+mysql+swagger搭建实现
  • 前端框架实现:vue+element实现的独立vue项目

 前后端分离实现,项目使用传统vue项目结构实现,前端采用element实现。

element官网:Element - The world's most popular Vue UI framework

 

二、项目效果图及说明

1.项目说明

两种角色登录,管理员和教师,教师提交课程申请,然后管理员登录进行课程的审核和管理,审核通过或者审核不通过,不通过是需要填写审核不通过的原因,从而教师根据原因进行相应的修改,重新提交,管理员进行再次的审核。

 1.登录

两种角色登录,管理员和教师,管理员和教师分为不同的表,项目兼容多表用户token登录

 2.欢迎页

 3.教师管理

教师的增删改查操作

4.课程申报

 只能由教师进行申报操作权限

只能由管理员进行审核相关操作权限

审核不通过时,需要填写原因,支持批量操作

 5.管理员管理

管理员拥有全部权限

 教师只能查看管理员,无操作权限

6.个人中心管理

信息修改

 密码修改,修改成功后会退出登录,需要重新登录

三、代码实现

1.后端项目结构图

2.数据库表脚本

/*
 Navicat Premium Data Transfer

 Source Server         : tian-liao
 Source Server Type    : MySQL
 Source Server Version : 80027
 Source Host           : localhost:3306
 Source Schema         : course_apply

 Target Server Type    : MySQL
 Target Server Version : 80027
 File Encoding         : 65001

 Date: 15/11/2023 17:23:30
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for admin
-- ----------------------------
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `username` varchar(60) NOT NULL COMMENT '用户名',
  `password` varchar(100) NOT NULL COMMENT '登录密码',
  `real_name` varchar(32) NULL DEFAULT NULL COMMENT '姓名',
  `gender` tinyint(1) NULL DEFAULT 0 COMMENT '用户性别 0保密 1男 2女',
  `avatar` varchar(300) NULL DEFAULT NULL COMMENT '头像',
  `phone` varchar(20) NULL DEFAULT NULL COMMENT '手机',
  `email` varchar(60) NULL DEFAULT NULL COMMENT '邮箱',
  `remark` varchar(200) NULL DEFAULT NULL COMMENT '备注',
  `status` tinyint(1) NULL DEFAULT 0 COMMENT '是否禁用 0否  1是',
  `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '创建人ID',
  `update_system_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '修改人ID',
  `admin_type` tinyint(1) NULL DEFAULT 1 COMMENT '管理员类型 0超级管理员 1普通管理员',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `admin_key_username`(`username`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '管理员' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of admin
-- ----------------------------
INSERT INTO `admin` VALUES (1, 'admin', '$2a$10$YFlCYqEcQvQ2br484Ptxr.e7hJRFD/raJ/1WKc1A1uSTaw0hdyAla', '愛芳芳', 1, '/image/05a5880672fa44aea3e286698057d7f7.jpg', '15767978799', '3232', '', 0, 0, '2023-02-28 11:56:46', NULL, '2023-11-15 17:16:23', 1, 0);

-- ----------------------------
-- Table structure for course_apply
-- ----------------------------
DROP TABLE IF EXISTS `course_apply`;
CREATE TABLE `course_apply`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `teacher_id` int(0) NOT NULL COMMENT '申报教师主键',
  `course_name` varchar(255) NOT NULL COMMENT '课程名称',
  `credit` int(0) NOT NULL DEFAULT 0 COMMENT '学分',
  `class_hour` int(0) NOT NULL DEFAULT 0 COMMENT '学时',
  `open_time_start` int(0) NOT NULL DEFAULT 0 COMMENT '开课开始时间(几周到几周,比如一到10周)',
  `open_time_end` int(0) NOT NULL DEFAULT 0 COMMENT '开课结束时间(几周到几周,比如一到10周)',
  `length` int(0) NOT NULL DEFAULT 0 COMMENT '时长(节)',
  `year` varchar(255) NOT NULL COMMENT '授课年级',
  `teaching_class` varchar(255) NOT NULL COMMENT '授课班级',
  `place` varchar(255) NOT NULL COMMENT '授课地点',
  `course_type` tinyint(1) NULL DEFAULT 0 COMMENT '1选修课 2必修课',
  `remark` varchar(255) NULL DEFAULT NULL COMMENT '备注(退回理由)',
  `status` tinyint(1) NULL DEFAULT 1 COMMENT '审核状态 1待审核 2审核通过 3审核不通过',
  `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '创建人ID',
  `update_system_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `update_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '修改人ID',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '课程申请表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `real_name` varchar(32) NULL DEFAULT NULL COMMENT '姓名',
  `job_number` varchar(32) NULL DEFAULT NULL COMMENT '工号',
  `job_name` varchar(255) NULL DEFAULT NULL COMMENT '职称',
  `department` varchar(255) NULL DEFAULT NULL COMMENT '所在系',
  `username` varchar(10) NOT NULL COMMENT '用户名',
  `password` varchar(255) NOT NULL COMMENT '登录密码 加密',
  `phone` varchar(20) NULL DEFAULT NULL COMMENT '手机号',
  `avatar` varchar(225) NULL DEFAULT NULL COMMENT '头像',
  `gender` tinyint(1) NULL DEFAULT 0 COMMENT '性别 0保密 1男 2女',
  `remark` varchar(225) NULL DEFAULT NULL COMMENT '备注',
  `status` tinyint(1) NULL DEFAULT 0 COMMENT '是否禁用 0否 1是',
  `deleted` tinyint(1) NULL DEFAULT 0 COMMENT '逻辑删除标记 是否已删除: 0否  1是',
  `create_system_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `create_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '创建人ID',
  `update_system_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间-管理员',
  `update_system_admin_id` int(0) NULL DEFAULT NULL COMMENT '修改人ID-管理员',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COMMENT = '教师表' ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

3.路由配置

import Vue from 'vue'
import Router from 'vue-router'
import Layout from '@/page/index/index'

Vue.use(Router)

const router = new Router({
  routes: [
    {
      path: '/login',
      name: '登录页',
      component: () =>
        import( /* webpackChunkName: "page" */ '@/page/login/index'),
      meta: {
        keepAlive: true,
        isTab: false,
        isAuth: false
      }
    },
    {
      path: '/',
      component: Layout,
      hidden: true,
      redirect: '/wel',
      children: [{
        path: 'wel',
        name: '欢迎',
        activeMenu: '/home',
        component: () => import( /* webpackChunkName: "views" */ '@/views/wel/index'),
        meta: {
          title: '欢迎',
          icon: 'dashboard'
        }
      }]
    },
    {
      path: '/403',
      component: resolve => require(['../views/403'], resolve),
      hidden: true
    },

    {
      path: '/404',
      component: resolve => require(['../views/404'], resolve),
      hidden: true
    },
    {
      path: '/teacher',
      component: Layout,
      redirect: '/teacher/index',
      children: [{
        path: 'index',
        name: '教师管理',
        component: () =>
          import( /* webpackChunkName: "views" */ '@/views/teacher/index')
      }]
    },
    {
      path: '/courseApply',
      component: Layout,
      redirect: '/courseApply/index',
      children: [{
        path: 'index',
        name: '课程申报列表',
        component: () =>
          import( /* webpackChunkName: "views" */ '@/views/course_apply/index')
      }]
    },
    {
      path: '/admin',
      component: Layout,
      redirect: '/admin/index',
      children: [{
        path: 'index',
        name: '管理员管理',
        component: () =>
          import( /* webpackChunkName: "views" */ '@/views/admin/index')
      }]
    },
    {
      path: '/personalInfo',
      component: Layout,
      redirect: '/personalInfo/index',
      name: '个人信息',
      meta: {
        title: '个人信息',
        icon: 'user'
      },
      children: [{
        path: 'index',
        name: '个人信息',
        component: () => import('@/views/personalInfo/index'),
        meta: {
          title: '个人信息',
          icon: 'table'
        }
      }]
    }
  ]
})

export default router

四、总结

项目功能完整,后续可能将不断升级。

关注作者,及时了解更多好项目!

作者主页也有更多 好项目分享!

获取源码或如需帮助,可通过博客后面名片+作者即可!

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

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

相关文章

Java学习之路 —— Java高级

文章目录 前言1. 单元测试2. 反射2.1 获取Class对象的三种方式2.2 获取类的构造器的方法2.3 获取类的成员变量2.4 获取类的成员方法2.5 反射的作用 3. 注解3.1 自定义注解3.2 注解的原理3.3 元注解3.4 注解的解析 4. 动态代理5. 总结 前言 终于走到新手村的末端了,…

青少年CTF-WEB-Flag在哪里?

题目环境:F12查看源代码得到flag:qsnctf{1167716c-54f0-47da-baed-49e3b08dfaeb} 此题主要考察F12查看源代码的使用

java.net.UnknownHostException: eureka

java.net.UnknownHostException: eureka 哦。HOST漏了 #linux /etc/hosts #windows C:\Windows\System32\drivers\etc\hosts 127.0.0.1 eureka7000 127.0.0.1 eureka7001 127.0.0.1 eureka7002

MATLAB画图分辨率、图像大小研究

MATLAB画图分辨率、图像大小研究 Figure属性中 InnerPosition Position OuterPosition区别画图与打印的分辨率和图像大小研究首先明确两个概念:MATLAB实操画图 Figure属性中 InnerPosition Position OuterPosition区别 在画图的时候,我们经常需要设置Fi…

Leetcode—142.环形链表II【中等】

2023每日刷题(三十三) Leetcode—142.环形链表II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode *detectCycle(struct ListNode *head) {struct ListNode* …

python中sklearn库在数据预处理中的详细用法,及5个常用的Scikit-learn(通常简称为 sklearn)程序代码示例

文章目录 前言1. 数据清洗:使用 sklearn.preprocessing 中的 StandardScaler 和 MinMaxScaler 进行数据规范化。2. 缺失值处理:使用 sklearn.impute 中的 SimpleImputer 来填充缺失值。3. 数据编码:使用 sklearn.preprocessing 中的 OneHotEn…

【左程云算法全讲13】暴力递归

系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于左程云算法课程进行的,每个知识点的修正和深入主要参考…

Springboot集成JDBC

1&#xff0c;pom.xml配置jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> 2&#xff0c;配置数据源信息 server:port: 8088spring:datasource:dr…

AI智剪:批量剪辑实战,技巧与实例

随着人工智能技术的不断发展&#xff0c;越来越多的领域开始应用AI技术提升工作效率和质量。其中&#xff0c;AI智剪技术在视频剪辑领域的应用也越来越广泛。AI智剪是一种基于人工智能技术的视频剪辑方法&#xff0c;通过机器学习算法对视频进行自动分析和处理&#xff0c;实现…

AIGC创作系统ChatGPT源码,AI绘画源码,支持最新GPT-4-Turbo模型,支持DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

TCP协议相关实验

文章目录 一.TCP相关实验1.理解CLOSE_WAIT状态2.理解TIME_WAIT状态3.解决TIME_WAIT状态引起的bind失败的方法4.理解listen的第二个参数5.使用Wireshark分析TCP通信流程 二.TCP与UDP1.TCP与UDP对比2.用UDP实现可靠传输&#xff08;经典面试题&#xff09; 一.TCP相关实验 1.理解…

操作系统·进程同步

进程同步&#xff1a;异步环境下的一组并发进程因直接制约而互相发送消息、互相合作、互相等待&#xff0c;使得各进程按照一定的速度执行的过程。 进程同步的主要任务是使并发执行的诸进程之间能有效地共享资源和相互合作&#xff0c;使执行的结果具有可再现性。 4.1 进程同…

LeetCode——字符串(Java)

字符串 简介[简单] 344. 反转字符串[简单] 541. 反转字符串 II[中等] 151. 反转字符串中的单词 简介 记录一下自己刷题的历程以及代码。写题过程中参考了 代码随想录。会附上一些个人的思路&#xff0c;如果有错误&#xff0c;可以在评论区提醒一下。 [简单] 344. 反转字符串…

9 STM32标准库函数 之 独立看门狗(IWDG)所有函数的介绍及使用

9 STM32标准库函数 之 独立看门狗&#xff08;IWDG&#xff09;所有函数的介绍及使用 1. 图片有格式该文档修改记录&#xff1a;总结 函数描述格式&#xff1a; 函数名外设函数的名称函数原形原形声明功能描述简要解释函数是如何执行的输入参数{x}输入参数描述输出参数{x}输出…

sqli-labs关卡20(基于http头部报错盲注)通关思路

文章目录 前言一、回顾上一关知识点二、靶场第二十关通关思路1、判断注入点2、爆数据库名3、爆数据库表4、爆数据库列5、爆数据库关键信息 总结 前言 此文章只用于学习和反思巩固sql注入知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的平台&#xff0c;不能随意去尚…

HLS基础issue

hls 是一个用C/c 来开发PL &#xff0c;产生rtl的工具 hls是按照rtl code来运行的 &#xff0c; 但是rtl会在不同器件调用不同的源语&#xff1b; 可能产生的ip使用在vivado另外一个器件的话 会存在问题&#xff1b; Hls &#xff1a; vivado ip &#xff0c; vitis kernel 是…

Os-hackNos-1

Os-hackNos-1 一、主机发现和端口扫描 主机发现 arp-scan -l端口扫描 nmap -P 192.168.80.141二、信息收集 访问80端口&#xff0c;可知目标是ubuntu系统&#xff0c;中间件是Apache 目录扫描&#xff0c;发现两个路径 dirsearch -u http://192.168.80.141/ -e *index.html路…

VPN创建连接 提示错误 628: 在连接完成前,连接被远程计算机终止。

提示错误 628: 在连接完成前&#xff0c;连接被远程计算机终止。 需要把这个地址配置一下&#xff1a; VPN类型&#xff1a;点对点PPTP 数据加密&#xff1a;如果没有加密的话&#xff0c; 要把这个选一下。

这个双11,阿里云经历了可能是历史级的大故障!

2023年11月12日17&#xff1a;44开始&#xff0c;阿里云发生严重故障&#xff0c;导致阿里巴巴大量产品无法连接&#xff0c;一时间&#xff0c;“阿里云盘崩了”、“淘宝又崩了”、“闲鱼崩了”、“钉钉崩了”等话题相继登上热搜。 此外&#xff0c;像纳思云充电桩、乐爽coole…

初识Linux:目录的创建销毁

目录 ​编辑 提示&#xff1a;以下指令均在Xshell 7 中进行 零、桌面的本质 &#x1f4bb; 扩展&#x1f387;&#xff1a; 一、cd指令&#xff1a; 1、cd - &#xff1a; 2、cd ~&#xff1a; 重命名命令&#xff1a;alias 二、stat指令 冷知识&#xff1a; 如果…