资源描述
苏 州 市 职 业 大 学
实习(实训)报告
名称 SQLServer数据库项目实训01
2013年 7月 1日至 2013年7月5日共1 周
学院(部) 计算机工程学院
班 级
姓 名
学院(部)负责人
系 主 任
指 导 教 师
目 录
目 录 I
1. 课程设计的目的与要求 1
2. 题目说明 1
3. 需求分析和数据库设计 1
3.1信息收集和需求分析 1
3.2概念设计——E-R图 2
3.3逻辑设计 4
4. 表和索引的创建及数据完整性 6
5. 数据库结构的实现 7
6. 遇到的问题和解决方法 9
7. 课程设计总结 11
8. 参考文献 11
1. 课程设计的目的与要求
数据库基础与应用课程设计是计算机专业集中实践性环节之一,是学习完《数据库系统概论》课程后进行的一次全面的综合练习。其目的在于加深对数据库基础理论和基本知识的理解,掌握使用VB、C、C++、PowerBuilder等进行数据库开发的全过程,提高运用数据库解决实际问题的能力。
用VB、PB、C++等或其它软件工具制作一个小型管理系统。所设计的小型管理系统应包含查询、插入、删除、修改、报表、统计、用户权限管理等基本功能,界面采用菜单的形式。根据课程设计1周时间的安排选择适当大小的设计课题。根据题目的基本需求,给出概念模型与逻辑模型,编写程序,并写出详细的设计说明书。
2. 题目说明
本案例为一个小区物业管理系统主要包括:对小区所有房屋资料的录入、增加、删除、查询等多个功能的实现,是基于在这些小区的房屋资源对小区进行管理;对小区内住户的详细资料的管理,包括增加、删除、修改、查询等功能的实现,这些也是一个小区的基本资料,毕竟物业管理最后是针对小区的所有住户而言的。在具有了所有的基本资料信息后,需要实现实质性的物业管理。主要的管理物业包括:物业设备管理仪表(水、电表)数据管理、收费管理、住户投诉管理、住户报修管理。以及上述物业信息的统计报表,这样可以便于物业公司对小区进行全面的了解和管理。
本次课程设计将按照图中数据库生命周期的各个阶段,逐步完成整个系统的设计。
3. 需求分析和数据库设计
3.1信息收集和需求分析
小区物业管理系统的系统结构分为个部分,如图1-2所示。
系统功能:用户注册、用户管理、修改密码、退出系统。
楼盘管理功能:楼盘管理、添加修改楼盘信息。
住户管理功能:住户管理、添加修改住户信息。
报修管理功能:报修管理、添加删除报修信息。
投诉管理功能:投诉管理。
住 户 管 理
楼 盘 管 理
报 修 管 理
投 诉 管 理
住 户 管 理
住 房 编 辑
楼 盘 管 理
楼 盘 编 辑
报 修 管 理
报 修 编 辑
投 诉 管 理
投 诉 编 辑
小区物业管理系统
小区物业管理系统
图1-2 物业管理系统工作流程
3.2概念设计——E-R图
本系统的实体有:小区住户基本信息实体、报修信息实体、投诉信息实体、楼盘信息实体。各个实体具体的描述E-R图如图1-3到图1-7所示。
住户信息
业主编号
姓名
性别
电话
名牌号
面积
身份证
图1-3 住户基本信息实体属性图
楼盘信息
楼盘编号
楼盘名称
楼层数
户型
面积
地址
图1-4楼盘信息实体属性图
报修信息
报修事项编号
报修名称
业主编号
维修状态
日期
受理人
图1-5 住户报修基本信息实体属性图
投诉信息
投诉事项编号
投诉名称
业主编号
解决状态
日期
受理人
图1-6 住户投诉基本信息实体属性图
住户信息
提交
申请
报修信息
投诉信息
n
n
1
m
m
n
楼盘信息
拥有
图1-7 实体之间关系E—R图
3.3逻辑设计
现在需要将上面的数据库概念结构转化为SQL Server 2000 数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。
小区物业管理系统数据库中各个表格的设计结果如下面的几个表所示。每个表表示在数据库中的一个数据表。
表1-1 用户表(user1表)
字段名
数据类型
可否为空
业主编号(主键)
Int
NOT NULL
楼盘编号
Int
NOT NULL
表1-2 住户基本信息表
字段名
数据类型
可否为空
业主编号(主键)
Int
NOT NULL
姓名
Char(20)
NOT NULL
性别
Char(20)
NOT NULL
电话
Int
NOT NULL
门牌号
Int unique
NOT NULL
面积
Int
NOT NULL
身份证
Char(20)
NOT NULL
表1-3 楼盘基本信息表
字段名
数据类型
可否为空
楼盘编号(主键)
Int
NOT NULL
楼盘名称
Char(20)
NOT NULL
楼层数
Int
NOT NULL
面积
Int
NOT NULL
户型
Char(20)
NOT NULL
地址
Char(20)
NOT NULL
表1-4 报修处理表
字段名
数据类型
可否为空
保修事项编号(主键)
Int
NOT NULL
业主编号
Int
NOT NULL
报修名称
Char(20)
NOT NULL
维修状态
Char(20)
NOT NULL
日期
Datetime
NOT NULL
受理人
Char(20)
NOT NULL
表1-5 投诉管理表
字段名
数据类型
可否为空
投诉事项编号(主键)
Int
NOT NULL
业主编号
Int
NOT NULL
投诉名称
Char(20)
NOT NULL
解决状态
Char(20)
NOT NULL
受理人
Char(20)
NOT NULL
日期
Detetime
NOT NULL
4. 表和索引的创建及数据完整性
4.1 建立数据库
create database 物业管理系统
4.2 建立数据表
用户表
Create table 用户表
( 业主编号 int primary key not nul,
楼盘编号 int not nul,
);
住户信息表
Create table 住户信息表
(业主编号 int primary key not null,
姓名 char(20) not null,
性别 char(20) check(性别 in('男','女')),
电话 int not null,
门牌号 int unique not null ,
面积 int not null,
身份证 char(20) unique not null
);
楼盘信息表
Create table 楼盘信息表
(楼盘编号 int primary key not null,
楼盘名称 char(20) not null,
楼层数 int not null,
面积 int not null,
户型 char(20) not null ,
地址 char(20) not null
);
报修信息表
Create table 报修信息表
(报修事项编号 int primary key not null,
业主编号 int not null,
报修名称 char(20) not null,
维修状态 char(20) default 'not',
日期 datetime default getdate() ,
受理人 char(20) not null,
foreign key (业主编号) references 住户信息表(业主编号)
);
投诉信息表
Create table 投诉信息表
(投诉事项编号 int primary key not null,
业主编号 int not null,
投诉名称 char(20) not null,
解决状态 char(20) default 'not',
日期 datetime default getdate(),
受理人 char(20) not null,
foreign key (业主编号) references 住户信息表(业主编号)
);
5. 数据库结构的实现
5.1 创建数据表
(1)创建住户表
create table 住户信息表
(业主编号 int primary key not null,
姓名 char(20) not null,
性别 char(20) check(性别 in('男','女')),
电话 int not null,
门牌号 int unique not null ,
面积 int not null,
身份证 char(20) unique not null
)
(2)创建楼盘信息表
create table 楼盘信息表
(楼盘编号 int primary key not null,
楼盘名称 char(20) not null,
楼层数 int not null,
面积 int not null,
户型 char(20) not null ,
地址 char(20) not null
)
(3)创建报修表
Create table 报修信息表
(报修事项编号 int primary key not null,
业主编号 int not null,
报修名称 char(20) not null,
维修状态 char(20) default 'not',
日期 datetime default getdate() ,
受理人 char(20) not null,
);
(4) 创建投诉表
Create table 投诉信息表
(投诉事项编号 int primary key not null,
业主编号 int not null,
投诉名称 char(20) not null,
解决状态 char(20) default 'not',
日期 datetime default getdate(),
受理人 char(20) not null,
);
5.2 建立视图
(1)创建业主信息视图
create view 业主信息视图
as
select 姓名 业主姓名,楼盘名称,门牌号,性别,电话,住户信息表.面积,身份证 from 住户信息表,楼盘信息表,拥有信息表
where 楼盘信息表.楼盘编号 = 拥有信息表.楼盘编号 and 住户信息表.业主编号 = 拥有信息表.业主编号
(2) 创建未维修事项信息视图
create view 未维修事项信息视图
as
select 报修名称,姓名 报修人,楼盘名称,门牌号,电话,日期 保修日期,受理人 from 报修信息表,住户信息表,楼盘信息表,拥有信息表
where 维修状态 != 'ok' and 楼盘信息表.楼盘编号 = 拥有信息表.楼盘编号 and 住户信息表.业主编号 = 拥有信息表.业主编号
and 报修信息表.业主编号 = 住户信息表.业主编号
(3)创建报修视图,只显示ID,Name,日期和维修否信息
create view 未解决投诉信息视图
as
select 投诉名称,姓名 投诉人,楼盘名称,门牌号,电话,日期 保修日期,受理人 from 投诉信息表,住户信息表,楼盘信息表,拥有信息表
where 解决状态 != 'OK' and 楼盘信息表.楼盘编号 = 拥有信息表.楼盘编号 and 住户信息表.业主编号 = 拥有信息表.业主编号
and 投诉信息表.业主编号 = 住户信息表.业主编号
5.3 创建触发器
住户信息表的级联更新删除
create trigger tri_Delete_Update
on 住户信息表 instead of update ,delete
as
begin
declare @inset char(6),@delet char(6)
select @inset=业主编号 from inserted
select @delet=业主编号 from deleted
if (update(业主编号))
begin
5.4 创建存储过程
(1)查询住户的信息存储过程
create proc 查询住户信息
as
select * from 住户信息表
(2)创建添加报修信息记录的存储过程
create proc 添加报修信息
@报修事项编号 char(20),
@业主编号 char(20),
@报修名称 char(20),
@受理人 char(20)
as
begin
insert into 报修信息表(报修事项编号,业主编号,报修名称,受理人)
values(@报修事项编号,@业主编号,@报修名称,@受理人)
end
6. 遇到的问题和解决方法
(1) 问题:T-SQL语句运行成功,切换到原有的表记录窗口没有变化
解决:原有的表记录窗口只有被刷新才能显示当前记录,方法是选择主菜单【查询】-【执行】命令或单击工具栏的【执行】按钮。
(2) 问题:对表设置数据完整性后,没有马上起作用
解决:数据完整性设置的调整和表结构修改后一样,在保存后才能起作用
7. 课程设计总结
至此,小区物业管理系统设计与实现顺利完成。由于当今的物业管理部门还不能有一个很统一的模式化,所以本系统仅考虑到一般小区所需要的物业管理的基本和主要的几项功能。本系统的开发应用能使小区物业管理实现信息化,查询方便、可靠性高、信息存储量大。
本系统在开发过程中,在固定的物业管理要求的模式下还添加了一些人性化的,个人的构思和创意。
本套小区物业管理系统符合基本需求功能,易于操作,应该可以在简单化模式下的小区内应用,存在要改进的地方再以后会进一步完善。
8. 参考文献
[1] 高云,崔艳春.《SQL Server 2008数据库技术实用教程》.清华大学出版社
[2] 《数据库原理及应用》 钱雪忠主编 北京邮电大学出版社
[3] 《SQL server 2000数据仓库与Analysis Services》 Bain T著 中国电力出版社
create database 物业管理系统
use 物业管理系统
--创建 楼盘信息表
create table 楼盘信息表
(
楼盘编号 int primary key not null,
楼盘名称 char(20) not null,
楼层数 int not null,
面积 int not null,
户型 char(20) not null ,
地址 char(20) not null
)
go
--创建表 住户信息表
create table 住户信息表
(
业主编号 int primary key not null,
姓名 char(20) not null,
性别 char(20) check(性别 in('男','女')),
电话 int not null,
门牌号 int unique not null ,
面积 int not null,
身份证 char(20) unique not null
)
go
--创建投诉信息表
create table 投诉信息表
(
投诉事项编号 int primary key not null,
业主编号 int not null,
投诉名称 char(20) not null,
解决状态 char(20) default 'not',
日期 datetime default getdate(),
受理人 char(20) not null,
foreign key (业主编号) references 住户信息表(业主编号)
)
go
--创建表 报修信息表
create table 报修信息表
(
报修事项编号 int primary key not null,
业主编号 int not null,
报修名称 char(20) not null,
维修状态 char(20) default 'not',
日期 datetime default getdate() ,
受理人 char(20) not null,
foreign key (业主编号) references 住户信息表(业主编号)
)
go
--创建拥有信息表
create table 拥有信息表
(
业主编号 int primary key not null,
楼盘编号 int not null
)
go
--楼盘信息的添加
insert into 楼盘信息表
values(1,'海天',5,120,'三室一厅','中山路号')
insert into 楼盘信息表
values(2,'柠檬夏天',10,120,'四室一厅','中山路号')
insert into 楼盘信息表
values(3,'指尖刹那',9,300,'四室一厅','中山路号')
--住户信息的添加
insert into 住户信息表
values(11,'林达','女','15980123','520','120','3505251992')
insert into 住户信息表
values(12,'谢可','女','15980147','521','100','3505251993')
insert into 住户信息表
values(13,'谢华','男','15980520','522','180','3505251994')
insert into 住户信息表
values(14,'张琳','男','15980369','523','250','3505251995')
insert into 住户信息表
values(15,'仲夏','男','15980789','524','300','3505251996')
--报修信息的添加
insert into 报修信息表(报修事项编号,业主编号,报修名称,受理人)
values(10,15,'水管爆裂','王砖家')
insert into 报修信息表(报修事项编号,业主编号,报修名称,受理人)
values(11,14,'电线端口安装','王砖家')
insert into 报修信息表(报修事项编号,业主编号,报修名称,受理人)
values(12,13,'大门锁坏掉','王砖家')
insert into 报修信息表(报修事项编号,业主编号,报修名称,受理人)
values(13,12,'灯泡更换','王砖家')
--投诉信息的添加
insert into 投诉信息表(投诉事项编号,业主编号,投诉名称,受理人)
values(100,11,'墙壁裂痕','胡说')
insert into 投诉信息表(投诉事项编号,业主编号,投诉名称,受理人)
values(101,12,'停水','胡说')
insert into 投诉信息表(投诉事项编号,业主编号,投诉名称,受理人)
values(102,13,'周围太吵','胡说')
insert into 投诉信息表(投诉事项编号,业主编号,投诉名称,受理人)
values(103,14,'乱丢垃圾','胡说')
--拥有信息表的添加
insert into 拥有信息表
values(11,1)
insert into 拥有信息表
values(12,2)
insert into 拥有信息表
values(13,2)
insert into 拥有信息表
values(14,2)
insert into 拥有信息表
values(15,3)
--查询结果
select * from 楼盘信息表
select * from 住户信息表
select * from 报修信息表
select * from 投诉信息表
select * from 拥有信息表
--楼盘信息编辑
update 楼盘信息表 set 楼盘名称 = '彩虹之家'
where 楼盘名称 = '海天'
go
--住户信息的编辑
update 住户信息表 set 电话 = '1314520'
where 电话 = '15980123'
go
--业主信息视图:通过该视图可以得到住户信息,包含业主姓名,楼盘名称,门牌号,性别,电话,面积,身份证
create view 业主信息视图
as
select 姓名 业主姓名,楼盘名称,门牌号,性别,电话,住户信息表.面积,身份证 from 住户信息表,楼盘信息表,拥有信息表
where 楼盘信息表.楼盘编号 = 拥有信息表.楼盘编号 and 住户信息表.业主编号 = 拥有信息表.业主编号
--未维修事项信息视图:报修名称,报修人,楼盘名称,门牌号,电话,保修日期,受理人。
create view 未维修事项信息视图
as
select 报修名称,姓名 报修人,楼盘名称,门牌号,电话,日期 保修日期,受理人 from 报修信息表,住户信息表,楼盘信息表,拥有信息表
where 维修状态 != 'ok' and 楼盘信息表.楼盘编号 = 拥有信息表.楼盘编号 and 住户信息表.业主编号 = 拥有信息表.业主编号
and 报修信息表.业主编号 = 住户信息表.业主编号
--未解决投诉信息视图:
create view 未解决投诉信息视图
as
select 投诉名称,姓名 投诉人,楼盘名称,门牌号,电话,日期 保修日期,受理人 from 投诉信息表,住户信息表,楼盘信息表,拥有信息表
where 解决状态 != 'OK' and 楼盘信息表.楼盘编号 = 拥有信息表.楼盘编号 and 住户信息表.业主编号 = 拥有信息表.业主编号
and 投诉信息表.业主编号 = 住户信息表.业主编号
--创建触发器
--实现级联更新和级联删除
--住户信息表的级联更新删除
create trigger tri_Delete_Update
on 住户信息表 instead of update ,delete
as
begin
declare @inset char(6),@delet char(6)
select @inset=业主编号 from inserted
select @delet=业主编号 from deleted
if (update(业主编号))
begin
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' --禁用约束
update 报修信息表
set 业主编号=@inset
where 业主编号=@delet
update 投诉信息表
set 业主编号=@inset
where 业主编号=@delet
update 拥有信息表
set 业主编号=@inset
where 业主编号=@delet
update 住户信息表
set 业主编号= @inset
where 业主编号= @delet
EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
--启用约束
end
else
begin
delete from 报修信息表
where 业主编号=@delet
delete from 投诉信息表
where 业主编号=@delet
delete from 拥有信息表
where 业主编号=@delet
delete from 住户信息表
where 业主编号=@delet
end
end
--查询结果
select * from 住户信息表
select * from 投诉信息表
select * from 报修信息表
--测试代码
update 住户信息表 set 业主编号 = 520
where 业主编号 = 11
--楼盘信息表的级联更新删除
create trigger tri_楼盘
on 楼盘信息表 instead of update ,delete
as
begin
declare @inset char(6),@delet char(6)
select @inset=楼盘编号 from inserted
select @delet=楼盘编号 from deleted
if (update(楼盘编号))
begin
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' --禁用约束
update 拥有信息表
set 楼盘编号=@inset
where 楼盘编号=@delet
update 楼盘信息表
set 楼盘编号 = @inset
where 楼盘编号 = @delet
EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL' --启用约束
end
else
begin
delete from 拥有信息表
where 楼盘编号=@delet
delete from 楼盘信息表
where 楼盘编号=@delet
end
End
--如当删除一条住户信息记录能够显示提示,当添加一条报修信息能够显示提示。
create trigger 删除住户 on 住户信息表
after delete
as
print '删除成功!!'
go
create trigger 添加报修 on 报修信息表
after insert
as
print '添加成功!!'
go
--创建存储过程:
--创建查询某一业主信息的存储过程
--查询住户的信息存储过程
create proc 查询住户信息
as
select * from 住户信息表
exec 查询住户信息
--创建添加报修信息记录的存储过程
create proc 添加报修信息
@报修事项编号 char(20),
@业主编号 char(20),
@报修名称 char(20),
@受理人 char(20)
as
begin
insert into 报修信息表(报修事项编号,业主编号,报修名称,受理人)
values(@报修事项编号,@业主编号,@报修名称,@受理人)
end
--创建返回某个楼盘的业主人数,并设置没有指定值时,指定一个默认楼盘
--默认楼盘编号为2
create proc 业主人数
as
select COUNT(*) 业主人数 from 拥有信息表
where 楼盘编号 = 2
create proc 楼盘住户表
@楼盘名称 char(20)
as
print @楼盘名称
begin
declare @姓名 char(10)
declare @性别 char(10)
declare @电话 char(10)
declare @门牌号 char(10)
declare @面积 char(10)
declare @身份证 char(10)
declare GR cursor
for
select 姓名,性别,电话,门牌号,面积,身份证 from 住户信息表
where 业主编号 in (select 业主编号 from 拥有信息表
where 楼盘编号 in (select 楼盘编号 from 楼盘信息表
where 楼盘名称 = @楼盘名称))
open GR
fetch next from GR into @姓名,@性别,@电话,@门牌号,@面积,@身份证
print '--------------------------------------------------------------------------------'
print '业主姓名' +' '+ '性别' +' '+ '电话'+' '+ '门牌号' +' '+ '面积'+' '+ '身份证'
while @@FETCH_STATUS = 0
begin
print @姓名 + @性别 + @电话+ @门牌号 + @面积+ @身份证
fetch next from GR into @姓名,@性别,@电话,@门牌号,@面积,@身份证
end
print '--------------------------------------------------------------------------------'
close GR
deallocate GR
end
go
--b.设计一个存储过程,在该存储过程中建立生成报表的游标,分别显示
--已解决的报修事项信息和未解决的报修事项信息。
--存储过程...生成报表
create proc 报修情况
as
begin
declare @业主编号 char(10),@报修名称 char(10), @日期 char(22)
declare @受理人 char(10)
--已解决的报修
declare BX_OK cursor
for
select 业主编号,报修名称,日期,受理人 from 报修信息表
where 维修状态 = 'ok'
open BX_OK
fetch next from BX_OK into @业主编号,@报修名称,@日期,@受理人
print '已经解决的报修事项'
print '--------------------------------------------------------------------------------'
print '业主编号 ' + '报修名称 ' + '日期 ' + '受理人 '
while @@FETCH_STATUS = 0
begin
print @业主编号 + @报修名称 + @日期 + @受理人
fetch next from BX_OK into @业主编号,@报修名称,@日期,@受理人
end
print '--------------------------------------------------------------------------------'
close BX_OK
deallocate BX_OK
print ''
print ''
--未完成报修的游标操作
declare BX_NOT cursor
for
select 业主编号,报修名称,日期,受理人 from 报修信息表
where 维修状态 = 'not'
open BX_NOT
fetch next from BX_NOT into @业主编号,@报修名称,@日期,@受理人
print '未解决的报修事项'
print '--------------------------------------------------------------------------------'
print '业主编号 ' + '报修名称 ' + '日期 ' + '受理人 '
while @@FETCH_STATUS = 0
begin
print @业主编号 + @报修名称 + @日期 + @受理人
fetch next from BX_NOT into @业主编号,@报修名称,@日期,@受理人
end
print '--------------------------------------------------------
展开阅读全文