MySQL数据库课程设计:学生选课管理系统
#MySQL#数据库课程设计报告#学生选课系统#数据字典
数据库课程设计
摘要:
学生成绩管理与选课系统作为一种高效实用的现代化教学技术而被广泛使用。而数据库能够给管理系统的设计赋予可扩充性与移植性,让开发者与客户都能便捷、轻松地使用系统功能。
本项目通过前后端交互____ MySQL+HTML+CSS+PHP 的技术,解决了学生总体数据庞大难以管理的难题,实现了数据查询、分权限管理数据等功能。
该系统不仅可用于各大高校管理数据,还可为其余业务拓展提供参考,具有实用价值和进一步改良迭代应用的前景。本系统也存在更改单个功能程序繁杂、部分功能校园本地兼容不适配等问题更待改进。
关键词: 学生成绩管理与选课系统
前后端交互 MySQL+HTML+CSS+PHP
§1.项目概述:前言
——项目的目的、意义,项目的目标,应用的领域,要解决哪些问题。
数据库是数据管理的有效技术,是计算机科学的重要分支。今天,信息资源已成为各个部门的重要财富和资源。建立一个满足各级部门信息处理要求的行之有效的信息系统也成为一个企业或组织生存和发展的重要条件。
Ⅰ.学生成绩管理与选课系统作为一种高效实用的现代化教学技术而被广泛使用。而数据库能够给管理系统的设计赋予可扩充性与移植性,让开发者与客户都能便捷、轻松地使用系统功能。
Ⅱ.学生成绩管理与选课系统为学校管理中不可或缺的部分。与传统纸质教学管理方式相比,在系统下的师生数据管理工作结构化程度、数据的共享性与独立性更高,因而不管是师生使用、管理员维护、程序搬运......“数据库+”的管理方式更具有优势和前瞻性。
Ⅲ.本实验将设计出一个学生成绩管理与选课系统,其中要解决的问题如下:
(1)系统用户由三类组成:教师、学生和管理员。(怎么设置用户权限?)
(2)管理员负责的主要功能:(怎样实现增删改查等基本操作与用户权限设定?)
①用户管理(老师、学生及管理员的增、删、改);
②课程管理(添加、删除和修改);
③选课管理(实现选课功能开放和禁止、老师成绩输入开放和禁止)。
(3)学生通过登录,可以查询课程的基本信息、实现选课、退课和成绩查询;
(4)老师通过登录,可以查看选课学生的基本信息,可以输入成绩。
(如何实现不同权限用户的登录?登录后页面改如何设置?)
§2.开发环境及相关技术
——采用什么数据库管理系统,操作系统,开发语言及平台,框架,前端技术、后端技 术等等。
数据库管理系统:WAMPSERVER_sever Offline MySQL console
操作系统:Microsoft Windows11
开发语言:Mysql(数据库语言)、HTML和CSS(WEB网页编程前端技术、
PHP(后端技术)
开发平台、框架:Visual Studio Code、
wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b、
WAMPSERVER_sever Offline phpMyAdmin等
§3.系统需求分析
3.1描述功能性需求
关系描述:学校中,每个院系有多个专业,每个院系有多个老师。开设了很 多课程,一 个学生对应选择一个课程。开设管理员使用选课控制、成绩录入 控制管理整个系统
根据关系描述,表述功能性需求
学生成绩管理与选课系统分为三权限:学生、教师和管理员,各角色对应功能如下:
(1)学生:选课、退课、查询选课信息、查询成绩信息;
(2)教师:查询课程信息、查询学生选课信息、录入学生成绩;
(3)管理员:用户管理、课程管理、选课管理
3.2描述非功能性需求
①数据库脚本设计
目的:
- 便于建表后输入大量师生信息;
- 方便在其他服务器直接执行移植数据库;
- 提高数据访问的效率;
- 便于进行数据处理,以及对数据库的详细设计。
②三种角色的设计和分配角色的数据库对象的操作权限
③用户接口界面、web前端网页的实现
3.3数据流图DFD
(0)系统顶层图:根据系统主要信息的处理功能,整个系统可以看作登陆管理,用户选课管理两个部分。从而得出了学生选课管理系统的顶层图如图所示。
注: F1:用户登陆信息 F2:用户注册信息 F3:用户基本信息 F4:用户基本信息
F5:学生选课信息清单 F6:学生选课信息 F7:登陆错误信息 F8:系统反馈用户信息
F9:用户信息清单 F10:修改密码后的用户信息
(1)数据流程图一层分解图
(1.1)用户登陆管理:用户在登陆时,系统会进行判断。用户一共有三种类型,分别是学生,教师和管理员。其中,一部分教师是管理员。在登陆的只有学生和教师两种类型,管理员的身份由系统自行判断。在判定时需要查询用户信息库。用户信息库,包括学生注册信息,教师注册信息,管理员信息等。学生选课管理系统一层分解图——登陆管理,如下图所示:

注:F2.1:学生登陆信息 F2.2:教师登陆信息 F2.3:管理员登陆信息
F7.1:用户身份信息 F7.2:修改密码的错误信息
(1.2)用户操作管理:在登陆管理进行判断后,发送学生登陆信息,教师登陆信息,管理员登陆信息的其中一种。根据用户身份信息的不同,进入不同的管理界面,相应操作的功能,权限都有所不同。如下图所示:
注:F3.1:原始学生信息 F5.1:学生更新后的选课信息
F6.1:学生查询的选课信息 F8.1:学生操作后返回的信息

注:F3.2:原始教师信息 5.2:教师更新后的选课信息
F6.2:教师查询的选课信息 F8.1:教师操作后返回的信息

注:F3.3:原始管理员信息F9.1更新后的用户信息F6.3:管理员查询的选课信息F8.1:管理员操作后返回的信息 F5.3:管理员更新后的选课信息
(2)数据流程图二层分解图
(2.1)学生管理:将P2.1进行分解,学生管理包括,查看选课信息和个人信息,进行选课、重新选课。学生选课管理系统二层分解图——学生管理如下图所示:

注:F3.1:学生个人信息 F5.1.1:增加后的选课信息F5.1.2: 删除后的选课信息
(2.2)教师管理:将P2.2进行分解,教师管理包括,查看选课信息和个人信息,填写学生的成绩。学生选课管理系统二层分解图——学生管理如下图所示:

注:F3.2.1:教师个人信息 F3.2.2:学生个人信息
F5.2.2:增加后的学生成绩信息 F5.2.3:修改后的学生成绩信息
- 教师管理。将P2.3进行分解,管理员管理包括,
- 管理学生信息,包括对学生信息的查询、增加,修改,删除;
- 管理教师信息,包括对教师信息的查询、增加,修改,删除;
- 选课信息管理,包括发布选课信息,增加,修改,删除选课课程等。学生
管理系统二层分解图——学生管理如下图所示:

注:F3.3.1:原始学生信息 F3.3.2:原始教师信息 F3.3.3:原始课程信息
F3.3.4:原始教室信息 F9.1.1:修改后学生信息 F9.1.2:修改后的教师信息
F9.1.3:修改后的课程信息 F9.1.3:修改后的班级信息
3.4数据字典DC(对数据流图的进一步描述)
1. 数据项
为方便,根据上述文字描述,用英文简写为表和列取名,确定列的数据类型及必要的约束规则,给出如下所示数据库表的基本结构及说明:
①学生信息表
|
列名 |
说明 |
数据类型 |
约束 |
|
StudentNum |
学号 |
char(10) |
主码 |
|
MajorNum |
专业号码 |
char(10) |
not null,引用tb_major的外码 |
|
StudentName |
姓名 |
varchar(10) |
Not null |
|
StudentSex |
性别 |
char(2) |
not null,取“男”或“女” |
|
StudentBirthday |
生日 |
datetime |
not null |
|
StudentPassword |
密码 |
varchar(20) |
not null, |
②教师信息表
|
列名 |
说明 |
数据类型 |
约束 |
|
TeacherNum |
教师工号 |
char(10) |
主码 |
|
DeptNum |
院系号码 |
char(10) |
not null,引用tb_dept的外码 |
|
TeacherName |
姓名 |
varchar(10) |
not null |
|
TeacherSex |
性别 |
char(2) |
not null,取“男”或“女” |
|
TeacherBirthday |
生日 |
datetime |
not null |
|
TeacherTitle |
职称 |
varchar(20) |
③管理员信息表
|
列名 |
说明 |
数据类型 |
约束 |
|
ManagerNum |
管理员工号 |
char(10) |
主码 |
|
ManagerName |
姓名 |
varchar(10) |
not null |
|
ManagerSex |
性别 |
char(2) |
not null,取“男”或“女” |
|
ManagerBirthday |
生日 |
datetime |
not null |
④专业信息表
|
列名 |
说明 |
数据类型 |
约束 |
|
MajorNum |
专业号码 |
char(10) |
主码 |
|
DeptNum |
系号码 |
char(10) |
not null,引用tb_dept的外码 |
|
MajorName |
专业名 |
varchar(20) |
not nul |
|
MajorAssistant |
辅导员 |
varchar(10) |
not null |
|
MajorTel |
联系方式 |
varchar(15) |
not null |
⑤院系信息表
|
列名 |
说明 |
数据类型 |
约束 |
|
DeptNum |
系号码 |
char(10) |
主码 |
|
DeptName |
系名称 |
varchar(20) |
not null |
|
DeptChairman |
系主任 |
varchar(10) |
not null |
|
DeptTel |
联系方式 |
varchar(15) |
not null |
|
DeptDesc |
系介绍 |
text |
not null |
⑥课程信息表
|
列名 |
说明 |
数据类型 |
约束 |
|
CourseNum |
课程号码 |
char(10) |
主码 |
|
CourseName |
课程名 |
varchar(20) |
not null |
|
CourseCredit |
学分 |
float |
not null |
|
CourseClass |
学时 |
smallint |
not null |
|
CourseDesc |
课程介绍 |
text |
not null |
⑦选课信息表
|
列名 |
说明 |
数据类型 |
约束 |
|
StuCourseID |
选课编号 |
int |
主码,自动递增 |
|
StudentNum |
学号 |
char(10) |
not null,引用tb_student的外码 |
|
CourseNum |
课程号码 |
char(10) |
not null,引用tb_course的外码 |
|
TeacherNum |
教师工号 |
char(10) |
not null,引用tb_student的外码 |
|
Grade |
成绩 |
smallint |
⑧控制设置表
|
列名 |
说明 |
数据类型 |
约束 |
|
IfTakeCourse |
选课控制 |
char(1) |
not null,取“0”或“1" |
|
IfInputGrade |
成绩录入控制 |
char(1) |
not null,取“0”或“1” |
备注:选课和成绩录入功能的开放和禁止,0为禁止,1为开放。
2. 数据结构图

3. 数据流
用户登陆信息数据流条目
|
编号 |
F1 |
数据流名称 |
用户登陆信息 |
|
来源 |
用户 |
去向 |
P1:登陆管理 |
|
简述 |
用户在登陆时输入的账号、密码和验证码 |
||
|
组成 |
用户名+密码+身份+验证码 |
||
用户身份信息数据流条目
|
编号 |
F2 |
数据流名称 |
用户身份信息 |
|
来源 |
P1:登陆管理 |
去向 |
P2:用户操作管理 |
|
简述 |
登陆系统判断用户身份后发送的信息 |
||
|
组成 |
用户名+密码+身份+验证码 |
||
用户注册信息数据流条目
|
编号 |
F3 |
数据流名称 |
用户注册信息 |
|
来源 |
用户信息库 |
去向 |
P1:登陆管理 |
|
简述 |
系统从用户信息库中查询出来的用户注册信息 |
||
|
组成 |
[学生注册信息]+[教师注册信息]+[管理员注册信息] |
||
用户基本信息数据流条目
|
编号 |
F4 |
数据流名称 |
用户基本信息 |
|
来源 |
D1:用户信息库 |
去向 |
P2:用户操作管理 |
|
简述 |
系统从用户信息库中查询出来的用户基本信息 |
||
|
组成 |
[学生信息]+[教师信息]+[管理员信息] |
||
用户基本信息数据流条目
|
编号 |
F5 |
数据流名称 |
学生选课信息清单 |
|
来源 |
P2:用户操作管理 |
去向 |
D2:选课信息库 |
|
简述 |
用户操作数据后存入选课信息库中的信息 |
||
|
组成 |
学号+课程号+成绩 |
||
用户基本信息数据流条目
|
编号 |
F6 |
数据流名称 |
学生选课信息 |
|
来源 |
D2:选课信息库 |
去向 |
P2:用户操作管理 |
|
简述 |
用户操作数据后存入选课信息库中的信息 |
||
|
组成 |
学号+课程号+成绩+[班级信息] |
||
用户基本信息数据流条目
|
编号 |
F7 |
数据流名称 |
登陆错误信息 |
|
来源 |
D2:选课信息库 |
去向 |
P2:用户操作管理 |
|
简述 |
用户登陆时,输入的用户名,密码或验证码错误 |
||
|
组成 |
错误信息 |
||
用户基本信息数据流条目
|
编号 |
F8 |
数据流名称 |
. |
|
来源 |
D2:选课信息库 |
去向 |
P2:用户操作管理 |
|
简述 |
用户进行操作后,系统反馈给用户信息 |
||
|
组成 |
查询或操作显示的信息,或错误提示信息 |
||
用户基本信息数据流条目
|
编号 |
F9 |
数据流名称 |
用户信息清单 |
|
来源 |
P2:用户选课管理 |
去向 |
D1:用户信息库 |
|
简述 |
用户操作数据后存入用户信息库中的信息 |
||
|
组成 |
[学生信息]+[教师信息]+[管理员信息] |
||
用户基本信息数据流条目
|
编号 |
F10 |
数据流名称 |
修改密码后的用户信息 |
|
来源 |
P1:登陆管理 |
去向 |
D1:用户信息库 |
|
简述 |
用户修改密码后存入用户信息库的信息 |
||
|
组成 |
用户名+密码+身份 |
||
4. 数据存储
|
编号 |
数据存储名 |
输入数据流 |
删除数据流 |
流量 |
|
D1 |
用户信息库 |
F9、F10 |
F3、F4 |
大 |
|
D2 |
选课信息库 |
F6 |
F5 |
大 |
5. 处理过程
|
编号 |
P1 |
名称 |
登陆管理 |
|
输入流 |
F1、F3 |
输出流 |
F2、F7、F10 |
|
简述 |
对登陆信息进行管理 |
||
|
处理 |
判断用户登陆时输入登陆信息是否正确 |
||
|
编号 |
P2 |
名称 |
用户操作管理 |
|
输入流 |
F2、F4、F6 |
输出流 |
F5、F8 |
|
简述 |
用户相关操作的管理 |
||
|
处理 |
根据用户的不同,进行不同的的用户操作管理 |
||
§4.系统设计
4.1概念设计
——实体关系(ER)图.
表介绍:一共有八张表,其中有六个实体(如下①~⑥)
①学生Students(学号StudentNum,课程号MajorNum,学生姓名StudentName,学生性别StudentSex,学生生日StudentBirthday,学生密码StudentPassword)
②教师Teachers (教师号TeacherNum,系号DeptNum,教师姓名TeacherName,教师性别TeacherSex,教师生日TeacherBirthday,教师职称TeacherTitle,教师密码TeacherPassword)
③管理员Managers(管理员号ManagerNum,管理员姓名ManagerName,管理员姓名ManagerSex,管理员生日ManagerBirthday)
④专业Majors(专业号MajorNum,院系号DeptNum,专业名称MajorName,专业辅导员MajorAssistant,专业辅导员联系电话MajorTel)
⑤院系Departments(系号DeptNum,系名DeptName,系主任DeptChairman,系主任联系电话DeptTel,系介绍DeptDesc )
⑥课程Courses(课程号CourseNum,课程名字CourseName,课程学分CourseCredit,课程学时CourseClass,课程介绍CourseDesc)
⑦选课Choices(选课号码StuCourseID,学号StudentNum,课程号CourseNum,教师号TeacherNum,总学分Grade)
⑧控制选择Control(选课控制IfTakeCourse,成绩录入控制IfInputGrade)
各实体E-R图如下:

数据库系统E-R图如下:

4.2逻辑设计
E—R图可以将系统中的概念模型转换为具体的表(即关系)结构,共分为7个关系,详细信息如下所示:
学生(学号、专业号码、姓名、性别、生日、密码)
教师(教师工号、系号码、姓名、性别、生日、密码、职称)
管理员(管理员工号、姓名、性别、生日、密码、权限标志)
专业(专业号码、系号码、专业名、辅导员、联系方式、专业介绍)
院系(系号码、系名称、系主任、联系方式、系介绍)
课程(课程号码、学时、学分、课程介绍)
选课信息(学号、课程号码、教师工号、成绩)
各个关系模式的最小依赖集如下:
学生:F’={(学号,专业号)->姓名,(学号,专业号)->姓别,(学号,专业号)->生日,(学号,专业号)->密码,(学号,专业号)->职称}
教师:F’={(教师工号,系号)→教师名,(教师工号,系号)→性别,(教师工号,系号)→生日,(教师工号,系号)→密码,(教师工号,系号)->职称}
管理员:F’={管理员工号->姓名,管理员工号->性别,管理员工号->生日,管理员工号->密码,管理员工号->权限标志}
专业:F’={(专业号,系号)->专业名,(专业号,系号)->辅导员,(专业号,系号)->联系方式,(专业号,系号)->专业介绍}
院系:F’={系号码->系名称,系号码->专业名辅导员,系号码->联系方式,系号码->专业介绍}
课程:F’={课程号->学时,课程号->学分,课程号->课程介绍}
选课:F’={(学号,课程号)->成绩}
根据上述分析所归结出来的数据依赖的种类,其关系模式都达到BCNF(即BC范式)。
4.3物理设计
4.3.1索引设计(创建一个索引,加速课程表的查询)
索引被创建于已有的表中,它可使对行的定位更快速更有效。可以在表格的一个或者多个列上创建索引,每个索引都会被起个名字。用户无法看到索引,它们只能被用来加速查询。
【CREATE INDEX CoursesIndex
ON Courses (CourseNum,CourseName,CourseClass,CourseCredit);】
【查看:show index from courses from studentsystem;】
注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常用于搜索的列上面创建索引。
4.3.2触发器设计
建立一个触发器控制输入的成绩在[0,100]区间内。
【delimiter %%
create trigger prod_ins
before insert on Choices
for each row
begin
if new.grade <=0 or new.grade>=100 then
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = '输入成绩不能小于0或大于100';
end if;
end;
%%】
4.3.3数据库完整性设计
在建立数据库脚本时设计定义好每个表的主码外码,且
在Choices中对于StudentNum建立参照完整性约束
【Alter table Choices add constraint fk_supp foreign key (StudentNum) references Students(StudentNum);\g】
4.4用户模式设计
4.4.1视图设计
1. 创建学生专业视图(查看视图语句:select * from 视图名;)
展示各个专业的学生信息,便于师生查看。
【CREATE VIEW vi_major
AS
SELECT
Majors.MajorName,StudentNum,StudentName,StudentSex,StudentBirthday
FROM Majors,Students
WHERE Majors.MajorNum=Students.MajorNum;\g】
2.创建学生成绩视图
【CREATE VIEW vi_grade
AS
SELECT
Choices.StudentNum,StudentName,CourseName
,CourseCredit,TeacherName,Grade
FROM Choices,Students,Courses,Teachers
WHERE Choices.StudentNum=Students.StudentNum and
Choices.TeacherNum=Teachers.TeacherNum and
Choices.CourseNum=Courses.CourseNum and
Grade is not null
;\g】
3. 创建教职员工视图
【CREATE VIEW vi_teacher
AS
SELECT
Teachers.TeacherName,DeptChairman,DeptName
FROM Teachers,Departments
WHERE Teachers.DeptNum=Departments.DeptNum
;\g】
注:使用视图的原因: 1.视图能够简化用户的操作
- 视图使用户能以多种角度看待同一数据
- 视图对重构数据库提供了逻辑独立性
- 视图能够对机密数据提供安全保护
- 适当的利用视图可以更清晰的表达查询
4.4.2存储过程设计
①建立学生专业存储过程
DELIMITER $$
CREATE PROCEDURE OrderPr1 (IN MajorName1 VARCHAR(10),in StudentNum1 CHAR(10), IN StudentSex1 CHAR(2))
BEGIN
SELECT Majors.MajorName,StudentNum,StudentName,StudentSex
FROM Majors,Students
WHERE Majors.MajorNum=Students.MajorNum;
END $$\g
②建立教职员工存储过程
DELIMITER $$
CREATE PROCEDURE OrderPr2 (IN TeacherName1 VARCHAR(10),in DeptChairman1 VARCHAR(10), IN DeptName1 VARCHAR(10))
BEGIN
SELECT
Teachers.TeacherName,DeptChairman,DeptName
FROM Teachers,Departments
WHERE Teachers.DeptNum=Departments.DeptNum;
END $$
注:此处的存储过程由4.4.1的视图修改而来,目的是:
- 预编译:当一个sql语句包含在存储过程中时,服务器不必每次执行它时都要分析和编译它,避免了sql语句在网络中传输然后再解释的低效率问题。
- 修改方便:直接修改存储过程,方便代码的管理。
- 安全:不会有sql语句注入问题。
- 可以建立复杂的查询:可以用存储过程建立非常复杂的查询,以非常复杂的方式更新数据库。
- 可以使用参数:在存储过程中可以使用参数,可以传送和返回参数。
4.4.3 安全性设计
——设计最少两种角色(管理员、普通用户),分配角色的数据库对象的操作权限。
设置三个用户:
【Create user 'stu1'@'localhost' identified by '123';
Create user 'tea2'@'localhost' identified by '456';
Create user 'man3'@'localhost' identified by '456';】
设置三种角色:
【Create role StudentRole,TeacherRole,ManagerRole;】
设置角色权限:
①学生(权限:查询6个表信息)
【grant select on StudentSystem.Students to StudentRole ;
grant select on StudentSystem.Teachers to StudentRole ;
grant select on StudentSystem.Majors to StudentRole ;
grant select on StudentSystem.Departments to StudentRole ;
grant select on StudentSystem.Courses to StudentRole ;
grant select on StudentSystem.Choices to StudentRole ;】
②老师(权限:查询6个表信息+选课表信息增删改查)
【grant select on StudentSystem.Students to TeacherRole ;
grant select on StudentSystem.Teachers to TeacherRole ;
grant select on StudentSystem.Majors to TeacherRole ;
grant select on StudentSystem.Departments to TeacherRole ;
grant select on StudentSystem.Courses to TeacherRole ;
grant select on StudentSystem.Choices to TeacherRole ;
grant all on StudentSystem.Choices to TeacherRole with grant option;】
③管理员(权限:所有表增删改查)
【grant all on StudentSystem.Students to ManagerRole with grant option;
grant all on StudentSystem.Teachers to ManagerRole with grant option;
grant all on StudentSystem.Managers to ManagerRole with grant option;
grant all on StudentSystem.Majors to ManagerRole with grant option;
grant all on StudentSystem.Departments to ManagerRole with grant option;
grant all on StudentSystem.Courses to ManagerRole with grant option;
grant all on StudentSystem.Choices to ManagerRole with grant option;
grant all on StudentSystem.Control to ManagerRole with grant option;】
将角色赋予相应用户:
【GRANT NomalRole TO 'stu1'@'localhost';
GRANT NomalRole TO 'tea2'@'localhost';
GRANT ManagerRole TO 'man3'@'localhost';】
(进入stu1客户端【-u stu1 -p123】
检查权限是否生效:
Show grants \G;
use studentsystem;
Show tables;
select * from students;
select * from managers;
)
注:参照老师提供的实验九数据库安全:基本授权及回收。
4.4.4并发及事务设计
Mysql中,定义一个handler处理一个或多个条件(condition_value ),如果某一个条件被触发, 则会执行定义的SQL语句(statement),然后执行动作(handler_action)。
①设置事务添加一条选课记录,用存储的方式实现。
【 Delimiter //
Create Procedure transp2()
Begin
declare t_err int default 0;
declare CONTINUE HANDLER FOR SQLEXCEPTION SET t_err = 1;
Start transaction;
insert into Choices values (00003,1003,6003,3001,100);
if t_err =1 then
Rollback;
else
commit;
end if;
end //】
②设置事务显示出选课表。
【Create Procedure transp3()
Begin
declare t_err int default 0;
declare CONTINUE HANDLER FOR SQLEXCEPTION SET t_err = 1;
Start transaction;
Select * from choices;
if t_err =1 then
Rollback;
else
commit;
end if;
end ///】
4.4.5 用户界面设计
使用html、php设计学生系统的界面。
使用php连接数据库达到数据展示的效果。
登录界面,教师、学生、管理员对应界面,修改界面。
§5.测试
5.0建立数据库
数据库建立过程
①打开mysql5.6.17模拟器进入数据库,输入命令【source D:\StudentSystem.txt】
导入sql脚本,创建数据库

②检查数据库是否创建成功【show databases;】
检查所有表格是否成功建立【show tables;】
检查表格内容是否插入成功【select * from students;】(以学生表students为例)



即目标数据库studentsystem创建成功
5.1功能性测试
5.1.1索引测试

5.1.2 完整性
在编写数据库脚本时定义主码、外码
以学生表为例:

显示参照性约束【 SHOW CREATE TABLE Choices;\g】
可见约束已经设置成功。

5.1.3触发器测试


5.1.4函数测试
*函数设计:
CREATE FUNCTION welcome (s CHAR(20))
RETURNS CHAR(50) DETERMINISTIC
RETURN CONCAT('欢迎登录学生选课与成绩管理系统, ',s,'!');\g
【show create function welcome;】
可见函数测试成功。

5.1.5视图测试
①学生—专业视图:
【select * from vi_major;】
②学生选课视图:
【select * from vi_grade;】

③教师视图
【select * from vi_teacher;】

5.1.6存储测试
【SHOW CREATE PROCEDURE 数据库.存储过程名;】

5.1.8事务测试
事务①
事务②

5.2逻辑设计数据库重构及回归测试
可视化处理:网页显示(略)
5.3逻辑设计数据库系统优化调整
(略)
§6.开发总结
6.1总结收获
通过本次课程设计,利用数据库的可扩充性和可 移植性创建系统脚本,并在此基础上进一步设计了索引、事务、触发器和视图等等,不仅加强了本系统的功能性,还增长了使用数据库的熟练度。
在完成此次课程设计作业的同时,遇到了许多问题。 从“脚本如何写?”这第一个问题开始,便开始学习有关数据 库系统设计制作、数据库与前端连接方法的方方面面。虽然 仍有许多问题仍然未得到解决,系统也有很多需要老师斧正 的地方,但正因制作此次不完美的课程设计作业,了解了数据库系统制作的流程,认识到数据库系统功能的强大,学习了从头开始制作系统并且锻炼了我们发现、分析并解决问题的能力。
6.2参考文献
[数字] 名字.书名.出版社,出版时间
6.3附件
Studentsystem.txt:
/*
创建学生选课系统数据库脚本
StudentSystem
执行下列脚本自动生成数据库
mysql>source D:\StudentSystem.txt
*/
DROP DATABASE IF EXISTS StudentSystem;
Create database StudentSystem default character set gbk; # 创建数据库Trade 使用缺省字符集gbk
use StudentSystem; -- 切换到StudentSystem 数据库
CREATE TABLE Students (
StudentNum CHAR(10) NOT NULL PRIMARY KEY,
MajorNum CHAR(10) NOT NULL,
StudentName VARCHAR(10) NOT NULL,
StudentSex CHAR(2) NOT NULL,
StudentBirthday DATE NOT NULL,
StudentPassword VARCHAR(40) NOT NULL
);
CREATE TABLE Teachers (
TeacherNum CHAR(10) NOT NULL PRIMARY KEY,
DeptNum CHAR(10) NOT NULL,
TeacherName VARCHAR(10) NOT NULL,
TeacherSex CHAR(2) NOT NULL,
TeacherBirthday DATE NOT NULL,
TeacherTitle VARCHAR(40) NOT NULL,
TeacherPassword VARCHAR(40) NOT NULL
);
CREATE TABLE Managers (
ManagerNum CHAR(10) NOT NULL PRIMARY KEY,
ManagerName VARCHAR(10) NOT NULL,
ManagerSex CHAR(2) NOT NULL,
ManagerBirthday DATE NOT NULL
);
CREATE TABLE Majors (
MajorNum CHAR(10) NOT NULL PRIMARY KEY,
DeptNum CHAR(10) NOT NULL,
MajorName VARCHAR(10) NOT NULL,
MajorAssistant CHAR(2) NOT NULL,
MajorTel VARCHAR(10) NOT NULL
);
CREATE TABLE Departments (
DeptNum CHAR(10) NOT NULL PRIMARY KEY,
DeptName VARCHAR(10) NOT NULL,
DeptChairman VARCHAR(10) NOT NULL,
DeptTel VARCHAR(10) NOT NULL,
DeptDesc TEXT NOT NULL
);
CREATE TABLE Courses (
CourseNum CHAR(10) NOT NULL PRIMARY KEY,
CourseName VARCHAR(10) NOT NULL,
CourseCredit CHAR(10) NOT NULL,
CourseClass CHAR(10) NOT NULL,
CourseDesc TEXT NOT NULL
);
CREATE TABLE Choices (
StuCourseID INT NOT NULL,
StudentNum CHAR(10) NOT NULL,
CourseNum CHAR(10) NOT NULL,
TeacherNum CHAR(10) NOT NULL,
Grade SMALLINT NOT NULL
);
CREATE TABLE Control (
IfTakeCourse CHAR(1) NOT NULL check(IfTakeCourse in ( '0', '1')),
IfInputGrade CHAR(1) NOT NULL check(IfInputCourse in ( '0', '1'))
);
/*
学生:insert into Students values (1000,2000,'一二三','男',20031012,00000000);
教师:insert into Teachers values (3000,4000,'一二三','男',19831012,'xxx老师',11111111);
管理员:insert into Managers values (5000,'一二三','男',19831012);
专业:insert into Majors values (2000,4000,'xxx专业','一二三',1230610086);
院系:insert into Departments values (4000,'xxx学院','一二三','介绍');
课程:insert into Courses values (6000,'xxx课','2学分','1学时','介绍');
选课:insert into Choices values (01,1000,6000,3000,100);
控制:(IfTakeCourse, IfInputGrade);
*/
(忽略insert语句因为过审)
写在后面
* 为什么发出来
大二写的数据库期末大作业 现在看很粗糙 内容和排版都是 文章引用也是随便引用的 大概格式是老师给的 里面一些乱乱的层级也是自己乱标 还省略了一些内容因为觉得不太完善
但是整理资料的时候感觉自己爱过 想给自己留点学习的痕迹 现在发的版本说不定也会一直修改到比较好 说不定哈哈
* 有版权侵权问题马上处理
查了很多资料自己消化了 现在不记得有没有引用了 有什么问题私信 会滑跪
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)