数据库系统课设——教务管理系统

news2024/11/18 5:41:07

目录

前言

一、总体设计

1、知识背景 

2、模块介绍(需求分析)

3、设计步骤

3.1 页面原型设计

3.2 前端页面开发

3.3 后端接口开发

3.4 数据库设计

二、详细设计

1、 系统功能模块划分

2、 数据流程图

3、数据库概念结构设计

4、 数据库逻辑结构设计

三、结果与分析

1、用户登录

2、人员管理

3、课程申请

4、课程审批

5、课程安排

6、选择课程

7、成绩评定

四、源码获取

总结


前言

  这两个星期学校进行数据库的课程设计,我利用所学知识做出来了一个较为简单的教务管理系统,具体功能包括登录、人员管理、教师课程申请、管理员审批课程、管理员安排课程、学生选课、教师给学生评分等等。分享一下我的课程设计,记录一下自己的成长过程。( • ̀ω•́ )✧

    《教务管理系统》项目演示

技术框架:前端采用Vue2,后端采用Spring,数据库使用MySQL。

一、总体设计

1、知识背景 

  本次课程设计我脱离了学校既定的GUI图形库操作,理由主要是JUI图形化操作较为繁琐,技术过于陈旧。而相较于图形化开发,Java语言更适合用来做后端服务的开发。因此,在本次课设中,我采用的是前后端分离开发模式,来实现业务所需要的功能。

  首先,前端即用来写用户看的到的界面的部分,我采用的是Vue框架携同Element组件库进行快速开发,所需要的前置知识有Html、Css、JavaScript、Node.js。后端即用来处理数据和逻辑操作的部分,我采用的是Java语言主流的Spring框架,利用Meaven进行jar包的管理,Mybatis操作数据库,采用SpringMVC进行开发。

  在数据库层面,采用的是MySQL数据库,该数据库免费使用,应用范围较为广泛。在表结构设计上面,采用MySQL自带的MySQL WorkBench进行图形化的操作。

2、模块介绍(需求分析)

 系统主要有以下几大模块:用户登录、人员管理、课程申请、课程审批、课程安排、课程选课、成绩评定。

  • 用户登录:根据角色权限的不同,用户分为管理员、学生和教师三类,不同用户输入账号和密码登录后所看到的界面不一样。用户登录之后若不选择退出登录,下次输入网址的时候能直接跳转至首页,无需再次输入账号和密码。此外,用户登录后经过一段时间,网站将提示登录超时,相应页面将不能访问,这时候用户需要重新登录。登录成功之后,用户可以选择修改自己的密码。
  • 人员管理:该模块包含两大管理,一是学生管理,二是教师管理,两者功能类似,主要有根据条件对用户进行查询,批量删除人员,新增一名人员,修改一名人员的信息,前端分页和后端分页。
  • 课程申请:教师角色可以选择向管理员提交申请,新增一门课程。申请之后,教师可以看到自己的提交记录以及相应的提交状态(待审批、已通过、未通过),点击相应的记录可以查看自己的提交详情。
  • 课程审批:管理员可以查看教师的课程申请记录,并进行相应的处理,可以选择通过,也可以选择不通过。当选择通过时,教师的申请记录的提交状态将转变为已通过,此时,该课程将添加进课程安排的页面,并处于等待课程安排的状态;当选择不通过时,教师的申请记录的提交状态将转变为未通过,课程将不会添加进课程安排的页面。
  • 课程安排:管理员可以对通过了审批的课程进行排课,也可以自己新增一门课程,此时,课程将处于待选状态。管理员可以选择开启选课,开启后,所有待选状态的课程将变为可选,学生将在选课中心看到这些课程;关闭选课,可选状态的课程将转变为授课中的状态,教师正式进入课程的授课。当某一课程结束后,管理员可以点击结课按钮,该课程转变为结课状态,此时教师可对选了该门课的学生进行评分。管理员可以删除处在待选状态或等待课程安排状态的课程信息。
  • 课程选课:当管理员开启选课后,学生可以看到选课中心的课程内容,根据自己的爱好进行课程的选择,选择后若是不满意,也可以选择退课。处在授课中或者已结课的课程不支持退课。
  • 成绩评定:教师可以在其课程中查看课程详情,查看选修了该门课的所有学生基本信息,当课程处于已结课状态后,教师可以对学生进行评分,学生也能在其课程中看到最后的成绩。若课程未处于已结课的状态,教师将不能对学生进行评分。

3、设计步骤

3.1 页面原型设计

  在正式进行开发之前,需要将具体的页面设计好,这样前端能根据页面进行开发,后端也能根据页面设计出合适的接口,常用的原型设计工具有Axure墨刀。在这里,由于我是一个人进行工作,且课设时间较为紧迫,因此页面原型我在脑海里面过了一遍,就没有用工具绘制出来了。

3.2 前端页面开发

  根据原型,利用Html、Css、JavaScript配合Vue2进行页面的开发。本次开发所采用的UI组件库难免与原型不太一样,因此前端页面的制作大致符合原型的样子即可。

3.3 后端接口开发

  根据页面的大致情况,需要设计出合适的接口,接受前端传递过来的请求,如根据学生的id获取学生的信息就适合采用GET请求,而新增一名学生就适合采用POST请求。接口开发完成,与前端正式交互之前,需要先进行接口测试,所采用的测试工具为Postman,以保证接口所传数据的准确性。

3.4 数据库设计

  根据模块的功能以及页面的情况,利用所学的数据库知识设计出相应的表结构,通过Java程序连接好数据库,将数据返回给前端显示。

二、详细设计

1、 系统功能模块划分

 该系统是多角色登录的系统,不同的角色进行登录,所拥有的权限不同。管理员主要是对人员进行管理,课程进行审批,安排教学工作;教师主要是申请课程和给学生评分;学生主要是进行课程的选择,查看最后的成绩。

2、 数据流程图

  数据的流通从登录开始,登录后,用户可以选择退出登录或者修改密码。数据流程中,较为复杂的主要是课程的申请与审批,以及教学任务的安排工作。在课程正式进入到选课前,需要进行课程的安排,使课程处于待选状态。开启选课后,所有待选状态的课程将转变为可选,关闭选课后,可选课程进入授课状态。只有当课程结课之后才能对学生进行成绩的评定。 

3、数据库概念结构设计

  通过对模块和数据流程的分析,我们需要有学生信息、教师信息、申请信息、审批信息、课程信息、管理员信息、选课信息、课程状态信息、是否开启选课等多种数据。各种数据之间存在一定的联系,如学生与选课之间的关系是多对多的,学院与学生之前的关系是一对多的。

4、 数据库逻辑结构设计

  通过分析,我总共设计了12个数据表格,分别为管理员信息表、教师信息表、学生信息表、课程申请表、课程审批表、课程信息表、课程状态表、选课的开启与关闭表、学院信息表、上课地点信息表、用户操作信息表和学生选课关系表。

表1 administrator 管理员信息表

字段名称

数据类型

默认值

是否可空

说明

administrator_id

int

主键自增

name

varchar(45)

姓名

account

varchar(45)

账号

password

varchar(45)

密码

表2 teacher教师信息表

字段名称

数据类型

默认值

是否可空

说明

teacher_id

int

主键自增

name

varchar(45)

姓名

teacher_number

varchar(45)

工号/账号

department_id

int

外键学院id

date_time

datetime

now()

最后操作时间

password

varchar(45)

123456

密码

表3 student学生信息表

字段名称

数据类型

默认值

是否可空

说明

student_id

int

主键自增

name

varchar(45)

姓名

student_number

varchar(45)

学号/账号

stduent_class

varchar(45)

学生班级

date_time

datetime

now()

最后操作时间

password

varchar(45)

123456

密码

表4 course_application课程申请表

字段名称

数据类型

默认值

是否可空

说明

course_application_id

int

主键自增

teacher_id

int

外键教师id

course_id

int

外键课程id

course_name

varchar(45)

课程名称

course_credit

varchar(5)

课程学分

course_hour

varchar(5)

课程学时

course_time

varchar(45)

上课时间

course_place_id

int

外键上课地点id

course_description

text

课程描述

course_examination_id

int

外键课程审批id

operation_id

int

外键操作id

date_time

datetime

now()

申请时间

表5 course_examination课程审批表

字段名称

数据类型

默认值

是否可空

说明

course_examination_id

int

主键自增

name

varchar(45)

审批的名称

表6 course课程信息表

字段名称

数据类型

默认值

是否可空

说明

course_id

int

主键自增

name

varchar(45)

课程名称

teachaer_id

int

外键教师id

credit

varchar(45)

学分

hour

varchar(20)

学时

time

varchar(45)

上课时间

Place_id

int

外键上课地点id

description

text

课程描述

course_status_id

int

外键课程状态id

is_delete

Int

0

是否删除,0表示没有,1表示已删除

表7 course_status课程状态表

字段名称

数据类型

默认值

是否可空

说明

course_status_id

int

主键自增

name

varchar(45)

课程状态名称

表8 course_switch选课的开启与关闭表

字段名称

数据类型

默认值

是否可空

说明

course_switch_id

int

主键自增

status

int

0

0表示选课关闭,1表示选课开启

表9 department学院信息表

字段名称

数据类型

默认值

是否可空

说明

department_id

int

主键自增

name

varchar(45)

学院名称

表10 place上课地点信息表

字段名称

数据类型

默认值

是否可空

说明

place_id

int

主键自增

name

varchar(45)

上课地点名称

表11 operation用户操作信息表

字段名称

数据类型

默认值

是否可空

说明

operation_id

int

主键自增

name

varchar(30)

用户操作名称

表12 courses_students学生选课关系表

字段名称

数据类型

默认值

是否可空

说明

courses_students_id

int

主键自增

course_id

int

课程id

student_id

int

学生id

score

float

成绩

三、结果与分析

  系统实现了用户登录、人员管理、课程申请、课程审批、课程安排、选择课程、成绩评定等模块。自我感觉这次所写的代码量比较庞大,有些细节的地方可能没有太注意。为了实现这个系统,我稍微统计了一下,后端写了37个接口,前后端代码加起来应该有几千行了。 

  后端采了用MVC进行分层,其中,Controller层用来定义接口并返回结果,Service层用来处理相应的逻辑,Mapper层用来进行数据库的操作。各个模块分离开来,采用bean来进行管理,尽量保证了代码的高内聚、低耦合。前端为不同的功能模块定义了不同的文件夹,如与组件有关的就单独放在一个组件文件夹中,以保证代码的层次性与整洁性。 

1、用户登录

  用户登录整体上是采用的JWT令牌登录的技术,前端将用户的账号、密码和身份信息传入到后端之后,后端根据用户的身份信息在相应的数据表格中查询用户的信息,若查不到,则不允许用户登录;若查到用户,则将查到的用户的id、姓名和身份封装起来,转换为JWT令牌返回给前端。接下来,前端将这一令牌存储在浏览器的localStorage中,接下来前端每次请求时都将浏览器本地存储的这一信息取出来,在请求头中携带,后端则在每一次请求的时候校验这一信息。若这一信息变更或者登陆超时,则提示用户重新登录。若用户没有登录,则在前端访问不到相应的网址,也访问不到后端相应的接口信息。在这一过程中,为了防止代码的重复化,后端的拦截器和前端的拦截器就显得尤为重要,与登录相关的逻辑主要是在拦截器中进行处理。

  后端与登录有关的部分代码:

   前端与登录有关的部分代码如下:

2、人员管理

  管理员登录系统之后,可以对学生和教师进行增删改查操作,以及数据发分页显示。在这个过程中,需要实现的接口有根据人员id查询人员的信息,根据用户输入的条件分页查询人员的信息,根据人员的id修改人员的信息,根据人员的id数组批量删除人员的信息。

3、课程申请

  当教师登录该系统后,教师填写相应的申请信息后,可以进行课程的申请。申请提交后,将在数据库生成一条关于该教师的申请记录,此时课程申请处于待审批的状态,教师可以查看自己的申请记录以及申请详情。管理员同意申请时,会根据教师的申请生成一门课程数据,申请状态由待审批转变为已通过;管理员不通过时,不会生成一门课程数据,申请状态会油待审批转变为未通过。

4、课程审批

  管理员可以对教师申请的课程信息进行审批,若觉得合适,则可以选择通过,若觉得不合适,则可以不通过教师的申请。审批界面与申请界面类似,这里展示一下与审批有关的部分前后端代码:

5、课程安排

  管理员可以对通过审批的课程进行排课,也可以自己新增一门新的课程,并将该课程的授课任务安排给一位老师。当需要排课的课程全部排课后,可以开启选课,让学生进行选课。当学生选完课后,管理员可以关闭选课,课程进入授课中的状态,学生将不能再选课,也不能选择退课。此时,教师可以查看选择了该门课程的所有学生的基本信息,但是不能对学生进行成绩的评分。

6、选择课程

  教师开启选课后,学生可以在选课中心查看可选的课程,并选择相应的课程。选择相应的课程后,学生可以在我的课程界面查看已经选择的课程。如果课程没有处于授课中或者结课的状态,则可以退课。

7、成绩评定

  课程结课后,教师可以根据学生的表现,对学生进行评分。评分后,学生也可以在我的课程界面看到最后的成绩。若课程没有结课,成绩无法进行排评定。

四、源码获取

  该系统的源码已经上传至百度网盘,链接和提取码如下:

教务管理系统: 教务管理系统.zip_免费高速下载|百度网盘-分享无限制 (baidu.com)

提取码:6p1w

总结

  总体来说,这次课程设计的代码量还是有点多的,一些细节的地方没有做的足够完善,比如说添加数据时的校验,系统可能存在一些还没有发现的bug。最后,文章篇幅较长,感谢您能看到这里,博主水平有限,难免存在有不足的地方,欢迎各位大佬指出。让我们一起朝更好的方向努力前进吧!

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

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

相关文章

python统计分析——操作案例(模拟抽样)

参考资料:用python动手学统计学 import numpy as np import pandas as pd from matplotlib import pyplot as plt import seaborn as snsdata_setpd.read_csv(r"C:\python统计学\3-4-1-fish_length_100000.csv")[length] #此处将文件路径改为自己的路…

格密码基础:SIS问题的困难性

目录 一. SIS问题的困难性 二. SIS问题归约的性质 2.1 2004年 [MR04] 2.2 2008年 【GPV08】 2.3 2013年【MP13】 三. 归约证明 3.1 核心理解 3.2 归约步骤 3.3 性质理解 一. SIS问题的困难性 推荐先阅读: 格密码基础:SIS问题的定义与理解-CSD…

数据仓库(3)-模型建设

本文从以下9个内容,介绍数据参考模型建设相关内容。 1、OLTP VS OLAP OLTP:全称OnLine Transaction Processing,中文名联机事务处理系统,主要是执行基本日常的事务处理,比如数据库记录的增删查改,例如mysql、oracle…

C++面试宝典第19题:最长公共前缀

题目 编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串""。说明:所有输入只包含小写字母a-z。 示例1: 输入: ["flower", "flow", "flight"]输出: "fl" 示例2: 输入: ["dog",…

进阶Docker2:数据卷和挂载目录

目录 准备 删除容器 创建并运行一个容器 数据卷(Volumes) 挂载数据卷 虚拟机端口映射 挂载目录(Bind mounts) 挂载目录 挂载文件 部署在线项目 docker 在容器中管理数据主要有两种方式: - 数据卷&#xff0…

第一次在RUST官方论坛上留言发布我的Rust板箱

第一次在RUST官方论坛上发帖子,有点紧张~地址在这里: 【My Rust Crate】obtains linux local information - The Rust Programming Language Forum (rust-lang.org)

codeforces (C++ Satisfying Constraints)

题目: 翻译: 思路: 1、找到最大的下限min 2、找到最小的上限max 3、则max-min1满足1、2约束条件的个数 4、max-min1减去约束条件3的个数,即为最终答案 5、如果min大于max,则结果为0,不存在满足约束条件的数…

BuildRoot配置RTL8822CE WIFIBT模块(WIFI部分)

TinkerBoard2主板自带的无线模块为RTL8822CE,PCIe接口 之前在风火轮下载的Linux源码编译出来的BuildRoot根文件系统没有相关的驱动文件 [rootrk3399:/]# find . -name *.ko [rootrk3399:/]# lsmod Module Size Used by Not tainted [rootrk33…

流星全自动网页生成系统重构版源码

流星全自动网页生成系统重构版源码分享,所有模板经过精心审核与修改,完美兼容小屏手机大屏手机,以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 为用户使用方便考虑,全自动网页制作系统无需繁琐…

专业课140总分410+大连理工大学852信号与系统考研经验电子信息与通信

通过将近一年的复习,今年如愿以专业140分,总分410被大连理工录取,回望这一年复习还是有很多做的不足,整理了一下自己复习的经验,希望可以对后面报考大连理工的同学有所帮助。●政治: 真心建议大家至少暑假…

android.os.NetworkOnMainThreadException

问题 android.os.NetworkOnMainThreadException详细问题 核心代码如下: import android.os.Bundle;import androidx.appcompat.app.AppCompatActivity;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ja…

(菜鸟自学)搭建虚拟渗透实验室——安装Ubantu 8.10 靶机

安装Ubantu 8.10 靶机 新建虚拟机 选择Ubuntu系统 网络适配器模式选用桥接模式 镜像选用ubuntu8.10版本 点击“开启此虚拟机”以开始安装Ubuntu Linux系统 安装ubuntu 首先需要选择安装时的语言,这里选择“中文(简体)” 选择“安装…

Jenkins-Maven Git

整合Maven 安装GIT #更新yum sudo yum update #安装git yum install git 安装Maven插件,在插件管理中心: 配置仓库 配置密码认证 我们可以在这个目录下看到Jenkins 帮我们拉取了代码 /env/liyong/data/docker/jenkins_mount/workspace/maven-job 配置maven打包…

FL studio V21.3.2304 最新中文版激活版百度网盘

FL Studio是一款非常专业的水果音乐制作软件,软件功能齐全,拥有编曲、剪辑、录音、混音等功能,可以满足用户的各种音乐制作需求。软件已经成功破解,全中文的软件界面,去除了试用时间限制,有需要的快来下载吧…

第十三讲 单片机驱动彩色液晶屏 bin档的烧录方法

单片机驱动TFT彩色液晶屏系列讲座 目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控…

【自控实验】1. 线性系统串联超前校正实验

本科课程实验报告,有太多公式和图片了,干脆直接转成图片了 仅分享和记录,不保证全对 串联超前校正实验:频域设计计算(校正装置),时域观察验证(校正结果) 使用matlab中的simulink进行仿真

343. 整数拆分(动态规划)

题目: 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出…

01 SpringMVC的快速理解

1.1 如图所示,SpringMVC负责表述层(控制层Controller)实现简化! SpringMVC的作用主要覆盖的是表述层,例如: 请求映射、数据输入、视图界面、请求分发、表单回显、会话控制、过滤拦截、异步交互、文件上传…

【Python数据可视化】matplotlib之增加图形内容:设置图例、设置中文标题、设置网格效果

文章传送门 Python 数据可视化matplotlib之绘制常用图形:折线图、柱状图(条形图)、饼图和直方图matplotlib之设置坐标:添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值matplotlib之增加图形内容&#x…

雪花算法及Java实现

一、全局唯一ID介绍 1、背景 现如今越来越多的公司都在用分布式、微服务,那么对应的就会针对不同的服务进行数据库拆分,然后当数据量上来的时候也会进行分表,那么随之而来的就是分表以后id的问题。 例如之前单体项目中一个表中的数据主键id…