Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:教室信息管理系统(前后端源码 + 数据库 sql 脚本)
🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍
1.0 项目介绍
开发工具:IDEA、VScode
服务器:Tomcat, JDK 17
项目构建:maven
数据库:mysql 8.0
系统用户前台和管理后台两部分,项目采用前后端分离
前端技术:vue3 + elementUI
服务端技术:springboot + mybatis + redis + mysql
1.1 项目功能
后台功能:
1)登录、退出系统、首页
2)教室管理
(1) 教室管理:添加、修改、删除、查询等功能。
3)教师管理
(1) 教师管理:添加、修改、删除、查询等功能。
4)课程管理
(1) 课程管理:添加、修改、删除、查询等功能。
5)设施管理
(1) 设施管理:添加、修改、删除、查询等功能。
6)教室设施信息
(1) 教室设施信息:添加、修改、删除、查询等功能。
7)课程安排
(1) 课程安排:添加、修改、删除、查询等功能。
8)教室使用记录
(1)教室使用记录:添加、修改、删除、查询等功能。
9)系统管理
用户信息管理
(1)用户信息管理:添加、修改、删除、查询等功能。
角色管理
(2)角色信息管理:添加、修改、删除、查询等功能。
菜单管理
(3)菜单信息管理:添加、修改、删除、查询等功能。
日志管理
(4)日志信息管理:添加、修改、删除、查询等功能。
10)系统监控
查看在先用户、设置定时任务、数据监控、缓存监控、查看缓存列表等。
11)权限管理
(1) 角色信息管理:添加、修改、删除、分配权限等功能。
(2) 资源信息管理:添加、修改、删除等功能。
注意:不一定非要完全符合开发环境,有稍微的差别也是可以开发的。
若需要项目完整源码,可以在 CSDN 私信给我,我每天都有查看消息的,感谢大家支持,希
望可以帮助到大家!
2.0 用户登录
用户根据正确的用户名、密码且通过正确的校验码进行登录。使用了高质量的背景图片,希
望你喜欢。
整体的主题颜色为:猛男粉
实现了登录校验,还有用户注册功能:
用到了 Spring Security 框架来实现登录、校验、验证等功能。
相关的部分源码:
@RestController public class SysLoginController {@Autowiredprivate SysLoginService loginService;@Autowiredprivate ISysMenuService menuService;@Autowiredprivate SysPermissionService permissionService;/*** 登录方法* * @param loginBody 登录信息* @return 结果*/@PostMapping("/login")public AjaxResult login(@RequestBody LoginBody loginBody){AjaxResult ajax = AjaxResult.success();// 生成令牌String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),loginBody.getUuid());ajax.put(Constants.TOKEN, token);return ajax;}/*** 获取用户信息* * @return 用户信息*/@GetMapping("getInfo")public AjaxResult getInfo(){SysUser user = SecurityUtils.getLoginUser().getUser();// 角色集合Set<String> roles = permissionService.getRolePermission(user);// 权限集合Set<String> permissions = permissionService.getMenuPermission(user);AjaxResult ajax = AjaxResult.success();ajax.put("user", user);ajax.put("roles", roles);ajax.put("permissions", permissions);return ajax;}/*** 获取路由信息* * @return 路由信息*/@GetMapping("getRouters")public AjaxResult getRouters(){Long userId = SecurityUtils.getUserId();List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);return AjaxResult.success(menuService.buildMenus(menus));} }
public String login(String username, String password, String code, String uuid){// 验证码校验validateCaptcha(username, code, uuid);// 登录前置校验loginPreCheck(username, password);// 用户验证Authentication authentication = null;try{UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);AuthenticationContextHolder.setContext(authenticationToken);// 该方法会去调用UserDetailsServiceImpl.loadUserByUsernameauthentication = authenticationManager.authenticate(authenticationToken);}catch (Exception e){if (e instanceof BadCredentialsException){AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));throw new UserPasswordNotMatchException();}else{AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));throw new ServiceException(e.getMessage());}}finally{AuthenticationContextHolder.clearContext();}AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));LoginUser loginUser = (LoginUser) authentication.getPrincipal();recordLoginInfo(loginUser.getUserId());// 生成tokenreturn tokenService.createToken(loginUser);}
3.0 首页界面
使用了各种各样的统计图表来直观展示数据。
相关的前端源码:
<template><div class="dashboard-container"><div class="chart-container"><div class="chart-header"><h2>教室使用情况统计</h2></div><div class="charts"><div id="barChart" class="chart"></div><div id="pieChart" class="chart"></div><div id="lineChart" class="chart"></div><div id="gaugeChart" class="chart"></div></div></div></div> </template><script> import * as echarts from 'echarts';export default {name: 'Dashboard',mounted() {this.initBarChart();this.initPieChart();this.initLineChart();this.initGaugeChart();},methods: {initBarChart() {const barChart = echarts.init(document.getElementById('barChart'));const option = {title: {text: '各教室使用次数',left: 'center',textStyle: {color: '#fff'}},tooltip: {trigger: 'axis',axisPointer: {type: 'shadow'}},xAxis: {type: 'category',data: ['教室3B-413', '教室3B-414', '教室3B-415', '教室3B-416', '教室3B-417'],axisLabel: {color: '#fff'}},yAxis: {type: 'value',axisLabel: {color: '#fff'}},series: [{data: [120, 200, 150, 80, 70],type: 'bar',itemStyle: {color: '#FF69B4'}}]};barChart.setOption(option);},initPieChart() {const pieChart = echarts.init(document.getElementById('pieChart'));const option = {title: {text: '教室使用比例',left: 'center',textStyle: {color: '#fff'}},tooltip: {trigger: 'item'},legend: {orient: 'vertical',left: 'left',textStyle: {color: '#fff'}},series: [{name: '教室',type: 'pie',radius: '50%',data: [{ value: 335, name: '教室3B-413' },{ value: 310, name: '教室3B-414' },{ value: 234, name: '教室3B-415' },{ value: 135, name: '教室3B-416' },{ value: 1548, name: '教室3B-417' }],emphasis: {itemStyle: {shadowBlur: 10,shadowOffsetX: 0,shadowColor: 'rgba(0, 0, 0, 0.5)'}},itemStyle: {color: function(params) {const colorList = ['#FF69B4', '#FF1493', '#DB7093', '#C71585', '#DA70D6'];return colorList[params.dataIndex];}}}]};pieChart.setOption(option);},initLineChart() {const lineChart = echarts.init(document.getElementById('lineChart'));const option = {title: {text: '教室使用时间趋势',left: 'center',textStyle: {color: '#fff'}},tooltip: {trigger: 'axis'},xAxis: {type: 'category',data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],axisLabel: {color: '#fff'}},yAxis: {type: 'value',axisLabel: {color: '#fff'}},series: [{data: [120, 200, 150, 80, 70, 110, 130],type: 'line',itemStyle: {color: '#FF69B4'}}]};lineChart.setOption(option);},initGaugeChart() {const gaugeChart = echarts.init(document.getElementById('gaugeChart'));const option = {title: {text: '总使用次数',left: 'center',textStyle: {color: '#fff'}},tooltip: {formatter: '{a} <br/>{b} : {c}'},series: [{name: '使用次数',type: 'gauge',detail: {formatter: '{value}',color: '#fff'},data: [{ value: 2500, name: '总次数' }],axisLabel: {color: '#fff'},axisLine: {lineStyle: {color: [[0.2, '#FF69B4'], [0.8, '#FF1493'], [1, '#DB7093']],width: 12}},pointer: {width: 5},axisTick: {length: 10,lineStyle: {color: 'auto'}},splitLine: {length: 15,lineStyle: {color: 'auto'}}}]};gaugeChart.setOption(option);}} }; </script><style lang="scss"> $theme_color: #FF69B4;.dashboard-container {min-height: 100vh;width: 100%;background-image: url('../../assets/images/6.jpg'); /* 使用占位图片,你可以替换为实际图片 */background-size: cover;background-position: center;display: flex;justify-content: center;align-items: center;.chart-container {background-color: rgba(0, 0, 0, 0.7); /* 半透明背景 */border-radius: 20px;box-shadow: 0 0 40px rgba(0, 0, 0, 0.5);width: 80%;max-width: 1200px;padding: 40px;color: #fff;.chart-header {text-align: center;margin-bottom: 30px;h2 {color: $theme_color;font-weight: bold;}}.charts {display: flex;flex-wrap: wrap;justify-content: space-between;.chart {width: 48%;height: 400px;margin-bottom: 20px;}}} } </style>
4.0 教室管理功能
上传图片使用了第三方接口:x-File-Storage 框架。
相关源码:
@RestController @RequestMapping("/manage/Classrooms") public class ClassroomsController extends BaseController {@Autowiredprivate IClassroomsService classroomsService;/*** 查询教室信息列表*/@PreAuthorize("@ss.hasPermi('manage:Classrooms:list')")@GetMapping("/list")public TableDataInfo list(Classrooms classrooms){startPage();List<Classrooms> list = classroomsService.selectClassroomsList(classrooms);return getDataTable(list);}/*** 导出教室信息列表*/@PreAuthorize("@ss.hasPermi('manage:Classrooms:export')")@Log(title = "教室信息", businessType = BusinessType.EXPORT)@PostMapping("/export")public void export(HttpServletResponse response, Classrooms classrooms){List<Classrooms> list = classroomsService.selectClassroomsList(classrooms);ExcelUtil<Classrooms> util = new ExcelUtil<Classrooms>(Classrooms.class);util.exportExcel(response, list, "教室信息数据");}/*** 获取教室信息详细信息*/@PreAuthorize("@ss.hasPermi('manage:Classrooms:query')")@GetMapping(value = "/{classroomId}")public AjaxResult getInfo(@PathVariable("classroomId") Long classroomId){return success(classroomsService.selectClassroomsByClassroomId(classroomId));}/*** 新增教室信息*/@PreAuthorize("@ss.hasPermi('manage:Classrooms:add')")@Log(title = "教室信息", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody Classrooms classrooms){return toAjax(classroomsService.insertClassrooms(classrooms));}/*** 修改教室信息*/@PreAuthorize("@ss.hasPermi('manage:Classrooms:edit')")@Log(title = "教室信息", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody Classrooms classrooms){return toAjax(classroomsService.updateClassrooms(classrooms));}/*** 删除教室信息*/@PreAuthorize("@ss.hasPermi('manage:Classrooms:remove')")@Log(title = "教室信息", businessType = BusinessType.DELETE)@DeleteMapping("/{classroomIds}")public AjaxResult remove(@PathVariable Long[] classroomIds){return toAjax(classroomsService.deleteClassroomsByClassroomIds(classroomIds));} }
5.0 教师管理功能
相关源码:
@RestController @RequestMapping("/manage/Teachers") public class TeachersController extends BaseController {@Autowiredprivate ITeachersService teachersService;/*** 查询教师信息列表*/@PreAuthorize("@ss.hasPermi('manage:Teachers:list')")@GetMapping("/list")public TableDataInfo list(Teachers teachers){startPage();List<Teachers> list = teachersService.selectTeachersList(teachers);return getDataTable(list);}/*** 导出教师信息列表*/@PreAuthorize("@ss.hasPermi('manage:Teachers:export')")@Log(title = "教师信息", businessType = BusinessType.EXPORT)@PostMapping("/export")public void export(HttpServletResponse response, Teachers teachers){List<Teachers> list = teachersService.selectTeachersList(teachers);ExcelUtil<Teachers> util = new ExcelUtil<Teachers>(Teachers.class);util.exportExcel(response, list, "教师信息数据");}/*** 获取教师信息详细信息*/@PreAuthorize("@ss.hasPermi('manage:Teachers:query')")@GetMapping(value = "/{teacherId}")public AjaxResult getInfo(@PathVariable("teacherId") Long teacherId){return success(teachersService.selectTeachersByTeacherId(teacherId));}/*** 新增教师信息*/@PreAuthorize("@ss.hasPermi('manage:Teachers:add')")@Log(title = "教师信息", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody Teachers teachers){return toAjax(teachersService.insertTeachers(teachers));}/*** 修改教师信息*/@PreAuthorize("@ss.hasPermi('manage:Teachers:edit')")@Log(title = "教师信息", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody Teachers teachers){return toAjax(teachersService.updateTeachers(teachers));}/*** 删除教师信息*/@PreAuthorize("@ss.hasPermi('manage:Teachers:remove')")@Log(title = "教师信息", businessType = BusinessType.DELETE)@DeleteMapping("/{teacherIds}")public AjaxResult remove(@PathVariable Long[] teacherIds){return toAjax(teachersService.deleteTeachersByTeacherIds(teacherIds));} }
6.0 课程管理功能
相关源码:
@RestController @RequestMapping("/manage/Courses") public class CoursesController extends BaseController {@Autowiredprivate ICoursesService coursesService;/*** 查询课程信息列表*/@PreAuthorize("@ss.hasPermi('manage:Courses:list')")@GetMapping("/list")public TableDataInfo list(Courses courses){startPage();List<Courses> list = coursesService.selectCoursesList(courses);return getDataTable(list);}/*** 导出课程信息列表*/@PreAuthorize("@ss.hasPermi('manage:Courses:export')")@Log(title = "课程信息", businessType = BusinessType.EXPORT)@PostMapping("/export")public void export(HttpServletResponse response, Courses courses){List<Courses> list = coursesService.selectCoursesList(courses);ExcelUtil<Courses> util = new ExcelUtil<Courses>(Courses.class);util.exportExcel(response, list, "课程信息数据");}/*** 获取课程信息详细信息*/@PreAuthorize("@ss.hasPermi('manage:Courses:query')")@GetMapping(value = "/{courseId}")public AjaxResult getInfo(@PathVariable("courseId") Long courseId){return success(coursesService.selectCoursesByCourseId(courseId));}/*** 新增课程信息*/@PreAuthorize("@ss.hasPermi('manage:Courses:add')")@Log(title = "课程信息", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody Courses courses){return toAjax(coursesService.insertCourses(courses));}/*** 修改课程信息*/@PreAuthorize("@ss.hasPermi('manage:Courses:edit')")@Log(title = "课程信息", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody Courses courses){return toAjax(coursesService.updateCourses(courses));}/*** 删除课程信息*/@PreAuthorize("@ss.hasPermi('manage:Courses:remove')")@Log(title = "课程信息", businessType = BusinessType.DELETE)@DeleteMapping("/{courseIds}")public AjaxResult remove(@PathVariable Long[] courseIds){return toAjax(coursesService.deleteCoursesByCourseIds(courseIds));} }
7.0 设施管理功能
相关源码:
@RestController @RequestMapping("/manage/Facilities") public class FacilitiesController extends BaseController {@Autowiredprivate IFacilitiesService facilitiesService;/*** 查询教室设施列表*/@PreAuthorize("@ss.hasPermi('manage:Facilities:list')")@GetMapping("/list")public TableDataInfo list(Facilities facilities){startPage();List<Facilities> list = facilitiesService.selectFacilitiesList(facilities);return getDataTable(list);}/*** 导出教室设施列表*/@PreAuthorize("@ss.hasPermi('manage:Facilities:export')")@Log(title = "教室设施", businessType = BusinessType.EXPORT)@PostMapping("/export")public void export(HttpServletResponse response, Facilities facilities){List<Facilities> list = facilitiesService.selectFacilitiesList(facilities);ExcelUtil<Facilities> util = new ExcelUtil<Facilities>(Facilities.class);util.exportExcel(response, list, "教室设施数据");}/*** 获取教室设施详细信息*/@PreAuthorize("@ss.hasPermi('manage:Facilities:query')")@GetMapping(value = "/{facilityId}")public AjaxResult getInfo(@PathVariable("facilityId") Long facilityId){return success(facilitiesService.selectFacilitiesByFacilityId(facilityId));}/*** 新增教室设施*/@PreAuthorize("@ss.hasPermi('manage:Facilities:add')")@Log(title = "教室设施", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody Facilities facilities){return toAjax(facilitiesService.insertFacilities(facilities));}/*** 修改教室设施*/@PreAuthorize("@ss.hasPermi('manage:Facilities:edit')")@Log(title = "教室设施", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody Facilities facilities){return toAjax(facilitiesService.updateFacilities(facilities));}/*** 删除教室设施*/@PreAuthorize("@ss.hasPermi('manage:Facilities:remove')")@Log(title = "教室设施", businessType = BusinessType.DELETE)@DeleteMapping("/{facilityIds}")public AjaxResult remove(@PathVariable Long[] facilityIds){return toAjax(facilitiesService.deleteFacilitiesByFacilityIds(facilityIds));} }
8.0 教师与设施信息功能
相关源码:
@RestController @RequestMapping("/manage/ClassroomFacilities") public class ClassroomFacilitiesController extends BaseController {@Autowiredprivate IClassroomFacilitiesService classroomFacilitiesService;/*** 查询教室与设施的多对多关系列表*/@PreAuthorize("@ss.hasPermi('manage:ClassroomFacilities:list')")@GetMapping("/list")public TableDataInfo list(ClassroomFacilities classroomFacilities){startPage();List<ClassroomFacilities> list = classroomFacilitiesService.selectClassroomFacilitiesList(classroomFacilities);return getDataTable(list);}/*** 导出教室与设施的多对多关系列表*/@PreAuthorize("@ss.hasPermi('manage:ClassroomFacilities:export')")@Log(title = "教室与设施的多对多关系", businessType = BusinessType.EXPORT)@PostMapping("/export")public void export(HttpServletResponse response, ClassroomFacilities classroomFacilities){List<ClassroomFacilities> list = classroomFacilitiesService.selectClassroomFacilitiesList(classroomFacilities);ExcelUtil<ClassroomFacilities> util = new ExcelUtil<ClassroomFacilities>(ClassroomFacilities.class);util.exportExcel(response, list, "教室与设施的多对多关系数据");}/*** 获取教室与设施的多对多关系详细信息*/@PreAuthorize("@ss.hasPermi('manage:ClassroomFacilities:query')")@GetMapping(value = "/{classroomFacilitiesId}")public AjaxResult getInfo(@PathVariable("classroomFacilitiesId") Long classroomFacilitiesId){return success(classroomFacilitiesService.selectClassroomFacilitiesByClassroomFacilitiesId(classroomFacilitiesId));}/*** 新增教室与设施的多对多关系*/@PreAuthorize("@ss.hasPermi('manage:ClassroomFacilities:add')")@Log(title = "教室与设施的多对多关系", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody ClassroomFacilities classroomFacilities){return toAjax(classroomFacilitiesService.insertClassroomFacilities(classroomFacilities));}/*** 修改教室与设施的多对多关系*/@PreAuthorize("@ss.hasPermi('manage:ClassroomFacilities:edit')")@Log(title = "教室与设施的多对多关系", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody ClassroomFacilities classroomFacilities){return toAjax(classroomFacilitiesService.updateClassroomFacilities(classroomFacilities));}/*** 删除教室与设施的多对多关系*/@PreAuthorize("@ss.hasPermi('manage:ClassroomFacilities:remove')")@Log(title = "教室与设施的多对多关系", businessType = BusinessType.DELETE)@DeleteMapping("/{classroomFacilitiesIds}")public AjaxResult remove(@PathVariable Long[] classroomFacilitiesIds){return toAjax(classroomFacilitiesService.deleteClassroomFacilitiesByClassroomFacilitiesIds(classroomFacilitiesIds));} }
9.0 课程安排功能
相关源码:
@RestController @RequestMapping("/manage/Schedules") public class SchedulesController extends BaseController {@Autowiredprivate ISchedulesService schedulesService;/*** 查询课程安排列表*/@PreAuthorize("@ss.hasPermi('manage:Schedules:list')")@GetMapping("/list")public TableDataInfo list(Schedules schedules){startPage();List<Schedules> list = schedulesService.selectSchedulesList(schedules);return getDataTable(list);}/*** 导出课程安排列表*/@PreAuthorize("@ss.hasPermi('manage:Schedules:export')")@Log(title = "课程安排", businessType = BusinessType.EXPORT)@PostMapping("/export")public void export(HttpServletResponse response, Schedules schedules){List<Schedules> list = schedulesService.selectSchedulesList(schedules);ExcelUtil<Schedules> util = new ExcelUtil<Schedules>(Schedules.class);util.exportExcel(response, list, "课程安排数据");}/*** 获取课程安排详细信息*/@PreAuthorize("@ss.hasPermi('manage:Schedules:query')")@GetMapping(value = "/{scheduleId}")public AjaxResult getInfo(@PathVariable("scheduleId") Long scheduleId){return success(schedulesService.selectSchedulesByScheduleId(scheduleId));}/*** 新增课程安排*/@PreAuthorize("@ss.hasPermi('manage:Schedules:add')")@Log(title = "课程安排", businessType = BusinessType.INSERT)@PostMappingpublic AjaxResult add(@RequestBody Schedules schedules){return toAjax(schedulesService.insertSchedules(schedules));}/*** 修改课程安排*/@PreAuthorize("@ss.hasPermi('manage:Schedules:edit')")@Log(title = "课程安排", businessType = BusinessType.UPDATE)@PutMappingpublic AjaxResult edit(@RequestBody Schedules schedules){return toAjax(schedulesService.updateSchedules(schedules));}/*** 删除课程安排*/@PreAuthorize("@ss.hasPermi('manage:Schedules:remove')")@Log(title = "课程安排", businessType = BusinessType.DELETE)@DeleteMapping("/{scheduleIds}")public AjaxResult remove(@PathVariable Long[] scheduleIds){return toAjax(schedulesService.deleteSchedulesByScheduleIds(scheduleIds));} }
10.0 教室使用记录功能
11.0 SQL 数据库设计
-- 创建教室表 (Classrooms) CREATE TABLE Classrooms (classroom_id INT AUTO_INCREMENT primary key COMMENT '教室唯一标识',building_name VARCHAR(100) NOT NULL COMMENT '所在建筑物名称',img VARCHAR(100) NOT NULL COMMENT '图片',room_number VARCHAR(20) NOT NULL COMMENT '房间号',capacity INT NOT NULL COMMENT '教室容量,即最大容纳人数',status INT NOT NULL COMMENT '教室当前状态:1.可用、2.维护中' ) COMMENT='教室信息表';-- 创建教师表 (Teachers) CREATE TABLE Teachers (teacher_id INT AUTO_INCREMENT primary key COMMENT '教师唯一标识',img VARCHAR(100) NOT NULL COMMENT '图片',name VARCHAR(100) NOT NULL COMMENT '教师姓名',degree VARCHAR(100) NOT NULL COMMENT '学历',specialty VARCHAR(30) COMMENT '专业',honor VARCHAR(30) COMMENT '荣誉',email VARCHAR(100) COMMENT '教师的电子邮件地址' ) COMMENT='教师信息表';-- 创建课程表 (Courses) CREATE TABLE Courses (course_id INT AUTO_INCREMENT primary key COMMENT '课程唯一标识',course_name VARCHAR(100) NOT NULL COMMENT '课程名称',credits INT NOT NULL COMMENT '课程学分',semester VARCHAR(20) COMMENT '开设学期',status INT NOT NULL COMMENT '课程状态,1.开设中、2.已结束',description TEXT COMMENT '课程描述' ) COMMENT='课程信息表';INSERT INTO Courses (course_name, credits, semester, status, description) VALUES ('分子生物学', 3, '2024秋季', 1, '本课程探讨生物分子的结构与功能,包括DNA、RNA及蛋白质的生物合成过程。'), ('数据结构与算法', 4, '2024春季', 1, '深入理解数据结构与算法的基本概念及其在计算机科学中的应用。'), ('医学影像学', 3, '2024秋季', 1, '学习医学影像的基本原理及其在临床中的应用,包括CT、MRI等技术。'), ('国际经济学', 3, '2024春季', 1, '研究国际经济理论及全球市场动态,分析贸易与投资的关键领域。'), ('纳米材料科学', 4, '2024秋季', 1, '探讨纳米材料的特性、合成方法及其在各个领域的应用。');-- 创建设施表 (Facilities) CREATE TABLE Facilities (facility_id INT AUTO_INCREMENT primary key COMMENT '设施唯一标识',facility_name VARCHAR(100) NOT NULL COMMENT '设施名称',facility_type VARCHAR(50) COMMENT '设施类型',description TEXT COMMENT '设施描述' ) COMMENT='教室设施表';INSERT INTO Facilities (facility_name, facility_type, description) VALUES ('计算机实验室', '实验室', '配备先进计算机和软件的实验室,用于计算机科学相关课程的教学和实验。'), ('多功能教室', '教室', '可用于讲座、研讨会和小组活动的多功能教室,配备音响和投影设备。'), ('图书馆', '学习空间', '提供学习和研究资源的图书馆,内部有自习区和阅览区域。'), ('会议室', '会议室', '适用于小型会议和讨论的会议室,配备视频会议设备。'), ('体育馆', '体育设施', '提供篮球、排球等各种体育活动的设施,适合体育课程和课外活动。');-- 创建教室设施关联表 (ClassroomFacilities) CREATE TABLE ClassroomFacilities (classroom_facilities_id INT AUTO_INCREMENT primary key COMMENT '教室设施关联唯一标识',classroom_id INT NOT NULL COMMENT '教室ID,逻辑上关联到Classrooms表的ClassroomID',facility_id INT NOT NULL COMMENT '设施ID,逻辑上关联到Facilities表的FacilityID' ) COMMENT='教室与设施的多对多关系表';-- 创建授课安排表 (Schedules) CREATE TABLE Schedules (schedule_id INT AUTO_INCREMENT primary key COMMENT '排课唯一标识',classroom_id INT NOT NULL COMMENT '教室ID,逻辑上关联到Classrooms表的ClassroomID',course_id INT NOT NULL COMMENT '课程ID,逻辑上关联到Courses表的CourseID',teacher_id INT NOT NULL COMMENT '教师ID,逻辑上关联到Teachers表的TeacherID',weekday INT NOT NULL COMMENT '上课星期几,1表示星期一,2表示星期二,...,5表示星期五',sections INT NOT NULL COMMENT '上课节次,1表示第一节课,2表示第二节课等',in_week INT NOT NULL COMMENT '第几周',schedule_type INT NOT NULL COMMENT '课程安排状态,1.进行中,2.已结束' ) COMMENT='课程安排表';-- 创建使用记录表 (UsageRecords) CREATE TABLE Usage_Records (record_id INT AUTO_INCREMENT primary key COMMENT '使用记录唯一标识',classroom_id INT NOT NULL COMMENT '教室',teacher_id INT NOT NULL COMMENT '预订人',usage_date DATE NOT NULL COMMENT '使用日期',Purpose TEXT COMMENT '使用目的描述' ) COMMENT='教室使用记录表';
若需要项目完整源码,可以在 CSDN 私信给我,我每天都有查看消息的,感谢大家支持,希
望可以帮助到大家!
相关文章:
Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:教室信息管理系统(前后端源码 + 数据库 sql 脚本)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 1.0 项目介绍 开发工具:IDEA、VScode 服务器:Tomcat, JDK 17 项目构建:maven 数据库:mysql 8.0 系统用户前台和管理…...
C# 模式匹配
文章目录 前言一、is模式二、switch语句中的模式三、解构模式四、总结 前言 在 C# 中,模式匹配是一种强大的技术,它允许你在代码中更简洁、更安全地检查和处理对象的类型和值。本教程将介绍 C# 中的模式匹配功能,包括is模式、switch语句中的模…...
JWT报CORSFilter错误原因(以Java SpringBoot为例)
JWT 报 CorsFilter 原因,通常是因为跨域请求未通过浏览器的同源策略检查,而 CorsFilter 是用来处理跨域问题的过滤器。如果后端未正确配置 CORS 或 JWT 的传递方式不符合跨域要求,可能导致此类问题。 以下是具体原因及解决方法: …...
百度智能云千帆AppBuilder升级,百度AI搜索组件上线,RAG支持无限容量向量存储!
百度智能云千帆 AppBuilder 发版升级! 进一步降低开发门槛,落地大模型到应用的最后一公里。在千帆 AppBuilder 最新升级的 V1.1版本中,企业级 RAG 和 Agent 能力再度提升,同时组件生态与应用集成分发更加优化。 • 企业级 RAG&am…...
【bash】linux中打包某个可执行文件及其依赖文件
linux中打包某个可执行文件及其依赖文件 下面是一个 Bash 脚本,用于一键化地打包指定可执行文件及其依赖库: #!/bin/bash# 脚本用于打包可执行文件及其依赖库,并打印详细信息 # 使用方法: ./package_executable.sh <可执行文…...
FPGA 17 ,FPGA 与 SR-IOV虚拟化技术,高性能计算与虚拟化技术的结合(FPGA 与 SR-IOV 和 PCI,高性能计算与虚拟化的完美融合)
目录 前言 一. SR-IOV 的起源与发展 1. SR-IOV 的起源与时间线 2. SR-IOV 的诞生原因 3. SR-IOV 的详细介绍 二. SR-IOV 和 PCI 之间的关系 三. PCI 的起源与演进 1. PCI 的起源与时间线 2. PCI 的关键特性 四. FPGA 的独特魅力 1. FPGA 的定义与特性 2. FPGA 的内…...
RabbitMQ 安装、配置和使用介绍 使用前端js直接调用方式
1. 安装 RabbitMQ 1.1 安装 Erlang RabbitMQ 是基于 Erlang 语言开发的,因此首先需要安装 Erlang。 在 Ubuntu 上安装 Erlang: bash sudo apt-get update sudo apt-get install erlang 在 CentOS 上安装 Erlang: bash sudo yum insta…...
MySQL基础大全(看这一篇足够!!!)
文章目录 前言一、初识MySQL1.1 数据库基础1.2 数据库技术构成1.2.1 数据库系统1.2.2 SQL语言1.2.3 数据库访问接口 1.3 什么是MySQL 二、数据库的基本操作2.1 数据库创建和删除2.2 数据库存储引擎2.2.1 MySQL存储引擎简介2.2.2 InnoDB存储引擎2.2.3 MyISAM存储引擎2.2.4 存储引…...
芯品荟|SWM221系列芯片之TFTLCD彩屏显示及控制
“革新未来,智驭控制新纪元”,由广东华芯微特集成电路有限公司市场总监张琢,对SWM221系列的强大功能表现进行了整体介绍。 确实,华芯微特在TFTLCD显示及控制有十多年应用基础和积累的团队,仍勇于挑战,自我…...
贪心算法【1】
文章目录 860. 柠檬水找零题目解析算法原理代码实现交换论证法 2208. 将数组和减半的最少操作次数题目解析算法原理代码实现交换论证法 179. 最大数题目解析算法原理代码实现 860. 柠檬水找零 题目链接:860. 柠檬水找零 题目解析 一杯柠檬水5块钱,每个…...
Python PPT合并与拆分 – 详解
目录 使用工具 Python 合并 PPT 合并多个PPT文档 合并每个PPT文档中的特定幻灯片 Python 拆分 PPT 按幻灯片数量拆分 按幻灯片范围拆分 按幻灯片内容拆分 按节 (Section) 拆分 在日常工作或学习中,我们经常需要对PPT文件进行调整,比如将多个PPT…...
JSX:JavaScript的XML
简介 JSX是一种JavaScript的语法扩展,它允许你在JavaScript代码中写类似于HTML的标记。它被React框架广泛使用,以声明式地描述UI组件。JSX最终会被编译成JavaScript对象。 为什么使用JSX? 可读性:JSX使得组件的结构更加清晰&am…...
SAP ABAP-日期格式问题 SAP内部错误,反序列化JSON字符串时发生异常 值 20241215 不是根据 ABAP 的 XML 格式的有效日期
SAP ABAP-日期格式问题 SAP内部错误,反序列化JSON字符串时发生异常 值 20241215 不是根据 ABAP 的 XML 格式的有效日期 在SAP内部用 YYYYMMDD没有问题 外部传入参数...
Golang学习笔记_05——延迟调用
Golang学习笔记_02——函数 Golang学习笔记_03——匿名函数和闭包 Golang学习笔记_04——递归函数 文章目录 延迟调用1. 延迟调用1.1 使用场景1.2 示例 2. panic2.1 使用场景2.2 示例 3. recover3.1 使用场景3.2 示例 源码 延迟调用 在Go语言中,延迟调用࿰…...
C++:异常(下)
异常上:C:异常(上)-CSDN博客 一:异常的重新抛出 大家看下面如果不在里面处理一下的话delete没有运行过。 #include<iostream> #include<string> using namespace std; double division(int a, int b) {if…...
从〇开始深度学习(番外)——下载包
从〇开始深度学习(番外)——下载包 文章目录 从〇开始深度学习(番外)——下载包写在前面正文 写在前面 《从〇开始深度学习(番外)》系列主要记录一些细碎知识点和技能,与主线并不冲突。如果主线笔记中用得到番外篇的知识或技能,会…...
云原生是什么
云原生是一种构建和运行应用程序的方法,它充分利用了云计算的优势。它不仅仅是指在云上运行应用程序,更重要的是指应用程序的设计、开发、部署和运维方式都充分考虑了云环境的特性,从而能够更好地利用云的弹性、可扩展性和灵活性。 更详细地…...
构建Modbus TCP写多个寄存器指令详解
构建Modbus TCP写多个寄存器指令详解 在Modbus TCP通信中,构建正确的指令对于实现设备间的数据交换至关重要。本文将详细解释如何构建一个Modbus TCP指令,用于向设备地址为1的从站,从地址200(0xC8)开始,连…...
热更新解决方案3 —— xLua
概述 xLua框架导入和AB包相关准备 xLua导入 其它的导入 C#调用Lua 1.Lua解析器 using System.Collections; using System.Collections.Generic; using UnityEngine; //引用命名空间 using XLua;public class Lesson1_LuaEnv : MonoBehaviour {// Start is called before the fi…...
【Linux】——权限
文章目录 权限的概念创建与删除普通用户普通用户与root用户的切换权限管理权限设置 文件掩码权限的作用粘滞位 权限的概念 在Linux系统中,存在两种主要用户类型,即超级用户root与普通用户。超级用户拥有极高的权限,可以在 Linux 统下执行几乎…...
elasticsearch 使用enrich processor填充数据
文章目录 使用 POST 请求手动插入用户数据1. 创建 Enrich Policy步骤 1.1: 创建 Enrich Policy步骤 1.2: 执行 Enrich Policy 2. 创建 Ingest Pipeline步骤 2.1: 创建 Ingest Pipeline步骤 2.2: 配置 Enrich Processor 参数 3. 使用 Ingest Pipeline步骤 3.1: 使用 Pipeline 进…...
etcd性能调优
性能指标 决定 etcd 性能的关键因素,包括: 延迟 (latency):延迟是完成操作的时间。吞吐量 (throughput):吞吐量是在某个时间期间之内完成操作的总数量。当 etcd 接收并发客户端请求时,通常平均延迟随着总体吞吐量增加…...
docker离线安装、linux 安装docker
之前写过一篇docker的离线安装,现在从头再看繁琐了,服务器换了,既然要重搭一遍就要改进一下了。下面步入正题: 1.下载离线软件包 https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz 2.下载安装工具包…...
信息安全工程师-选择题考点总结
密码理论知识 基础理论 一个密码系统至少由明文、密文、加密算法、解密算法和密钥五个部分组成,而其安全性是由密钥决定的。 按照密钥特征的不同,密码体制分为:对称密码体制和非对称密码体制。 按照对明文加密方式的不同,密码体制分为:流密码和分组密码。 非对称密码体…...
【C++】四季分类题目分析与讨论
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目说明💯题目代码实现1.我的做法代码示例解析 2. 老师的类C解法代码示例解析 3. 老师的类C解法代码示例解析 4. 老师新增的基于if的解法代码示例解析 &#x…...
mysqlbinglog如何查看进度呢
要查看 MySQL binlog 的进度,通常是指查看 binlog 文件的当前位置,这对于了解复制进度或者进行恢复操作非常重要。以下是一些常用的方法和 SQL 语句来查看 binlog 进度: 查看当前 binlog 文件和位置: SHOW MASTER STATUS;这个命令…...
CSS系列(11)-- 滤镜与混合模式详解
前端技术探索系列:CSS 滤镜与混合模式详解 🎨 致读者:探索视觉效果的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS 滤镜与混合模式,学习如何创建独特的视觉效果。 滤镜效果详解 🚀 基础滤…...
Cesium进阶教程——自定义图形、外观、绘图基础、现有着色器移植至Cesium、ShadowMapping、视频GIS、模型压平、卷帘
基础必看 WEBGL基础(从渲染管线角度解读) 参考路线 http://www.xt3d.online/tutorial/further/article.html 自定义图形 https://blog.csdn.net/m0_55049655/article/details/138908327 https://blog.csdn.net/m0_55049655/article/details/140306837 …...
搭建Tomcat(一)---SocketServerSocket
目录 引入1 引入2--socket 流程 Socket(应用程序之间的通讯保障) 网卡(计算机之间的通讯保障) 端口 端口号 实例 client端 解析 server端 解析 相关方法 问题1:ServerSocket和Socket有什么关系? ServerSocket Soc…...
Sublime Text 64位:前端及全栈开发利器
本文还有配套的精品资源,点击获取 简介:Sublime Text作为一款高效的文本编辑器,在前端网页开发领域受到广泛青睐,特别是其64位版本在处理大型项目和高内存需求的场景下表现出色。编辑器内置Emmet插件,提供代码高亮、…...
CNCF云原生生态版图-分类指南(一)- 观测和分析
CNCF云原生生态版图-分类指南(一)- 观测和分析 CNCF云原生生态版图-分类指南一、观测和分析(Observability and Analysis)(一)可观测性(Observablility)1. 是什么?2. 解决…...
Ubuntu本地快速搭建web小游戏网站,公网用户远程访问【内网穿透】
文章目录 前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar内网穿透3.2 创建隧道3.3 测试公网访问4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子域名前言 网:我们通常说的是互联网;站:可以理解成…...
VMware ubuntu12.04怎么设置静态IP联网
记得刚开始学习嵌入式就是从ubuntu12.04的环境开始学习的C语言,当时没有弄清楚怎么设置静态IP联网,现在写一篇文章。 1.首先,关闭ubuntu的网络; 2.电脑使用的是wifi,将VMware桥接到该网卡上; 3.在虚拟机设置里面选择桥…...
Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 预览
文章目录 一、简介二、下载 QtPdfium三、加载 QtPdfium 动态库四、Demo 使用 关于QT Widget 其它文章请点击这里: QT Widget 姊妹篇: Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 操作 Qt WORD/PDF(二)使用 QtPdfium库实现…...
UE5 C++ Subsystem 和 多线程
一.Subsystem先做一个简单的介绍,其实可以去看大钊的文章有一篇专门讲这个的。 GamePlay框架基础上的一个增强功能,属于GamePlay架构的范围。Subsystems是一套可以定义自动实例化和释放的类的框架。这个框架允许你从5类里选择一个来定义子类(只能在C定义…...
23.DDD与微服务
学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 DDD与微服务的关系1. DDD可以用微服务实现,也可以不用微服务实现2. DDD是微服务拆分的必须参考项之一3. 微服务架构…...
vue3+ant design vue实现日期选择器不展示清除按钮
1、代码:只需设置:allowClear"false"即可 <a-date-pickerv-model:value"value1":disabledDate"disabledDate"change"queryRate":allowClear"false" />const disabledDate (current: Dayjs) > {// 获取…...
Amazon Bedrock与AWS服务的无缝集成,如何打造智能化应用
在AI和大数据飞速发展的今天,Amazon Bedrock作为AWS的一项新兴服务,正逐渐成为开发者和企业拥抱生成式AI的核心工具。那么,Amazon Bedrock与AWS其他服务结合,究竟能够带来哪些强大的应用场景呢?今天九河云就来和大家探…...
Rust之抽空学习系列(四)—— 编程通用概念(下)
Rust之抽空学习系列(四)—— 编程通用概念(下) 1、函数 函数用来对功能逻辑进行封装,能够增强复用、提高代码的可读 以下是函数的主要组成部分: 名称参数返回类型函数体 1.1、函数名称 在Rust中&…...
【Apache paimon】-- 集成 hive3.1.3 异常
目录 1、场景再现 Step1:在 hive cli beeline 执行创建 hive paimon 表 Step2:使用 insert into 写入数据 Step3:抛出异常 2、原因分析 Step1:在 yarn resource manager 作业界面查询 hive sql mr job 的 yarn log Step2:搜索job 使用的 zstd jar 版本 Step3:定…...
SpringCloud微服务实战系列:01让SpringCloud项目在你机器上运行起来
目录 项目选型 项目安装-本地运行起来 软件安装: 项目启动: 总结&答疑 项目选型 软件开发,基本上都不会从0开始,一般都是在其他项目或者组件的基础上进行整合优化迭代,站在巨人肩膀上才能看得更远,…...
分布式锁【Redis场景分布式锁篇】
文章目录 1.Redis分布式锁2.分布式锁其它方案1.主动轮询型1.MySQL分布式锁2.Redis分布式锁 2.监听回调型1.Etcd2.Zookeeper 总结 1.Redis分布式锁 锁通常用来控制共享资源,比如一个进程内有多个线程竞争一个数据的使用权限,解决方式之一就是加锁。分布式…...
BGP协议
BGP(Border Gateway Protocol,边界网关协议)是一种用于在不同网络之间传输可达性信息的路由协议。它是互联网上使用的主要协议之一,用于连接不同的自治系统(AS),即由单个实体控。边界网关协议_百…...
iframe webview打开外链内嵌video标签导致视频无法全屏展示
iframe webview打开外链内嵌video标签导致视频无法全屏展示 解决方法iframe 添加属性webview 添加属性 解决方法 iframe 添加属性 <iframe style"width: 100%;height: 100vh;" src"http://xxx.xxx........" allowfullscreen"true" w…...
学习日志024--opencv中处理轮廓的函数
目录 前言 一、 梯度处理的sobel算子函数 功能 参数 返回值 代码演示 二、梯度处理拉普拉斯算子 功能 参数 返回值 代码演示 三、Canny算子 功能 参数 返回值 代码演示 四、findContours函数与drawContours函数 功能 参数 返回值 代码演示 …...
【从零开始入门unity游戏开发之——C#篇05】转义字符、@处理多行文本或者不使用转义字符、随机数
文章目录 一、转义字符1、什么是转义字符?2、常见的转义字符3、总结 二、使用处理多行文本或者不使用转义字符1、多行字符串2、不使用转义字符 三、随机数1、Random.Next()生成随机整数示例:生成一个随机整数生成指定范围内的随机整数 2、Random.NextSin…...
PHP获取指定日期的下周日至下周六的日期(下周几的日期)
PHP获取指定日期的下周日至下周六的日期(下周几的日期) 在PHP中,可以使用strtotime()函数来获取指定日期的下周日至下周六的日期。 // 周天 sunday // 周一 monday // 周二 tuesday // 周三 wednesday // 周四 thursday // 周五 friday // …...
超越飞书钉钉:探索高效内部知识库平替方案与应用
在团队协作日益频繁的今天,飞书与钉钉作为两大主流的企业沟通与协作平台,广受企业青睐。然而,随着企业规模的扩大和知识的累积,单纯的沟通与协作已难以满足企业对知识管理与传承的需求。因此,寻找一款能够高效整合内部…...
3D相框案例讲解(详细)
前言 通过现阶段的学习,我们已经掌握了HTML,CSS和JS部分的相关知识点,现在让我们通过一篇案例,来巩固我们近期所学的知识点。 详细视频讲解戳这里 任务一 了解目标案例样式 1.1了解案例 3D相框 1.2 分析案例 首先我们看到一个…...
一、基于langchain使用Qwen搭建金融RAG问答机器人--技术准备
一,LangChain框架介绍 LangChain 框架是一个开源工具,通过为各种 LLM 提供通用接口来简化应用程序的开发流程,帮助开发者自由构建 LLM应用。 LangChain封装了很多组件,通过这些组件的组合可以构建多种类型的RAG应用。开发者可以直接将私有数…...