mysql数据库综合实验设计某高校学生选课管理系统个人文章

因为要求对于教师和课程等等的对应关系没有说明,所以可以自由发挥,我能找到教师和课程之间是一对一关系的实现,但是因为我想要实现教师课程多对多的数据库,所以就自己发挥了。

当时做实验的时候,对数据的描述如下:

一名学生可以选修多门课程,一门课程可被多个学生选修,每门课程对应一个老师,每门课程有一个成绩,且选修课程名不能重复;一名教师可以任教多门课程,一门课程可由多个老师教授,每个老师所任教的每门课程有一个课程评价;一个老师可教多名学生。

E-R图如下:

用Excel做的表格如下:

这个实现的问题就在于每个学生选的课程,是需要教师号和课程号一起才能共同确定的,这种情况实验要求就会很麻烦(而且E-R图上是三角多对多感觉很难受)改进思路就是将多一个临时班级实体,一个临时班级对应一个教师和一个课程,这样就可以将学生对老师和学生对课程这两个多对多关系化简成临时班级对老师,临时班级对课程这两个一对多的关系。

接下来,正文开始。

有要求,可转化成如下数据间关系:

一名学生可以选修多门课程,一门课程可被多个学生选修,学生选修课程的实质是选临时班级。每个临时班级对应一门课程和一个老师,每门课程有一个成绩,且选修课程名不能重复;一名教师可以任教多门课程,一门课程可由多个老师教授。E-R图如下:

这里临时班级多了一个人数的属性主要是为了接下来统计人数方便。

这里可以先按照E-R图在excel上把表建出来,输一些用于插入数据时做参考和验证。

需要建立的东西如下(加粗为主码):

学生(学号,姓名,性别,生日,专业)

教师(职工号,姓名,性别)

课程(课程号,课程名,学分,开课学期)

临时班级(班级号,课程号,教师号,人数)

选课(学号,班级号,成绩)

未选修06-07(班级号,课程名,教师名)

学生不能选择课程号相同的课程。

查看指定学期的学生学分

各教师任课的学生人数

下面是实现过程:

建立选课模式

CREATESCHEMAselect_courses;建立实体表

--studenttableCREATETABLEstudents(stu_idINTPRIMARYKEY,nameVARCHAR(40),birth_dayDATE,sexVARCHAR(1),majorVARCHAR(40));--teachertableCREATETABLEteathers(tea_idINTPRIMARYKEY,nameVARCHAR(40),sexVARCHAR(1));--coursestableCREATETABLEcourses(course_idINTPRIMARYKEY,course_nameVARCHAR(40),creditINT,open_timeVARCHAR(20));--tempclasstableCREATETABLEclasses(class_idINTPRIMARYKEY,course_idINT,tea_idINT,numberINTDEFAULT0,FOREIGNKEY(course_id)REFERENCEScourses(course_id)ONDELETECASCADE,FOREIGNKEY(tea_id)REFERENCESteathers(tea_id)ONDELETECASCADE);建立多对多关系表

CREATETABLEselect_courses(stu_idINT,class_idINT,gradeINT,PRIMARYKEY(stu_id,class_id),FOREIGNKEY(stu_id)REFERENCESstudents(stu_id)ONDELETECASCADE,FOREIGNKEY(class_id)REFERENCESclasses(class_id)ONDELETECASCADE);插入除select_courses表以外的数据。这里要注意,在向classes表插入数据时,不要插入人数的数据。人数将会通过触发器,每当有人选课时(即向select_courses插入数据时),对应班级人数加一,删除同理。

CREATETRIGGERclass_number_insertAFTERINSERTONselect_coursesFOREACHROWBEGINIFNEW.class_idIN(SELECTclass_idFROMclasses)THENUPDATEclassesSETnumber=number+1WHEREclass_id=NEW.class_id;ENDIF;END;CREATETRIGGERclass_number_deleteAFTERDELETEONselect_coursesFOREACHROWBEGINIFOLD.class_idIN(SELECTclass_idFROMclasses)THENUPDATEclassesSETnumber=number-1WHEREclass_id=OLD.class_id;ENDIF;END;向select_courses表插入数据

INSERTINTOselect_coursesVALUES(101,6001,90);INSERTINTOselect_coursesVALUES(101,6003,87);INSERTINTOselect_coursesVALUES(101,6008,80);INSERTINTOselect_coursesVALUES(102,6001,75);INSERTINTOselect_coursesVALUES(102,6002,60);INSERTINTOselect_coursesVALUES(103,6001,93);INSERTINTOselect_coursesVALUES(103,6010,85);INSERTINTOselect_coursesVALUES(103,6008,70);INSERTINTOselect_coursesVALUES(104,6004,87);INSERTINTOselect_coursesVALUES(104,6007,85);INSERTINTOselect_coursesVALUES(104,6010,80);INSERTINTOselect_coursesVALUES(105,6006,90);建立触发器,实现学生不能选择课程号相同的课程。若选择学生选择已选的课程,会抛出coursewasselected的异常。

CREATETRIGGERnon_repetitionBEFOREINSERTONselect_coursesFOREACHROWBEGINIF(SELECTcourse_idFROMclassesWHERENEW.class_id=class_id)IN(SELECTclasses.course_idFROMselect_coursesJOINclassesONclasses.class_id=select_courses.class_idWHEREstu_id=NEW.stu_id)THENSIGNALSQLSTATE'HX000'SETMESSAGE_TEXT='coursewasselected';ENDIF;END;可以尝试插入一个错误数据,看看结果是否正确。6002班级的课程为3001,而101学生已选的6001班级也是教3001课程的,所以理论上这个数据不应该被插入。

INSERTINTOselect_coursesVALUES(101,6002,90);创建视图,查询2006-2007学年没有被选修的课程这里“未选修”对应到表上就是,课程人数为0。2006-2007学年即2006-2007-1和2006-2007-2两个学期。

CREATEVIEWnot_selected_2006_2007ASSELECTclass_id,course_name,nameFROMclassesJOINcoursesconclasses.course_id=c.course_idJOINteatherstonclasses.tea_id=t.tea_idWHEREnumber=0ANDopen_timein('2006-2007-1','2006-2007-2');创建存储过程,查看指定学期的学生学分

CREATEPROCEDUREget_total_credit(INtermVARCHAR(20))BEGINSELECTstudents.stu_id,students.name,SUM(courses.credit)FROMselect_coursesJOINclassesONclasses.class_id=select_courses.class_idJOINstudentsONselect_courses.stu_id=students.stu_idJOINcoursesONclasses.course_id=courses.course_idWHEREcourses.open_time=termGROUPBYstudents.stu_id,name;END;创建存储过程,各教师任课的学生人数

CREATEPROCEDUREnum_of_students()BEGINSELECTt.name,c.course_name,SUM(number)num_of_stuFROMclassesJOINcoursesconclasses.course_id=c.course_idJOINteatherstonclasses.tea_id=t.tea_idGROUPBYc.course_id,t.tea_id;END;这里会发现,结果和classes表一样,只有当你允许一个老师开好几个班上同一门课时(即班级号不同但教师号和课程号不同),才会不同。

至此,数据库建立完毕。

这里的设计和原来相比,取巧的地方在于,多加了一个临时班级实体,不仅将学生对课程、学生对老师、老师对课程的三角多对多关系,转化成课程对班级、老师对班级的一对多关系和学生对班级的多对多关系;而且临时班级实体中加入的班级人数属性,可以被查询没有被选修的课程、统计教师任课的学生人数的实现加以利用,代码更简洁。

THE END
1.基于UML建模的盐系统设计与实现AET摘要: 利用面向对象的建模语言UML对选课系统的各个环节进行分析、设计,通过.NET Framework平台之上的ASP.NET、SQL Server等技术实现了网上选课系统的研发工作。 关键词: UML;选课系统;ASP.NET;SQL server 1 基于UML的选课系统的需求建模 1.1 选课系统的用例分析及用例模型[1] (1)学生用例需求 学生用例需求如图1...http://www.chinaaet.com/article/151293
2.学生盐管理信息系统课程设计—昆明理工大学本次设计基于浏览器/服务器结构的网上选课系统的基本设计思想,简单的介绍了系统的歌功能模块及数据库的设计,设计出登陆、选课、排课等一系列的功能。本系统可以实现学生选课的重要功能,登陆系统主要验证用户和用户识别,然后按照相应的权限,实现系统的合理性和功能性的优异性,是本系统的一大亮点和特点。 学生选课管理...https://www.360docs.net/doc/4a11418992.html
3.php实现学生盐系统基于php的学生选课信息系统的设计与实现【附源码】 随着人类向信息社会的不断迈进,风起云涌的信息时代正掀起一次新的革命,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的学生选课系统来管理选课信息,会使管理工作系统化、规范化,提高管理效率。 本课题的研究对象是学生选课系统,该...https://www.iteye.com/resource/qq_38917161-10431075
1.基于springboot的学生盐系统的设计与实现题目:学生选课系统的设计与实现 摘要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对学生选课信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用学生选课系统可以有效管理,使信息管理...https://blog.csdn.net/hudafa0722/article/details/143636943
2.基于UML的学生盐系统的设计与实现摘要:UML是一种可视化的面向对象的建模语言,它可以精确地描述系统,并对系统需求进行建模.本文以高校学生选课系统为实例,结合软件工程和面向对象技术,分析了高校学生选课的过程,并详细地介绍了该系统设计过程. 关键词: UML建模语言面向对象 分类号: TP311(计算技术、计算机技术) 在线出版日期: 2009-11-06 (万方平台...https://d.wanfangdata.com.cn/periodical/lcsyxb-zrkxb200902028
3.学生盐及学分成绩管理系统设计与实现学生选课及学分成绩管理系统设计与实现,J2EE, MVC, Struts, Hibernate, 学生选课及学分成绩管理系统是教务管理系统的一部分,该系统的开发,对提升学校管理水平和学生培养层次具有深远的意义。一直以来,...https://wap.cnki.net/lunwen-2010101523.html
4.盐系统的设计与实现11篇(全文)选课系统的设计与实现(精选11篇) 选课系统的设计与实现 第1篇 近年来, 随着当前高等院校办学规模的不断扩大, 直接伴随而来的是高校教师和学生的数目不断增加, 传统的手工选课处理方式已不能适应新形势下的教学管理模式, 越来越多的高校都在积极探索研究适应新的教学管理模式的网上选课系统。在目前这种大环境下, ...https://www.99xueshu.com/w/ikeycogko2mb.html
5.Java实现学生盐管理系统java本文实例为大家分享了Java实现学生选课管理系统的具体代码,供大家参考,具体内容如下 需求分析 本数据库的用户主要是学生,通过对用户需求的收集和分析,获得用户对数据库的如下要求。 1.信息需求 1.学生信息:学号,姓名,性别,专业 2.登陆信息:账号,密码 3.课程信息:课程号,课程名,选课人数,选课容量,任课老师 ...https://m.jb51.net/article/256729.htm
6.盐系统分析(通用8篇)四、系统模块分析与用户界面设计 (一)系统模 (二)系统模块说明 根据用户需求分析和数据字典设计,把系统模块划分为:三大模块和三个子模块。它们分别是登录验证模块、管理员模块、学生选课模块三大模块以及管理员模块下的选修课程管理子模块、用户管理子模块和数据导出、导入子模块。 https://www.360wenmi.com/f/fileoz67w9i5.html
7.SpringBoot+Vue学生管理系统源码(包含数据库文件)【课程设计】基于Springboot+vue的课程管理系统的设计与实现 数据库验证码后端设计系统 随着高校规模逐渐扩大,学生数量增多,人为课程管理任务繁重,工作繁多。课程管理系统成为学生以及老师和学校必备的系统,主要完成教师发布课程、上传成绩,学生选课、查看成绩以及生成课表的全过程。 因高校人数过多,手动操作各项数据和管理极...https://cloud.tencent.com/developer/article/2071193
8.网络工程专业人才培养方案(2022)本专业面向国家战略性新兴信息与数字产业对网络工程技术人才的需求,培养具有较高思想品德、人文科学素养、创新创业精神、职业道德和社会责任感,掌握扎实的网络工程专业及其相关领域的基础理论知识、方法和技能,具有较强的适应能力、工程实践能力与创新意识,能够在信息与数字经济产业以及其他相关领域从事应用系统设计、开发、分...https://www.csust.edu.cn/jtxy/info/1148/20900.htm
9.2022届电计系计算机科学与技术专业优秀毕业设计作品5.3 系统运行效果 6、学生选课系统的设计与实现 (1)作品简要介绍 学生选课系统是一个基于B/S模式,采用C#、WEB、CSS等前端技术,以ASP.NET为开发框架减少系统资源消耗,结合后台采用MYSQL数据库用来储存相关的数据,对课程录入和学生选课等过程进行了网上实现。对相关过程进行需求与用例分析后将系统分为了管理员、学生、...https://zsb.cdutetc.cn/c/330de0ae-f768-45b8-ad74-3421949e04bd.html
10.代码货栈基于JSP和Mysql的停车管理系统的设计与实现 立即获取 查看详情 JSP项目 源码+数据库 基于JSP和MySQL的汽车销售管理系统 立即获取 查看详情 JSP项目 源码+数据库 基于Jsp和MySQL实现的学生选课系统 立即获取 查看详情 JSP项目 源码+数据库 基于JSP和MySQL...https://cs-work.com/