⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 毕业论文.htm

📁 毕业论文中关于小型宾馆管理系统的详细设计
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<!--STATUS OK--><form action=http://www.baidu.com/s><table bgcolor=ffffff border=0 width=100% cellpadding=0><tr><td width=254><a href=http://www.baidu.com><img src=http://img.baidu.com/images/logo_kz.gif border=0></a><td><font size=-1 color=black><input name=wd size=30 style="font-size:16px;font-family:Verdana,Arial,Helvetica,sans-serif;"> <input type=submit value=百度搜索></font></td></tr><tr><td colspan=2><font size=-1 color=black>您的查询字词都已标明如下:<B style='color:black;background-color:#ffff66'><a href=#0>宾馆管理系统</a>&nbsp;</B><B style='color:black;background-color:#ff9999'><a href=#3>需求分析</a>&nbsp;</B> (点击查询词,可以跳到它在文中首次出现的位置)<br><font color=gray>(百度和网页<a href="http://211.80.184.8/zhoufm/jsj014班黄清茂_11号毕业设计/毕业论文.doc"><font color=blue>http://211.80.184.8/zhoufm/jsj014班黄清茂_11号毕业设计/毕业论文.doc</font></a>的作者无关,不对其内容负责。)</font></font></td></tr></table></form><hr><base href="http://211.80.184.8/zhoufm/jsj014班黄清茂_11号毕业设计/毕业论文.doc"><meta http-equiv="Content-Type" Content="text/html; charset=gb2312"><html><head><meta filetype="doc" doccountry="Simplified Chinese" author="lin" keyword="" subject="" comment="" manager="" company="lin" category="" createdate="" lastrevisor="" revisioncount="" edittime="" creator="" producer="" encryptionflag="" slides="" paragraphs="" bytes="" notes="" presentation="" lastsavetime=""><title>毕业论文</title><meta http-equiv="content-type" content="text/html;charset=gb2312"></head><body><BR>福建工程学院<BR>FUJIAN UNIVERSITY OF TECHNOLOGY<BR>毕业论文<BR>题 目: <a name=0></a><B style='color:black;background-color:#ffff66'>宾馆管理系统</B> <BR>学 生: 黄清茂 <BR>指导老师: 邹复民 <BR>专 业: 计算机及应用 <BR>班 级: 计算机014班 <BR>学 号: 2001310211 <BR>摘 要<BR><B style='color:black;background-color:#ffff66'>宾馆管理系统</B>是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面.对于前者要求建立起数据一致性和完整性强,数据安全性好的库.而对于后者则要求应用程序功能完备,易使用等特点.<BR> 因此本人结合开入式宾馆的要求,对MS SQL Server2000数据库管理系统,SQL语言原理,Delphi应用程序设计,Delphi数据库技术进行了较深入的学习和应用,主要完成对<B style='color:black;background-color:#ffff66'>宾馆管理系统</B>的<a name=3></a><B style='color:black;background-color:#ff9999'>需求分析</B>,功能模块划分,数据库模式分析,并由此设计了数据库结构和应用程序.系统运行结果证明,本文所设计的<B style='color:black;background-color:#ffff66'>宾馆管理系统</B>可以满足客户,宾馆工作人员和高级管理员三方面的需要.<BR> 第一章对数据库应用系统开发和<B style='color:black;background-color:#ffff66'>宾馆管理系统</B>进行了简明的介绍,并分析了开发<B style='color:black;background-color:#ffff66'>宾馆管理系统</B>所应进行的工作.<BR> 第二章对数据库的设计和SQL语言的使用进行了系统分析,为深入理解数据库应用打下了基础.<BR>第三章学习了具体的开发工具Delphi 6.0,对其数据库组件,SQL语言在Delphi中的应用等数据库编程关键技术进行了系统的介绍.<BR> 第四章分析了宾馆管理信息系统的应用需求,按照数据库设计理论一步一步地给出了系统需求说明书,局部ER图,全局ER图,系统关系模式,子模式,利用MS SQL Server2000建立了数据库.<BR> 第五章进行了具体的程序设计,具体划分了二类用户的操作权限,设计了了二个操作界面.实现了数据库表的浏览,记录的添加,删除和修改,报表的生成,实现了多数据库表的连接操作,实现了多条件查询等,并灵活实现了对不可更新查询结果集的更新操作,实现了主从表操作,实现了密码维护功能,最后,系统还可以导出数据库以Excel文件格式保存进行操作.<BR>设计充分利用Delphi 6,MS SQL Server2000数据库技术的强大力量,提高了编程效率和可靠性.<BR> <BR>关键词:数据库,SQL语言,MS SQL Server,Delphi6,数据库组件,宾馆管理,窗体,组件. <BR>目 录<BR> 前言<BR>随着我国经济的不断增长和旅游业的飞速发展,酒店行业的市场越来越广阔,竞争也越来越激烈.各种宾馆,酒店只有不断完善自身的管理手段和方法,提高自身的服务水平,才能得到充足和健康的发展.因此,宾馆业务的计算机管理就已经成为当务之急.<BR> 计算机的普及,信息技术的运用,越来越多的商家开始对自己的业务采用电脑管理,在应用之余,总希望有好的业务管理软件来帮助他们提高工作效益和管理水平.此类业务管理系统的开发过程中可积累丰富的经验,无论在业务管理,结帐收银,预订管理,营业项目管理,营业分析,统计报表,财务审核等经营运作的每一环节上,都将灵活地满足不同用户的要求.本以其超强的适用性,灵活性和通用性,已在各具有不同需要的服务行业中得到广泛的应用.系统数据的管理更是采用了操作系统的最新树节点管理方式,用户操作将会更简单,更直观,更方便.使用本系统,既可以大幅提高各业务部门本身的工作效率,也可自动完成各业务部门之间的各种营业信息,帐务,报表的自动化传输与汇总,全面杜绝'跑单'和收银舞弊,使各项业务工作制度化,科学化.本系统从客户预订,登记,消费到结帐出单均实现由"面"到"点"的一条龙帐务管理.<BR>第一章 绪 论<BR>§1.1 数据库应用系统开发简介<BR> 在数据库应用系统开发之前,对开发数据库的基本概念应当了解,对数据库的结构,开发数据库应用程序的步骤,开发体系及方法都应当有相当清晰的了解和认识.数据库应用系统开发的目标是建立一个满足用户长期需求的产品.开发的主要过程为:理解用户的需求,然后,把它们转变为有效的数据库设计.把设计转变为实际的数据库,并且这些数据库带有功能完备,高效能的应用.<BR>数据库技术在计算机软件领域研究中一直是非常重要的主题,产生于60年代,30多年来数据库技术得到了迅速发展,并已形成较为完整的理论体系和一大批实用系统.并且,近年来,随着World Wide Web(WWW)的猛增及Internet技术的迅速发展,使得数据库技术之时成为最热门技术之一.<BR>1.1.1 数据库<BR>显示了数据库系统的主要组件.数据库由DBMS(数据库管理系统)处理,DBMS则由开发人员和用户通过应用程序直接或间接地使用.它主要包括四个要素:用户数据,元数据,索引和应用元数据.<BR>1.1.1.1 用户数据 <BR>目前,大多数主流数据库管理系统把用户数据表示为关系.现在把关系看作数据表.表的列包含域或属性,表的行包含对应业务环境中的实体的记录.并非所有的关系都同样符合要求,有些关系比其它关系更结构化一些.第二章描述了一个用以产生良好结构关系的过程,称作规范化.<BR> 为了对比结构差的关系和结构好的关系之间的差别,以本文所设计的<B style='color:black;background-color:#ffff66'>宾馆管理系统</B>中的客房和客户关系为例来说明,假若设计关系R1(客户编号,姓名,性别,身份编号,联系电话,客房编号,客房名称,客房类别,价格,定金,状态,层数);这个关系的问题出在它有关于两个不同主题的数据,就是客户和客房.用这种方式构成的关系在进行修改时,会出现问题.因为一个客户可能订了许多客房,如果某个客房入住者的某个字段(如联系电话)出现变更,它所入住的客房记录(可能多个)也就必须变化,这是不好的.因此数据用两个关系表示更好.现在如果某客房的客户改变了它的联系电话,只有关系(表)guest的对应行需要改变.当然,要想产生一个,显示客房名称及其客户的联系电话的报表,就需要将这两个表的行结合起来.结果表明,将关系分别存储,在生成报表的时候将它们结合起来,比把它们存储在一个合成的表中更好.<BR>guest(客户编号,客房姓名,年龄,性别,工作单位,来源,身份证,联系电话)<BR>roomno(客房编号,客房名称,客房类别,价格,定金,状态,层数)<BR>1.1.1.2 元数据<BR>数据库是自描述的,这就意味着它自身包含了它的结构的描述,这种结构的描述称作元数据.因为DBMS产品是用来存储和操纵表的,所以大多数产品把元数据以表的形式存储,有时称作系统表.这些系统表存储了数据库中表的情况,指出每一个表中有多少列,那一列是主关键字,每一列的数据类型的描述,它也存储索引,关键字,规则和数据库结构的其他部分.<BR> 在表中存储元数据不仅对DBMS是有效的,对用户也是方便的,因为他们可以使用与查询用户数据同样的查询工具来查询元数据.本文第二章所介绍的SQL语言可以同时用于元数据和用户数据.<BR>1.1.1.3 索引 <BR>第三种类型的数据改进了数据库的性能和可访问性,这种数据经常称作开销数据,尽管有时也采用其他类型的数据结构,如链表,但它主要还是索引.索引可以用来排序和快速访问数据.下面以本人的宾馆管理信息系统中的roomno表为例来说明.<BR>假定数据在磁盘上是按'客房编号的递增顺序排列的,用户想打印一个按'客房名称'排序的客房数据报表.为此,所有的数据都需要从源表中提取出来并排序,除非表很小,否则这是一个很费时的过程.或者,可以在'客房名称'字段上创建一个索引,该索引的条目按照'客房名称'排序,这样,该索引的条目可以读出来,并用来按顺序访问roomno数据.<BR> 索引用于快速访问数据.例如,一个客户只想访问roomno表中'客房类别'豪华客房'的那些客户.如果没有索引,则必须搜索整个源表;但有了索引之后,可以找到索引条目,并使用它来挑选所有合适的行.<BR> 索引对排序和查找是有帮助的,但要付出代价.roomno表中的行每次改变时,索引也必须改变,这意味着索引并非随意的,应该在真正需要时保存.<BR>1.1.1.4 应用元数据 <BR>存储在数据库中的第四种数据是应用元数据,它用来存储用户窗体,报表,查询和其他形式的查询组件.并非所有的DBMS都支持应用组件,支持组件的DBMS也不一定把全部组件的结构作为应用元数据存储在数据库中.然而,大多数现代的DBMS产品存储这种数据作为数据库的一部分.一般来说,数据库开发人员和用户都不直接访问应用元数据,相反,他们通过DBMS中的工具来处理这些数据.MS SQL Server2000中就支持窗体,存储过程等应用元数据.<BR>1.1.2 数据库管理系统<BR>数据库管理系统(DBMS)是指数据库系统中管理数据的软件系统.DBMS是数据库系统的核心组成部分.对数据库的一切操作,包括定义,更新及各种控制,都是通过DBMS进行的.DBMS总是基于某种数据模型,可以把DBMS看成是某种数据模型在计算机系统上的具体实现.根据数据模型的不同,DBMS可以分成层次型,网状型,关系型,面向对象型等.MS SQL Server2000就是一种关系型数据库管理系统.<BR> 关系模型.关系模型主要是用二维表格结构表达实体集,用外键表示实体间联系.关系模型是由若干个关系模式组成的集合.关系模式相当于前面提到的记录类型,它的实例称为关系,每个关系实际上是一张二维表格.<BR> 关系模型和层次,网状模型的最大判别是用关键码而不是用指针导航数据,表格简单用户易懂,编程时并不涉及存储结构,访问技术等细节.关系模型是数学化模型.SQL语言是关系数据库的标准化语言,已得到了广泛的应用.DBMS的特点和功能可以分为三个子系统:设计工具子系统,运行子系统和DBMS引擎.<BR> 设计子系统有一个方便数据库及其应用创建的工具集.它典型地包含产生表,窗体,查询和报表的工具.DBMS产品还提供编程语言和对编程语言的接口.运行子系统处理用设计子系统开发的应用组件.它所包含的运行处理器用来处理窗体和数据库的数据交互,以及回答查询和打印报表等.<BR> DBMS引擎从其他两个组件接受请求,并把它们翻译成对操作系统的命令,以便读写物理介质上的数据.DBMS引擎还涉及事务管理,锁,备份和恢复.<BR>1.1.3 创建数据库,创建视图及存储过程<BR>创建视图是为了方便查询语句的编写,存储过程是为了实现数据的增,删,改等操作.游标与存储过程结合,主要是获取单个记录的值.<BR>1.1.3.1 数据库模式 <BR>数据库模式定义了数据库的结构,表,关系,域和业务规则.数据库模式是一种设计,数据库和应用正是建立在此基础上的.<BR> 域是一列可能拥有的值的集合.必须为每一个表的每一列确定域.除了数据的物理格式外,还需要确定是否有些域对表来说是唯一的.<BR> 数据库模式的最后一个要素是业务规则,它是对需要反映在数据库和数据库应用程序中的业务活动的约束.业务规则是模式的一个重要部分,因为他们指定了无论什么数据变化到达DBMS引擎,允许的数据值必须满足的约束.不管无效的数据变化请求是来自窗体的用户,查询/修改请求还是应用程序,DBMS都应该拒绝.遗憾的是,不同的DBMS产品用不同的方法实施业务规则.在某些情况下,DBMS产品不具备实施必要业务规则的能力,必须以代码形式把它们编入应用程序.<BR>1.1.3.2 创建表<BR>可使用SQL语言中的CRAETE TABLE 语句创建或者用企业管理器来实现.<BR>1.1.3.3 定义联系<BR>创建表的同时,定义各表间关键字段的联系.<BR>1.1.4 应用组件<BR>数据库应用包括窗体,查询,报表,菜单和应用程序.<BR>§1.2 <B style='color:black;background-color:#ffff66'>宾馆管理系统</B> <BR>当今时代是飞速发展的信息时代.在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境.计算机的最大好处在于利用它能够进行信息管理.使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性.尤其对于复杂的信息管理,计算机能够充分发挥它的优越性.计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提.本系统就是为了管理好宾馆信息而设计的. <BR>宾馆作为一种信息资源的集散地,客房和客户资料繁多,包含很多的信息数据的管理,现今,有很多的宾馆都是初步开始使用,甚至尚未使用计算机进行信息管理.根据调查得知,他们以前对信息管理的主要方式是基于文本,表格等纸介质的手工来处理,对于客房的入住情况(如入住天数,超过限定入住时间的天数)的统计和核实等往往采用对入住卡的人工检查进行,对客户的服务权限,以及入住天数等是用人工计算,手抄进行.数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找.总的来说,缺乏系统,规范的信息管理手段.尽管有的宾馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境.<BR>数据处理手工操作,工作量大,出错率高,出错后不易更改.宾馆采取手工方式对宾馆服务情况进行人工管理,由于信息比较多,宾馆服务信息的管理工作混乱而又复杂;一般入住情况是记录在入住登记卡上,客房的数目和内容记录在文件中,宾馆的工作人员和管理员也只是当时对它比较清楚,时间长了,如再要进行查询,就得在众多的资料中翻阅,查找了,造成查询费时,费力.如要对很长时间以前的客房进行更改就更加困难了.基于这此问题,我认为有必要建立一个<B style='color:black;background-color:#ffff66'>宾馆管理系统</B>,使宾馆管理工作规范化,系统化,程序化,避免宾馆管理的随意性,提高我们服务质量的同时又能够及时,准确,有效的查询和修改宾馆信息.<BR>1.2 系统所做工作 <BR>1) 了解应用开发工具的现状<BR> 2) Delphi6.0编程基础<BR> 3) MS SQL Server基础<BR> 4) 设计数据库;设计界面<BR> 5) 开发数据库.数据库实现的一些功能有<BR> l, 数据和数据说明的醒目显示;<BR> 2, 多条件的查询,多条记录的检索,模糊查询;<BR> 3 ,数据文件某种存储格式导入数据窗体,经过数据完整性校验存入数据库;<BR> 4 ,数据库安全性的设计;<BR> 5 ,数据库的设计,数据接口,界面的设计.<BR>§1.3 本文所作工作<BR> 绪论部分对数据库应用系统的结构,开发进行了简要介绍,分析了宾馆管理信息系统设计的特点和任务. <BR>第二章介绍了数据库的设计和范式分析,并系统介绍了SQL语言,为设计和理解应用程序做了铺垫.<BR> 第三章对系统介绍了Delphi 6.0的数据库编程技术,SQL语言在Delphi 6.0中的应用,MS SQL Server基础.<BR> 第四章分析了<B style='color:black;background-color:#ffff66'>宾馆管理系统</B>的应用需求,设计了系统的数据库结构,并根据需求对系统功能进行了划分和细化.<BR> 第五章根据第四章的设计结果利用MSSQL Server2000和Delphi 6.0进行了具体的应用程序设计.<BR> 总结部分介绍了设计体会和编程体会,并指出了系统设计中的不足和改进的方向.<BR>第二章数据库理论基础<BR>一个成功的信息管理系统,是建立在许多条件之上的,而数据库是其中一个非常重要的条件和关键技术.信息管理系统所涉及的数据库设计分五个步骤:数据库<B style='color:black;background-color:#ff9999'>需求分析</B>,概念设计,逻辑设计,物理设计与加载测试.<BR> (1) 数据库<B style='color:black;background-color:#ff9999'>需求分析</B>的任务是将业务管理单证流化为数据流,划分主题之间的边界,绘制出DFD图,并完成相应的数据字典.<BR> (2) 概念设计的任务是从DFD出发,绘制出本主题的实体-关系图,并列出各个实体与关系的纲要表.<BR> (3) 逻辑设计的任务是从E-R图与对应的纲要表出发,确定各个实体及关系的表名属性.<BR> (4) 物理设计的任务是确定所有属性的类型,宽度与取值范围,设计出基本表的主键,将所有的表名与字段名英文化(现在很多软件能支持中文字段,如MS SQL Server,我就是用的中文字段名),实现物理建库,完成数据库物理设计字典.<BR> (5) 加载测试工作贯穿于程序测试工作的全过程,整个录入,修改,查询,处理工作均可视为对数据库的加载测试工作.<BR>要设计出一个好的信息管理系统数据库,除满足系统所要求的功能外,还必须遵守下列原则:<BR> 1 基本表的个数越少越好.<BR> 2 主键的个数越少越好.键是表间连接的工具,主键越少,表间的连接就越简单.<BR> 3 字段的个数越少越好.<BR> 4 所有基本表的设计均应尽量符合第三范式.<BR> 数据库的设计中,如何处理多对多的关系和如何设计主键,是两个有着较大难度,需要重点考虑的问题.下面我们着重从SQL应用,数据库设计范式和查询优化等方面来分析本课题的系统关键技术和实现难点并加以解决.<BR>§2.1 数据库系统设计及范式分析 <BR>信息系统的主要任务是通过大量的数据获得管理所需要的信息,这就必须存储和管理大量的数据.因此建立一个良好的数据组织结构和数据库,使整个系统都可以迅速,方便,准确地调用和管理所需的数据,是衡量信息系统开发工作好坏的主要指标之一<BR>2.1.1 数据库系统设计<BR>数据库设计主要是进行数据库的逻辑设计,即将数据按一定的分类,分组系统和逻辑层次组织起来,是面向用户的.数据库设计时需要综合企业各个部门的存档数据和数据需求,分析各个数据之间的关系,按照DBMS提供的功能和描述工具,设计出规模适当,正确反映数据关系,数据冗余少,存取效率高,能满足多种查询要求的数据模型.数据库设计的步骤是: <BR>(1) 数据库结构定义:目前的数据库管理系统(DBMS)有的是支持联机事务处理CLTP(负责对事务数据进行采集,处理,存储)的操作型DBMS,有的可支持数据仓库,有联机分析处理CLAP(指为支持决策的制定对数据的一种加工操作)功能的大型DBMS,有的数据库是关系型的,有的可支持面向对象数据库.针对选择的DBMS,进行数据库结构定义.<BR> (2) 数据表定义:数据表定义指定义数据库中数据表的结构,数据表的逻辑结构包括:属性名称,类型,表示形式,缺省值,校验规则,是否关键字,可否为空等.关系型数据库要尽量按关系规范化要求进行数据库设计,但为使效率高,规范化程度应根据应用环境和条件来决定.数据表设计不仅要满足数据存储的要求,还要增加一些如反映有关信息,操作责任,中间数据的字段或临时数据表.<BR> (3) 存储设备和存储空间组织:确定数据的存放地点,存储路径,存储设备等,备份方案,对多版本如何保证一致性和数据的完整性.<BR> (4) 数据使用权限设置:针对用户的不同使用要求,确定数据的用户使用权限,确保数据安全.<BR> (5) 数据字典设计:用数据字典描述数据库的设计,便于维护和修改.<BR>为了更好地组织数据和设计出实际应用数据库,应该注意如下问题:<BR>规范化地重组数据结构:对数据进行规范化表达,这在后面将会具体讨论.<BR>关系数据结构的建立:在进行了数据基本结构的规范化重组后,还必须建立整体数据的关系结构.这一步设计完成后数据库和数据结构设计工作基本完成,只待系统实现时将数据分析和数据字典的内容代入到所设计的数据整体关系结构中,一个规范化数据库系统结构就建立起来了. <BR>建立关系数据结构涉及三方面内容:确定关联的关键指标项并建立关联表;确定单一的父系记录结构;建立整个数据库的关系结构. <BR> (1)链接关系的确定 <BR>在进行了上述数据规范化重组后,已经可以确保每一个基本数据表(我们简称为表)是规范的,但是这些单独的表并不能完整地反映事物,通常需要通过指标体系整体指标数据才能完整全面地反映问题.也就是说在这些基本表的各宇段中,所存储的是同一事物不同侧面的属性.那么计算机系统如何能知道哪些表中的哪些记录应与其它表中的哪些记录相对应,它们表示的是同一个事物呢 这就需要在设计数据结构时将这种各表之间的数据记录关系确定下来.这种表与表之间的数据关系一般都是通过主或辅关键词之间的连接来实现的.因为在每个表中只有主关键词才能唯一地标识表中的这一个记录值(因为根据第三范式的要求,表中其它数据字段函数都依赖于主关键词),所以将表通过关键词连接就能够唯一地标识出某一事物不同属性在不同表中的存放位置. <BR> (2)确定单一的父子关系结构 <BR>所谓确定单一的父系关系结构就是要在所建立的各种表中消除多对多(以下用M:N来表示)的现象,即设法使得所有表中记录之间的关系呈树状结构(只能由一个主干发出若干条分支,而不能有若干条主干交错发出若干条分支状况).所谓的"父系"就是指表的上一级关系表.消除多对多关系可以借助于E-R图的方法来解决,也可以在系统分析时予以注意,避免这种情况的发生. <BR>消除这种M:N情况的办法也很简单,只需在二表之间增加一个表,则原来M:N的关系就改成了M:1,1:N的关系了.<BR> 确定数据资源的安全保密属性:<BR> 一般DBMS都提供给我们自己定义数据安全保密性的功能.系统所提供的安全保密功能一般有8个等级(0-7级),4种不同方式(只读,只写,删除,修改),而且允许用户利用这8个等级的4种方式对每一个表自由地进行定义. <BR>定义安全保密性的方法一般有如下几种: <BR> a.原则上所有文件都定义为4级,个别优先级特别高的办公室(终端或微机的入网账号)可定义高于4级的级别,反之则定义为低于4的级别. <BR> b.统计文件(表)和数据录入文件一般只对本工作站定义为只写方式,对其它工作站则定义为只读方式. <BR> c.财务等保密文件一般只对中工作站(如财务科等)定义为可写,可改,可删除方式,对其它工作站则定义为只读方式,而且不是每个人都能读,只有级别相同和高级别者才能读.<BR>2.1.2 数据库设计范式分析 <BR>建立起一个良好的数据指标体系,是建立数据结构和数据库的最重要的一环.一个良好的数据指标体系是建立DB的必要条件,但不是充分条件.我们完全可以认为所建指标体系中的一个指标类就是关系数据库中的一个基本表,而这个指标类下面的一个个具体指标就是这个基本表中的一个字段.但如果直接按照这种方式建库显然还不能算最佳.对于指标体系中数据的结构在建库前还必须进行规范化的重新组织. <BR> a. 数据组织的规范化形式 <BR>在数据的规范化表达中,一般将一组相互关联的数据称为一个关系(relation),而在这个关系下的每个数据指标项则被称为数据元素(data element),这种关系落实到具体数据库上就是基本表,而数据元素就是基本表中的一个字段(field).规范化表达还规定在每一个基本表中必须定义一个数据元素为关键字(key),它可以唯一地标识出该表中其它相关的数据元素.在规范化理论中表是二维的,它有如下四个性质:<BR> l ,在表中的任意一列上,数据项应属于同一个属性(如图中每一列都存放着不同合同记录的同一属性数据). <BR> 2, 表中所有行都是不相同的,不允许有重复组项出现(如图中每一行都是一个不同的合同记录).<BR> 3, 在表中,行的顺序无关紧要(如图中每行存的都是合同记录,至于先放哪一个合同都没关系). <BR> 4, 在表中,列的顺序无关紧要,但不能重复(如图中合同号和合同名谁先谁后都没关系,但二者不可重复或同名). <BR> 在对表的形式进行了规范化定义后,数据结构还有五种规范化定义,定名为规范化模式,称为范式.在这五种范式中,一般只用前三种,对于常用系统就足够了.而且这五种范式是"向上兼容"的,即满足第五范式的数据结构自动满足一,二,三,四范式,满足第四范式的数据结构自动满足第一,二,三范式,……,依此类推.<BR> 第一范式(first normal form,简称1st NF)就是指在同一表中没有重复项出现,如果有则应将重复项去掉.这个去掉重复项的过程就称之为规范化处理.在本文所讨论的开发方法里,1st NF实际上是没有什么意义的.因为我们按规范化建立的指标体系和表的过程都自动保证了所有表都满足1st NF. <BR> 第二范式(second normal form,简称 2nd NF)是指每个表必须有一个(而且仅一个)数据元素为主关键字(primary key),其它数据元素与主关键字一一对应.例如,在图l9.7中如果我们将合同号定义为主关键字(其它数据元素中的记录数据都有可能重名,故不能作为主关键字),故只要知道了一个合同记录的合同号,就可以唯一地在同一行中找到该合同的任何一项具体信息.通常我们称这种关系为函数依赖(functional depEndence)关系.即表中其它数据元素都依赖于主关键字,或称该数据元素唯一地被主关键字所标识.<BR> 第三范式(third normal form,简称 3rd NF)就是指表中的所有数据元素不但要能够唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其它的函数关系.也就是说对于一个满足了 2nd NF的数据结构来说,表中有可能存在某些数据元素依赖于其它非关键宇数据元素的现象,必须加以消除.<BR>为防止数据库出现更新异常,插入异常,删除异常,数据冗余太大等现象,关系型数据库要尽量按关系规范化要求进行数据库设计.<BR>§2.2 SQL语言介绍<BR>2.2.1 SQL基础<BR>SQL(Structured Query Language,结构查询语言)是一个功能强大的数据库语言.SQL通常使用于数据库的通讯.ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言.SQL语句通常用于完成一些数据库的操作任务,比如在数据库中更新数据,或者从数据库中检索数据.使用SQL的常见关系数据库管理系统有:Oracle, Sybase, Microsoft SQL Server, Access, Ingres等等.虽然绝大多数的数据库系统使用SQL,但是它们同样有它们自立另外的专有扩展功能用于它们的系统.但是,标准的SQL命令,比如"Select", "Insert", "Update", "Delete", "Create"和 "Drop"常常被用于完成绝大多数数据库的操作.MS SQL Server 就是用的Transact- SQL.<BR>SQL语言有着非常突出的优点,主要是:<BR> 1, 非过程化语言<BR> 2,统一的语言<BR> 3,是所有关系数据库的公共语言<BR> 非过程化语言:SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航.SQL允许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集,所有SQL 语句接受集合作为输入,返回集合作为输出.SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入.<BR> SQL不要求用户指定对数据的存放方法, 这种特性使用户更易集中精力于要得到的结果;所有SQL语句使用查询优化器,它是RDBMS的一部分,由它决定对指定数据存取的最快速度的手段,查询优化器知道存在什么索引,在哪儿使用索引合适,而用户则从不需要知道表是否有索引,有什么类型的索引.<BR>统一的语言:SQL可用于所有用户的DB活动模型,包括系统管理员,数据库管理员, 应用程序员,决策支持系统人员及许多其它类型的终端用户.<BR>SQL为许多任务提供了命令,其中包括:<BR> 1, 查询数据<BR> 2, 在表中插入,修改和删除记录<BR> 3, 建立,修改和删除数据对象<BR> 4, 控制对数据和数据对象的存取<BR> 5, 保证数据库一致性和完整性<BR> 以前的数据库管理系统为上述各类操作提供单独的语言,而SQL 将全部任务统一在一种语言中.所有关系数据库的公共语言:由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS(关系数据库管理系统)转到另一个,所有用SQL编写的程序都是可以移植的.<BR>2.2.2 SQL语句 <BR>SQL功能强大,是一种完备的数据处理语言,不仅用于数据库查询,而且用于数据库中的数据修改和更新,概括起来,它可以分成以下几组:<BR>DML(Data Manipulation Language,数据操作语言):用于检索或者修改数据; DDL(Data Definition Language,数据定义语言): 用于定义数据的结构,比如 创建,修改或者删除数据库对象; <BR> DCL(Data Control Language,数据控制语言):用于定义数据库用户的权限.<BR> DML组可以细分为以下的几个语句:<BR> SELECT:用于检索数据;<BR> INSERT:用于增加数据到数据库;<BR> UPDATE:用于从数据库中修改现存的数据;<BR> DELETE:用于从数据库中删除数据.<BR> DDL语句可以用于创建用户和重建数据库对象.下面是DDL命令:<BR> CREATE TABLE,ALTER TABLE,DROP TABLE,CREATE INDEX,DROP INDEX<BR> 下面是一个简单SQL语句的例子:<BR> 我们使用SQL语句来从roomno中检索'客户编号'为'0001'的客户姓名:<BR> SELECT 姓名 FROM roomno WHERE '客户编号 = '0001'<BR>2.2.2.1 DDL与DML <BR>数据定义语言DDL:它是用来创建和修改数据库结构的一种语句,包括 Create,Alter和Drop 语句. <BR> 数据操作语言DML:包括数据查询与数据更新.数据查询主要是由Select语句完成,这一点不再赘述.而数据更新所造成的风险大大超过数据查询.数据库管理系统必须在更改期内保护所存储的数据的一致性,确保有效的数据进入数据库,数据库必须保持一致性,DBMS还必须协调多用户的并行更新,以确保用户和它们的更改不至于影响其它用户的作业.<BR>用于修改数据库内容的 SQL 语句主要有以下三个: <BR> (1) Insert,向一个表中加入新的数据行 <BR> (2) Delete,从一个表中删除数据行 <BR> (3) Update,更改数据库中已经存在的数据 <BR>Insert标准语法: <BR>INSERT INTO table_name (col1, col2...) VALUES(value1, value2...)<BR>下例要将客户编号为'0001'作为一个新的入住情况添加到客房信息表roomtable中<BR> Insert Into<BR> roomtable (客户编号,客房编号,启始时间,截止时间,入住时间) <BR> values ('0001','01402','2002-9-12', 2002-9-13', 2002-9-12')<BR>Insert 语句还可以将多行数据添加到目标表中去,在这种形式的 Insert 语句中,新行的数据值不是在语句正文中明确地指定的,而是语句中指定的一个数据库查询.添加的值来自数据库自身的行,在某些特定的状态下,这是非常有用的.多行 Insert 语句为拷贝数据提供了一种紧凑而高效的方法,但我在自已做的<B style='color:black;background-color:#ffff66'>宾馆管理系统</B>中没有使用这种方法,我在系统中是使用循环依照上面的用法来完成多个记录的插入. <BR>Update语句用于更新单表中选定行的一列或多列的值.要更新的目标表在语句中定义,Set子句则指定要更新哪些列并计算它们的值.Update语句总是包含Where语句,而且Update语句比较危险,所以您必须明确地认识到Where语句的重要性,Where语句被用来指定需要更新的行.<BR>标准语法:<BR>UPDATE table_name<BR>SET columnname1 = value1<BR>[, columname2 = value2]...<BR>WHERE search_condition<BR>Delete 语句标准语法:<BR>DELETE FROM tablename WHERE condition<BR>2.2.2.2 复杂操作实现<BR>在信息管理系统中,我们往往会遇到归类,汇总,映射,索引,子查询等复杂操作,相应的支持与实现如下:<BR>u GROUP BY方法<BR>GROUP BY子句语法为: <BR>SELECT column1, SUM(column2)<BR>FROM "list-of-tables"<BR>GROUP BY "column-list"; <BR>这个GROUP BY子句将集中所有的行在一起,它包含了指定列的数据以及允许合计函数来计算一个或者多个列.<BR>在本人的系统中在显示数据时用到了此语句来对查询所得的内容排序然后再显示.<BR>u 组合条件和布尔运算符<BR>以下的SQL语句中就含有组合条件:<BR>SELECT column1, SUM(column2)<BR>FROM "list-of-tables"<BR>WHERE "condition1" AND "condition2"; <BR>下面是一个示例:<BR>SELECT 身份描述<BR>FROM guest,roomno <BR>WHERE ID.身份证号=guest.身份编号 and user.客户编号=' 0001'; <BR>这条SQL语句是从guest,roomno表中查找客户编号为0001的入住者的身份描述,第三条语句中如果其中有一个条件为假,那么就什么都没有显示.<BR> UNION子句有些时候,需要一起浏览多个查询的结果,组合它们的输出,我们可以使用UNION关键字.<BR>第三章应用系统开发工具<BR>§3.1 Delphi6.0 VCL组件的体系结构<BR>Delphi类可以粗略地分成两部分:一部分是组件类,这些组件类通常以某种方式出现在组件面板上,当用户从组件面板上点取一个类的图标后,在程序中就自动生成了该类的对象(非可视组件除外);另一部分是功能类,这此功能类的对象通常出现在程序代码中,起着不可代替的作用,但是这些功能类在组件面板上是找不到的.在Delphi中,每一个类的祖先都是Tobject类,整个类的层次结构就像一棵倒挂的树,在最顶层的树根即为Tobject类.这样,按照面向对象编程的基本思想,就使得用户可用Tobject类这个类型代替任何其它类的数据类型.实际上在Delphi的类库中,Tobject类派生出了为数相当众多的子类,它们形成了一个庞大的体系,通常情况下,如果不自行开发组件,就不必了解整个类的体系结构,只用到类层次树的叶结点就足够了. <BR>这一小节简略介绍一下Delphi 6.0中VCL(可视化组件库)组件的体系结构.凡是做过程序开发的人都知道从来没有单纯的数据应用程序,也就是说,数据库应用程序必须和用户界面(可以是图形界面,也可以是命令接口)元素相结合,只讲界面或只讲数据库本身都构不成数据库应用程序,因而用Delphi 6.0开发数据库应用程序就隐含着界面开发.Delphi6中的VCL组件像TMediaPlayer(如图3-1所示)一样具有专业外观,富于吸引力的控件需要动态创建组件,并在创建组件时将图形资源装载到组件中.您已经学会如何使用Image Editor来创建Delphi组件资源(dcr)文件.如果把24×24像素的位图命名为与类相同的名字,并将DCR文件存储为与组件单元文件相同的名字——当然,扩展名是不同的;这样,在把单元添加到包的时候,Delphi将自动地装载相应的DCR文件.这时,这些位图将显示在VCL面板代表对应组件的按钮上(细节可以参考文献中"用Image Editor 创建组件资源文件").<BR>图3-1 TMediaPlayer组件的外观非常专业,它使用了位图,<BR> 在运行时从资源文件中动态装载(图中所示的speedis.avi <BR> 与Delphi一同发布,位于demos\coolstuf文件夹下)<BR>组件在Delphi程序的开发中是最显眼的角色.大家知道,在编写程序时一般都开始于在组件面板上选择组件并定义组件间的相互作用.但也有一些组件不在组件面板上,例如Tform和Tapplication(典型的非可视组件).组件是Tcomponents派生出来的子类,可以流的形式存放在DFM文件中,具有事件和Publish属性.<BR>窗口组件类是窗口化的可视化组件类,在Delphi的类库中占有最大的份额.在实际编程中,窗口组件类的对象都有句柄,可以接受输入焦点和包含其它组件.<BR>图形组件与窗口组件并列,是另一大类组件.图形组件不是基于窗口的,因而不能有窗口句柄,不能接受输入焦点和包含其它组件.图形组件的基类是TgraphicControl,在实际编程中,它们必须寄生于它们的宿主——窗口组件类的对象,由它们的拥有者负责其显示,而且它们还能触发一些和鼠标活动相关的事件.图形控件最典型的例子是Tlabel和TspeedButton.由此可以看出图形组件的功能很弱,图形组件的用处何在呢 其实使用图形组件的最大好处在于节省资源,正是因为它们的功能较弱,所以使用的系统资源就要少.在一个应用程序中,如果能在不影响其功能的前提下合理大量地使用图形组件,将会大减少程序对系统资源的消耗.<BR>非可视组件是与可视组件相并列的另一类组件,非可视组件在程序运行中是不可见的(除各种对话框组件之外,事实上有人认为对话框组件不能归入非可视组件,应该是另一种介于可视与非可视之间的组件). <BR>最后要说明一下,常说的控件实际上是一种组件.也就是说组件这个概念要大于控件,控件在内涵上包含于组件中.控件由Windows系列操作系统提出并使用,而组件是Borland和其它厂商在对Windows控件做了必要的扩展之后提出来的概念,它们是在不同时期由不同的厂商提出的概念.<BR>§3.2 数据库组件介绍<BR>用Delphi6开发数据库应用,重点是和各种数据库组件打交道,能和数据库挂钩的组件对象有5种,它们是:Session(数据库会话),Database(数据库),Dataset(数据集),DataSource(数据源),Data control(数据控制组件,也叫data-controls即数据感知组件).其中前面4种统称为数据访问(Data Access)组件.<BR> ADO组件 Delphi6.0包含了可以用来访问Microsoft公司的ActiveX Data Objects(ADO)格式数据库的组件.ADO是Micrsoft公司关于各种类型数据的高等界面,后来逐渐演变成满足所有数据访问需要的完整解决办法.ADO的对象模型是所有数据访问接口对象模型中最简单的一种.Microsoft公司用来访问ADO数据的应用程序界面技术是OLE DB.OLE DB是一种底层编程接口,用来访问许多不同类型的数据源,其中包括消息,文件系统以及其他一些非传统的数据源.OLE DB是一个由Component Object Model(COM)接口组成的集合,用来隐藏创建数据访问服务过程中的细节.OLEDB提供了访问任何数据资源的方法,包括相互关联的数据库和相互不关联的数据库,Email和文件系统,文本和图形以及用户定义的数据对象.<BR>Delphi的ADO组件无需依靠BDE而是使用ADO技术,提供了可以通过数据控制组件访问数据的新方法.唯一的要求是在使用ADO组件时必须运行ADO/OLE-DB.ADO组件的使用使得DELPHI在访问数据的类型和采用的技术方面都有了很大的突破.<BR>数据模块设计窗口 数据模块设计窗口是用来设计和维护数据模块的.数据模块设计窗口中包含了所有以.DTI作为文件扩展名的Data Diagram文件的信息.DTI文件在编译时不起任何作用.<BR>§3.3 SQL语言在Delphi中的应用 <BR>在Delphi中使用SQL语言非常方便,一般来说,都是通过Tquery或TADOquery组件来使用SQL语言的.可以在Tquery或TADOquery组件的SQL属性中设置SQL语句.设计程序时,在该组件的属性对话框中选择SQL属性,单击带省略号的按钮,就可以打开String List Editor对话框,然后我们就可以在对话框中添加SQL语句.还可以使用Delphi的SQL Builder来自动生成SQL语句,这样可以避免手工编写SQL而可能造成的语法错误.<BR> 静态SQL语句在程序设计时便已固定下来,它不包含任何参数和变量.动态SQL语句,也被称作参数化的语句,在其中间包含着表示字段名或表名的参数,例如下面的语句是一条动态SQL语句: <BR> Select * From roomno Where 客房编号 =:roomnumber; <BR>其中的变量roomnumber便是一个参数变量,它由一个冒号引导,在程序运行过程中,必须要为该参数赋值,该条SQL语句才能正确执行,每次运行应用程序时可以为该参数变量赋予不同的值.为参数赋值有三种方法:<BR> ①根据参数在SQL语句中出现的顺序,设置TADOQuery组件的parameters属性值为参数赋值.<BR> ②直接根据SQL语句中各参数的名字,调用ParamByName方法来为各参数赋值.<BR> ③将TADOQuery组件的DataSource属性设置为另一个数据源,这样将另一个数据源中与当前TADOQuery组件的SQL语句中的参数名相匹配的字段值赋给其对应的参数.利用这种方法也能实现所谓的连接查询,创建主要—明细型数据库应用.<BR>在使用动态SQL语句编程时,常常用到一个很重要的方法Prepare,调用Prepare 方法之后,Delphi会将带参数的SQL语句传送给与其对应的数据库引擎,对动态SQL语句进行语法分析和优化.虽然在用动态SQL语句编程时,调用Prepare方法并不是必须的,但是调用Prepare方法后,会极大地提高动态SQL 语句的执行性能,特别是当要反复多次执行同一条动态SQL语句时,其优越性会更加明显. 如果在应用程序中执行一条SQL语句之前并没有显式地调用Prepare方法,每次在执行SQL 语句时,Delphi会隐含地调用Prepare方法以准备这个查询.<BR> TadoQuery部件还有一个Prepare属性,这是一个布尔型属性,当其属性值为True时, 表明该查询已被准备好了( SQL 语句已被传送到数据库引擎中 ) , 当我们使用参数编辑器Parameters Editor来为动态SQL语句中的参数赋值时,当设置完相应的参数值并退出参数编辑器时,Delphi会隐含地调用Prepare方法以准备好查询.<BR>当SQL语句执行完之后,要想准备下一个查询,首先必须调用Close方法,然后才能调用Prepare方法准备下一个查询.一般来说,在一个应用程序中应该调用一次Prepare方法,常常在窗体的OnCreate事件处理过程中调用Prepare方法, 然后用上述介绍的方法为参数赋值,最后调用Open方法或ExecSQL方法执行SQL语句,以完成查询.<BR>当然在调用Prepare方法准备好一个查询时,会消耗一些数据库资源, 因而每当一个查询执行完毕之后,要养成调用UnPrepare方法以撤消查询的好习惯.在运行程序过程中,通过程序改变TQuery或TADOquery部件的SQL属性值时,Delphi会自动地调用Close方法和UnPrepare 方法,以撤消查询.<BR> 在程序运行过程中,要想设置Tquery或TADOquery部件的SQL属性,必须首先调用Close方法,关闭TQuery或TADOquery部件,然后再调用Clear方法清除SQL属性中现存的SQL命令语句, 最后再调用Add方法为SQL属性设置新的SQL命令语句.例如: <BR>with query1 do<BR> begin<BR> close;<BR> sql.Clear;<BR> sql.Add('select guestno 客户编号,name 姓名,sex 性别,age 年龄,workunit 工作单位,source 来源, idcardno 身份证号码, telphone 电话号码');<BR> sql.Add('from guest');<BR> sql.Add('where guestno='''+edit1.text+'''');<BR>open; <BR>在为TQuery或TADOquery部件设置SQL属性时调用Close方法总是很安全的,如果TQuery或TADOquery部件已经被关闭了,调用Close方法时不会产生任何影响.在应用程序中为SQL属性设置新的SQL 命令语句时,必须要调用Clear方法以清除SQL属性中现存的SQL命令语句,如果不调用Clear方法,便调用Add方法向SQL属性中设置SQL命令语句,那么新设置的SQL命令语句会追加在现存SQL命令语句后面, 在程序运行时常常会出现出乎意料的查询结果甚至程序无法运行下去.<BR> 在这里要特别注意的,一般情况下TQuery或TADOquery部件的SQL属性只能包含一条完整的SQL语句,它不允许被设置成多条SQL语句.当然有些数据库服务器也支持在TQuery或TADOquery部件的SQL属性中设置多条SQL语句,只要数据库服务器允许这样,我们在编程时可以为 SQL 属性设置多条SQL语句.<BR>在为TQuery或TADOquery部件设置完SQL属性的属性值之后,也即编写好适当的SQL程序之后,可以有多种方式来执行SQL程序.<BR> 在设计过程中,设置完TQuery或TADOquery部件的SQL属性之后将其Active属性的值置为True, 这样便可以执行SQL属性中的SQL程序,如果应用中有与TQuery或TADOquery部件相连的数据浏览部件( 如TDDGrid TDBEdit等)那么在这些数据浏览部件中会显示SQL程序的执行结果.<BR> 在应用程序运行过程中,通过程序调用TQuery或TADOquery组件的Open方法或ExecSQL 方法可以执行其SQL属性中的SQL程序.Open方法和ExecSQL方法是不一样的.Open方法只能用来执行SQL语言的查询语句(Select命令), 并返回一个查询结果集,而ExecSQL方法还可以用来执行其它常用的SQL语句(如INSERT, UPDATE, DELETE等命令),例如:<BR> Query1.Open (这样会返回一个查询结果集)<BR>如果调用Open方法,而没有查询结果时,会出错.此时应该调用ExecSQL 方法来代替Open方法.如:<BR>Query1.ExecSQL (没有返回结果)<BR>当然在设计应用程序时,程序设计人员是无法确定TQuery或TADOquery组件中的SQL 语句是否会返回一个查询结果的.对于这种情况应当用Try…Except模块来设计程序.在 Try 部分调用Open方法,而在Except部分调用ExceSQL方法,这样才能保证程序的正确运行.<BR>例如: <BR>Try<BR>Query1.Open<BR>Except<BR>Query1.ExecSQL<BR>End<BR>通过Tquery或TADOquery组件可以获得两种类型的数据:<BR>1,"活动"的数据<BR>这种数据就跟通过TTable部件获得的数据一样,用户可以通过数据浏览部件来编辑修改这些数据,并且当调用Post方法或当焦点离开当前的数据浏览部件时,用户对数据的修改自动地被写回到数据库中.<BR>2,非活动的数据(只读数据)<BR> 用户通过数据浏览部件是不能修改其中的数据.在缺省情况下,通过TQuery部件获得的查询结果数据是只读数据,要想获得"活动"的数据,在应用程序中必须要设置Tquery或TADOquery组件的RequestLive属性值为True,然而并不是在任何情况下(通过设置RequestLive的属值True)都可以获得"活动"的数据的,要想获得"活动"的数据,除了将TQuery部件的RequestLive属性设置为True外,相应的SQL命令还要满足以下条件.<BR>本地SQL语句查询情况下,要得到可更新的数据集,SQL语句的限制为:<BR>a>查询只能涉及到一个单独的表<BR>b> SQL语句中不能包含ORDER BY命令<BR>c> SQL语句中不能含聚集运算符SUM或AVG<BR>d> 在Select后的字段列表中不能有计算字段<BR>e> 在Select语句WHERE部分只能包含字段值与常量的比较运算,这些比较运算符是:Like, >, =, 查询只能涉及到一个单独的表<BR>g> SQL语句中不能包含ORDER BY命令<BR>h> SQL语句中不能含聚集运算符SUM或AVG运算 <BR>另外,如果是查询Sybase数据库中的表,那么被查询的表中只能有一个索引.<BR>如果在应用程序中要求TQuery或TADOquery组件返回一个"活动"的查询结果数据集,但是SQL 命令语句不满足上述约束条件时,对于本地数据库的SQL查询,BDE只能返回只读的数据集.对于数据库服务器中的SQL查询,只能返回错误的代码.当Tquery或TADOquery组件返回一个"活动"的查询结果数据集时,它的CanModIfy属性的值会被设置成True.<BR>§3.4 MS SQL Server简述 <BR>SQL Server 是一个后台数据库管理系统,它功能强大操作简便,日益为广大数据库用户所喜爱.越来越多的开发工具提供了与SQL Server的接口.SQL Server 是一个关系数据库管理系统,它最初是由Microsoft,Sybase 和Ashton-Tate三家公司共同开发的.于1988 年推出了第一个OS/2 版本,在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server 移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本.<BR>SQL Server 2000 是Microsoft 公司推出的SQL Server 数据库管理系统的最新版本,该版本继承了SQL Server 7.0 版本的优点,同时又比它增加了许多更先进的功能,具有使用方便,可伸缩性好与相关软件集成程度高等优点.可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2000 的大型多处理器的服务器等多种平台使用.MSSQL Server不但可以应用于大中型数据库管理中,建立分布式关系数据库,并且也可以开发桌面数据库.事实上,SQL Server数据库处理的基本结构,采取关系型数据库模式,尽管如此,相信大家都可以轻易的发现,在SQL Server的数据库处理方式,则是使用面向对象的操作方式与精神,也就是说,SQL Server的所有功能,都可以基于系统已经建立好的一些对象来达成,是相当OO(面向对象)的一个系统结构.<BR>SQL Server 企业管理器是 SQL Server 的主要管理工具,它提供了一个遵从 MMC 标准的用户界面,使用户得以: <BR>· 定义 SQL Server 实例组.<BR>· 将个别服务器注册到组中.<BR>· 为每个已注册的服务器配置所有 SQL Server 选项.<BR>· 在每个已注册的服务器中创建并管理所有 SQL Server 数据库,对象,登录,用户和权限.<BR>· 在每个已注册的服务器上定义并执行所有 SQL Server 管理任务.<BR>· 通过唤醒调用 SQL 查询分析器,交互地设计并测试 SQL 语句,批处理和脚本.<BR>· 唤醒调用为 SQL Server 定义的各种向导.<BR>第四章 <B style='color:black;background-color:#ffff66'>宾馆管理系统</B>设计分析<BR>§4.1 应用<B style='color:black;background-color:#ff9999'>需求分析</B><BR><B style='color:black;background-color:#ffff66'>宾馆管理系统</B>需要满足来自三方面的需求,这三个方面分别是客户,宾馆工作人员和宾馆管理人员.客户的需求是查询宾馆所存的客户,个人预定,入住(消费)情况及个人信息的修改;宾馆工作人员对客户的预定,入住服务及退房等要求进行操作,同时形成入住退房报表给客户查看确认;宾馆管理人员的功能最为复杂,包括对工作人员,客户,客房进行管理和维护,及系统状态的查看,维护并生成客房信息查看报表.<BR><B style='color:black;background-color:#ffff66'>宾馆管理系统</B>用例流程分析<BR>1,预定:<BR>前提条件:房间空闲<BR>输入:输入客户基本信息:姓名,联系方式,房间号码,入住时间(也是自动过期时间),预定时间.<BR>流程:客户要求预定(与系统无关)-->用户查询符合用户要求的房间-->符合条件的房间空闲(推荐其他房间)-->执行预定工作-->结束.<BR> -->符合条件的房间不空闲-->后备预定<BR> --->不存在符合条件的房间(推荐的也不满意)-->结束<BR>结果:房间占用<BR>2,入住:<BR>前提条件:房屋空闲<BR>输入:用户详细信息:姓名,性别,证件号码,证件种类,房间号码(如果没有通过预定或住在非预订房间),联系方式,入住时间(如果没有预定),预计结算日期.<BR>流程:<BR>客户要求租用<BR> |-->如果已经预订-->执行租用房屋-->结束<BR> |-->如果没有预定-->查询符合条件的房屋<BR> |-->存在符合条件的房屋(不存在但推荐的房屋也可)-->执行租用-->结束<BR> |-->不存在符合条件的房屋-->结束<BR>结果:房间占用<BR>3,延期:<BR>前提条件:已经租用房间,房间没有被预订<BR>输入:更改新的预计结算日期<BR>流程:客户要求延期<BR>|-->满足上述前提条件-->更改预计结算日期-->结束<BR> |-->房屋已经被预订<BR> |-->更换房间不满意-->结束<BR> |-->更换房间满意-->租用流程.<BR>结果:房间占用 <BR>4,结算:<BR>前提条件:已租用房间<BR>输入:房屋入住的费用<BR>流程:计算房间入住的费用.<BR>结果:房间空闲<BR>5,解除预定:<BR>前提条件:已预订房间<BR>输入:<BR>流程:取消预定<BR>结果:房间空闲<BR>6,候补预定:<BR>前提条件:房间已经全部被预订或使用<BR>输入:同预定<BR>流程:候补预定<BR>结果:房屋出现候补预定状态.<BR>7,查询房间出租情况:<BR>前提条件:<BR>输入:用户组合的查询条件<BR>流程:根据查询条件进行查询<BR>结果:得到查询结果<BR>餐厅管理模块也类似我们不给予列出.<BR>其中宾馆服务人员和管理人员应该属于客户端的类,而其他则属于服务器端的类.(其中预定信息,入住信息以及查询信息应该以接口的形式存在.<BR>4.11系统数据库应用需求的总结:<BR>单机结构:对客房预定和入住,包厢预定,结账等<B style='color:black;background-color:#ffff66'>宾馆管理系统</B>的业务均由一台机子完成,这样工作效率低下,计算机之间数据不共享,不能节约宾馆的成本.该方案不予以考虑.<BR>二层(C/S)结构:由前端应用程序完成对客房预定和入住,包厢预定,结账等<B style='color:black;background-color:#ffff66'>宾馆管理系统</B>的业务的操作,由服务器完成对数据存取,存储,查询计算和优化,并发控制以及故障等,并控制前端应用程序的访问.因些其优点可归纳为以下几点:<BR>数据处理及通信功能封装在一个共享的后端数据库中存储过程中.不同的客户端程序都能访问这个后端数据库.<BR>缩小了客户端程序的规模,使得客户端程序更容易进行开发也就是说前端应用程序可以做得比较瘦.<BR>可以同时处理多种任务或同时多种类型相同的任务大提高工作效率,所有信息都存储在后端数据库中.<BR>三层分布式结构:多层结构其实是对传统C / S结构的扩展.由于采用多层体系结构就是把一个数据库应用程序分解成几个逻辑部分,客户端程序集中处理数据显示部分和用户与数据之间的交互作用,而不涉及数据的存储过程,数据的维护等等.应用服务器(即中间层)协调各个用户之间的请求,并且掌握数据集定义的全部细节以及和远程数据库服务器进行数据通信.后端数据库实现数据的存储等操作.因此,其优点可归纳如下:<BR>1,将数据处理及通信功能封装在一个共享的中间层里.不同的客户端程序都能访问这个中间层,这样就避免了为每个客户程序复制数据处理部分而产生的冗余.<BR>缩小了客户端程序的规模,使得客户端程序更容易进行开发.这都是因为不需要安装,配置和维护数据库连接软件,比如B D E (即B o r l a n d数据库引擎).<BR>用分布式数据处理过程.将一个应用程序要处理的任务分在几台机器上进行处理,从而提高了程序执行的性能.<BR>高了数据的安全性.将不同的数据功能封装成一定的中间层,并且授予不同的访问权限,这样就能保证对数据的访问限制.使用D e l p h i中的M T S或者C O R B A技术支持这项功能. <BR>§4.2数据流图:<BR>我们采用SA(结构化分析)自顶向下的分析方法:<BR>顶层图:<BR>系统流程图:<BR>§4.3 系统功能模块划分<BR>系统功能框图如图4-2所示<BR> 如图4-2系统功能框图<BR>系统设置<BR>方便系统安全运作可以进行用户修改密码,权根设置,及添加的功能;<BR>根据用户的视觉要求不同可以选择合适的系统界面皮肤;<BR>如果程序或进程运行过多导致系统运行较慢可选择注销系统进行系统初始化;<BR>前台系统<BR>预定信息:管理顾客姓名,房间种类,入住时间等信息.提供给旅店服务人员使用,实现预定房间;<BR>客户入住:管理顾客姓名(需要更信息的内容),房间种类,租用时间等信息.提供给旅店服务人员使用;<BR>客户点菜:客户可以按食品类别进行选择自己喜欢的菜;<BR>客户结帐,前台查询:根据顾客要求(预定信息,入住信息,点菜信息)进行查询,预订,候补预定,入住房间,解除预定,结账.<BR>数据编辑<BR>对客房,包厢,菜谱按类别进入信息管理可添加,删除,修改等功能的操作.<BR>人事管理<BR>部门编辑:按宾馆(企业)的人事部门结构按部门进行人事信息编辑;<BR>职工管理:主要解决了人事档案的计算机存储,检索,重点解决了复杂查询的问题和系统纪录更新过程复杂的问题.包括对员工人事档案的登记,检索,查看,修改,删除等操作;<BR>职工查询:登记档案时可分别添加用户的基本信息和其他信息,并可存储用户照片;检索用户可自定义查询条件,使得查询结果更加精确;结合工作引擎提供请假申请,出差申请功能;<BR>业绩分析<BR>客户查询:提供给管理人员查询当前入住客户及历史客户记录等操作.<BR>客房查询:提供给管理人员查询当前客房入住的客户名单及入住情况做出相应的策略.<BR>包箱查询:提供给管理人员查询当前包箱消费的客户名单等操作.<BR>订单查询:提供管理人员查询客房,包箱预定及点菜的信息操作.<BR>营业情况:提供管理人员查询当天及历史的营业情况等做出相应的策略.<BR>呼叫系统<BR>提供客房呼叫前台工作人员进行服务及内员操作员工之间通知,留言等通信功能.<BR>系统帮助<BR>使用说明:方便用户使用本系统;<BR>辅助工具:提供操作人员工作方便有记事本,计算机器,万年历;<BR>关于系统:提供系统作者等相关信息;<BR>硬件信息:提供PC硬件信息包括:CPU,内存,硬盘容量等信息.<BR>§4.4 系统数据库设计<BR>在概念设计阶段中,设计人员从用户的角度看待数据及处理要求和约束,产生一个反映用户观点的概念模式.然后再把概念模式转换成逻辑模式.将概念设计从设计过程中独立开来,使各阶段的任务相对单一化,设计复杂程度大大降低,不受特定DBMS的限制.<BR>利用ER方法进行数据库的概念设计,可分成三步进行:首先设计局部ER模式,然后把各局部ER模式综合成一个全局模式,最后对全局ER模式进行优化,得到最终的模式,即概念模式<BR>(1) 设计局部ER模式<BR>4.41实体和属性的定义:<BR>客户表(客户编号(日期+顺序号+识别码),客房姓名,年龄,性别,工作单位,来源,身份证,联系电话)<BR>收费表(客户编号,应收费用,已收定金,实际收费用)<BR>菜谱表(编号,菜名,原料,价格)<BR>点菜表(编号,客户编号,菜名号,价格,时间)<BR>餐桌表(餐桌编号,客户编号,定金编号,状态,起始时间,截止时间)<BR>定金设置表(定金编号,类别名称,金额)<BR>包厢表(包厢编号,客户编号,状态,类别,定金编号,桌数,价格,起始时间,截止时间)<BR>客房表(客房编号,状态,类别,定金编号,价格,起始时间,截止时间,客户编号)<BR>部门表(部门编号,名称)<BR>人事表(员工编号,姓名,性别,部门号,职位,学历,藉贯,录用时间)<BR>日收入支出表(编号,日收入总额,日支出总额)<BR>ER模型的"联系"用于刻画实体之间的关联.一种完整的方式是对局部结构中任意两个实体类型,依据<B style='color:black;background-color:#ff9999'>需求分析</B>的结果,考察局部结构中任意两个实体类型之间是否存在联系.若有联系,进一步确定是1:N,M:N,还是1:1等.还要考察一个实体类型内部是否存在联系,两个实体类型之间是否存在联系,多个实体类型之间是否存在联系,等等.联系定义如图4-5所示.解释如下:<BR> 一个消费者(客户)只能具有一种身份,而一种身份可被多个消费者所具有;<BR> 一本客房或包厢只能属于一种客房类别(包厢类别),而一种客房类别(包厢类别)可以包含多间客房或包厢;<BR> 一个客户可以预定或入住多间不同的客房或包厢,在某种情况下客房也可以被多个不同的客户预定或入住.<BR>(2)设计全局ER模式<BR>所有局部ER模式都设计好了后,接下来就是把它们综合成单一的全局概念结构.全局概念结构不仅要支持所有局部ER模式,而且必须合理地表示一个完整,一致的数据库概念结构.<BR>1)确定公共实体类型<BR>为了给多个局部ER模式的合并提供开始合并的基础,首先要确定各局部结构中的公共实体类型.在这一步中我们仅根据实体类型名和键来认定公共实体类型.一般把同名实体类型作为公共实体类型的一类候选,把具有相同键的实体类型作为公共实体类型的另一类候选.<BR>2)局部ER模式的合并<BR>合并的原则是:首先进行两两合并;先和合并那些现实世界中有联系的局部结构;合并从公共实体类型开始,最后再加入独立的局部结构.<BR>3)消除冲突<BR>冲突分为三类:属性冲突,结构冲突,命名冲突.<BR>设计全局ER模式的目的不在于把若干局部ER模式形式上合并为一个ER模式,而在于消除冲突,使之成为能够被所有用户共同理解和接受的同一的概念模型.<BR>4)全局ER模式的优化<BR>在得到全局ER模式后,为了提高数据库系统的效率,还应进一步依据处理需求对ER模式进行优化.一个好的全局ER模式,除能准确,全面地反映用户功能需求外,还应满足下列条件:实体类型的个数要尽可能的少;实体类型所含属性个数尽可能少;实体类型间联系无冗余.<BR>综上所述,"<B style='color:black;background-color:#ffff66'>宾馆管理系统</B>"的全局ER模式如图4-3所示.<BR>4.4.2 关系数据库的逻辑设计<BR>由于概念设计的结果是ER图,DBMS一般采用关系型(本人所使用的MS SQL Server就是关系型的DBMS),因此数据库的逻辑设计过程就是把ER图转化为关系模式的过程.由于关系模型所具有的优点,逻辑设计可以充分运用关系数据库规范化理论,使设计过程形式化地进行.设计结果是一组关系模式的定义.<BR>(1) 导出初始关系模式<BR>guest(客户编号,客房姓名,年龄,性别,工作单位,来源,身份证,联系电话)<BR>room(客房编号,状态,类别,定金编号,价格,起始时间,截止时间,客户编号)<BR>……….<BR>(2) 产生子模式<BR>子模式是用户所用到的那部分数据的描述.除了指出用户用到的数据外,还应指出数据与概念模式中相应数据的联系,即指出概念模式与子模式之间的对应性.<BR>4.4.3 数据库的实现<BR>我选用Microsoft SQL Server2000(企业版)数据库来进行数据库的逻辑设计.首先创建十七个基本数据库表如表一至十七所示,然后根据全局ER图,建立各个表之间的联系. <BR><B style='color:black;b

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -