SpringBoot+Vue实现前后端分离的学生选课系统

news2024/11/26 15:30:44

文末获取源码

开发语言:Java

使用框架:spring boot

前端技术:JavaScript、Vue.js 、css3

开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code

数据库:MySQL 5.7/8.0

数据库管理工具:phpstudy/Navicat

JDK版本:Java jdk8

Maven:apache-maven 3.8.1-bin

目录

一、前言介绍 

二、主要功能模块设计

2.1用户管理模块

2.2登录模块

2.3课程信息管理模块

2.4课程成绩管理模块

2.5选课模块

2.6选课管理模块

三、管理员功能模块 

3.1系统登录界面

3.2学生用户管理模块

3.3选课信息管理模块 

3.4教室信息管理模块 

四、学生用户功能模块

4.1公告通知模块 

4.2课程信息模块

4.3成绩信息模块

五、教师功能模块 

5.1选课信息模块

六、部分核心代码 

6.1课程添加关键代码 

6.2选课添加关键代码

6.3成绩添加关键代码

6.4系统用户管理关键代码

6.5学院信息添加关键代码

6.6课程信息管理关键代码

6.7选课审核关键代码


一、前言介绍 

本系统使用的是现流行的开发语言,即Springboot技术。同时所有的信息都是以网页的形式展示,系统中的信息都可以在后台操作数据库达到数据更新的效果。用户只需要会计算机的基本操作或者会上网就可以使用本系统。系统布局较简单,功能操作不复杂,完全符合现代市场需求。 

本课题的研究对象是学生选课系统,该系统实现了系统用户管理、学生管理、教师管理、课程信息管理、选课管理、成绩管理、学院信息管理、教室信息管理等功能。本系统在设计上,考虑到系统内容以及系统的受众群体,在系统的美工方面采用了比较正规的设计,同时也提供了友好的页面以及简单的操作,系统采用Springboot、Mysql,这样的组合不但利用上了在大学中所学到的知识,并且能够使系统真正的发布到互联网上,而不是一个单纯的演示系统。

本系统经过测试,运行效果稳定,操作方便、快捷。在具体的应用过程中,有可能会出现一些问题,今后还会对本系统不断地进行完善、更新,使其功能更强大,应用更广泛。

二、主要功能模块设计

2.1用户管理模块

该模块包括普通用户管理和系统用户管理,系统用户主要是普通管理员,对用户信息进行管理,只有普通用户才可在该系统上进行相应的操作。用户对个人信息可进行修改;管理员可对自己的个人信息进行维护,同时可对用户的密码信息进行修改,也可删除系统中的用户 

2.2登录模块

根据用户输入的 Id 和密码到数据库中查找该用户,如果未能找到该用户则做出 提醒“用户名或密码错误”,如果找到该用户,则要判断用户的类别然后根据用户类别进入相应的页面。 

2.3课程信息管理模块

(1)课程添加:必须填写课程编号、课程名称、课程负责账号、课程负责人必须是唯一的, 提交后判断某一项是否为填写, 如果是则做出提醒, 填写符合规则后方可添加到数据库。

(2)课程规查询:可以根据课程编号等信息对课程进行查询,查询结果可能有多个。

(3)课程修改:除了课程编号外,其他信息均可以修改。

(4)课程删除:首先找到要删除的课程(一个或多个),然后删除即可。

2.4课程成绩管理模块

教师选中某个选课,点击添加成绩,填写成绩数据,点击添加按钮,完成选课成绩操作,每次成绩录入,列表将生成新的成绩信息,供管理员管理。 

2.5选课模块

用户查询课程规划信息,选择课程规划进入该课程规划的详细页面,点击选课按钮,填写选课表单,添加选课记录。 

2.6选课管理模块

用户选课课程规划模块主要实现的是对课程规划的选课功能,同时可查看自己的选课记录,并对选课可进行取消选课操作。管理员登录系统后,可查看用户的选课信息,也可搜索选课信息,同时可对选课信息进行确认或删除的操作。 

三、管理员功能模块 

3.1系统登录界面

3.2学生用户管理模块

3.3选课信息管理模块 

3.4教室信息管理模块 

四、学生用户功能模块

4.1公告通知模块 

4.2课程信息模块

4.3成绩信息模块

五、教师功能模块 

5.1选课信息模块

六、部分核心代码 

6.1课程添加关键代码 

@PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {

        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        service.insert(map);

        return success(1);

}

    public Map<String,Object> readBody(BufferedReader reader){

        BufferedReader br = null;

        StringBuilder sb = new StringBuilder("");

        try{

            br = reader;

            String str;

            while ((str = br.readLine()) != null){

                sb.append(str);

            }

            br.close();

            String json = sb.toString();

            return JSONObject.parseObject(json, Map.class);

        }catch (IOException e){

            e.printStackTrace();

        }finally{

            if (null != br){

                try{

                    br.close();

                }catch (IOException e){

                    e.printStackTrace();

                }

            }

        }

        return null;

}

    public void insert(Map<String,Object> body){

        StringBuffer sql = new StringBuffer("INSERT INTO ");

        sql.append("`").append(table).append("`").append(" (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            sql.append("`"+humpToLine(entry.getKey())+"`").append(",");

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(") VALUES (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("'").append(entry.getValue()).append("'").append(",");

            }else {

                sql.append(entry.getValue()).append(",");

            }

        }

        sql.deleteCharAt(sql.length() - 1);

        sql.append(")");

        log.info("[{}] - 插入操作:{}",table,sql);

        Query query = runCountSql(sql.toString());

        query.executeUpdate();

    }

6.2选课添加关键代码

@RequestMapping(value = {"/avg_group", "/avg"})

public Map<String, Object> avg(HttpServletRequest request) {

        Query count = service.avg(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

6.3成绩添加关键代码

 @RequestMapping("/get_list")

    public Map<String, Object> getList(HttpServletRequest request) {

        Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));

        return success(map);

}

6.4系统用户管理关键代码

@RestController

@RequestMapping("auth")

public class AuthController extends BaseController<Auth, AuthService> {

    /**

     * 服务对象

     */

    @Autowired

    public AuthController(AuthService service) {

        setService(service);

    }

}

6.5学院信息添加关键代码

public class FindConfig {

    public static String PAGE = "page";

    public static String SIZE = "size";

    public static String LIKE = "like";

    public static String ORDER_BY = "orderby";

    public static String FIELD = "field";

    public static String GROUP_BY = "groupby";

    public static String MIN_ = "_min";

    public static String MAX_ = "_max";

}

6.6课程信息管理关键代码

@SpringBootApplication

@EnableJpaRepositories

public class Application {

    public static void main(String[] args) {

        SpringApplication.run(Application.class,args);

    }

}

6.7选课审核关键代码

@RequestMapping(value = {"/sum_group", "/sum"})

    public Map<String, Object> sum(HttpServletRequest request) {

        Query count = service.sum(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

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

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

相关文章

浏览器无痕模式有什么作用,手机浏览器开启无痕模式的方法

在我们的手机基本上都安装了浏览器&#xff0c;当我们在上网过程中&#xff0c;不想浏览记录被留下&#xff0c;那么开启无痕模式是非常有必要的。那么&#xff0c;浏览器的无痕模式有什么作用&#xff0c;手机浏览器如何开启无痕模式呢&#xff1f;下面教大家如何在手机浏览器…

HECTF2022

今年是第三次参加HECTF&#xff0c;成绩不是很好wp随便看看就好了 文章目录Misc咦~小鲨鱼来喽舞者的秘密你把我flag藏哪去了?来玩捉迷藏呀我的手要不行辣2022HECTF调查问卷Crypto流动的音符matrixezrsamixtureReverseapk贝斯helloiosrunWeb迷路的小狮擎天注Pwn真签到Misc 咦~…

马斯克的这波神操作,让我意识到保持写代码的能力有多重要

作为一个在IT行业摸爬滚打了多年的老油条&#xff0c;我是越来越看不懂现在的互联网行业了。 至少曾经我听过太多人吐槽写代码的永远干不过写PPT的&#xff0c;并且在现实工作中验证过也确实如此&#xff0c;但是老马的这一波骚操作&#xff0c;让推特工程师打印出最近30-60天…

《这!就是街舞》,好综艺还是好生意?

01.始于热爱&#xff0c;火于流量&#xff0c;不止综艺&#xff0c;这就是街舞 “每个人生而不同&#xff0c;不需要被包裹成别人需要的面孔。我就是我&#xff0c;既不傲慢&#xff0c;也不卑微。” ——李承弦 这段来自综艺《这&#xff01;就是街舞》第五季中节目对于李承…

ES6的Promise详解

文章目录前言一、Promise的概念二、使用Promise创建 PromisePromise 常用方法Promise.prototype.then()Promise.prototype.catch()all()链式调用前言 本篇文章主要介绍了ES6语法中的Promise对象的使用详解,promise对象是JS进阶学习中的重要知识点&#xff0c; 如果本文对你有所…

JavaScipt基础(持续更新三)

JavaScipt基础 JavaScipt基础 九、对象&#xff08;Object&#xff09; 9.1什么是对象 9.2JavaScript中的对象 9.3如何得到一个对象 9.4this的指向 9.5对象的使用 十、标准库对象&#xff08;内置对象&#xff09; 10.1Math对象 10.1.1常用属性和方法 10.1.2案例 1…

8年测试经验,简单易懂的讲解一下什么是自动化测试?

自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常&#xff0c;在设计了测试用例并通过评审之后&#xff0c;由测试人员根据测试用例中描述的规程一步步执行测试&#xff0c;得到实际结果与期望结果的比较。在此过程中&#xff0c;为了节省人力、时间或硬件资…

第九期|不是吧,我在社交媒体的照片也会被网络爬虫?

顶象防御云业务安全情报中心监测到&#xff0c;某社交媒体平台遭遇持续性的恶意爬虫盗取。被批量盗取用户信息和原创内容&#xff0c;经分类梳理和初步加工后&#xff0c;被黑灰产转售给竞争对手或直接用于恶意营销。由此不仅给社交媒体平台的数字资产带来直接损失&#xff0c;…

人工智能--机器学习概述、motplotlib的使用-折线图、散点图、柱状图、饼图

机器学习 步骤&#xff1a; 获取数据–数据基本处理–特征工程–机器学习&#xff08;算法&#xff09;–模型评估与调优 人工智能三要素&#xff1a;数据、算法、计算力 CPU 控制单元多&#xff0c;计算单元少—更适合IO密集型任务 GPU计算单元多----更适合计算密集型任务 …

linux环境部署

linux安装go环境 1、下载go的安装包 Golang官网下载地址&#xff1a;https://golang.org/dl/ 2、包版本&#xff1a;go1.19.3.linux-arm64.tar.gz cd /usr/local tar -zxvf go1.19.3.linux-arm64.tar.gz 3、将/usr/local/go/bin添加到环境变量中 vim /etc/profile #在最后一行…

人工智能前沿——无人自动驾驶技术

>>>深度学习Tricks&#xff0c;第一时间送达<<< 一、自动驾驶介绍 自动驾驶汽车依靠人工智能、视觉计算、雷达、监控装置和全球定位系统协同合作&#xff0c;它是一个集环境感知、规划决策、多等级辅助驾驶等功能于一体的综合系统&#xff0c;它集中运用了计…

windows10安装redis服务【成功安装】

1、下载链接中的zip包 https://github.com/MicrosoftArchive/redis/releases 解压&#xff0c;打开到该目录 2、添加Logs文件夹&#xff0c;在该文件夹下创建redis_log.txt文件 3、启动redis服务 在安装的目录上输入cmd 在命令窗口输入&#xff1a; redis-server.exe redi…

云原生之K8S------list-watch机制,调度约束以及故障排查

一&#xff0c;list-watch机制 1&#xff0c;list-watch介绍 1&#xff0c;kubernetes是通过list-watch的机制进行每个组件的动作&#xff0c;保持数据同步的&#xff0c;每个组件之间的设计实现了解耦。 2&#xff0c;用户是通过kubelet根据配置文件&#xff0c;向apiserve…

Vue笔记:基础入门(前篇)

文章目录前言开发环境准备无构建使用构建式使用API风格单文件组件页面打开时闪烁后记前言 Vue(发音为 /vjuː/&#xff0c;类似 view)是一款渐进式Web前端框架&#xff0c;提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。 官方网站&#xff1a;…

上海亚商投顾:沪指缩量跌0.43%

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日集体回调&#xff0c;沪指午后跌近1%&#xff0c;创业板指盘中跌超1.7%&#xff0c;临近尾盘跌幅有所…

字符串查询--Python

str1 hello python index 需求:查找p所在的索引位置 格式: 字符串.index(self(不用传值), sub(子字符串), start(起始位置), end(结束位置)) print(str1.index(p)) # 6 如果字符串中含有多个子字符串,则会返回指定范围内的从左至右的第一个查找到的子字符串位置索引 print…

开源组件搭建完整的Kubernetes-Devops平台方案

文章目录平台六大模块K8S自动化运维容器平台&#xff08;Rancher Kubernetes&#xff09;CI/CD自动构建自动部署平台&#xff08;Jenkins Harbor Helms&#xff09;监控告警平台&#xff08;PrometheusGrafana&#xff09;微服务ServiceMesh平台&#xff08;Lstio&#xff0…

Linux如何写C语言

想要在Linux系统上写C语言程序&#xff0c;需要有两个东西&#xff1a; vim编辑器gcc编译器 下载 vim 和 gcc&#xff1a; 先切换到root用户状态 &#xff0c;输入 sudo passwd root //设置密码然后输入 su root //切换到root用户状态在root用户状态下&#xff0c;输入 apt in…

CMOS电路基础知识,包括NMOS、PMOS,以及由它们构成的非门、与非、或非等门电路,和版图绘制(L-edit16.3)

CMOS电路基础知识,包括NMOS、PMOS,以及由它们构成的非门、与非、或非等门电路,和版图绘制(L-edit16.3) 1,CMOS门电路1)PMOS和NMOS电路结构2)`MOS管结构的工作原理`,如NMOS管结构2,非门电路结构,即反相器3,与非门和或非门、与门和或门4,传输门+数据选择器。1,CMOS…

第四章:Redis--一站式高性能存储方案(包含下载)

Redis概述 Redis是一 款基于键值对的NoSQL数据库&#xff0c;它的值支持多种数据结构。 key都是一个String类型&#xff0c;但value的类型包含以下&#xff1a; 字符串(strings)、哈希(hashes)、 列表(lists)、 集合(sets)、 有序集合(sorted sets)等 Redis将所有的数据都存放…