springboot,vue教务管理系统

开发工具:IDEA

服务器:Tomcat9.0, jdk1.8

项目构建:maven

数据库:mysql5.7

前端技术:vue +elementUI

服务端技术:springboot+mybatis

本系统拥有三种角色:管理员、教师和学生,项目采用前后端分离

项目功能描述:

1.管理员:登录、首页、班级管理、课程管理、管理员管理、教师管理、学生管理、选课修改、院系管理、专业管理、设置用户权限等

2.教师:登录、首页、成绩录入、教师课表、授课查询等

3.学生:登录、首页,选修课程、学生课程、成绩查询、课表查询、个人信息修改等

管理员截图:

教师截图:

学生截图:

package com.rainng.coursesystem.service.admin;

import com.rainng.coursesystem.manager.admin.CourseManager;
import com.rainng.coursesystem.model.bo.CourseItemBO;
import com.rainng.coursesystem.model.entity.CourseEntity;
import com.rainng.coursesystem.model.vo.response.ResultVO;
import com.rainng.coursesystem.model.vo.response.table.CourseItemVO;
import com.rainng.coursesystem.service.BaseService;
import com.rainng.coursesystem.util.LessonTimeConverter;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class CourseService extends BaseService {
    private final CourseManager manager;
    private final LessonTimeConverter lessonTimeConverter;

    public CourseService(CourseManager manager, LessonTimeConverter lessonTimeConverter) {
        this.manager = manager;
        this.lessonTimeConverter = lessonTimeConverter;
    }

    public ResultVO getPageCount(String departmentName, String majorName, String name) {
        return result(manager.getPageCount(departmentName, majorName, name));
    }

    public ResultVO getPage(Integer index, String departmentName, String majorName, String name) {
        List<CourseItemBO> boList = manager.getPage(index, departmentName, majorName, name);
        List<CourseItemVO> voList = new ArrayList<>(boList.size());

        for (CourseItemBO bo : boList) {
            CourseItemVO vo = new CourseItemVO();
            BeanUtils.copyProperties(bo, vo);
            vo.setTime(lessonTimeConverter.covertTimePart(bo.getTime()));
            voList.add(vo);
        }

        return result(voList);
    }

    public ResultVO get(Integer id) {
        CourseEntity entity = manager.get(id);
        if (entity == null) {
            return failedResult("课程Id: " + id + "不存在!");
        }

        return result(entity);
    }

    public ResultVO update(CourseEntity entity) {
        CourseEntity origin = manager.get(entity.getId());
        if (origin == null) {
            return failedResult("课程Id: " + entity.getId() + "不存在!");
        }
        if (manager.getTeacherById(entity.getTeacherId()) == null) {
            return failedResult("授课教师Id: " + entity.getTeacherId() + "不存在!");
        }

        entity.setSelectedCount(origin.getSelectedCount());

        manager.update(entity);
        return result("更新成功");
    }

    public ResultVO delete(Integer id) {
        if (manager.get(id) == null) {
            return failedResult("课程Id: " + id + "不存在!");
        }
        if (manager.hasStudentCourse(id)) {
            return failedResult("还有学生未退选此课程");
        }

        manager.delete(id);
        return result("删除成功");
    }

    public ResultVO create(CourseEntity entity) {
        if (manager.get(entity.getId()) != null) {
            return failedResult("课程Id: " + entity.getId() + "已存在!");
        }
        if (manager.getTeacherById(entity.getTeacherId()) == null) {
            return failedResult("授课教师Id: " + entity.getTeacherId() + "不存在!");
        }

        manager.create(entity);
        return result("添加成功");
    }

    public ResultVO listName() {
        return result(manager.listName());
    }
}
<template>
<div class="grade-wrap">
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-fa fa-edit"></i> 成绩录入
</el-breadcrumb-item>
</el-breadcrumb>
</div>

<div class="container">
<div class="query-form">
<el-row :gutter="20">
<el-col :offset="15" :span="3">
<el-input
@keyup.enter.native="query"
placeholder="课程名"
v-model="queryForm.courseName"
/>
</el-col>
<el-col :span="3">
<el-input
@keyup.enter.native="query"
placeholder="学生名"
v-model="queryForm.studentName"
/>
</el-col>
<el-col :span="3">
<el-button @click="query" icon="el-icon-search" type="primary"
>搜索
</el-button>
</el-col>
</el-row>
</div>

<el-row justify="center" type="flex">
<el-pagination
:current-page.sync="pageIndex"
:page-size="pageSize"
:total="pageSize * pageCount"
@current-change="getPage"
background
layout="prev, pager, next"
>
</el-pagination>
</el-row>

<div class="table">
<el-table :data="tableData" stripe>
<el-table-column label="选课Id" prop="studentCourseId" />
<el-table-column label="课程名" prop="courseName" />
<el-table-column label="学生姓名" prop="studentName" />
<el-table-column label="日常分" prop="dailyScore" />
<el-table-column label="笔试分" prop="examScore" />
<el-table-column label="成绩" prop="score" />
<el-table-column align="center" label="操作" width="200px">
<template slot-scope="scope">
<el-button
@click="edit(scope.row.studentCourseId)"
size="mini"
type="success"
>打分
</el-button>
</template>
</el-table-column>
</el-table>
</div>

<el-dialog :visible.sync="editing" title="编辑" width="30%">
<el-form :model="entityForm" label-width="70px" ref="form">
<el-form-item label="选课Id">
<el-input
disabled
type="number"
v-model="entityForm.studentCourseId"
></el-input>
</el-form-item>
<el-form-item label="日常成绩">
<el-input type="number" v-model="entityForm.dailyScore"></el-input>
</el-form-item>
<el-form-item label="笔试成绩">
<el-input type="number" v-model="entityForm.examScore"></el-input>
</el-form-item>
<el-form-item label="总成绩">
<el-input type="number" v-model="entityForm.score"></el-input>
</el-form-item>
</el-form>
<span class="dialog-footer" slot="footer">
<el-button @click="save" type="primary">确 定</el-button>
<el-button @click="editing = false">取 消</el-button>
</span>
</el-dialog>
</div>
</div>
</template>

<script>
import * as api from "../../api/teacher/grade";

export default {
name: "TeacherGrade",
data() {
return {
queryForm: {
courseName: "",
studentName: ""
},
entityForm: {},
tableData: [],
pageSize: api.pageSize,
pageCount: 1,
pageIndex: 1,
editing: false
};
},
methods: {
query() {
api
.getPageCount(this.queryForm.courseName, this.queryForm.studentName)
.then(res => {
this.pageCount = res;
this.pageIndex = 1;
this.getPage(1);
});
},
getPage(pageIndex) {
api
.getPage(
pageIndex,
this.queryForm.courseName,
this.queryForm.studentName
)
.then(res => {
this.tableData = res;
});
},
edit(id) {
api.get(id).then(res => {
this.entityForm = res;
this.editing = true;
});
},
save() {
api.update(this.entityForm).then(() => {
this.$message.success("成功");
this.getPage(this.pageIndex);
this.editing = false;
});
}
},
created() {
this.query();
}
};
</script>

<style scoped></style>
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring BootVue教务管理系统是一个前后端分离的项目,它使用了MySQL 8.0作为数据库,Spring Boot 2.2.6.RELEASE作为后端开发框架,Vue作为前端开发框架。该系统的管理员功能包括班级信息管理、课程信息管理、教室信息管理、活动/通知管理、用户信息管理、授课工作安排和上课时间安排等。该系统还拥有一些升级版功能,例如敏感词检测及设置、适配H5和WEB端、不同登录方式的支持(小程序登录/微信公众号登录/手机号注册登录/邮箱注册登录)和提示词功能(角色扮演)等。后台管理系统目前尚未开源,但未来可能会考虑开源。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot+Vue教务管理系统前后端分离项目,包含数据库脚本文件.zip](https://download.csdn.net/download/weixin_44611398/19283474)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [基于SpringBoot Vue教务管理系统](https://blog.csdn.net/weixin_44209743/article/details/129041402)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [ChatGPT聊天微信小程序源码适配H5和WEB端.zip](https://download.csdn.net/download/m0_66047725/88222777)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值