实验报告管理系统
- 【前言】
- 1.系统需求分析
- 1.1引言
- 1.2目标与任务
- 1.2.1需求分析阶段目标
- 1.2.2 需求分析阶段任务
- 1.2.2.1实验报告管理系统功能分析
- 1.2.2.2数据流程分析
- 1.2.2.3数据字典
- 1.2.2.4分析总结
- 2.概念结构设计
- 2.1概念设计任务
- 2.2概念模型设计
- 3.逻辑结构设计
- 3.1逻辑设计的目标与任务
- 3.2关系模型设计
- 3.2.1 ER图转换为关系模型
- 3.2.2关系模式优化
- 3.2.3用户子模式设计
- 3.3数据处理
- 4.物理结构设计
- 4.1物理设计目标与任务
- 4.2物理存储
- 5.数据库实施
- 5.1建立数据库,数据表,视图,索引
- 5.1.1建立数据库
- 5.1.2建立数据表
- 5.1.3建立视图
- 6.系统调试和测试
- 6.1系统调试
- 6.2系统测试(复杂查询)
- 7.心得与体会
- 参考文献
【前言】
随着网络技术的不断发展,信息技术进入社会的每一个角落,手工管理操作的快速发展,正在逐步取代自动化网络管理。教育技术中心根据教育信息化发展的趋势, 本着面向学校教学过程, 结合学校课程特点,兼顾科研需求,在虚拟化技术及集群技术框架下,构建教学实验软件的个体化应用及集群高性能计算应用环境,以达到基础性公共教学实验软件系统的基于校园网的普遍提供与使用。学校是接受现代化信息传播的先行者,因此,学校管理的主体,是教学网络管理的一个重要组成部分。
实验教学是学生技能培表的重要环节之一,学生实验报告的质量在一定程度上反映了实验教学的质量,实验报告管理水平也反映了实验教学管理水平。目前,大部分学校所提交的实验报告大多还停留在以纸为介质的方式上,这将严重制约着实验教学的开展。首先,很多课程的实验结果在纸质实验报告中不能表现或不能完全表现,其次纸质实验报告的批改和分析也是实验授课老师的一个很重负担,如何提高学生实验报告的表象能力,提高教师批改实验报告的效率并及时发现和纠正实验报告中存在的问题是许多课程实验授课教师所面对的一个难题。
本系统使用MySQL完成。
该系统开发由系统需求分析阶段、概念设计阶段、逻辑设计阶段、数据库实施阶段、系统调试和测试阶段、参考文献、附录等阶段组成。
关键字:数据库;实验报告;管理系统;MySQL
1.系统需求分析
1.1引言
各大高校每年毕业生人数众多,学校处于接收信息的前沿地位,更是及早的进入“办公自动化”。该系统就是办公自动化的一项主要内容。本系统利用了方便的网络管理系统,管理员不需要专业的知识,只需要通过界面操作就可以对教师课题和学生的选题进行管理,使得管理员管理工作变得非常方便。
1.2目标与任务
1.2.1需求分析阶段目标
本系统的目标主要是实现对一般高校的教学工作的信息管理,实现对教师的基本信息和教师的授课信息的添加,查询,分配等功能,同时对课程信息及学生选课信息的管理,较大程度地实现学校教学工作的信息化管理(目标详见表1)
表1 系统目标
目标类型 | 子目标 |
---|---|
教研室主任 | 信息管理:学生、教师基本信息 课程管理:浏览、查询、添加、分配课程,生成报表 |
主讲教师 授课教师 | 管理课程评分 上传课程内容 |
学生 | 查询信息,登录、查看、上传实验内容 |
1.2.2 需求分析阶段任务
1.2.2.1实验报告管理系统功能分析
(1)实验报告管理系统满足来自教研室主任,主讲教师,授课教师和学生四方面人员的需求。
(2)教研室主任工作人员可以为主讲教师和授课教师还有学生添加课程信息,同时并生成相应的报表给学生看和选择,教研室主任可以浏览,查询,添加课程的基本信息同时为主讲教师和授课教师分配上课班级。
(3)主讲教师对课程的评分标准进行管理,设定实验评判标准和分值主讲教师还可以上传课程对应的实验内容。
(4)学生可以通过自己的账户密码来登陆实验系统,及时查看各个课程的实验信息,并且上传自己的实验内容,看可以查询自身的相关信息。
(5)教研室主任对教师和学生信息等进行管理。
1.2.2.2数据流程分析
学生登录系统查看教师布置的实验并且撰写实验内容,教师可以进入系统查看学生课程信息、上传实验、并且批阅学生提交的实验,主讲教师可以对课程的评分标准进行管理,教研室主任管理着学生、教师、课程的所有信息,可以添加课程信息,让学生进行课程选择,还可以安排课程主讲教师和授课教师,为教师分配班级。
1.2.2.3数据字典
数据字典是组成数据库很重要的组成部分,包含了数据项,数据结构等内容,只有认真分析相关的业务功能,进行全面细致的分析,才有可能得到全面的数据结构。数据运行才能够正常,不会出现缺少相应的信息等问题。数据汇总表如表2所示,数据结构如表3所示。
表2 数据项汇总表
数据项名 | 数据类型 | 长度 | 别名 | 取值范围 |
---|---|---|---|---|
Sno | CHAR | 10 | 学号 | |
Sname | CHAR | 10 | 学生姓名 | |
Sage | INT | 2 | 学生年龄 | |
Ssex | CHAR | 3 | 学生性别 | 男,女 |
Sclass | CAHR | 20 | 学生班级 | |
Tno | CHAR | 10 | 教师号 | |
Tname | CHAR | 10 | 教师姓名 | |
Tsex | CHAR | 3 | 教师性别 | 男,女 |
Tage | INT | 2 | 教师年龄 | |
Cno | CHAR | 10 | 课程编号 | |
Cname | CHAR | 20 | 课程名称 | |
Ccredit | DOUBLE | 2 | 课程学分 | |
Ctime | INT | 3 | 课时 | |
Eno | CHAR | 10 | 实验编号 | |
Ename | CHAR | 10 | 实验名称 | |
Score | INT | 2 | 分值 | |
Standard | CHAR | 20 | 评判标准 | |
Dno | CHAR | 10 | 教研主任号 | |
Dname | CHAR | 10 | 主任姓名 | |
Password | CHAR | 10 | 密码 | |
Permission | CHAR | 20 | 权限 | S,t,c,st,sc,tc,stc |
S_score | INT | 3 | 实验成绩 |
表3 数据结构
数据结构名 | 含义说明 | 组成 |
---|---|---|
Student | 学生信息 | 学号,姓名,性别,年龄,班级 |
Teacher | 教师信息 | 教师号,姓名,性别,年龄 |
Director | 主任信息 | 编号,姓名,密码,权限 |
Course | 课程信息 | 课程号,课程名,课时,学分,主讲教师号,授课教师号 |
Experiment | 实验信息 | 实验号,实验题目,截至时间,分值,评分标准,课程号 |
e_completion | 实验完成情况 | 实验号,完成内容,学号,成绩 |
T_course | 教师课程 | 课程号,主讲教师号,授课教师号,班级 |
Sc | 学生课程 | 课程号,学号 |
经需求分析,本系统的数据流有课程信息数据流、实验信息等数据流。
数据流编号:D001
数据流名称:课程信息
简述:课程信息
数据流来源:教研室主任添加课程信息,并发布在系统中。
数据流去向:与课程相关数据存入数据库
数据项组成:Cno(课程号)+Cname(课程名)+Ctime(课时)+Ccredit(学分)+Tno(教师号)
数据流量:20门/日
高峰流量:100门/日
数据流编号:D002
数据流名称:实验信息
简述:实验信息
数据流来源:教师上传相关实验信息
数据流去向:为学生发布实验任务
数据项组成:Eno(实验号)+Ename(实验题目)+Score(分值)+Standard(评分标准)+Cno(课程号)
数据流量:200项/日
数据流编号:D003
数据流名称:学生/主任/教师登录信息
简述:学生/主任/教师登录信息
数据流来源:对学生/主任/教师分配实验管理系统账号
数据流去向:检查用户身份
数据项组成:学生:Sno(学号)+Sname(姓名)+Ssex(性别)+Sage(年龄)+Sclass(班级)
教师:Tno(教师号)+Tname(姓名)+Tsex(性别)+Tage(年龄)
主任:Dno(编号)+Dname(姓名)+Password(密码)+Permission(权限)
数据流编号:D004
数据流名称:实验成绩查询
简述:实验信息查询
数据流来源:学生
数据流去向:检索处理模块
数据项组成:Sno(学号)+Sname(姓名)+Cno(课程号)+Eno(实验号)
数据流量:1000次/日
高峰流量:5000次/日
数据流编号:D005
数据流名称:实验成绩查询结果
简述:返回给学生的查询结果
数据流来源:检索条件处理模块,从系统中返回给学生的查询结果
数据流量:学生
数据项组成:Sno(学号)+Sname(姓名)+Cno(课程号)+Eno(实验号)+Score(分值)+S_score(实验成绩)+Tno(教师号)
数据流量:400次/日
高峰流量:3000次/日
数据流图:(详见图1,2,3)
图1 数据流图1
图2 数据流图2
图3 数据流图3
1.2.2.4分析总结
通过需求分析,认真分析总结后,大致对毕业设计选题管理系统的功能有了一个更全面的认识,更深入的了解。
通过实地考察,查阅相关资料,在基本功能的前提上,又拓展了一点新的实用功能,比如电子图书阅读,这也是未来发展的必然。虽然需求分析很麻烦,但是它是数据库设计的关键,是基础,是前提,如果需求分析没有做好,那么很又可能导致数据库的重新开始。所以,必须认真对待,仔细研究,在全面系统的分析后,得到正确的可行的实施方案,只有这样,才有可能打好基础,有一个良好的开端,才有可能取得好的结果。
2.概念结构设计
2.1概念设计任务
概念设计是独立于数据库管理系统的设计,它的主要任务即时完成对现实事物,事物关系之间的转化,把抽象的事物转化成能够被人们易于理解的图形关系,更加直白的把现实的事物关系表达出来,从而为下一步的设计打下一个良好的基础,概念设计的主要任务就是如此,进行归类总结,识别毕业设计选题管理系统中的实体,识别实体的属性,识别实体的关键字,识别实体间的联系,利用实体关系图(E—R图)来描述选题管理系统相关实体、属性及关系,从而达到为毕业设计选题管理系统建立良好的数据模型的目的。
2.2概念模型设计
根据前面的设计,以及相应的数据项,数据结构之间的关系,通过分类总结,可以将实验报告管理系统数据库实体划分为学生信息实体集、教师信息实体集、课程信息实体集、实验系统实体集,各实体集里还包含不同的实体。系统功能包括:
(1)选择课程:教研室主任添加课程信息,包括课程名,学分,课时等,同时对课程信息进行管理,能够让学生对课程进行选择。
(2)分配班级:教研室主任安排课程的主讲教师和授课教师,同时为主讲教师和授课教师分配.上课班级。
(3)评分准则:主讲教师对课程的评分标准进行管理,设定实验评判标准和分值。
(4)实验查看:主讲教师可以上传课程对应的实验内容。
(5)完成实验:学生登陆系统,完成相应的课程的实验。
(6)信息管理:教研室主任对教师信息、学生信息等进行管理。
每个实体定义的属性如下:
学生(学号,姓名,年龄,性别,班级)
教师(教师号,姓名,性别,年龄)
教研处主任(教研主任号,姓名,权限,密码)
课程信息(课程号,课程名,学分,课时)
教师课程(课程号,主讲教师号,授课教师号,班级)
学生课程(课程号,学号)
实验(实验序号,截止时间,实验题目,班级,课程号,实验评分标准,分值)
实验提交(实验序号,学号,实验内容,实验成绩)
以上就是概念设计的基本实体以及相关的属性,并分别进行了主键的命名,确定了基本的实体之后,就是根据管理流程以及数据流图确定他们之间的关系,进行E-R图的设计了。E-R图的设计是通过先分后总的设计理念进行安排的,把部分的E-R模型设计好后,在进行了总的设计,这样的设计便于操作,易于理解、实现,但进行综合的时候一定要注意他们之间的关系,以免发生不必要的冗余。ER图(详见图4~10)
图4 学生与课程的实体与属性ER图
图5 主任与学生与教师的实体与属性ER图
图6 教师与实验的实体与属性ER图
图7 学生与实验的实体与属性ER图
图8 课程与实验的实体与属性ER图
图9 主任与课程的实体与属性ER图
图10 总体ER图
3.逻辑结构设计
3.1逻辑设计的目标与任务
以上的概念设计阶段是独立于任何一种数据模型的,但是逻辑设计阶段就与选用的DBMS产品发生关系了,系统逻辑设计的任务就是将概念设计阶段设计好的基本E-R图转换为选用DBMS产品所支持的数据模型相符合的逻辑结构。具体内容包括数据组织(将E-R图转换成关系模型、模型优化、数据库模式定义、用户子模式设计)、数据处理(画出系统功能模块图)两大任务。其中最为关键的是把ER模型转换成相应的关系表结构,同时每个关系模型之间的范式应最好满足第三范式,只有这样的关系模式才可能尽可能的减小冗余,达到较好的效果。
3.2关系模型设计
3.2.1 ER图转换为关系模型
ER图进行关系模型的转化时,应根据相应的规则进行转化,只有这样,才能尽可能的减小冗余,达到比较好的范式,使模型更加优化,通常的转换规则如下:
一对一联系 :若双方部分的参与,则将联系定义为一个新的关系,属性为参与双方的码,若一方全部参与,则将联系另一方的码作为全部参与一方的属性,
一对多联系:将单方参与实体的码作为多方参与实体的属性,
多对多联系:将联系定为新的关系,属性为参与双方的码。
以上也就是基本的设计规则了,只要按照相应的规则转换,就能够得到所要的规范程度,得到一个良好的范式,根据得到的ER图,进行关系模式的转换。具体的关系模型如下
(表4~11)。
表4 学生
数据项名 | 数据类型 | 长度 | 别名 | 是否为空 | 主外键 |
---|---|---|---|---|---|
Sno | CHAR | 10 | 学号 | 否 | 主 |
Sname | CHAR | 10 | 姓名 | ||
Sage | INT | 3 | 年龄 | ||
Ssex | CHAR | 3 | 性别 | ||
Sclass | CHAR | 20 | 班级 |
表5 教师
数据项名 | 数据类型 | 长度 | 别名 | 是否为空 | 主外键 |
---|---|---|---|---|---|
Tno | CHAR | 10 | 教师号 | 否 | 主 |
Tname | CHAR | 10 | 姓名 | ||
Tsex | CHAR | 3 | 性别 | ||
Tage | INT | 3 | 年龄 |
表6 课程
数据项名 | 数据类型 | 长度 | 别名 | 是否为空 | 主外键 |
---|---|---|---|---|---|
Cno | CHAR | 10 | 课程 | 否 | 主 |
Cname | CHAR | 20 | 课程名 | ||
Ctime | INT | 3 | 课时 | ||
Credit | DOUBLE | 10 | 学分 |
表7 教研处主任
数据项名 | 数据类型 | 长度 | 别名 | 是否为空 | 主外键 |
---|---|---|---|---|---|
Dno | CHAR | 10 | 主任号 | 否 | 主 |
Dname | CHAR | 10 | 姓名 | ||
Password | CHAR | 10 | 密码 | ||
Permission | CHAR | 10 | 权限 |
表8 实验
数据项名 | 数据类型 | 长度 | 别名 | 是否为空 | 主外键 |
---|---|---|---|---|---|
Eno | CHAR | 10 | 实验号 | 否 | 主 |
Ename | CHAR | 10 | 实验题目 | ||
Eendtime | CHAR | 10 | 截至时间 | ||
Ecredit | INT | 2 | 分值 | ||
Estandard | CHAR | 50 | 评判标准 | ||
Cno | CHAR | 10 | 课程号 | 否 | 外 |
表9 实验提交
数据项名 | 数据类型 | 长度 | 别名 | 是否为空 | 主外键 |
---|---|---|---|---|---|
Eno | CHAR | 10 | 课程号 | 否 | 外 |
Sno | CHAR | 10 | 学号 | 否 | 外 |
Content | CHAR | 50 | 内容 | ||
S_score | INT | 2 | 成绩 |
表10 学生课程
数据项名 | 数据类型 | 长度 | 别名 | 是否为空 | 主外键 |
---|---|---|---|---|---|
Cno | CHAR | 10 | 课程号 | 否 | 外 |
Sno | CHAR | 10 | 学号 | 否 | 外 |
表11 教师课程
数据项名 | 数据类型 | 长度 | 别名 | 是否为空 | 主外键 |
---|---|---|---|---|---|
Cno | CHAR | 10 | 课程号 | 否 | 外 |
M_tno | CHAR | 10 | 主讲教师 | 否 | 外 |
S_tno | CHAR | 10 | 授课教师 | 否 | 外 |
class | CHAR | 20 | 班级 |
3.2.2关系模式优化
关系模式学生、教师、教研室主任等每一个关系不存在非主属性对主属性的部分函数依赖,也不存在传递函数依赖,已经达到了3NF,基本上都满足应用系统的要求,只是在应用中还有一部分功能的实现过于简单,没有考虑周全,还有待进一步修改。已得到更好的运行效率。
(1)分析关系模式学生(学号,姓名,性别,年龄,班级)
在关系模式学生(学号,姓名,年龄,性别,班级)中,每一个属性都不能再分,故,属于1NF;
在关系模式学生(学号,姓名,年龄,性别,班级)中,主键为学号, 所以,姓名、年龄、性别、班级,都是非主属性。根据候选键定义可知,学号完全决定姓名,性别,年龄,班级,即每一个非主属性完全依赖于候选键,故,该关系模式属于2NF;
在关系模式学生(学号,姓名,年龄,性别,班级)中,姓名,性别,年龄,班级,都是非主属性,且每一个非主属性不传递函数依赖于候选键学号,即,学号决定姓名,但姓名不决定性别,不决定年龄,不决定班级。故,该关系模式属于3NF;
在关系模式学生(学号,姓名,性别,年龄,班级)中,候选键为学号,函数依赖为学号—>姓名,学号—>性别,学号—>年龄,学号—>班级,故,该关系模式属BCNF;
由于在关系模式学生(学号,姓名,性别,年龄,班级)中不存在多值依赖,故该关系模式不属于4NF。
综上所述,关系模式学生(学号,姓名,性别,年龄,班级)为BCNF。
(2)分析关系模式教师(教师号,姓名,性别,年龄)和课程(课程号,课程名,学分,课时)
在关系模式教师(教师号,姓名,性别,年龄)和课程(课程号,课程名,学分,课时)
中,每一个属性都不能再分,故首先满足1NF.主键分别为教师号和课程号,每一个非主属性完全依赖于候选键,故这两个关系模式首先属于2NF。且每一个非主属性不传递函数依赖于候选键学号,故属于3NF。而且,候选键教师号和课程号决定一切非主属性,故该关系模式属于BCNF。由于关系模式中不存在多值依赖,故不属于4NF。
综上所述,关系模式教师(教师号,姓名,性别,年龄)和课程(课程号,课程名,学分,课时)属于BCNF。
3.2.3用户子模式设计
用户子模式的建立,其功能就是方便用户的查询并起到了一定的保护数据库的作用,视图的建立应根据具体的应用情况,根据用户的需求,进行相应的视图建立,建立视图的原则应在尽量满足用户的需求的前提下进行,并同时保护其他的数据的安全性,以免数据的泄露与破坏,数据库视图的建立在下面有相应的举例及应用,这里就不再多说了。
学生-课程-实验(学号,姓名,性别,年龄,班级,课程号,课程名,实验号)
课程-实验(实验号,实验名,截止时间,完成情况,课程号,课程名,课时,学分)
教师-课程(课程号,课程名,课时,学分,授课教师号,主讲教师号)
3.3数据处理
数据处理(见图12)
图12 系统功能模块图
4.物理结构设计
4.1物理设计目标与任务
数据库的物理设计通常是确定数据的相关存储过程,它一般是依赖于相应的数据库管理系统,几乎是机器进行自主完成的任务,不用过多的人去考虑,但有时为了效率的问题,以及其他的要求,必须进行相应的物理设计,以达到相应的要求,这就是物理设计的根本目的,而我们在这里的物理设计一般就是建立索引的过程,所以对于用户的要求建立什么样的索引就成了设计者的任务,我们在这里就是进行这样的数据库索引设计。
4.2物理存储
得到系统逻辑模型后,就该进行数据库的物理设计和实施数据库了,物理设计主要是要确定数据库的存储路径、存储结构以及如何建立索引等,可以采用系统的默认设置。
5.数据库实施
5.1建立数据库,数据表,视图,索引
5.1.1建立数据库
Create database experiment_report_system;
5.1.2建立数据表
学生数据表建立:
create table student(sno char(10) primary key,sname char(10),sage int ,ssex enum('男','女')not null,sclass char(20)not null);
教师信息表建立:
create table teacher(tno char(10) primary key,tname char(10),tage int ,tsex enum('男','女')not null);
教研主任表建立:
create table director(dno char(10) primary key,dname char(10),password char(10),permission enum(‘t’,’s’,’c’,’ts’,’tc’,’sc’,’tsc’)not null);
课程表建立:
create table course(cno char(10) primary key,cname char(20),ctime int,ccredit double );
实验表的建立:
create table experiment(eno char(10) primary key,ename char(20),eendtime char(10),ecredit int,estandard char(20),cno char(10),foreign key(cno) references course(cno));
实验完成情况表:
create table e_completion(eno char(10),sno char(10),content char(50),s_score int,primary key(eno,sno) ,foreign key(eno) references experiment(eno),foreign key(sno) references student(sno)););
学生课程表:
create table sc(cno char(10),sno char(10),primary key(cno,sno));
教师课程表:
create table t_course (cno char(10),m_tno char (10),s_tno char(10),class char(20),primary key(cno,m_tno,s_tno),foreign key(m_tno) references teacher(tno),foreign key(cno) references course(cno),foreign key(s_tno) references teacher(tno));
5.1.3建立视图
视图的建立:
Create view s_easSelect eno,ename,eendtime,estandard,course.cno,cname,ctime,ccredit from experiment,course where experiment.cno=course.cno;
(详见图13)
图13 s_e视图
Create view t_casselect course.cno,cname,ctime,ccredit,m_tno,s_tnofrom t_course,course where course.cno=(m_tno or s_tno);
(详见图14)
图14 t_c视图
Create view s_c_easSelect student.sno,sname,sage,ssex,sclass,course.cno,cname,eno from student,course,t_course,experiment,sc where student.sclass=t_course.class and sc.cno=course.cno and course.cno=experiment.cno and sc.sno=student.sno;
(详见图15)
图15 s_c_e视图
6.系统调试和测试
6.1系统调试
1.已知系统的功能设计规格,进行测试证明每个实现了的功能是否符合要求;
2.已知系统的内部工作过程,通过测试证明每种内部操作是否符合设计规格要求,所有内部
成分是否通过检验。
(1)查看各个基本表中的数据(借助与视图查询)以及相应的功能查询(详见图16~24):
图16 数据库建表
图17 学生信息
图18 课程信息
图19 教师信息
图20 学生-课程信息
图21 教务处主任信息
图22 实验信息
图23 实验完成信息
图24 教师-课程信息
(2)设计SQL类连接MySQL对数据库的信息进行处理(详见图25~26)
# 1 导包import pymysql# 2 建立数据库连接# 注意:此处user、password均为自己数据库的用户名和密码,database为数据库项目名称conn = pymysql.connect(host='localhost', user='root', password='wyl011025', database='experiment_report_system', port=3306, autocommit=False)# 3 获取游标cursor = conn.cursor()# 4 执行# 查看数据库的版本cursor.execute("select version();")# 注意,使用游标执行sql语句之后,不会返回我们的执行结果,要返回执行结果,必须通过cursor.fetchone()或cursor.fetchall()的方式来获取print("数据库版本号:", cursor.fetchone())# 5 关闭游标cursor.close()# 6 关闭连接conn.close()
图25 Python连接数据库
图26 连接成功
'''插入多条数据'''import pymysql#打开数据库连接,不指定数据库conn=pymysql.connect(host='localhost', user='root', password='wyl011025', database='experiment_report_system', port=3306)#conn.select_db('pythondb')#获取游标cur=conn.cursor()#另一种插入数据的方式,通过字符串传入值sql="insert into student values(%s,%s,%s,%s,%s)"insert=cur.executemany(sql,[(1007,'1号',20,'女','智能一班'),(1008,'2号',21,'男','智能二班'),(1009,'3号',22,'女','智能三班')])print ('批量插入返回受影响的行数:',insert)cur.close()conn.commit()conn.close()print('sql执行成功')
图27 对数据库进行添加
'''删除多条数据'''import pymysql#打开数据库连接conn=pymysql.connect(host='localhost', user='root', password='wyl011025', database='experiment_report_system', port=3306)#获取游标cur=conn.cursor()#删除前查询所有数据cur.execute("select * from sc;")print('删除前的数据为:')for res in cur.fetchall():print (res)print ('*'*40)#删除2条数据sql="delete from sc where cno=%s"cur.executemany(sql,[(4),(5)])#删除后查询所有数据cur.execute("select * from sc;")print('删除后的数据为:')for res in cur.fetchall():print (res)cur.close()conn.commit()conn.close()print('sql执行成功')
图28 对数据库进行删除
'''更新多条数据'''import pymysql#打开数据库连接conn=pymysql.connect(host='localhost', user='root', password='wyl011025', database='experiment_report_system', port=3306)#获取游标cur=conn.cursor()#更新前查询所有数据cur.execute("select * from teacher where tname in ('张松','王静');")print('更新前的数据为:')for res in cur.fetchall():print (res)print ('*'*40)#更新2条数据sql="update teacher set tage=%s where tname=%s"update=cur.executemany(sql,[(40,'张松'),(55,'王静')])#更新2条数据后查询所有数据cur.execute("select * from teacher where tname in ('张松','王静');")print('更新后的数据为:')for res in cur.fetchall():print (res)cur.close()conn.commit()conn.close()print('sql执行成功')
图29 对数据库进行修改
#查询表# 1 导包import pymysql# 2 建立连接conn = pymysql.connect(host='localhost', user='root', password='wyl011025', database='experiment_report_system', port=3306)# 3 获取游标cursor = conn.cursor()# 4 执行# 查询表数据select_sql = "select tno, tname, tage,tsex from teacher;"cursor.execute(select_sql)print("查询结果的总记录数为:", cursor.rowcount)# 查询结果的第一条数据#print("查询结果的第一条数据为: {}".format(cursor.fetchone()))# 获取全部的查询结果# 注意:如果之前使用过fetchone或者fetchall,那么后续再使用fetchall时,会从上一个的指针位置读取数据print("全部查询结果为:", cursor.fetchall())# 要获取全部的查询结果,需要重新再执行查询语句#cursor.execute(select_sql)# 5 关闭游标cursor.close()# 6 关闭连接conn.close()
图30 对数据库进行查看
6.2系统测试(复杂查询)
(1)查询学生及选课和实验信息(详见图31)
select student.sno,sname,sage,ssex,sclass,sc.cno,eno from student,sc,experiment where student.sno='%s'and sc.cno=experiment.cno and sc.sno=student.sno;
图31
(2)查询教师及课程实验信息(详见图32)
select teacher.tno,tname,tage,tsex,t_course.cno,eno from teacher,t_course,experiment where teacher.tno='%s'and (teacher.tno=t_course.m_tno or teacher.tno=s_tno) and t_course.cno=experiment.cno;
图32
(3)查询课程及实验信息(详见图33)
Select course.cno,cname,ctime,ccredit,m_tno,s_tno,class,eno,enamefrom course ,t_course,experiment where course.cno='%s'and t_course.cno=course.cno and course.cno=experiment.cno;
图33
7.心得与体会
本次课程设计来说,我选的是实验报告管理系统课程设计,难度中,上等,最重要的是需求分析,难度是各个表的之间链接与分析,其次是表的属性,每一个表的属性关系到各个表之间的联系,所以要考虑到很多因素,就拿实验来说,实验要和老师和学生的实验区分开来,教师的实验在于上传实验的题目,而学生的实验内容是上传实验的题目答案。通过实验系统这个平台,老师能够看到学生上传的实验内容,学生只能看到实验的题目,另外教师的权限不同,教师分为授课教师和主讲教师,主讲教师的权限是增添实验内容,主讲教师是评改这个实验,分值也是由主讲教师来设定,这个地方一定要分析好。
通过这次课程设计,我们学到了很多,比如说分析整个表,要把他们联系到一块,所以说考虑一定要周到。课程设计一定要耐下心来,具体分析,不能够一口吃成个胖子。我们选题过后通过书上的例子来一步一步分析,另外自己写的手稿,总之努力没有白费,学到了很多的东西。以后会更加的努力来完成课程设计。
参考文献
王珊 萨师煊,《数据库系统概论(第5版)》,北京:高等教育出版社,2014.9
袁国忠,《Python编程:从入门到实践》,人民邮电出版社,2016.7
《数据库系统概念》,机械工业出版社,2019.12