数据库课程设计学生宿舍管理系统Word文件下载.docx
《数据库课程设计学生宿舍管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据库课程设计学生宿舍管理系统Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
4.1.3、出入信息(inout_info)9
4.1.4、入住信息(stay_info)10
4.1.5、调整信息10
4.2视图的设计10
4.2.1宿舍信息表视图10
5、数据库物理设计与实施12
5.1、数据库应用的硬件、软件环境介绍12
5.2、物理结构设计12
5.3、索引的设计12
5.4、建立数据库13
5.4.1、创建宿舍信息表13
5.4.2、创建学生信息表14
5.4.3、创建出人登记信息表14
5.4.4、创建入住信息登记表15
5.4.5、创建宿舍调整登记表16
5.5、加载测试数据16
5.5.1、加载住宿信息16
5.5.2、记载学生信息17
5.5.3、加载宿舍信息19
6、数据操作与实现20
6.1、数据查询操作21
6.2、数据更新操作22
6.3、数据维护操作24
6.3.1同步更新触发器24
6.3.2、按学院分配宿舍存储过程26
7、收获、体会和建议28
8、主要参考文献。
29
备注29
任务分配29
旧的手工纪录的宿舍管理方式已经不能适应高速发展的信息化时代,新的宿舍管理系统开发出来之后,学校的现有的宿舍信息管理将有很大的改观,由过去的人工方式转变为计算机方式,由效率低、数据冗余、易产生错误转变为检索迅速、查找方便、可靠性高、存储量大。
这些优点能够极大地提高效率,也是学校科学化、正规化管理的重要条件。
学生宿舍管理系统采用的是计算机化管理,系统做的尽量人性化,使用者会感到操作非常方便,管理人员需要做的就是将数据输入到系统的数据库中去。
由于数据库的存储容量相当大,而且比较稳定,适合较长时间的保存,也不容易丢失。
这无疑是为信息存储量比较大的学校提供了一个方便、快捷的操作方式。
2、课程设计的需求分析
学生宿舍是同学最为熟悉的领域,假定学校有多栋宿舍楼,每栋楼有多层,每层有多个寝室,每个寝室可住多名学生,学生宿舍管理系统对学校的学生宿舍进行规范管理,其管理的对象如下:
·
宿舍信息:
编号、楼层、床位数、单价等。
学生:
学号、姓名、性别、年龄、所在院系、年级、电话等。
每个宿舍最多可以住4位同学,每个同学只能在一个宿舍,不同宿舍的费用标准可以不同。
不同院系、年级的同学可以住同一间宿舍。
系统要能够对宿舍、学生、住宿信息进行登记、调整,并能随时进行各种查询、统计等处理。
包括:
寝室分配:
根据院系、年级分配寝室。
学生管理:
实现入住学生信息的登记、维护和查询功能。
信息查询:
按公寓楼号、学生姓名等查询住宿信息。
出入登记(可选):
对学生进出公寓的情况进行登记、实现基本的出入监控功能
3、概念结构设计
3.1、概念结构设计工具(E-R模型)
3.2、入住登记子系统(局部)
主要是学生入住的管理,包括学生入住的申请,查询是否存在该学生,查询是否有空余的宿舍以及宿舍的分配
可以通过这个系统来解决学生入住的申请和分配等各种问题
3.3、外出登记子系统
子系统描述
主要是学生外出的管理问题,包括学生外出的申请,外出的审核,外出的等级等为题。
说明
可以通过这个系统解决学生外出的登记的各种问题。
3.4、调整宿舍子系统
主要是学生宿舍的调整,宿舍表的更新问题。
分E-R图
可以通过这个系统解决学生宿舍的调整问题,包括宿舍的申请调整,调整原因的判断以及调整后宿舍表的更新问题。
3.5、宿舍智能分配子系统
主要是学生宿舍的分配问题。
可以通过这个子系统来分配学生的宿舍,包括按学院分配以及按年级分配。
3.6、信息查询子系统
主要是查询学生宿舍的问题。
可以通过子系统来查询学生的宿舍包括按公寓查询以及按学生名字查询。
3.7、总体E-R图
4、逻辑结构设计
4.1、关系数据模式
字段
描述
数据类型
数据长度
NULL
Primarykey
约束
Stu_num
学号
Int
N
Y
name
姓名
varchar
12
sex
性别
4
男/女
age
年龄
int
0-99
fac
所在学院
50
class
所在班级
celphone
电话
16
Entry_date
入学日期
date
dorm_num
宿舍编号
flo
所在楼层
0-20
Bad_amount
床位数
<
=4
Avi_bad
可用床位数
unit_price
单价
float
stu_num
foreignkey
所住宿舍
left_time
离开时间
Datetime
back_time
回来时间
reason
离开原因
over_time
是否晚归
2
是/否
Have_in
已住人数
in_date
入住日期
调整信息
src
原宿舍
dst
调后宿舍
ch_date
调整日期
ch_reason
调整原因
4.2视图的设计
创建查看宿舍信息表的视图,其中应该包含宿舍的所有信息。
并且应该按可用床位数递减
createviewview_dorm
AS
SELECTtop100[dorm_num],[flo],[bad_amount],[unit_price],[avi_bad]
FROMdorm_infoorderbyavi_baddesc
创建按宿舍号查看住宿信息的视图,其中应包含住宿登记时的所有信息,并且按照宿舍号递减排列
createviewview_stay_bydorm
SELECTtop100dorm_num,stu_num,have_in,in_date
FROMstay_infoorderbydorm_numdesc
创建按学号查看住宿信息的视图,其中应包含住宿登记时的所有信息,并且按照宿舍号递减排列
createviewview_stay_bystu
FROMstay_infoorderbystu_numdesc
创建查看出入信息的视图,其中应包含出入登记时的所有信息,并且按照离开时间递减排列
createviewview_io_info
as
SELECTtop100stu_num,dorm_num,left_time,back_time,reason,over_time
FROMdbo.inout_infoorderbyleft_time
5、数据库物理设计与实施
5.1、数据库应用的硬件、软件环境介绍
电脑配置为AMDAthlon(速龙)IIX2260双核处理器,2G内存,WindowsXP专业版32位SP3(DirectX9.0c)操作系统,安装mysql数据库服务做测试。
5.2、物理结构设计
考虑到索引能加快查询的速度,所以在需要经常进行查询的列创建索引。
其中学生信息的学号、宿舍信息的宿舍编号、入住信息中学生的学号和宿舍的编号,这几个列都需要创建索引。
由于前两项已经是主键,所以无需额外创建索引。
现在为后两项创建索引。
5.3、索引的设计
为入住信息中学生的学号和宿舍的编号创建索引:
createuniqueindex入住信息中学生的学号ix_stay_info1onstay_info(stu_num)
createindex宿舍的编号ix_stay_info2onstay_info(dorm_num)
5.4、建立数据库
首先创建名为sdms的学生宿舍管理数据库,createdatabasesdms.
usesdms
createtabledorm_info(
dorm_numintnotnullprimarykey,
flointnotnull,
bad_amountintnotnull,
avi_badintnull,
unit_pricefloatnotnull
)
并且创建约束,使床位数和可用床位数不能大于4个,因为一个宿舍最多能住四个人,并且楼层数在0-20之间。
altertabledorm_infoaddconstraintck_badcheck(bad_amount<
=4)
altertabledorm_infoaddconstraintck_avicheck(avi_bad<
altertabledorm_infoaddconstraintck_flocheck(flo>
=0andflo<
=20)
createtablestu_info(
stu_numintnotnullprimarykey,
namevarchar(12)notnull,
sexvarchar(4)notnull,
ageintnotnull,
facvarchar(50)notnull,
classvarchar(50)notnull,
celphonevarchar(16)notnull,
entry_datedatenotnull
创建约束,性别只能是男或女,并且年龄只能在0-99之间
altertablestu_infoaddconstraintch_sexcheck(sexin('
男'
'
女'
))
ALTERTABLEstu_infoADDconstraintck_agecheck(age>
=0andage<
=99)
createtableinout_info(
stu_numintnotnullreferencesstu_info(stu_num),
dorm_numintnotnullreferencesdorm_info(dorm_num),
left_timedatetimenotnull,
back_timedatetimenotnull,
reasonvarchar(50)notnull,
over_timevarchar
(2)notnull
创建约束,是否晚归字段这能选择是或者否。
altertableinout_infoaddconstraintck_otcheck(over_timein('
是'
否'
createtablestay_info(
dorm_numintnotnullreferencesdorm_info(dorm_num),
stu_numintnotnullreferencesstu_info(stu_num),
have_inintnotnull,
in_datedate
创建约束,已住人数不能超过4个.
altertablestay_infoaddconstraintck_incheck(have_in<
createtablechange_info(
stu_numintnotnullprimarykey,
srcintnotnull,
dstintnotnull,
ch_datedatenotnull,
ch_reasonvarchar(50)notnull
5.5、加载测试数据
创建一个存储过程用于录入住宿信息。
USE[sdms]
GO
SETANSI_NULLSON
SETQUOTED_IDENTIFIERON
CREATEPROCEDURE[dbo].[insert_stay_info]
@dorm_numint,@stu_numint,@have_inint
BEGIN
SETNOCOUNTON;
insertintostay_infovalues(@dorm_num,@stu_num,@have_in,GETDATE())
END
其中包括要住宿的宿舍号,要住宿的学生学号,该宿舍应经住了多少人。
如图所示:
单击确定后数据成功的录入到数据库的住宿信息表中,如图:
创建一个存储过程用于录入学生信息。
CREATEPROCEDURE[dbo].[insert_stu_info]
@stu_numint,@namevarchar(12),@sexvarchar(4),@facvarchar(50),@classvarchar(50),@celphonevarchar(16),@ageint
insertintostu_infovalues(@stu_num,@name,@sex,@fac,@class,@celphone,GETDATE(),@age)
其中包括要住宿的学号、姓名、性别、所在学院、班级、电话、年龄。
单击确定后数据成功的录入到数据库的学生信息表中,如图:
创建一个存储过程用于录入宿舍信息。
CREATEPROCEDUREinsert_dorm_info
@dorm_numint,@floint,@bad_amountint,@unit_pricefloat,@avi_badint
insertintodorm_infovalues(@dorm_num,@flo,@bad_amount,@unit_price,@avi_bad)
其中包括要住宿的宿舍号、所在楼层、床位位数、单价、空余床位。
击确定后数据成功的录入到数据库的宿舍信息表中,如图:
6、数据操作与实现
根据需求中给出的数据处理要求,设计访问数据库的具体要求,并用SQL语言加以实现。
运行SQL语句进行测试。
6.1、数据查询操作
创建存储过程view_dorm_bydrom,实现按公寓查找宿舍的住宿信息。
CREATEPROCEDUREview_dorm_bydrom
@dorm_numint//定义变量用于等待用户输入宿舍号
SELECT*fromdorm_infowheredorm_num=@dorm_num
//查询出与输入宿舍号相符的结果
结果如图:
单击确定后:
创建存储过程view_dorm_bystu,实现按学号查询学生的住宿信息。
CREATEPROCEDUREview_dorm_bystu
@stu_numint
SETNOCOUNTON;
SELECT*fromstay_infowherestu_num=@stu_num
执行存储过程结果如图所示:
单击“确定”,显示出学生在哪个宿舍住,该宿舍住着几个人,什么时候入住
6.2、数据更新操作
宿舍调整登记。
创建一个存储过程用于登记个别学生调整宿舍的记录。
同时跟新原来的住宿信息表,使得调整后学生的宿舍信息表能同步进行。
这里避免创建触发器的繁杂,只使用了更新的语句。
CREATEPROCEDUREchange_dorm
@stu_numint,@dst_dormint,@reasonvarchar(50)
declarecur1cursorfor
SELECTdorm_numfromstay_infowherestu_num=@stu_num
--查询需要调整的人员的原来住的宿舍
opencur1
declare@srcint--声明游标以获取查询结果
fetchcur1into@src
insertintochange_info(stu_num,src,dst,ch_date,ch_reason)values(@stu_num,@src,@dst_dorm,GETDATE(),@reason)
updatestay_infosetdorm_num=@dst_dormwherestu_num=@stu_num
--将调整的信息插入到调整登记信息表中
closecur1
END
执行存储过程如下:
需要登记的信息成功录入到调整信息表中
原住宿信息表数据。
调整宿舍后:
6.3、数据维护操作
是系统使用过程中,需要使用一个触发器来同步信息。
例如当有学生要住宿时,该宿舍已住人数要增加1,而宿舍信息中的相应空余床位数要减1。
所以在住宿登记表中使用以下触发器。
CREATETRIGGERtri1
ONstay_info
AFTERINSERT
AS
declare@dorm_numint,@have_inint
declarecur2cursorfor
selectdorm_num,have_infromstay_info
opencur2
fetchcur2
while(@@FETCH_STATUS<
>
-1)
begin
fetchnextfromcur2into@dorm_num,@have_in
updatestay_infosethave_in=(@have_in+1)wheredorm_num=@dorm_num--更新相应宿舍的已住人数,增加1.
updatedorm_infosetavi_bad=((selectavi_badfromdorm_infowheredorm_num=@dorm_num)-1)wheredorm_num=@dorm_num--更新宿舍信息表中的可用床位数(空余床位数)
end
closecur2
执行登记住宿信息表的存储过程
插入前:
插入后:
创建一个存储过程,用于按学院分配宿舍。
使得能按同学院的学生能尽量的在同一宿舍住。
CREATEPROCEDURE[dbo].[allowdorm_byfac]
@facvarchar(20)
declare@offsetint,@bad_amountint,@sumint
set@offset=1
set@bad_amount=1
set@sum=(selectdistinct(stu_num)fromstu_infowherefac=@fac)
while(@sum>
0)
declare@stu_numint,@dorm_numint
set@stu_num=(SELECTtop(@bad_amount)stu_numfromstu_