《数据库学生宿舍管理系统课程设计.pdf》由会员分享,可在线阅读,更多相关《数据库学生宿舍管理系统课程设计.pdf(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学生宿舍管理系统课程设计摘要:学生宿舍管理系统是应对学生宿舍管理的现代化、网络化,逐步摆脱当前学生宿舍管理的人工管理方式,提高学生宿舍管理效率而开发的,它包括宿舍学生基本信息管理、楼道工人基本信息管理、宿舍楼基本信息管理、宿舍基本信息管理、宿舍事故基本信息管理、宿舍楼物品出入基本信息管理、宿舍楼保卫处基本信息管理、宿舍配备物品及处理管理等八大功能模块,并提供了对各功能模块的查询和更新功能,且这两种功能基本上是通过存储过程来实现的,其中宿舍学生基本信息管理、宿舍基本信息管理是系统开发的重点。该系统开发由系统需求分析、概念设计、逻辑设计、数据库实施、系统调试和测试阶段组成。目录1、概述:.12、课
2、程设计的需求分析.12.1、设计任务:.12.1、设计要求:.23、概念结构设计.33.1、概念结构设计工具(E-R 模型).33.2、入住登记子系统(局部).33.2.1、子系统描述.33.2.2、分 E-R 图.43.2.3、说明.43.3、外出登记子系统.43.3.1、子系统描述.43.3.2、分 E-R 图.53.3.3、说明.53.4、调整宿舍子系统.53.4.1、子系统描述.53.4.2、分 E-R 图.63.4.3、说明.63.5、宿舍智能分配子系统.63.5.1、子系统描述.63.5.2、分 E-R 图.73.5.3、说明.73.6、信息查询子系统.73.6.1、子系统描述.7
3、3.6.2、分 E-R 图.73.6.3、说明.83.7、总体 E-R 图.84、逻辑结构设计.94.1、关系数据模式.94.1.1、学生信息(stu_info).94.1.2、宿舍信息(dorm_info).94.1.3、出入信息(inout_info).94.1.4、入住信息(stay_info).104.1.5、调整信息.104.2 视图的设计.104.2.1 宿舍信息表视图.105、数据库物理设计与实施.125.1、数据库应用的硬件、软件环境介绍.125.2、物理结构设计.125.3、索引的设计.125.4、建立数据库.135.4.1、创建宿舍信息表.135.4.2、创建学生信息表.1
4、45.4.3、创建出人登记信息表.145.4.4、创建入住信息登记表.155.4.5、创建宿舍调整登记表.165.5、加载测试数据.165.5.1、加载住宿信息.165.5.2、记载学生信息.175.5.3、加载宿舍信息.196、数据操作与实现.206.1、数据查询操作.216.2、数据更新操作.226.3、数据维护操作.246.3.1 同步更新触发器.246.3.2、按学院分配宿舍存储过程.267、收获、体会和建议.288、主要参考文献。.29备注.30.30任务分配.30.301 1、概述、概述:旧的手工纪录的宿舍管理方式已经不能适应高速发展的信息化时代,新的宿舍管理系统开发出来之后,学校
5、的现有的宿舍信息管理将有很大的改观,由过去的人工方式转变为计算机方式,由效率低、数据冗余、易产生错误转变为检索迅速、查找方便、可靠性高、存储量大。这些优点能够极大地提高效率,也是学校科学化、正规化管理的重要条件。学生宿舍管理系统采用的是计算机化管理,系统做的尽量人性化,使用者会感到操作非常方便,管理人员需要做的就是将数据输入到系统的数据库中去。由于数据库的存储容量相当大,而且比较稳定,适合较长时间的保存,也不容易丢失。这无疑是为信息存储量比较大的学校提供了一个方便、快捷的操作方式。2 2、课程设计的需求分析、课程设计的需求分析2.12.1、设计任务、设计任务:学生宿舍是同学最为熟悉的领域,假定
6、学校有多栋宿舍楼,每栋楼有多层,每层有多个寝室,每个寝室可住多名学生,学生宿舍管理系统对学校的学生宿舍进行规范管理,其管理的对象如下:宿舍信息:编号、楼层、床位数、单价等。学生:学号、姓名、性别、年龄、所在院系、年级、电话等。1每个宿舍最多可以住 4 位同学,每个同学只能在一个宿舍,不同宿舍的费用标准可以不同。不同院系、年级的同学可以住同一间宿舍。2.12.1、设计要求、设计要求:系统要能够对宿舍、学生、住宿信息进行登记、调整,并能随时进行各种查询、统计等处理。包括:寝室分配:根据院系、年级分配寝室。学生管理:实现入住学生信息的登记、维护和查询功能。信息查询:按公寓楼号、学生姓名等查询住宿信息
7、。出入登记(可选):对学生进出公寓的情况进行登记、实现基本的出入监控功能23 3、概念结构设计、概念结构设计3.13.1、概念结构设计工具(、概念结构设计工具(E-RE-R 模型)模型)3.23.2、入住登记子系统(局部)、入住登记子系统(局部)3.2.13.2.1、子系统描述、子系统描述主要是学生入住的管理,包括学生入住的申请,查询是否存在该3学生,查询是否有空余的宿舍以及宿舍的分配3.2.23.2.2、分、分 E-RE-R 图图3.2.33.2.3、说明、说明可以通过这个系统来解决学生入住的申请和分配等各种问题3.33.3、外出登记子系统、外出登记子系统3.3.13.3.1、子系统描述子系
8、统描述主要是学生外出的管理问题,包括学生外出的申请,外出的审核,外出的等级等为题。43.3.23.3.2、分、分 E-RE-R 图图3.3.33.3.3、说明说明可以通过这个系统解决学生外出的登记的各种问题。3.43.4、调整宿舍子系统、调整宿舍子系统3.4.13.4.1、子系统描述子系统描述主要是学生宿舍的调整,宿舍表的更新问题。53.4.23.4.2、分分 E-RE-R 图图3.4.33.4.3、说明、说明可以通过这个系统解决学生宿舍的调整问题,包括宿舍的申请调整,调整原因的判断以及调整后宿舍表的更新问题。3.53.5、宿舍智能分配子系统、宿舍智能分配子系统3.5.13.5.1、子系统描述
9、、子系统描述主要是学生宿舍的分配问题。63.5.23.5.2、分、分 E-RE-R 图图3.5.33.5.3、说明、说明可以通过这个子系统来分配学生的宿舍,包括按学院分配以及按年级分配。3.63.6、信息查询子系统、信息查询子系统3.6.13.6.1、子系统描述、子系统描述主要是查询学生宿舍的问题。3.6.23.6.2、分、分 E-RE-R 图图73.6.33.6.3、说明、说明可以通过子系统来查询学生的宿舍包括按公寓查询以及按学生名字查询。3.73.7、总体、总体 E-RE-R 图图84 4、逻辑结构设计、逻辑结构设计4.14.1、关系数据模式、关系数据模式4.1.14.1.1、学生信息(、
10、学生信息(stu_infostu_info)字段Stu_numnamesexagefacclasscelphone描述学号姓名性别年龄所在学院所在班级电话数据类型Intvarcharvarcharintvarcharvarcharvarchardate数据长度124505016NULLNNNNNNNNPrimarykey约束YNNNNNNN男/女0-99Entry_date入学日期4.1.24.1.2、宿舍信息、宿舍信息(dorm_info)(dorm_info)字段dorm_numfloAvi_bad描述宿舍编号所在楼层可用床位数数据类型intintIntIntfloat数据长度NULLNN
11、NYNPrimarykey约束YNNNN0-20=4=4Bad_amount床位数unit_price单价4.1.34.1.3、出入信息(、出入信息(inout_infoinout_info)字段stu_numdorm_num描述学号所住宿舍数据类型intintDatetimeDatetimevarcharvarchar数据长度502NULLNNNNNNPrimarykey约束foreignkeyforeignkeyNNNN是/否left_time离开时间back_time回来时间reason离开原因over_time是否晚归94.1.44.1.4、入住信息、入住信息(stay_info)(s
12、tay_info)字段dorm_numstu_numHave_inin_date描述宿舍编号学号已住人数入住日期数据类型intintintdate数据长度NULLNNNNPrimarykey约束foreignkeyforeignkeyNN=44.1.54.1.5、调整信息调整信息字段stu_numsrcdstch_date描述学号原宿舍调后宿舍调整日期数据类型intintintdatevarchar数据长度50NULLNNNNNPrimarykey约束YNNNNch_reason调整原因4.24.2 视图的设计视图的设计4.2.14.2.1 宿舍信息表视图宿舍信息表视图创建查看宿舍信息表的视图
13、,其中应该包含宿舍的所有信息。并且应该按可用床位数递减create view view_dormASSELECT top 100dorm_num,flo,bad_amount,unit_price,avi_badFROM dorm_info order by avi_bad desc创建按宿舍号查看住宿信息的视图,其中应包含住宿登记时的所有信10息,并且按照宿舍号递减排列create view view_stay_bydormASSELECT top 100 dorm_num,stu_num,have_in,in_dateFROMstay_info order by dorm_num desc
14、创建按学号查看住宿信息的视图,其中应包含住宿登记时的所有信息,并且按照宿舍号递减排列create view view_stay_bystuASSELECT top 100 dorm_num,stu_num,have_in,in_dateFROMstay_info order by stu_num desc创建查看出入信息的视图,其中应包含出入登记时的所有信息,并且按照离开时间递减排列create view view_io_infoasSELECT top 100stu_num,dorm_num,left_time,back_time,reason,over_timeFROMdbo.inout_
15、infoorder by left_time115 5、数据库物理设计与实施、数据库物理设计与实施5.15.1、数据库应用的硬件、软件环境介绍、数据库应用的硬件、软件环境介绍电脑配置为 AMD Athlon(速龙)II X2 260 双核 处理器,2G 内存,Windows XP 专业版 32 位 SP3(DirectX 9.0c)操作系统,安装 mysql数据库服务做测试。5.25.2、物理结构设计、物理结构设计考虑到索引能加快查询的速度,所以在需要经常进行查询的列创建索引。其中学生信息的学号、宿舍信息的宿舍编号、入住信息中学生的学号和宿舍的编号,这几个列都需要创建索引。由于前两项已经是主键
16、,所以无需额外创建索引。现在为后两项创建索引。5.35.3、索引的设计、索引的设计为入住信息中学生的学号和宿舍的编号创建索引:createuniqueindex入 住 信 息 中 学 生 的 学 号ix_stay_info1 on stay_info(stu_num)createindex宿 舍 的 编 号ix_stay_info2onstay_info(dorm_num)125.45.4、建立数据库、建立数据库首先创建名为 sdms 的学生宿舍管理数据库,createdatabase sdms.5.4.15.4.1、创建宿舍信息表、创建宿舍信息表use sdmscreate table do
17、rm_info(dorm_num int not null primary key,floint not null,bad_amount int not null,avi_bad int null,unit_price float not null)并且创建约束,使床位数和可用床位数不能大于 4 个,因为一个宿舍最多能住四个人,并且楼层数在 0-20 之间。alter table dorm_info add constraint ck_badcheck(bad_amount=4)alter table dorm_info add constraint ck_avicheck(avi_bad=0
18、 and flo=0 and age=99)5.4.35.4.3、创建出人登记信息表、创建出人登记信息表create table inout_info(stu_num int not null referencesstu_info(stu_num),dorm_num int not null references14dorm_info(dorm_num),left_time datetime not null,back_time datetime not null,reason varchar(50)not null,over_time varchar(2)not null)创建约束,是否晚归
19、字段这能选择是或者否。altertableinout_infoaddconstraintck_otcheck(over_time in(是,否)5.4.45.4.4、创建入住信息登记表、创建入住信息登记表create table stay_info(dorm_num int not null referencesdorm_info(dorm_num),stu_num int not null references stu_info(stu_num),have_in int not null,in_date date)创建约束,已住人数不能超过 4 个.altertablestay_infoad
20、dconstraintck_incheck(have_in=4)155.4.55.4.5、创建宿舍调整登记表、创建宿舍调整登记表create table change_info(stu_num int not null primary key,src int not null,dst int not null,ch_date date not null,ch_reason varchar(50)not null)5.55.5、加载测试数据、加载测试数据5.5.15.5.1、加载住宿信息、加载住宿信息创建一个存储过程用于录入住宿信息。USE sdmsGOSET ANSI_NULLS ONGOSE
21、T QUOTED_IDENTIFIER ONGOCREATE PROCEDURE dbo.insert_stay_infodorm_num int,stu_num int,have_in intAS16BEGINSET NOCOUNT ON;insert into stay_infovalues(dorm_num,stu_num,have_in,GETDATE()END其中包括要住宿的宿舍号,要住宿的学生学号,该宿舍应经住了多少人。如图所示:单击确定后数据成功的录入到数据库的住宿信息表中,如图:学号为 1104402302的学号已经插入到住宿信息表中。5.5.25.5.2、记载学生信息、记载学
22、生信息创建一个存储过程用于录入学生信息。USE sdmsGO17SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE dbo.insert_stu_infostu_num int,name varchar(12),sex varchar(4),facvarchar(50),class varchar(50),celphonevarchar(16),age intASBEGINSET NOCOUNT ON;insert into stu_infovalues(stu_num,name,sex,fac,class,celphon
23、e,GETDATE(),age)END其中包括要住宿的学号、姓名、性别、所在学院、班级、电话、年龄。如图所示:18单击确定后数据成功的录入到数据库的学生信息表中,如图:学号为 1104402304的学生已经成功录入到学生信息表中。5.5.35.5.3、加载宿舍信息、加载宿舍信息创建一个存储过程用于录入宿舍信息。SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE insert_dorm_infodorm_num int,flo int,bad_amount int,unit_pricefloat,avi_bad int19A
24、SBEGINSET NOCOUNT ON;insert into dorm_infovalues(dorm_num,flo,bad_amount,unit_price,avi_bad)ENDGO其中包括要住宿的宿舍号、所在楼层、床位位数、单价、空余床位。如图所示:击确定后数据成功的录入到数据库的宿舍信息表中,如图:6 6、数据操作与实现、数据操作与实现根据需求中给出的数据处理要求,设计访问数据库的具体要求,20并用 SQL 语言加以实现。运行 SQL 语句进行测试。6.16.1、数据查询操作、数据查询操作创建存储过程 view_dorm_bydrom,实现按公寓查找宿舍的住宿信息。CREATE
25、 PROCEDURE view_dorm_bydromdorm_num int /定义变量用于等待用户输入宿舍号ASBEGINSET NOCOUNT ON;SELECT*from dorm_info where dorm_num=dorm_num /查询出与输入宿舍号相符的结果END结果如图:单击确定后:创建存储过程 view_dorm_bystu,实现按学号查询学生的住宿21信息。CREATE PROCEDURE view_dorm_bystustu_num intASBEGINSET NOCOUNT ON;SELECT*from stay_info where stu_num=stu_nu
26、mEND执行存储过程结果如图所示:单击“确定”,显示出学生在哪个宿舍住,该宿舍住着几个人,什么时候入住6.26.2、数据更新操作、数据更新操作宿舍调整登记。创建一个存储过程用于登记个别学生调整宿舍的记录。同时跟新原来的住宿信息表,使得调整后学生的宿舍信息表能同步进行。这里避免创建触发器的繁杂,只使用了更新的语句。CREATE PROCEDURE change_dorm22stu_num int,dst_dorm int,reason varchar(50)ASBEGINSET NOCOUNT ON;declare cur1 cursor forSELECT dorm_num from stay
27、_info wherestu_num=stu_num -查询需要调整的人员的原来住的宿舍open cur1declare src int -声明游标以获取查询结果fetch cur1 into srcinsert intochange_info(stu_num,src,dst,ch_date,ch_reason)values(stu_num,src,dst_dorm,GETDATE(),reason)update stay_info set dorm_num=dst_dorm wherestu_num=stu_num-将调整的信息插入到调整登记信息表中close cur1END执行存储过程如下
28、:23需要登记的信息成功录入到调整信息表中原住宿信息表数据。调整宿舍后:6.36.3、数据维护操作、数据维护操作6.3.16.3.1 同步更新触发器同步更新触发器是系统使用过程中,需要使用一个触发器来同步信息。例如当有学生要住宿时,该宿舍已住人数要增加1,而宿舍信息中的相应空余床位数要减 1。所以在住宿登记表中使用以下触发器。SET ANSI_NULLS ONGO24SET QUOTED_IDENTIFIER ONGOCREATE TRIGGER tri1ON stay_infoAFTER INSERTASBEGINSET NOCOUNT ON;declare dorm_num int,hav
29、e_in intdeclare cur2 cursor forselect dorm_num,have_in from stay_infoopen cur2fetch cur2while(FETCH_STATUS-1)beginfetch next from cur2 into dorm_num,have_inupdate stay_info set have_in=(have_in+1)where dorm_num=dorm_num -更新相应宿舍的已住人数,增加1.update dorm_info set avi_bad=(select avi_badfrom dorm_info wher
30、e dorm_num=dorm_num)-1)where25dorm_num=dorm_num -更新宿舍信息表中的可用床位数(空余床位数)endclose cur2ENDGO执行登记住宿信息表的存储过程插入前:插入后:6.3.26.3.2、按学院分配宿舍存储过程、按学院分配宿舍存储过程创建一个存储过程,用于按学院分配宿舍。使得能按同学院的学生能尽量的在同一宿舍住。USE sdms26GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE dbo.allowdorm_byfacfac varchar(20)ASBEGINd
31、eclare offset int,bad_amount int,sum intset offset=1set bad_amount=1set sum=(select distinct(stu_num)from stu_infowhere fac=fac)while(sum0)begindeclare stu_num int,dorm_num intset stu_num=(SELECT top(bad_amount)stu_numfrom stu_info where fac=fac andstu_num notin(select top(offset)stu_numfrom stu_inf
32、o where fac=fac)set dorm_num=(select dorm_num from dorm_info27where avi_bad=4)insert into stay_infovalues(dorm_num,stu_num,4,GETDATE()set sum=sum-1endEND执行存储过程,如图:7 7、收获、体会和建议、收获、体会和建议做课程设计的这段时间来学到了很多东西,以前对 SQL,只会照着书上的 SQL 语句写,没有对以前的知识进行系统的了解,没有把各个部分知识结合在一起。通过做这次课程设计,我对数据库设计的各个方面都加深了理解,只有数据流程图和数字字典做
33、好了,才能进行下面的 E-R 图设计,仔仔细细做才能不出问题。体会到把知识应用于实践是不容易的,学到了课本上没有的知识,只有实践才能找出自己的问题。通过本次课程设计我对数据库的理解更加深刻了,清楚的认识了视图、索引、存储过程、触发器、一对多、多对多的设计模型。并且在这个宿舍管理设计中也都用上了。以前都只用 mysql 进行开发,28虽然都支持标准的 sql 语句,但是在一些细节方面还是值得注意的,比如 sql server 中独特的 TOP 语句就值得考量。在其他数据库中的 LIMIT 语句虽然更加强大,sql server 也有他方便的地方。通过本次我合作自主的制作本作品对数据库有了一个很好的整体理解,虽然有不足之处,但是自己完成确实有趣味。由于时间比较紧,我们所做的课程设计肯定还存在许多的不足之处,程序中也存在许多小错误,在以后的学习中会慢慢改过来努力做得更好。8 8、主要参考文献。、主要参考文献。SQL Server 从入门到精通清华大学出版社明日科技 SQLServer 开发团队编著数据库原理与应用技术:SQL Server作者:赵彦 出版社:清华大学出版社MySQL 技术内幕 SQL 编程作者:姜承尧 出版社:机械工业出版社29
限制150内