中南大学数据库技术与应用.docx
《中南大学数据库技术与应用.docx》由会员分享,可在线阅读,更多相关《中南大学数据库技术与应用.docx(45页珍藏版)》请在冰点文库上搜索。
中南大学数据库技术与应用
《数据库技术与应用》
实验报告
实验题目:
宾馆信息管理系统
学生专业:
自动化
指导老师:
安剑奇
班级:
自动化0XXX
姓名:
XXXXXX
学号:
090XXXX
中南大学信息科学与工程学院
2011年1月
目录
第一章需求说明…………………………………………………3
1.1宾馆信息管理系统简介……………………………………3.
1.2设计要求……………………………………………………3..
1.2.1数据需求…………………………………………………………3
1.2.2需求分析………………………………………………………….3
1.2.3系统业务逻辑关系介绍………………………………………….4
第二章数据库结构设计……………………………………….6
2.1概念结构设计的方法与步骤………………………………6
2.1.1概念结构设计的方法…………………………………………6
2.1.2概念结构设计的步骤…………………………………………6
2.1.3系统的E-R模型………………………………………………7
2.2逻辑结构设计步骤…………………………………8.
2.2.1E-R图向系统关系模式的转换………………………………8
2.2.2确定关系模式的外码…………………………………………8
2.2.3确定表中各属性的详细信息(包括数据类型和长度等)……8
2.2.4建表并确定约束关系……………………………………………9
2.2.5报表的设计(视图的设计)……………………………………9
第三章数据库行为功能设计…………………………………9.
3.1安全控制……………………………………………………………9
3.2数据操作……………………………………………………………10
3.3生成报表……………………………………………………………17.
3.4存储过程设计………………………………………………………18..
第四章总结与展望…………………………………………19
附:
Delphi源代码…………………………………………20
第一章需求说明
1.1宾馆信息管理系统简介
宾馆管理信息系统是为宾馆量身定做的一套软件系统。
它以客人预订客房、入住、顾客信息管理和最后的退房结算为主线,提供查询,报表等一系列简单的任务,完成宾馆的信息化管理工作。
1.2设计要求
1.2.1数据需求
根据系统的需求,首先将要记录的信息分类,要记录的信息如下。
(1)顾客信息:
包括顾客姓名、性别、身份证号、入住日期、结算日期等。
(2)客房信息:
包括客房编号、客房类型、客房状态、客房价格、备注信息等。
(3)客房类型信息:
包括类型编号、类型名称、床位数量、空调有无、电视有无、卫生间有无、价格等。
(4)订房信息:
包括订房编号、客房编号、顾客姓名、身份证号、入住日期、结算日期、结算金额、备注等。
(5)系统管理者信息:
包括管理者登录账号、密码等。
(6)工作员工信息:
包括员工姓名、性别、身份证号、登录账号、密码等。
根据这些需要,本系统需要“顾客信息”表,“客房信息”表,“客房类型”表,“订房信息”表,“管理者信息”表和“员工信息”表。
1.2.2需求分析
经过分析,简单的宾馆信息管理系统主要应该具有以下功能模块,如图1.1。
(1)在顾客信息管理部分,要求如下。
●可以浏览顾客信息。
●可以对顾客信息进行维护,包括添加、删除、修改等操作。
(2)在客房管理部分,要求如下。
●可以浏览客房信息。
●可以对客房信息进行维护(包括客房信息和客房类型表中的内容),包括添加、删除、修改等操作。
(3)在订房信息管理部分,要求如下。
●可以浏览订房信息。
●可以对订房信息进行维护,包括添加、删除、修改等操作。
(4)在管理员首页的管理员信息管理部分,要求如下。
●显示当前数据库中管理者情况。
●对管理者信息维护操作。
(5)在管理者首页的员工信息管理部分,要求如下。
●可以查看员工信息。
●可以对员工信息进行维护。
(6)在员工首页的个人信息管理部分,要求如下。
●可以查看员工个人信息。
●可以对个人信息进行维护。
(7)在员工首页的员工信息查询部分,要求如下。
●可以查看所有员工基本信息(登录账号及密码除外)。
图1.1系统逻辑业务关系
1.2.3系统业务逻辑关系介绍
可以分别以管理员身份和员工身份登陆,然后再执行各项操作。
如图1.2所示,它显示了管理员登陆界面,如图1.3、1.4,显示了上述图1.1所示的系统业务逻辑关系。
图1.2管理员登陆界面
图1.3管理员首页
图1.4员工首页
第二章数据库结构设计
2.1概念结构设计的方法与步骤
2.1.1概念结构设计的方法
本系统采用自底向上的概念结构设计方法。
即首先定义各局部应用的概念结构,然后将它们集成起来得到全局概念模式。
2.1.2概念结构设计的步骤
概念结构设计可分为两个步骤:
1、抽象数据并设计局部视图。
就是对需求分析阶段收集到的数据按照E-R模型的要求进行分类、组织,形成实体的属性,标识实体的键,确定实体之间的联系类型,设计分E-R图。
2、集成局部视图,得到全局的概念结构。
就是要将所有的分E-R图综合成一个系统的总E-R图。
2.1.3系统的E-R模型
2.2逻辑结构设计步骤
2.2.1E-R图向系统关系模式的转换
有了基本E-R图后,就可以进行逻辑结构设计了,也就是设计基本的关系模型。
设计基本关系模式主要是从E-R图出发,将其直接转换为关系模式。
根据转换规则,这个E-R图转换的关系模式为:
1)客房类型(类型编号、类型名称、床位数量、空调有无、电视有无、卫生间有无、价格),主码为类型编号;
2)客房(客房编号、客房类型、客房空闲与否、价格、备注),主码为客房编号;
3)订房(订房编号、客房编号、顾客姓名、备注、结算金额),主码为订房编号;
4)顾客(姓名、性别、身份证号、入住日期、结算日期、联系方式),主码为身份证号;
5)员工(姓名、性别、身份证号、登陆账号、密码)
2.2.2确定关系模式的外码
在设计好了关系模式并确定好了每个关系模式的主码后,再看一下这些关系模式之间的关联关系,即确定关系模式的外码,可通过E-R图中的联系实体发现:
订房关系中,客房编号是外码,引用客房信息中的客房编号;订房关系中的顾客姓名引用顾客信息中的顾客姓名;
分类关系中,客房类型中的类型名称与客房信息中的客房类型是一样的;
2.2.3确定表中各属性的详细信息(包括数据类型和长度等)
(1)客房类型表:
类型编号:
char(10),key
类型名称:
char(16),notnull
床位数量:
numeric(9)
空调有无:
char
(2)
电视有无:
char
(2)
卫生间有无:
char
(2)
价格:
numeric(10,2)
(2)客房信息表:
客房编号:
varchar(12),key
客房类型:
char(16),notnull
客房空闲与否:
char
(2)
备注信息:
text(16)
(3)顾客信息表:
顾客姓名:
char(10),notnull
身份证号:
char(18),key
联系方式:
varchar(50)
入住日期:
datetime(8)
结算日期:
datetime(8)
(4)订房信息表:
订房编号:
char(14),key
顾客姓名:
char(10),notnull
客房编号:
varchar(12),notnull
结算金额:
numeric(9)
备注:
text(16)
(5)员工信息表:
姓名:
char(10),notnull
性别:
char
(2)
身份证号:
char(18),key
登陆账号:
char(20)
密码:
char(20)
(6)管理者信息表:
登录账号:
char(20),key
密码:
char(20),notnull
2.2.4建表并确定约束关系
约束关系:
主码外码(如2.2.2所分析),规则(性别中只能输入男或女),默认(员工默认登录密码是111111)。
2.2.5报表的设计(视图的设计)
有了数据库的基本表之后,应该看一下这些基本表能否满足产生报表的需求。
在数据库应用系统中,用户需要产生大量的报表,而报表的内容来自于数据库中的基本表,因此,在设计好数据库的基本表之后,要看一下这些基本表的内容是否全部包含了要产生的报表的内容。
订房信息(订房编号,顾客姓名,客房编号,入住日期,结算日期,结算金额,备注)
顾客姓名、入住日期和结算日期,可由顾客信息表得到;客房编号可由客房信息表得到;因此,可以满足订房信息表的要求,可以通过定义视图实现。
第三章数据库行为功能设计
3.1安全控制
(1)系统管理员:
有对系统的全部权限;
(2)员工:
有除添加、修改、删除其他员工信息的权限;
3.2数据操作
数据操作功能包括对这些数据进行录入、删除、修改功能。
(1)数据录入
只有具有相应权限的用户才能录入相应表中的数据。
(2)数据删除
只有具有相应权限的用户才能删除相应表中的数据。
删除数据时要注意表之间的关联关系,另外,在删除以前须提醒用户确认是否真的要删除此数据。
(3)数据修改
只有具有相应权限的用户才能修改相应表中的数据。
(4)数据查询
本系统应具有的一些查询要求有:
根据顾客姓名、性别、身份证号、入住日期、结算日期等信息查询顾客的基本信息;
根据客房编号、客房类型、客房状态等查询客房的基本信息;
根据订房编号、客房编号、顾客姓名、入住日期、结算日期等查询顾客的订房情况:
本系统用Delphi设计了数据操作的界面,完成数据录入、修改删除、查询等功能;
数据操作的界面截图如下:
管理者、员工首页:
注:
查询、修改、添加、删除功能截图以顾客信息管理为例
顾客信息管理:
选择方式查询
顾客信息管理:
添加了一条记录
顾客信息管理:
修改了一条记录
顾客信息管理:
删除记录
客房信息管理:
添加客房类型
订房信息管理
系统管理员信息:
系统管理员:
员工信息管理
员工:
对其他员工信息查询
员工个人信息维护:
3.3生成报表
3.4存储过程设计
存储过程1代码:
GOCREATEPROCEDUREadd_LX
@LXbhchar(10),
@LXnamechar(10),
@bednonumeric(9),
@ktchar
(2),
@TVchar
(2),
@wsjchar
(2),
@pricechar(10)
AS
insertinto客房类型表(类型编号,类型名称,床位数量,空调有无,电视有无,卫生间有无,价格)values
(@LXbh,@LXname,@bedno,@kt,@TV,@wsj,@price)
select*from客房类型表
存储过程2代码:
CREATEPROCEDUREadd_kfxx
@kfbhvarchar(12),
@namechar(16),
@statechar
(2),
@bztext
AS
insertinto客房信息表(客房编号,客房类型,客房空闲与否,备注信息)
values(@kfbh,@name,@state,@bz)
select*from客房信息表
GO
第四章总结与展望
1、设计的数据库系统的成功经验与不足
所设计的数据库系统,在概念结构、逻辑结构方面比较清晰明确,能够涉及基本的功能需求;在利用SQLServer2000创建数据库的过程中,对所学的知识如表的创建、视图的设计、规则和默认的使用,以及存储过程、角色等在运用中有了更深的理解和认识。
由于知识的欠缺,对一些知识的运用不够灵活,同时,在用Delphi设计前台界面时,一边自学、一边设计,遇到了很多问题,最终所需设计基本完成,但还有待进一步完善。
2、在学习建立数据库系统的过程中,感受如下:
扎实的理论基础。
如果不掌握它们,很难写出高水平的程序。
而这一点又是我们所缺乏的。
必要时与其他人交流,通过讨论解决问题。
要有良好的编程风格。
注意养成良好的习惯,代码的缩进编排,变量的命名规则要始终保持一致。
总之,通过这次课程设计,我更加熟练的掌握了使用了数据库应用系统进行系统开发及设计的方法,加深了对数据库课程知识的理解,同时也更加深入的了解了利用SQL语言操纵数据库的知识,并且对数据库里面的存储过程有了比较深入的了解。
经过一个月之内的努力,我终于完成了我的数据库课程设计宾馆信息管理系统。
进一步提高分析解决问题的综合能力。
由于时间、经验不足等的限制,系统还有很多不足之处,所以开发的系统不是很完善,但是宾馆管理的基本功能均已实现。
以前对数据库的很多知识认识都不深刻,做过这次课程设计之后,我对数据库的知识有了一个比较系统的了解;刚开始的时候,对于数据库设计方法等一系列知识都不熟悉,但当我基本完成此系统开发的时候,我发现其实也没有那么难,在未做之前我还害怕做不出来。
经过对这个系统的开发,在开发过程中遇到但也解决了很多问题。
这个课程设计使我巩固了数据库的知识。
此外,还尝试并体会到了自学一门语言(Delphi)的纠结与乐趣,这将成为我今后学习的宝贵经验。
在今后的学习中我会加强理论与实践的结合,通过不断的摸索来弥补自己的不足之处。
附:
Delphi源代码:
一、
implementation
usesUnit2,Unit3;
{$R*.dfm}
procedureTForm1.Button1Click(Sender:
TObject);
var
user:
string;password:
string;
begin
user:
=edit1.Text;
password:
=edit2.Text;
edit1.Text:
='';
edit2.Text:
='';
if(user<>'')and(password<>'')then
ADOQuery1.Close;
ADOQuery1.sql.clear;
casecombobox1.ItemIndexof
0:
begin
ADOQuery1.sql.Add('select*from管理者信息表where登录账号=:
userand密码=:
password');
ADOQuery1.Parameters.parambyname('user').datatype:
=ftstring;
ADOQuery1.Parameters.ParamByName('user').Value:
=user;
ADOQuery1.Parameters.parambyname('password').datatype:
=ftstring;
ADOQuery1.Parameters.ParamByName('password').Value:
=password;
ADOQuery1.Open;
ifNOTADOQuery1.IsEmptythen
begin
Form2.Show;
end;
ifADOQuery1.IsEmptythen
begin
showmessage('用户名不存在或密码错误!
');
edit2.Text:
='';
edit1.SetFocus;
end;
end;
1:
begin
ADOQuery1.sql.Add('select*from员工信息表where登录账号=:
userand密码=:
password');
ADOQuery1.Parameters.parambyname('user').datatype:
=ftstring;
ADOQuery1.Parameters.ParamByName('user').Value:
=user;
ADOQuery1.Parameters.parambyname('password').datatype:
=ftstring;
ADOQuery1.Parameters.ParamByName('password').Value:
=password;
ADOQuery1.Open;
ifNOTADOQuery1.IsEmptythen
begin
Form3.Show;
end;
ifADOQuery1.IsEmptythen
begin
showmessage('用户名不存在或密码错误!
');
edit2.Text:
='';
edit1.SetFocus;
end;
end;
end;
end;
procedureTForm1.Button2Click(Sender:
TObject);
begin
form1.Close;
end;
end.
二、
implementation
usesUnit4,Unit5,Unit6,Unit7,Unit8;
{$R*.dfm}
procedureTForm2.Button1Click(Sender:
TObject);
begin
Form4.Show;
end;
procedureTForm2.Button2Click(Sender:
TObject);
begin
Form5.Show;
end;
procedureTForm2.Button3Click(Sender:
TObject);
begin
Form6.Show;
end;
procedureTForm2.Button4Click(Sender:
TObject);
begin
Form7.Show;
end;
procedureTForm2.Button5Click(Sender:
TObject);
begin
Form8.Show;
end;
procedureTForm2.Button6Click(Sender:
TObject);
begin
Form2.Close;
end;
end.
三、
implementation
usesUnit4,Unit5,Unit6,Unit9,Unit10;
{$R*.dfm}
procedureTForm3.Button1Click(Sender:
TObject);
begin
Form4.Show;
end;
procedureTForm3.Button2Click(Sender:
TObject);
begin
Form5.Show;
end;
procedureTForm3.Button3Click(Sender:
TObject);
begin
Form6.Show;
end;
procedureTForm3.Button5Click(Sender:
TObject);
begin
Form9.Show;
end;
procedureTForm3.Button4Click(Sender:
TObject);
begin
Form10.show;
end;
procedureTForm3.Button6Click(Sender:
TObject);
begin
Form3.Close;
end;
end.
四、
implementation
{$R*.dfm}
procedureTForm4.Button1Click(Sender:
TObject);
var
gkcx:
string;
begin
gkcx:
=edit1.Text;
edit1.Text:
='';
casecombobox1.ItemIndexof
0:
begin
if(gkcx='')then
begin
showmessage('请输入您需要查询的顾客姓名!
');
end;
if(gkcx<>'')then
//ADOQuery1.Open;
ADOQuery1.Close;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Add('select*from顾客信息表WHERE顾客姓名=:
gkcx');
ADOQuery1.Parameters.parambyname('gkcx').datatype:
=ftstring;
ADOQuery1.Parameters.ParamByName('gkcx').Value:
=gkcx;
ADOQuery1.Open;
end;
1:
begin
if(gkcx='')then
begin
showmessage('请输入您需要查询的顾客性别!
');
end;
if(gkcx<>'')then
//ADOQuery1.Open;
ADOQuery1.Close;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Add('select*from顾客信息表WHERE性别=:
gkcx');
ADOQuery1.Parameters.parambyname('gkcx').datatype:
=ftstring;
ADOQuery1.Parameters.ParamByName('gkcx').Value:
=gkcx;
ADOQuery1.Open;
end;
2:
begin
if(gkcx='')then
begin
showmessage('请输入您需要查询的顾客身份证号!
');
end;
if(gkcx<>'')then
//ADOQuery1.Open;
ADOQuery1.Close;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Add('select*from顾客信息表WHERE身份证号=:
gkcx');
ADOQuery1.Parameters.parambyname('gkcx').datatype:
=ftstring;
ADOQuery1.Parameters.ParamByName('gkcx').Value:
=gkcx;
ADOQuery1.Open;
end;
3:
begin
if(gkcx='')then
begin
showmessage('请输入您需要查询的入住日期!
');
end;
if(gkcx<>'')then
//ADOQuery1.Open;
ADOQuery1.Close;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Add('select*from顾客信息表WHERE入住日期=:
gkcx');
ADOQuery1.Parameters.parambyname('gkcx').datatype:
=ftstring;
ADOQuery1.Parameters.ParamByName('gkc