大家好,又见面了,我是你们的朋友全栈君。
数据库课程设计——学生宿舍信息管理系统
目录
1.设计目的
《数据库系统原理》课程设计是软件工程和计算机科学与技术专业集中实践性环节之一,旨在让我们自身加深对数据库基础理论和基本知识的理解,掌握设计数据库管理系统的基本方法,锻炼运用知识解决实际问题的动手能力。
2、任务与要求
要求学生们从给定的设计题目中进行选择,进行需求分析,概念设计、逻辑设计,数据库的设计过程,表结构、表之间的关联,给出视图的定义、触发器的定义、索引,安全性的实现,用SQL语句等在SQL Server 2008系统中实现数据库的数据输入,查询,更新和输出;给出实现效果截图及部分测试结果。
3、学生宿舍管理系统课程设计
3.1 引言
随着社会的发展以及教育水平的提高,当今社会在校生的数量越来越庞大。与此同时,使用曾经的手工的方式对学生的信息进行管理效率非常低下。在互联网技术高度发达的今天 ,使用数据库技术队对学生的住信息进行管理能够使学校对学生信息的管理更加的高效,检索迅速,查找方便,可靠性高存储量大。使用数据库技术的这些优点可以使得学生信息出错的发生。同时使用数据库技术可以使学生住宿信息长时间稳定地保存,也不容易丢失。开发出这样的一个数据库迫在眉睫。
3.2需求分析
系统需求调查的方法为访谈法,通过对多个学校的宿舍管理人员进行交谈,从而得出系统的主要任务和特定的要求。系统的主要任务是能够对宿舍信息,学生信息,管理员信息,住宿信息进行登记,调整,并能进行各种查询以及信息的备份。
完整性要求:防止不符合语义的数据进入数据库。
安全性要求:需要防止客户对数据进行未经授权的访问。
性能要求:最好能够实现并发访问,允许多个用户同时对数据库中的数据进行访问。
一致性要求:防止数据库进入不一致状态。
数据库要求:各种各样的故障都可能发生,出现意外时,,尽可能的确保任何数据在任何情况下都不会丢失。
3.2.2
系统的业务流程:
学生入住和退宿时通过管理员进行登记;
住宿产生的各种费用以及使用的各项物品由管理员进行登记;
管理员将登记的各项信息上报给教务处;
教务处将各项住宿信息进行统一管理;
储存的所有数据供不同权限的客户进行访问;
数据字典:
学生基本信息
编号 |
属性名 |
类型 |
解释 |
备注 |
0001 |
学号 |
Varchar(15) |
无 |
无 |
0002 |
姓名 |
Varchar(10) |
无 |
无 |
0003 |
性别 |
Varchar(2) |
无 |
男、女 |
0004 |
年龄 |
Int |
无 |
0……100之间 |
0005 |
手机号 |
Varchar(15) |
手机号码 |
无 |
0006 |
专业 |
Varchar(20) |
无 |
无 |
住宿费用信息:
编号 |
属性名 |
类型 |
解释 |
备注 |
0008 |
表单编号 |
Varchar(15) |
无 |
无 |
0009 |
学号 |
Varchar(15) |
无 |
无 |
0010 |
宿舍号 |
Varchar(6) |
不是门牌号 |
无 |
0011 |
水费 |
Double(6) |
无 |
大于0 |
0012 |
电费 |
Double(6) |
无 |
大于0 |
0013 |
维修费 |
Double(6) |
无 |
大于0 |
0014 |
住宿费 |
Double(6) |
无 |
大于0 |
0015 |
日期 |
Date(8) |
无 |
无 |
0016 |
合计 |
Double(6) |
无 |
大于0 |
物品管理信息:
编号 |
属性名 |
类型 |
解释 |
备注 |
0017 |
员工号 |
Varchar(15) |
无 |
无 |
0018 |
宿舍号 |
Varchar(15) |
无 |
无 |
0019 |
桌子 |
Int |
无 |
大于0 |
0020 |
椅子 |
Int |
无 |
大于0 |
0021 |
床 |
Int |
无 |
大于0 |
0022 |
电扇 |
Int |
无 |
大于0 |
0023 |
灯 |
Int |
无 |
大于0 |
0024 |
窗户 |
Int |
无 |
大于0 |
宿舍信息
编号 |
属性名 |
类型 |
解释 |
备注 |
0025 |
宿舍编号 |
Varchar(15) |
无 |
无 |
0026 |
楼号 |
Varchar(15) |
无 |
无 |
0027 |
区域 |
Varchar(15) |
校园内 |
ABCDEFG |
0028 |
人数 |
Int |
无 |
0……8 |
0029 |
房间类型 |
Varchar(15) |
按人数分 |
1(四人)2(六人)3(八人) |
管理员信息
编号 |
属性名 |
类型 |
解释 |
备注 |
0030 |
员工号 |
Varchar(15) |
无 |
无 |
0031 |
姓名 |
Varchar(10) |
无 |
无 |
0032 |
性别 |
Varchar(2) |
无 |
男,女 |
0033 |
年龄 |
Int |
无 |
0……100 |
0034 |
手机号 |
Varchar(15) |
无 |
11位 |
0035 |
楼号 |
int |
无 |
无 |
0036 |
区域 |
int |
无 |
ABCDEFG |
0037 |
职位 |
Varchar(2) |
无 |
1(高级员工)2(普通员工) |
3.2.2 系统功能描述:
对学生的信息进行管理;
对宿舍信息进行管理;
对管理员信息进行管理;
对宿舍物品进行登记和管理;
对住宿产生的各项费用进行登记和管理;
对已经更改的学生和管理员信息进行保存
在这幅图中,其中各项从左往右前5部分功能都包括各自信息的增删改查,第六项功能为学生和教师信息的备份,也就是已修改信息储存。
3.3概念设计
(说明使用数据库概念设计的基本思想和原理方法,设计出系统E-R图)
基本思想:将需求分析得到的用户需求抽象为信息结构,分析数据字典中数据字典间内在语义关联,并将其抽象表示为数据的概念模式,从而能真实,充分地反应真实世界,包括事物和事物之间的联系,能满足用户对数据的处理需求,是现实世界的一个真实模型,易于理解,从而可以用它和不熟悉计算机的人交换意见,且易于更改。方法:首先分析整个系统中涉及到的实体,得到局部的ER图。然后分析这些实体之间的关系,进行连接从而得到
3.4逻辑设计
基本思想:首先整个系统一共可以划分出三个实体,分别是学生,管理员和宿舍,三者之间构成一个三角关系。同时,学生和宿舍之间的住宿关系衍生出一系列的住宿产生的费用,管理员和宿舍的管理关系衍生出一系列需要管理的物品,因此五张表相互关联生成完整的数据库系统。
数据库关系图:
学生的个人信息:学号,姓名,性别,年龄,手机号码,专业,管理员号
student(stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,manager_num)
宿舍费用信息:表单编号,水费,电费,维修费,住宿费,总费用,日期
live(list_num,stu_num,dor_num,water,electric,service,lodge,total,date)
宿舍物品信息:桌子,椅子,床,灯,
tool(mana_num,dor_num,table,chair,bed,light)
宿舍信息:宿舍编号,人数,房间类型,楼号,区域
dormitory(dor_num ,prople_total,size, build_num,zone)
宿舍管理人员信息:员工号,姓名,性别,年龄,手机号
manager(mana_num,mana_name,mana_gender,mana_age,mana_tele)
3.5物理结构设计
物理设计的基本思想:根据逻辑设计出的逻辑模式,DBMS及计算机系统所提供的手段和施加的限制,设计数据库的内模式,即文件结构,各种路径,控件分配,记录的存取方式等,为逻辑数据结构选取一个最合适的应用环境的物理结构。
学生基本信息表:
属性名 |
类型 |
长度 |
备注 |
Stu_num |
varchar |
15 |
无 |
Stu_name |
varchar |
10 |
无 |
Stu_gender |
varchar |
2 |
男、女 |
Stu_age |
int |
4 |
0……100之间 |
Stu_tele |
varchar |
15 |
无 |
Stu_spe |
varchar |
20 |
无 |
住宿费用信息表:
属性名 |
类型 |
长度 |
备注 |
List_num |
Varchar |
15 |
无 |
Stu_num |
Varchar |
15 |
无 |
Dor_num |
Varchar |
15 |
无 |
water |
double |
6 |
大于0 |
Elect |
double |
6 |
大于0 |
Repaire |
double |
6 |
大于0 |
live |
double |
6 |
大于0 |
date |
date |
8 |
指的是具体一年 |
物品管理信息表:
属性名 |
类型 |
长度 |
备注 |
Mana_num |
Varchar |
15 |
无 |
Dor_num |
Varchar |
15 |
无 |
Desk |
Int |
2 |
大于0 |
Chair |
Int |
2 |
大于0 |
Bed |
Int |
2 |
大于0 |
fan |
Int |
2 |
大于0 |
lighr |
Int |
2 |
大于0 |
window |
Int |
2 |
大于0 |
宿舍信息表:
属性名 |
类型 |
长度 |
备注 |
Dor_num |
Varchar |
15 |
无 |
Build_num |
Varchar |
2 |
无 |
Zone |
Varchar |
2 |
ABCDEFG |
People_total |
Int |
2 |
0……8 |
size |
varchar |
2 |
1(四人)2(六人)3(八人) |
管理员信息表:
属性名 |
类型 |
长度 |
备注 |
Mana_num |
Varchar |
15 |
无 |
Mana_name |
Varchar |
10 |
无 |
Mana_gender |
Varchar |
2 |
男,女 |
Mana_age |
Int |
4 |
0……100 |
Mana_tele |
varchar |
15 |
11位 |
Build_num |
int |
2 |
无 |
zone |
varchar |
2 |
ABCDEFG |
3.6数据库实施
数据库的实施:数据库设计完成后,设计人员要用DBMS提供的数据定义语言和其他的使用程序将数据库逻辑结构设计和物理结构设计的结构用DDL严格描绘出来,成为DBMS可以接受的源代码,再经过调试产生目标模式。最后将数据装入数据库。
3.6.1数据库表的定义
创建学生信息表:
Create table student
(stu_num varchar(15),
Stu_name varchar(10),
Stu_gender varchar(2) check(stu_gender=’男’ or stu_gender=’女’),
Stu_age int check(stu_age>0 and stu_age<100),
Stu_tele varchar(15),
Stu_spe varchar(20),
Primary key (stu_num),
);
创建费用信息表:
Create table live
( list_num varchar(15),
Stu_num varchar(15),
Dor_num varchar(15),
Water float check(water>=0),
Elect float check(elect>=0),
Repair float check(repair>=0),
Living float check(living>=0),
statu int default(1),
Date date,
Primary key(list_num),
Foreign key (stu_num ) references student(stu_num)
on update cascade,
Foreign key (dor_num ) references dormitory(dor_num)
on update cascade
);
创建物品信息管理表:
Create table tool
( mana_num varchar(15),
Dor_num varchar(15),
desk int check(desk>=0),
Chair int check(chair>=0),
Bed int check(bed>=0),
Light int check(light>=0),
Primary key (dor_num),
Foreign key (mana_num ) references manager(mana_num)
on update cascade on delete set null
);
创建宿舍信息管理表:
Create table dormitory
(dor_num varchar(15),
People_total int check(people_total>=0 and people_total<=8),
Size int check(size=1 or size=2 or size=3)
);
创建管理员信息表:
Create table manager
(mana_num varchar(15),
mana_name varchar(10),
mana_gender varchar(2) check(stu_gender=’男’ or stu_gender=’女’),
mana_age int check(stu_age>0 and stu_age<100),
mana_tele varchar(15),
Primary key (mana_num)
);
3.6.2视图的定义:
所有的信息汇总在一起:
Create view allmass
(stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,stu_statu,list_num,dor_num,water,elect,repair,living,live_status,Date,people_total,size,dor_status,mana_num,desk,chair,bed,light,tool_statu,mana_name,mana_gender,mana_age,mana_tele,mana_statu)
as select student.stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,stu_statu,list_num,dormitory.dor_num,water,elect,repair,living,live_statu,Date,people_total,size,dor_statu,manager.mana_num,desk,chair,bed,light,tool_statu,mana_name,mana_gender,mana_age,mana_tele,mana_statu
from student,lives,dormitory,tool,manager
where student.stu_num=lives.stu_num
and lives.dor_num=dormitory.dor_num
and dormitory.dor_num=tool.dor_num
and tool.mana_num= manager.mana_num ;
学生信息视图:
Select stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,mana_name
from allmass
where stu_statu=1;
管理员信息:
create view manager_view
as
select manager.mana_num,mana_name,mana_age,mana_gender,mana_tele
from manager
where mana_statu=1;
宿舍信息:
create view dormitory_view
as
select tool.dor_num,build_num,zone,people_total,size
from tool,dormitory
where tool.dor_num=dormitory.dor_num and dor_statu=1;
物品信息:
create view tool_view
as
select dor_num,mana_num, desk,chair,bed,light
from tool
where tool_statu=1;
账单信息:
create view lives_view
as
select list_num,stu_name,dor_num,water,elect,date,repair,living
from lives,student
where live_statu=1 and lives.stu_num=student.stu_num;
3.6.3索引:
每一张表通过主键的列产生索引,从而加快查询时的进度。
拿学生信息表进行举例:
Create index stu_index on student(stu_num);
当然可以通过数据库自动生成。
3.6.4触发器的定义:
在学生表上建立触发器,记录被修改的信息。在原表中通过一个状态属性标示是否被删除,因此数据并不会真正被删除,只需要记录被修改的信息。
create trigger on_pre_stu
on student
for update
as
begin
declare @stu_num varchar(15)
declare @pre_stu_name varchar(10)
declare @pre_stu_gender varchar(2)
declare @pre_stu_age int
declare @pre_stu_tele varchar(15)
declare @pre_stu_spe varchar(20)
select @stu_num = stu_num from deleted
select @pre_stu_name =stu_name from deleted
select @pre_stu_gender =stu_gender from deleted
select @pre_stu_age = stu_age from deleted
select @pre_stu_tele =stu_tele from deleted
select @pre_stu_spe = stu_spe from deleted
insert into pre_stu(stu_num,pre_stu_name,pre_stu_gender,pre_stu_age,pre_stu_tele,pre_stu_spe )
values(@stu_num,@pre_stu_name,@pre_stu_gender,@pre_stu_age,@pre_stu_tele,@pre_stu_spe)
end
在管理员上建立触发器,记录被修改的信息。在原表中通过一个状态属性标示是否被删除,因此数据并不会真正被删除,只需要记录被修改的信息。
create trigger on_pre_mana
on manager
for update
as
begin
declare @mana_num varchar(15)
declare @pre_mana_name varchar(10)
declare @pre_mana_gender varchar(2)
declare @pre_mana_age int
declare @pre_mana_tele varchar(15)
select @mana_num = mana_num from deleted
select @pre_mana_name =mana_name from deleted
select @pre_mana_gender =mana_gender from deleted
select @pre_mana_age = mana_age from deleted
select @pre_mana_tele =mana_tele from deleted
insert
into pre_mana(mana_num,pre_mana_name,pre_mana_gender,pre_mana_age,pre_mana_tele)values(@mana_num,@pre_mana_name,@pre_mana_gender,@pre_mana_age,@pre_mana_tele)
end
3.6.5用户的定义:
create user dba for login dba with default_schema=dbo
exec sp_addrolemember ‘db_owner’ ,’dba’
3.6.6 对数据的管理:
对数据的管理主要是由增删改查组成,以学生信息的管理为例,
增加:
insert into
student(stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,stu_statu)
values(‘201677H0555′,’刘飞达’,’男’,19,14646646465,’软工’,1);
删除:值得注意的是我删除信息用的是更新信息语句,只需要更改状态值即可标示数据是否被删除,数据不会真的被删除,做好了别分工作。
update student set stu_status=0 where stu_num=’201677H0522’;
修改:
update student set stu_name=’刘豪’ where stu_num=’201677H0522′;
查询:值得注意的是查询的条件是数据行的状态值是1,也就是被标示未被删除。
select stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe from student where stu_statu=1;
分别查询每一个宿舍的总费用,并且按照宿舍号进行排序(使用的是分组求和的思想):
select dor_num , sum(w ater+elect + repair +living) from lives group by dor_num order by dor_num ;
在sql代码执行的过程中,会自动生成存储过程,将有价值的存储过程进行储存。
3.7系统调试和测试
在对数据库的备份功能进行测试的过程中,我在原表中对数据进行修改,从而触动触发器将被删除的信息储存在备份表中。执行语句update student set stu_name=’刘豪’ where stu_num=’201677H0522′; 然后查看备份表中的信息,验证之后正确。
把数据库总所有的信息联合起来,形成一张非常大的表,生成一个视图,测试之后,可以成功生成,满足要求。
在安全性方面,我创建了用户并且进行了授权:
create login dba with password=’123456′, default_database=stu_dor_manage;
create user dba for login dba with default_schema=dbo
exec sp_addrolemember ‘db_owner’ ,’dba’
执行以后,成功生成了一个用户:测试成功!
4.系统评价
4.1我的系统特色:
A、数据结构化 ,数据之间具有联系,面向整个系统。
B、数据的共享性高,冗余度低,易扩充 。
C、数据独立性高 。
D、数据由DBMS统一管理和控制。
4.2 系统不足及改进
在对数据库进行设计的过程中,结构比较简单,不能够应对是否能复杂的情况,只能对学生住宿的简单信息进行操作。另外,在安全性方面做得也不够完善,主要原因在于设计的重点是功能的正常执行,而不是在每一个细节做到完美。另外,执行虚度方面没有做出专门的优化。因此,这个数据库系统需要我在以后相信的去完成每一个细节。
5.设计心得
在设计数据库的过程中我遇到过非常多的问题:
首先,在设计阶段有非常多的数据项,当时觉得不好分类和处理,而且有很多的数据项和许多实体都有关系。最后通过查看课本例题,问同学等方式将各个数据项进行归类,对于和多个实体之间都有关系的数据项可以建立一个关系表,从而完成归类。
接着,在添加数据的过程中,我忽略掉了数据的参照完整性,导致许多数据不能够正常加入。后来经过同学的提示,我将数据进行了统一分析,保持所有的数据一致,最后数据可以正常输入。
最后,每个表中的数据更改完成之后,更改后的数据会丢失找不到了。对于这个问题就解决办法为加入触发器,记录表中信息的修改前的值,成功解决问题。
收获:对于一个系统,数据库的设计是非常重要的,数据库设计决定了以后数据好不好维护。后期需求好不好展。同时也决定了系统的性能。一个坏的数据库设计一个功能点的改动可能会设计多张表的改动。一不小心可能就会引起数据的不一致。为了解决这些问题。在数据库设计之初就要考虑这些问题。减少后期系统维护量。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144287.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...