学生学籍管理系统(SQL数据库系统设计)概要.doc
精选优质文档-倾情为你奉上数据库课程设计报告<学生学籍管理系统>专业班级小组成员指导老师开始时间完成时间目录课题名称:学生学籍管理系统1. 问题描述1.1 背景随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。任何一个单位需要高效率地把内部活动有机地组织起来并迅速发展,就必须建立与自身特点相适应的管理系统。对于我们学校而言,毫无疑问,在实现学校信息化的过程中,实现学生学籍管理的信息化就显得尤为重要。学生学籍管理系统主要用于学校学生学籍的管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生学籍进行日常管理,如查询、修改、增加、删除,另外还考虑到学生选课,针对这些要求来设计学生学籍管理系统。 在本次实验中,我们需要学习并掌握数据库设计的流程和基本方法。在这基础上完成对学生学籍系统数据库的设计和相应文档的编写工作,从而更加深入地掌握数据库系统分析与设计的基本概念和基本方法,提高从事数据库系统建设和管理工作的基本技能和能力。1.2 需求分析根据用户的需求,学生学籍管理系统将满足一下需求:A)学生个人基本信息1) 实现学生基本情况的录入、修改、删除等基本操作。2) 对学生基本信息提供灵活的查询方式。3)B)选课功能1) 完成一个班级的学期选课功能。2)C)成绩管理1) 实现学生成绩的录入、修改、删除等基本操作。2) 能方便的对学生的个学期成绩进行查询。3) 具有成绩统计、排名等功能。4)2. 数据字典2.1 建表清单表名中文对照A管理员表S学生信息表C课程表B班级表P专业表D院系表CS选课表T老师表J授课表2.2 管理员表(A)管理员表(A)是否主键字段名字段描述数据类型长度可空约束缺省值备注是A_ID管理员编号CHAR(4)4A_USER用户名VARCHAR(10)10A_PW用户密码VARCHAR(20)20A_PERM用户权限INT不同用户拥有不同权限2.3 学生信息表(S)学生信息表(S)是否主键字段名字段描述数据类型长度可空约束缺省值备注是S_NO学号CHAR(10)10S_NAME姓名VARCHAR(10)10是S_SEX性别CHAR(2)2是男 女S_BIRT出生日期VARCHAR(10)10是S_NAFA民族VARCHAR(8)8是汉S_BIPL籍贯VARCHAR(10)10是S_ADDR地址VARCHAR(50)50是S_POST邮编CHAR(6)6是S_TEL电话VARCHAR(20)20是S_ID身份证号CHAR(18)18是S_POLA政治面貌VARCHAR(10)10是其他群众共青团中共党员S_YEAR入学年份VARCHAR(10)10是S_DEPA院系CHAR(4)是S_PROF专业CHAR4)是S_CLAS班级CHAR(4)是S_NOTE备注VARCHAR(1000)1000是2.4 课程表(C)课程表(C)是否主键字段名字段描述数据类型长度可空约束缺省值备注是C_ID课程编号CHAR(4)4C_NAME课程名VARCHAR(20)20是C_PRNO先行课CHAR(4)4是C_CREDIT学分INTC_NOTE课程简介VARCHAR(200)200是2.5 班级表(B)班级表(B)是否主键字段名字段描述数据类型长度可空约束缺省值备注是B_ID班级编号CHAR(4)4B_NAME班级名VARCHAR(40)40是B_NUM班级人数SMALLINT是B_MASTER班主任名VARCHAR(4)是P_ID专业编号CHAR(4)2.6 专业表(P)专业表(P)是否主键字段名字段描述数据类型长度可空约束缺省值备注是P_ID专业编号CHAR(4)4P_NAME专业名VARCHAR(40)40是P_NUM专业人数INT是D_ID学院编号CHAR(4)42.7 院系表(D)院系表(D)是否主键字段名字段描述数据类型长度可空约束缺省值备注是D_ID学院编号CHAR(4)4D_NAME学院名VARCHAR(40)40是D_NUM学院人数INT是D_MASTER院长名VARCHAR(4)4是2.8 选课表(CS)选课表(CS)是否主键字段名字段描述数据类型长度可空约束缺省值备注是T_ID学院编号CHAR(4)20是C_ID课程编号CHAR(4)4CS_RESULT成绩FLOAT是2.9 教师表(T)教师表(T)是否主键字段名字段描述数据类型长度可空约束缺省值备注是T_ID教师编号CHAR(4)4T_NAME教师名VARCHAR(4)4是T_COR所授课程VARCHAR(20)20是T_TEL手机号码CHAR(11)11是2.10 授课表(J)授课表(J)是否主键字段名字段描述数据类型长度可空约束缺省值备注是T_ ID教师编号CHAR(4)4是C_ID课程编号CHAR(4)4J_TIME授课时间VARCHAR(20)是3. 概念结构设计3.1 功能图3.2 数据流图 数据流图是用图形的方式完成系统中信息的传递,先构建系统抽象模型,既顶层数据流图为图(1):学生选课/退选学生 选课、成绩表 系管理员系管理员学籍管理系统 学生、课程、班级及专业信息表,留级、休学处理表录如/更新学生、系、专业、课程及成绩信息 图(2):学籍管理系统信息流图班级描述信息由上图知,学生进入系统只完成选课及退选。而系管理员进入系统后录入/更新的信息抱括:专业、班级、学生。对学生选课进一步分解可得图(2):学生描述信息专业信息班级信息学生信息专业描述信息选课申请选课不成功已选课程选课成功选课信息记录课程信息课程描述信息通过申请验证不通过选课处理图(3):学生选课分解子图学生身份验证图中的专业、学生、班级信息以及学生选的课程都又系管理员录入。学生通过身份验证后进入系统,选择自己的必修和选修课,并能对已选课进行撤消。学生选完课提交后,将结果保存。 3.3 E-R图4. 逻辑结构设计4.1 逻辑结构设计步骤(1)将概念结构转换为一般关系、网状、层次模型。(2)将转换来的关系、网状、层次模型向特定DBMS支持下的数据模型转换。(3)对数据模型进行优化。 4.2 E-R图的转换管理员表学生表班级表专业表学院表课程表选课表教师表授课表5. 物理结构设计5.1 物理关系模型6. 程序实现6.2 程序代码建立数据库:CREATE DATABASE STUDENTON (NAME=STUDENT_Data, FILENAME='C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDataSTUDENT.mdf', SIZE=10MB, MAXSIZE=50MB, FILEGROWTH=10%)LOG ON( NAME='lbr_Log', FILENAME= 'C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDataSTUDENT_Log.ldf', SIZE=2MB, MAXSIZE=5MB, FILEGROWTH=1MB)GOUSE STUDENT建表:create table A -管理员表( A_ID CHAR(4) , A_USER varchar(10) not null, A_PW varchar(20) not null, A_PERM int not null, constraint pk_A primary key (A_ID)go create table D -院系表( D_ID CHAR(4) not null, D_NAME varchar(40) , D_NUM int, D_MASTER varchar(4), constraint pk_D primary key (D_ID),)gocreate table P -专业表( P_ID CHAR(4) not null, P_NAME varchar(40), P_NUM int, D_ID CHAR(4) not null, constraint pk_P primary key (P_ID), constraint fk_P_D foreign key (D_ID) references D(D_ID) on delete cascade on update cascade,)gocreate table B -班级表( B_ID CHAR(4) not null, B_NAME varchar(40), B_MASTER varchar(4), B_NUM smallint, P_ID CHAR(4) not null,-专业编号 constraint pk_B primary key (B_ID), constraint fk_B_P foreign key (P_ID) references P(P_ID) on delete cascade on update cascade, )gocreate table S -学生表( S_NO char(10) not null, S_NAME varchar(10), S_SEX char(2) check(S_SEX in('男','女'), S_BIRT varchar(10), S_NAFA varchar(8), S_BIPL varchar(10) , S_ADDR varchar(50), S_POST char(6), -邮政编码 S_TEL varchar(20), S_ID char(18),-返回不带前导空格(LTrim)、后续空格(RTrim) 或前导与后续空格(Trim) 的字符串副本。 S_POLA varchar(10) check( rtrim(S_POLA) in ('其他', '群众','共青团','中共党员'), S_YEAR varchar(10),-入学时间 S_DEPA CHAR(4), -院系 S_PROF CHAR(4), -专业 S_CLAS CHAR(4), -班级 S_NOTE varchar(1000), constraint pk_S primary key(S_NO), constraint fk_S_CLAS foreign key (S_CLAS) references B (B_ID) on delete cascade on update cascade,) gocreate table C -课程表( C_ID CHAR(4) not null, C_NAME varchar(20), C_PRNO CHAR(4) , C_CREDIT int not null, C_NOTE varchar(200), constraint pk_C primary key (C_ID), constraint fk_C foreign key (C_PRNO) references C(C_ID)gocreate table CS -选课表( S_No char(10) not null, C_ID CHAR(4) not null, CS_RESULT FLOAT, constraint pk_C_S primary key(S_No,C_ID), constraint fk_C_S_S foreign key(S_No) references S(S_No), constraint fk_C_S_C foreign key(C_ID) references C(C_ID)gocreate table T -教师表( T_ID CHAR(4) not null, T_NAME varchar(4), T_COR varchar(20) , T_TEL char(11), constraint pk_T primary key (T_ID)gocreate table J -授课表表( T_ID char(4) not null, C_ID CHAR(4) not null, J_TIME varchar(20), constraint pk_T_C primary key(C_ID,T_ID), constraint fkJ_C foreign key(C_ID) references C(C_ID), constraint fkJ_T foreign key(T_ID) references T(T_ID)go插入数据:insert A(A_ID,A_PERM,A_PW,A_USER)values ('0001','1','password1','张六')goinsert A(A_ID,A_PERM,A_PW,A_USER)values ('0002','2','password2','张齐')goinsert D (D_ID,D_Name,D_NUM,D_MASTER)values ('0001','信息技术学院',5000,'张五')goinsert P (P_ID,D_ID,P_NAME,P_NUM)values ('0001','0001','数字媒体技术',120)goinsert P (P_ID,D_ID,P_NAME,P_NUM)values ('0002','0001','软件工程',120)goinsert B (B_ID,P_ID,B_NAME,B_NUM,B_MASTER)values ('0001','0001','1班',120,'李丽')goinsert B (B_ID,P_ID,B_NAME,B_NUM,B_MASTER)values ('0002','0002','1班',120,'王宏')goinsert Svalues('','苏希','女','1989-7-10','汉族','广东省','北京师范大学珠海分校','','158*','','中共党员','2007-9-1','0001','0001','0001','无')goinsert Svalues('','张妮','女','1990-8-10','汉族','贵州省','北京师范大学珠海分校','','158*','','中共党员','2007-9-1','0001','0001','0001','无')goinsert Svalues('','王帅','男','1989-7-10','汉族','广东省','北京师范大学珠海分校','','158*','','中共党员','2007-9-1','0001','0002','0002','无')goinsert Svalues('','李思','男','1989-7-10','汉族','广东省','北京师范大学珠海分校','','158*','','中共党员','2007-9-1','0001','0002','0002','无')goinsert Svalues('','邵明','男','1989-7-10','汉族','广东省','北京师范大学珠海分校','','158*','','中共党员','2007-9-1','0001','0001','0001','无')goinsert C(C_ID,C_NAME,C_CREDIT,C_NOTE)values('0001','数据库原理','3','无')goinsert C(C_ID,C_NAME,C_CREDIT,C_PRNO,C_NOTE)values('0002','VB','3','0001','无')goinsert C(C_ID,C_NAME,C_CREDIT,C_PRNO,C_NOTE)values('0003','C+','3','0001','无')goinsert C(C_ID,C_NAME,C_CREDIT,C_NOTE)values('0001','数据库原理','3','无')goinsert T(T_ID,T_NAME,T_TEL,T_COR)values('0001','周鹏','136*','数据库原理')goinsert T(T_ID,T_NAME,T_TEL,T_COR)values('0002','黄静','136*','VB')goinsert T(T_ID,T_NAME,T_TEL,T_COR)values('0003','何辉','136*','C+')goinsert J(T_ID,C_ID,J_TIME)values('0001','0001','周三节')goinsert J(T_ID,C_ID,J_TIME)values('0002','0002','周一节')goinsert J(T_ID,C_ID,J_TIME)values('0003','0003','周二节')goinsert CS(S_No,C_ID,CS_RESULT)values('','0001','90')goinsert CS(S_No,C_ID,CS_RESULT)values('','0002','80')goinsert CS(S_No,C_ID,CS_RESULT)values('','0003','88')goinsert CS(S_No,C_ID,CS_RESULT)values('','0001','78')goinsert CS(S_No,C_ID,CS_RESULT)values('','0002','78')goinsert CS(S_No,C_ID,CS_RESULT)values('','0003','89')goinsert CS(S_No,C_ID,CS_RESULT)values('','0003','93')go功能实现代码:/*学生专业课程视图*/create view IS_S_Cour(S_NO,S_NAME,S_PROF,S_COURSE) asselect S.S_NO,S.S_Name,S.S_CLAS,C.C_NAMEfrom S,C,CSwhere S.S_NO=CS.S_No and C.C_ID=CS.C_IDgo/*/*学生成绩视图*/create view RESULT_S(S_NO,S_NAME,C_ID,C_NAME,CS_RESULT) asselect S.S_NO,S.S_Name,CS.C_ID,C.C_NAME,CS.CS_RESULTfrom S,C,CSwhere S.S_NO=CS.S_No and C.C_ID=CS.C_IDgo/*/*对学生基本信息提供灵活的查询方式。*/CREATE PROCEDURE student学号CHAR(10),姓名VARCHAR(10) OUTPUT,性别CHAR(2)OUTPUT,生日VARCHAR(10) OUTPUT AS SELECT 姓名=S_NAME,性别=S_SEX,生日=S_BIRTFROM SWHERE S_NO=学号DECLARE 姓名VARCHAR(10) ,性别CHAR(2),生日VARCHAR(10) EXEC student ,姓名OUTPUT,性别OUTPUT,生日OUTPUTSELECT 姓名,性别,生日/*/*对学生的成绩进行查询。*/CREATE PROCEDURE RESULT(S_NAME,C_NAME,CS_RESULT)学号CHAR(10),姓名VARCHAR(10) OUTPUT,课程名CHAR(20)OUTPUT,成绩FLOAT OUTPUT AS SELECT 姓名=S_NAME,课程名=C_NAME,成绩=CS_RESULTFROM S,C,CSWHERE S.S_NO=学号DECLARE 姓名VARCHAR(10) ,课程名CHAR(20),成绩FLOATEXEC RESULT ,姓名OUTPUT,课程名OUTPUT,成绩OUTPUTSELECT 姓名,课程名,成绩/*/*二班选课情况*/create view SELECTC(S_CLAS,S_NO,S_NAME,C_NAME) asselect S.S_CLAS,S.S_NO,S.S_Name,C.C_NAMEfrom S,C,CSwhere S.S_NO=CS.S_No and C.C_ID=CS.C_ID AND S.S_CLAS = '0002'go/*/*C+课的成绩平均分*/create view AVGRESULT(C_NAME,ARGRESULT) asselect C_NAME,AVG(CS_RESULT)from CS,Cwhere C.C_ID=CS.C_ID AND C.C_ID = '0003'GROUP BY C_NAMEgo/*/*C+课的成绩平均分排序*/select S.S_NO,S_NAME,C_NAME,CS_RESULTfrom CS,C,Swhere S.S_NO=CS.S_No and C.C_ID=CS.C_ID AND C.C_ID = '0003'ORDER BY CS_RESULT DESC;go/*/*更新学号为的电话*/UPDATE SSET S_TEL = '136*'WHERE S_NO = ''GO/*/*删除学号为的记录*/DELETE FROM SWHERE S_NO = ''/*/*学生表民族默认值为汉族*/ALTER TABLE S ADD CONSTRAINT MINZUDEFAULT '汉族' FOR S_NAFA/*/6.2 功能的实现结果完成各种功能的截图:学生专业课程视图学生成绩视图对学生的成绩进行查询(存储过程)二班选课情况(视图)C+课的成绩平均分(视图)C+课的成绩平均分排序对学生基本信息提供灵活的查询方式(存储过程)7. 结 论 通过以上的设计方案基本上可以得出一个简单的学籍管理系统的数据库,其中包含了学生基本信息、课程信息、学生选课情况、教师信息、教师授课情况、班级、院系等。而且能够对其中的各项信息进行比较灵活的查询。尽管建立的表不多,设计得也不算复杂,但是我们在实验中涉及到了诸多数据库的知识,除了基本的建表、更新和查询操作外,还有视图、存储过程等等。尽管设计到的知识点并不多,比如存储过程的操作,我们小组研究了很久才能勉强完成功能,本想附加些触发器的内容,但是因为诸多原因,还是没有加上。总的说来,该系统数据库的设计虽然很简单,但也包含了学籍管理系统的部分要求,能够完成一定的数据管理功能。经过这段时间的学习、实践,我们获得了许多课堂外的知识,并深刻的体会到实践是检验真理的唯一标准,只有理论与实践相结合,才能更加掌握书本知识,同时学到了更多的知识。首先我们要感谢学校给我们安排了致辞数据库系统设计的机会,然后要感谢周鹏老师对我们热心的指导和帮助,是他教会了我们解决问题的方法,这样才使得我们能够顺利的完成本次课程设计。同时我们还要感谢许多同学给予的帮助,有了大家的帮助让我们有更多的信心。专心-专注-专业