ATMS课程管理系统 - 从零构建的MySQL实战之旅
📚 ATMS课程管理系统 - 从零构建的MySQL实战之旅 🚀
✨ 前言:当教育遇见技术
“一个好的系统,能让复杂的管理变得简单优雅” 💫
嗨!大家好~ 今天我要分享一个超级实用的课程管理系统开发经历!我是一名正在学习《数据库原理与应用》的大学生 👨🎓,这次老师布置的课程作业要求设计一个完整的数据库系统——设计一个ATMS课程管理系统!🚀
任务要求
二、实验内容
艺培管理系统在日常教学运行中,学员每报名一门课程学习,需对其个人信息、班级信息、预存信息、消费信息等进行录入、存储与统计分析,以便教师了解学生情况、学员知晓自身预存与消费情况、机构整体把控教学情况。
(一)创建艺培管理系统(ATMS)数据库
(二)创建数据表,具体情况如下:
表1.1 学生信息(student)表
字段名 数据类型 主键 外键 非空 唯一 备注 sNo varchar(10) 是 否 是 是 学号
sName varchar(20) 否 否 是 否 姓名 sSex enum(‘男’,‘女’) 否 否 是 否 性别
SBDate date 否 否 否 否 出生日期 sPhone varchar(10) 否 否 否 否 联系方式
sParent varchar(15) 否 否 否 否 父母姓名 表1.2学生信息数据(student)表
sNo sName sSex SBDate sPhone sParent 00001 朱皓宁 男 Null Null Null
00002 谢荣伶 女 Null Null Null 00003 罗一伊 女 Null Null Null 00004
秦梓涵 女 Null Null Null 00005 张芸嫣 女 Null Null Null 00006
刘恩辰 男 Null Null Null 00007 邓雨涵 男 Null Null Null 00008
冯钰桐 女 Null Null Null 表2.1 课程信息(course)表 字段名 数据类型 主键 外键 非空 唯一 备注
cNo varchar(10) 是 否 是 是 课程号 cName varchar(20) 否 否 是 否 课程名
cPrice decimal(5,2) 否 否 否 否 课程单价 表2.2课程信息(course)数据表 cNo cName cPrice
c0001 新概念英语 15.00 c0002 原版阅读 180 c0003 初中数学 180.00 c0004
人教英语 160.00 c0005 初数 400.00 表3.1 班级信息(class)表 字段名 数据类型 主键 外键 非空 唯一 备注
clsNo varchar(10) 是 否 是 是 班级号 clsName varchar(20) 否 否 是 否 班级名
cNo varchar(10) 否 是 否 否 课程号 clsPeriod varchar(20) 否 否 否 否 开课时段
tNo varchar(6) 否 否 否 否 授课教师号 表3.2班级信息信息数据(class)表
clsN clsName cNo clsPeriod tNo
cls001 23秋原版周五1班 c0002 周五18:30-20:30 t0001
cls002 23秋新概念周六1班 c0001 周六10:00-12:00 t0001
cls003 23秋新概念周六2班 c0001 周六13:30-15:30 t0001
cls004 23秋人教周六1班 c0004 周六16:00-18:00 t0001
cls005 23秋原版周六1班 c0002 周六18:30-20:30 t0001
cls006 23秋新概念周日1班 c0001 周日8:30-10:30 t0001 cls007
23秋原版周日1班 c0002 周日10:30-12:30 t0002
cls008 23秋人教周日1班 c0004 周日10:30-12:30 t0001
cls009 23秋新概念周日2班 c0001 周日16:00-18:00 t0001
cls010 23秋原版周日2班 c0002 周日15:45-17:45 t0003 表4.1 学生消耗课程信息(consume)表
字段名 数据类型 主键 外键 非空 唯一 备注 sNo varchar(10) 是 是 是 否 学号
clsNo varchar(10) 是 是 是 否 班级号 ConsDate date 是 否 否 否 消耗日期
ConsFlag int(11) 否 否 否 否 标记 表4.2学生消耗课程信息(consume)数据表
sNo clsNo ConsDate ConsFlag 00001 cls001 2023-09-08 0
00001 cls001 2023-09-15 0 00001 cls001 2023-09-22 0
00001 cls001 2023-09-29 0 00001 cls001 2023-10-13 0
00001 cls001 2023-11-10 0 00001 cls001 2023-11-17 0
00001 cls001 2023-11-24 0 00001 cls001 2023-12-01 0
00001 cls001 2023-12-08 0
> (三)根据上述内容,完成如下数据表操作验证:
1.完成表1.2,2.2,3.2,4.2数据表中的数据的录入 。
2.在表1.2学生信息(student)数据表中,数据记录sNo为“00007”、sName为“邓雨涵”的记录,sSex的值改为“女”。
3.在表2.2课程信息(course)数据表中,数据记录cNo为“c0001”,cName为“新概念英语”的记录,cPrice的值改为“150.00”。
4.在表4.2学生消耗课程信息(consume)数据表中,将所有记录的ConsFlag的值改为“1”。
5.删除课程信息(course)表的所有数据。
6.删除课程信息(course)数据表。
前面部分主要是创建表格,加黑部分就是主要任务
实现部分
具体实现部分请看代码,有问题可提出。
-- =============================================
-- ATMS课程管理系统数据库脚本
-- 数据库课程大作业
-- 创建数据库及数据表
-- =============================================-- 🗃️ 创建数据库
CREATE DATABASE `atms`;
USE `atms`;-- 🔧 设置数据库字符集
ALTER DATABASE `atms` CHARACTER SET utf8mb4;-- =============================================
-- 📊 数据表创建
-- =============================================-- 👨🎓 学生信息表
CREATE TABLE `student` (`sNo` VARCHAR(10) PRIMARY KEY COMMENT '学号',`sName` VARCHAR(20) NOT NULL COMMENT '姓名',`sSex` ENUM('男','女') NOT NULL COMMENT '性别',`SBDate` DATE COMMENT '出生日期',`sPhone` VARCHAR(10) COMMENT '联系方式',`sParent` VARCHAR(15) COMMENT '父母姓名'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生基本信息表';-- 📚 课程信息表
CREATE TABLE `course` (`cNo` VARCHAR(10) PRIMARY KEY COMMENT '课程号',`cName` VARCHAR(20) NOT NULL COMMENT '课程名',`cPrice` DECIMAL(5,2) COMMENT '课程单价'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程信息表';-- 🏫 班级信息表
CREATE TABLE `class` (`clsNo` VARCHAR(10) PRIMARY KEY COMMENT '班级号',`clsName` VARCHAR(20) NOT NULL COMMENT '班级名',`cNo` VARCHAR(10) COMMENT '课程号',`clsPeriod` VARCHAR(20) COMMENT '开课时段',`tNo` VARCHAR(6) COMMENT '授课教师号',FOREIGN KEY (`cNo`) REFERENCES `course` (`cNo`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='班级信息表';-- ⏰ 学生消耗课程信息表
CREATE TABLE `consume` (`sNo` VARCHAR(10) COMMENT '学号',`clsNo` VARCHAR(10) COMMENT '班级号',`ConsDate` DATE COMMENT '消耗日期',`ConsFlag` INT(11) COMMENT '标记',PRIMARY KEY (`sNo`, `clsNo`, `ConsDate`),FOREIGN KEY (`sNo`) REFERENCES `student` (`sNo`) ON DELETE CASCADE,FOREIGN KEY (`clsNo`) REFERENCES `class` (`clsNo`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生课时消耗记录表';-- =============================================
-- 📥 插入示例数据
-- =============================================-- 👥 插入学生数据
INSERT INTO `student` (`sNo`, `sName`, `sSex`, `SBDate`, `sPhone`, `sParent`) VALUES
('00001', '朱皓宁', '男', NULL, NULL, NULL),
('00002', '谢荣伶', '女', NULL, NULL, NULL),
('00003', '罗一伊', '女', NULL, NULL, NULL),
('00004', '秦梓涵', '女', NULL, NULL, NULL),
('00005', '张芸嫣', '女', NULL, NULL, NULL),
('00006', '刘恩辰', '男', NULL, NULL, NULL),
('00007', '邓雨涵', '男', NULL, NULL, NULL),
('00008', '冯钰桐', '女', NULL, NULL, NULL);-- 📖 插入课程数据
INSERT INTO `course` (`cNo`, `cName`, `cPrice`) VALUES
('c0001', '新概念英语', 15.00),
('c0002', '原版阅读', 180.00),
('c0003', '初中数学', 180.00),
('c0004', '人教英语', 160.00),
('c0005', '初数', 400.00);-- 🎯 插入班级数据
INSERT INTO `class` (`clsNo`, `clsName`, `cNo`, `clsPeriod`, `tNo`) VALUES
('cls001', '23秋原版周五1班', 'c0002', '周五18:30-20:30', 't0001'),
('cls002', '23秋新概念周六1班', 'c0001', '周六10:00-12:00', 't0001'),
('cls003', '23秋新概念周六2班', 'c0001', '周六13:30-15:30', 't0001'),
('cls004', '23秋人教周六1班', 'c0004', '周六16:00-18:00', 't0001'),
('cls005', '23秋原版周六1班', 'c0002', '周六18:30-20:30', 't0001'),
('cls006', '23秋新概念周日1班', 'c0001', '周日8:30-10:30', 't0001'),
('cls007', '23秋原版周日1班', 'c0002', '周日10:30-12:30', 't0002'),
('cls008', '23秋人教周日1班', 'c0004', '周日10:30-12:30', 't0001'),
('cls009', '23秋新概念周日2班', 'c0001', '周日16:00-18:00', 't0001'),
('cls010', '23秋原版周日2班', 'c0002', '周日15:45-17:45', 't0003');-- 📅 插入课时消耗数据
INSERT INTO `consume` (`sNo`, `clsNo`, `ConsDate`, `ConsFlag`) VALUES
('00001', 'cls001', '2023-09-08', 0),
('00001', 'cls001', '2023-09-15', 0),
('00001', 'cls001', '2023-09-22', 0),
('00001', 'cls001', '2023-09-29', 0),
('00001', 'cls001', '2023-10-13', 0),
('00001', 'cls001', '2023-11-10', 0),
('00001', 'cls001', '2023-11-17', 0),
('00001', 'cls001', '2023-11-24', 0),
('00001', 'cls001', '2023-12-01', 0),
('00001', 'cls001', '2023-12-08', 0);-- =============================================
-- 🔄 数据更新操作
-- =============================================-- ✏️ 更新学生性别信息
UPDATE `student`
SET `sSex` = '女'
WHERE `sNo` = '00007' AND `sName` = '邓雨涵';-- 💰 更新课程价格
UPDATE `course`
SET `cPrice` = 150.00
WHERE `cNo` = 'c0001' AND `cName` = '新概念英语';-- 🏷️ 更新消耗标记
UPDATE `consume`
SET `ConsFlag` = 1;-- =============================================
-- 🗑️ 数据删除操作(演示外键约束)
-- =============================================-- 由于存在外键约束,需要按特定顺序删除数据
DELETE FROM `consume`
WHERE `clsNo` IN (SELECT `clsNo` FROM `class` WHERE `cNo` IN (SELECT `cNo` FROM `course`)
);DELETE FROM `class`
WHERE `cNo` IN (SELECT `cNo` FROM `course`);DELETE FROM `course`;-- =============================================
-- ⚠️ 高级操作:处理外键约束
-- =============================================-- 临时禁用外键检查(用于特殊操作)
SET FOREIGN_KEY_CHECKS = 0;-- 删除课程表(演示用)
DROP TABLE IF EXISTS `course`;-- 重新启用外键检查
SET FOREIGN_KEY_CHECKS = 1;-- =============================================
-- 🎉 数据库脚本执行完成
-- =============================================-- 📝 说明:
-- 1. 使用反引号保护标识符
-- 2. 添加了完整的注释说明
-- 3. 规范了数据类型和约束
-- 4. 使用友好的格式和emoji图标
-- 5. 包含完整的外键约束处理
感谢阅读,期待你的关注。