机械 模具 夹具 数控 车床 工艺 液压 汽车 电机 升降台 控制 Proe CAD 建模 加速器 机械手 齿轮 误差 诊断 自动化 电气 监控 组态 电源 发电 水电 电站 单片机 PLC MATLAB 蹊径 盘算机 Android Linux 电子 通讯 治理系统 网站 ASP JSP PHP Java Asp.net 服装网服装论坛 进销存 图书 考试 Web 购物 点餐 生意营业 平台 群集妄图 装备 C++ C# 土木 修建 施工 结构 框架 桥梁 水利 公路 隧道 造价 给水 教授修养楼 办公楼 水库 重力坝 化工 剖析 工段 物流 仓储 包装 开题 义务书 外文 文献 翻译 辩说 名堂 课程
 首 页 机械卒业设计 电子电气卒业设计 盘算机卒业设计 土木匠程卒业设计 视觉转达卒业设计 收费卒业设计 牛牛棋牌下载 卒业论文 卒业设计论文流程 
垫片
您现在所在的职位:首页 >>收费卒业设计 >> 文章内容
垫片
   我们供应全套卒业设计论文服务,联系   625110801   
图书客栈治理系统的设计
文章泉源:mog-net.com   宣布者:师长教员卒业作品网站   宣布时间:2008-09-16 09:20:22   浏览:60831

摘 要
    本系统主要完成对图书客栈的库存治理,网罗图书入库、出库、库存,员工信息,供应商信息和密码治理等六个方面。系统可以完成对种种信息的浏览、查询、添加、删除、修改、报表等功效。
    系统的焦点是入库、库存和出库三者之间的联系,每个表的修改都将联动的影响其它的表,当完成入库或出库操作时系统会自动地完成库存的修改。查询功效也是系统的焦点之一,在系统中即有单条件查询和多条件查询,也有准确查询和模糊查询,系统不只需静态的条件查询,也有静态天生的条件查询,其目的都是为了便应用户应用。系统有完全的用户添加、删除和密码修改功效,并具有报表打印功效。
系统接纳Microsoft Office中的Access 2000来设计数据库,并应用以后优良的开发工具—Delphi 6.0 ,它有着最为无邪的数据库结构,对数据库应用有着优胜的支持。
    论文主要简介了本课题的开发配景,所要完成的功效和开发的历程。重点的说清晰了了系统设计的重点、设计头脑、难点手艺和处置赏罚赏罚妄图。

要害字:数据库,SQL语言,Delph 6,数据库组件,客栈治理

目 录

第一章 弁言 ……………………………………………………………………………1
1.1 课题泉源 ……………………………………………………………………1
1.2 开发工具的选择 ……………………………………………………………2
1.3 所做的主要使命 ……………………………………………………………3
第二章 数据库概论 ……………………………………………………………………4
2.1 数据库的生长 ………………………………………………………………4
2.1.1 数据库的生长 …………………………………………………………4
2.1.2 数据库阶段的特点 ……………………………………………………5
2.1.3 数据库手艺 ……………………………………………………………6
2.2 数据库现实基础 ……………………………………………………………7
2.2.1 数据库模子 ……………………………………………………………7
2.2.2 数据库系统结构 ……………………………………………………10
2.2.3 数据的自力性 ………………………………………………………11
2.2.4 范式 …………………………………………………………………11
2.3 SQL语言基础 ……………………………………………………………13
2.3.1 SQL简介 ……………………………………………………………13
2.3.2 SQL查询 ……………………………………………………………13
2.3.3 SQL数据更新 ………………………………………………………14
第三章数据库开发工具 ……………………………………………………………16
3.1 Delphi 6.0 简介 ……………………………………………………………16
3.2 Delphi 6.0 控件 ……………………………………………………………17
3.2.1 ADO数据会见组件 …………………………………………………17
3.2.2 数据控制类DataControl ……………………………………………18
3.2.3 数据会见类DataAccess ……………………………………………18
3.2.4 SQL语言在Delphi中的应用 ………………………………………19
3.3 Access 简介 ………………………………………………………………21
第四章 系统全体设计 ………………………………………………………………23
4.1 系统需求剖析 ……………………………………………………………23
4.2 系统提要设计 ……………………………………………………………25
4.2.1 系统结构设计 ………………………………………………………25
4.2.2 数据库设计 …………………………………………………………27
4.2.2.1 ER图设计 ……………………………………………………27
4.2.2.2 数据库表格设计………………………………………………29
4.3系统详细设计………………………………………………………………34
第五章 系统应用法式模范模范设计 …………………………………………………………37
5.1 系统窗体模块组成…………………………………………………………37
5.2 数据模块窗体设置…………………………………………………………38
5.3 主窗体功效模块的完成……………………………………………………39
5.4 入库、出库窗体模块的完成………………………………………………43
5.5 查询功效的完成……………………………………………………………51
5.6 系统上岸窗体模块的完成…………………………………………………52
5.7 用户治理功效的完成………………………………………………………54
5.7.1 用户治理主窗体 ……………………………………………………54
5.7.2 密码修改窗体模块的完成 …………………………………………54
5.7.3 用户注册窗体模块的完成 …………………………………………55
5.7.4 用户刊出窗体模块的完成 …………………………………………57
阻拦语 …………………………………………………………………………………59
申谢 ……………………………………………………………………………………60
参考文献 ………………………………………………………………………………61
第一章 引 言
  §1.1 课题泉源

    随着社会经济的迅速生长和迷信手艺的周全前进,盘算机事业的飞速生长,以盘算机与通讯手艺为基础的信息系统正处于蓬勃生长的时代。随着经济文明水平的显着前进,人们对生涯质量及使命情形的请求也愈来愈高。书籍做为人类的精神粮食,在现代社会中愈来愈遭到看重,大量的书籍涌现在市场上,人们有了种种各样不合的选择。与此同时,为了治理大量的图书,图书客栈也大量的泛起,客栈的治理效果也就提上了日程。随着图书的大量增添,其治理难度也愈来愈大,若何优化客栈的寻常治理也就成了一个夷易近众化的课题。
    在盘算机飞速生长的明天,将盘算机这一信息处置赏罚赏罚利器应用于客栈的寻常治理曾经是必将所然,而且这也将为客栈治理带来史无前例的改变,它可以带来意想不到的效益,同时也会为企业的飞速生长供应无限潜力。接纳盘算机治理信息系统已成为客栈管文迷信化和现代化的主要标志,它给企业治理来了显着的经济效益和社会效益。主要展现在:
    极大前进了客栈使命职员的使命效力,大大增添了以往入出存流程繁琐,杂乱,周期长的弊病。基于客栈治理的周全自动化,可以增添入库治理、出库治理及库存治理中的破绽,可以节约许多治理开支,增添企业支出。客栈的治理的操作自动化和信息的电子化,周全前进了客栈的治理水平。随着我国刷新开放的赓续深刻,经济飞速的生长,企业要想生计、生长,要想在强烈的市场竞争中立于不败之地,没有现代化的治理是切切不行的,客栈治理的周全自动化、信息化则是其中极端主要的部门。为了加速客栈治理自动化的措施,前进客栈的治理营业处置赏罚赏罚效力,培植客栈治理系统已变得很是心要。入库、库存、出库照样现在企业图书客栈治理的老例基本形式,虽然,比来又泛起了许多新的治理形式,如:基于零库存头脑的沃尔玛特治理要领,但这些新的头脑在中国大部门企业的治理中照样难以完成的。以是若何设计好客栈治理系统,尽能够地增添客栈治理的重复性和低效性就成为以后最为主要的效果。图书客栈治理的焦点是入库、库存和出库之间的联系,若那里置赏罚好三者之间的关系是系统最为要害的部门。另外,员工信息和供应商信息治理也是客栈治理中一个必弗成少的部门,它供应着与入库和出库相关的地一些信息,使得所有系统加倍完全,加倍适用。经由历程对客栈治理寻常使命的详细查询会见,群集了大量的质料,从系统结构的组织,功效的完成,手艺的要求和可行性等多方面阻拦推敲,以为本课题是一个顺应当今图书客栈治理需求的盘算机信息治理系统,具有一定的现实开发价值和应用价值。
  §1.2 开发工具的选择
    自Java身世以来,随着Internet手艺的普及和应用需求的变换,以第四代语言为主的应用开发产物发生了较大的变换,它们不只已成为人们开发应用的开发工具,而且许多产物已生长成为一种强有力的应用开发情形。这些新型的开发工具通常以一种集成软件包的形式供应给开发职员,被称为Studio(使命室)或Suite(法式模范模范组)。例如,微软的Visual Studio 6.0,Borland公司的Delphi 6.0等数据库赞助开发工具。
    现在,市场上可以选购的应用开发产物许多,盛行的也有数十种。现在在我国市场上最为盛行、应用最多、最为先进的可用作企业级开发工具的产物有:
Microsoft公司的Visual Basic 6.0版
Microsoft公司的Visual C 6.0版
Borland公司的Delphi 6.0版
    在现在市场上这些浩荡的法式模范模范开发工具中,有些强调程语言的弹性与推行效力;有些则着重于可视化法式模范模范开发工具所带来的便利性与效力的得高,各有各的优点和特点,也知足了不适用户的需求。可是,语言的弹性和工具的便利性是密弗因素的,只需便利的工具,却没有弹性的语言作支持,许多特殊化的处置赏罚赏罚行动必须要消耗数倍的年光来处置赏罚赏罚,使得原来所标榜的效力前进的优点掉落去了作用;相反,假定只强调程语言的弹性,却没有便利的工具作合营,会使一些纵然异常质朴的界面处置赏罚赏罚行动,也会严重地铺张法式模范模范设计师的名贵时间。
    而Delphi是一个异常理想选择。Delphi 6 是操作系统中快速应用开发情形的最新版本。它也是以后Windows平台上第一个周全支持最新Web服务的快速开发工具。岂论是企业级用户,照样小我开发者,都能够应用Delphi 6 轻松、快捷地构建新一代电子商务应用。Delphi 6 是唯一支持所有新泛起的工业尺度的RAD情形,网罗XML(扩大标志语言)/XSL(可扩大项目语言),SOAP(质朴工具存取协定)和WSDL(Web服务器形貌语言)等。
    Delphi 6 是可视化的快速应用法式模范模范开发语言,它供应了可视化的集成开发情形,这一情形为应用法式模范模范设计职员供应了一系列无邪而先进的工具,可以普遍地用于种类应用法式模范模范设计。在Delphi 6 的集成开发情形中,用户可以设计法式模范模范代码、运转法式模范模范、阻拦法式模范模范弱点的调试等,可视化的开发措施降低了应用法式模范模范开发的难度。Delphi的基础编程语言是具有面向工具特点的Pascal语言,即Object Pascal 。Object Pascal具有代码稳固、可读性好、编译速率快等优点,并将面向工具的看法移植到了Pascal语言中,使这类基础语言有了新的生长空间。应用Delphi 6.0 ,我们简直可以作任何使命,还可以撰写种种种类型的应用法式模范模范,静态链接库(DLL)、CON、或CORBA工具,CGI/ISAPI法式模范模范,Microsoft Back Office应用法式模范模范。法式模范模范的规模小到质朴的小我数据库应用,大到严重的企业的多条理漫衍式系统,都可以应用Delphi阻拦开发,其友好的集成开发界面,可视化的双向开发形式,优胜的数据库应用支持高效的法式模范模范开发和法式模范模范运转,备受宽大法式模范模范开发职员的好评。特殊是Delphi对数据库应用的强盛支持,大大前进了数据库应用软件开发的效力,延伸了开发周期,深受宽大数据库应用法式模范模范设计职员的喜欢。Delphi为数据库应用开发职员供应了富厚的数据库开发组件,使数据库应用开发功效更强盛,控制更无邪,编译后的法式模范模范运转速率更快。
  §1.3 本文所唱使命
    弁言部门简介了本系统的课题泉源和对数据库开发工具的选择。
    第二章简介了数据库的生长,关系数据库,数据库系统结构,并系统简介了SQL语言,为设计和明确应用法式模范模范做了铺垫。
    第三章系统简介了Delphi 6.0及其部门控件,SQL语言在Delphi 6.0中的应用,和Access等。
第四章是本文的主体,凭证软件工程的请求,从需求剖析泉源,经由提要设计最后到详细设计,完成对所有系统的设计。
    第五章凭证第四章的设计效果应用Access 2000和Delphi 6.0阻拦了详细的窗体和应用法式模范模范设计。
总结部门简介了设计体会和编程体会,并指出了系统设计中的缺乏和刷新的偏向

第二章 数据库概论
  §2.1 数据库的生长
    数据库处置赏罚赏罚在信息系统的研究中一直是异常主要的主题,可是,近年来,随着World Wide Web(WWW)的猛增及Internet手艺的迅速生长,使得数据库手艺之时成为最热门手艺之一。数据库手艺能使Internet应用超出具有早期应用特点的质朴的宣布。同时,Internet手艺供应了一种向用户宣布数据库内容的尺度化的会见措施。这些手艺没有脱离经典数据库手艺的请求。它们只是减轻了数据库手艺的主要性。
数据库的设计和开发及网罗艺术有网罗工程。明确用户的需求,然后,把它们改酿成有用的数据库设计是一个艺术历程。把设计改酿成现实的数据库,而且这些数据库带有功效完全、高效能的应用,是一个工程历程。
数据库的目的是赞助人们跟踪事务。经典的数据库应用触及诸如订单、主顾、使命、员工、师长教员、德律风之类的项,或其它数据量较大、须要密起关注的事务。比来,由于数据库的普及,数据库手艺曾经被应用到了新的领域,诸如用于Internet的数据库或用于公司内联网的数据库。数据库也被愈来愈多地应用于天生和掩护多媒体应用法式模范模范上。
盘算机的数据处置赏罚赏罚应用,起主要把大量的信息以数据形式存放在存储器中。存储器的容量、存储速率直接影响到数据治理手艺的生长。从1956年临盆出第一台盘算机到现在,存储器的生长,为数据库手艺供应了优胜的物质基础。
应用盘算机以后,数据处置赏罚赏罚的速率和规模,岂论是相关于手工要领,照样机械要领,都有没有可较量的优势。通常在数据处置赏罚赏罚中,盘算是较量质朴的而数据的治理却较量严重。数据治理是指数据的群集、整理、组织、存储、掩护、检索、传送等操作,这部门操作是数据处置赏罚赏罚营业的基本环节,而且是任何数据处置赏罚赏罚营业中必弗成少的共有部门。数据治理手艺的优劣,将直接影响数据处置赏罚赏罚的效力。
2.1.1 数据库的生长
数据治理手艺的生长,与硬件(主若是外存)、软件、盘算机应用的规模有亲近的联系。数据治理手艺的生长经由三个阶段:人工治理阶段、文件系统阶段和数据库阶段。
人工治理阶段和文件系统阶段都有着相当多的弱点,诸如数据冗余性 ,数据不不合性和数据联系弱等等。也正是由于这些启事,促令人们研究新的数据治理手艺,从而发生了数据库手艺。
20世纪60年月末发生的三件大事,条理模子IMS系统的推出、关于网状模子DBTG申报的揭晓和关于关系模子论文的一连揭晓标志住数据治理手艺进入数据库阶段。进入70年月以后,数据库手艺取得迅速生长,开发了许多有用的产物并投入运转。数据库系统战胜了文件系统的弱点,供应了对数据更高等更有用的治理。
当进入数据库阶段后,随着数据治理规模一再再三再三扩大,数据量急剧增添,为了前进效力,泉源时,人们只是对文件系统加以扩大,在应用文件中培植了许多赞助索引,组成倒排文件系统。但这着实不克不及事实处置赏罚赏罚效果。在20世纪60年月末,磁盘手艺取得主要停留,具有数百兆容量和快速存取的磁盘陆续进入市场,资源也不高,为数据库手艺的发生供应了优胜的物质条件。
2.1.2 数据库阶段的特点
(1)增添数据的重复(Redundancy can be reduced)
当在一个非数据库系统当中,每个应用法式模范模范都有属于他们自己的文件,由于没法有系统培植的数据,是以经常会组成存储数据的重复与铺张。例如:在一家公司当中,人事治理法式模范模范与人为治理法式模范模范或许都邑应用到职员与部门的信息或文件,而我们可以应用数据库的措施,把这两个文件整理起来,以增添多余的数据,太过地占用存储空间。
(2)防止数据的不不合(Inconsistency can avoid)
本项的特点,可以说是延伸前项的一个特点,要诠释这样的一个情形,我们可以从下面这个实例来看:若是在统一家公司当中,职员甲在筹谋部门使命,且职员甲的纪录同时被存放在数据库的两个地方,而数据库治理系统却没有对这样主要的情形加以控制,当其中一条数据库被修改时,便会组成数据的不不合,然则,关于一个健全的数据库治理系统而言,将会对这样的情形加以控制,但有时着实不须要锐意扫除这类情形,应当视该数据库的需求与效力来决议。
(3)数据共享(Data shared)
关于数据共享的意义,着实不是只需针对数据库设计的应用法式模范模范,可以应用数据库中的数据,关于其他撰写好的应用法式模范模范,异常可以对类似数据库当中的数据阻拦处置赏罚赏罚,进而到达数据共享的目的。
(4)强化数据的尺度化(Standard can be enforced)
由数据库治理系统,对数据做出兼顾性的治理,关于数据的名堂与一些存储上的尺度阻拦控制,云云一来,关于不合的情形的数据交流(Data Interchange)上将有很大的赞助,也能前进数据处置赏罚赏罚的效力。
(5)现实安然性的治理(Security restriction can be applied)
经由历程对数据库完全的权限控制,数据库治理者可以确认所有可供用户存取数据的合窍蹊径渠道,而且可以事前对一些较主要或要害性的数据阻拦安然检查,以确保数据存取时,能够将任何欠妥损毁的情形降至最低。
(6)完全性的掩护(Integrity can be maintained)
所谓完全性的效果,就是要确认某条数据在数据库当中,是准确无误的。正如(2)所述,若是没法控制数据的不不合性,便会发生完全性缺乏的效果,以是,我们会发现,当数据重复性高的时间,数据不完全的情形也会增添,虽然,若是数据库的功效完全,将会大大地前进数据完全性,也会增添数据库的掩护才干与掩护轻盈性。
(7)需求抵触会取得平衡(Conflicting requirements can be balance)
在一个较大型的企业当中,用户不合的需求,经常会组成系统或数据库在设计上的困扰,然则一个合适的数据库系统,可以经由历程数据库治理员的治理,将会有用地整理各方面的信息,关于一些较主要的应用法式模范模范,可以适时地供应较快速的数据存取措施与名堂,以平衡多个用户在需求上的抵触。
上述七个方面组成了数据库系统的主要特点。这个阶段的法式模范模范和数据间的联系可用下图体现:
2.1.3 数据库手艺
从文件系统生长到数据库系统是信息处置赏罚赏罚领域的一个严重变换。在文件系统阶段,人们关注的中央效果是系统功效的设计,是以法式模范模范设计处于主导职位,数据只起着屈从法式模范模范须要的作用。在数据库要领下,信息处置赏罚赏罚不雅不雅念已为新系统所取代,数据占领了中央肠位。数据结构的设计成为信息系统首先眷注的效果,而应用这些数据的应用法式模范模范设计则退居到以既定的数据结构为基础的焦点职位。
现在天下上已有数百万个数据库系统在运转,其应用曾经深刻到人类社会生涯的各个领域,从企业治理、银行营业、资源分配、经济意料一直到信息检索、档案治理、普查统计等。并在通讯群集基础上,培植了许多国际性的联机检索系统。我国20世纪90年月初在天下规模内装备了12个以数据库手艺为基础的大型盘算机系统,这些系漫衍在邮电、计委、银行、电力、铁路、气象、夷易近航、情报、公安、军事、航天和财税等行业。
数据库手艺还在赓续的生长,而且赓续地与其它盘算机手艺相互渗透渗透渗透渗透。数据库手艺与群集通讯手艺相联络,发生了漫衍式数据库系统。数据库手艺与面向工具手艺相联络,发生了面向工具数据库系统。
在数据库手艺中有四个名词,其看法应当分清。
(1)数据库(database,DB):DB是统一治理的相关数据的荟萃。DB能为种种用户共享,具有最小冗余度,数据直联系亲近,而又有较高的数据自力性。
(2)数据库治理系统(Database Management System,DBMS):DBMS是位于用户与操作系统之间的一层数据治理软件,为用户或应用法式模范模范供应会见DB的措施,网罗DB的培植、查询、更新及种种数据控制。DBMS总是基于某种数据模子,可以分为条理型、网状型、关系型和面向工具型DBMS。

(3)数据库系统(Database System,DBS):DBS是完成有组织地、静态地存储大量联系关系数据,便利多用户会见的盘算机软件、硬件和数据资源组成的系统,即接纳了数据库手艺的盘算机系统。
(4)数据库手艺:这是一门研究数据库的结构、存储、治理和应用的软件学科。数据库手艺是操作系统的文件系统基础上生长起来的。而DBMS自己要在操作系统的支持下才干使命。数据库不只用到数据结构的知识,而且富厚了数据结构的内容。在关系数据库中要用到荟萃论、数理逻辑的现实。是以,数据库手艺是一门综合性较强的学科。
§2.2数据库现实基础
2.2.1 数据库模子
从20世纪50年月中期泉源,盘算机的应用由迷信研究部门徐徐扩大到企业、行政部门。至60年月,数据处置赏罚赏罚成为盘算机的主要应用。数据库手艺作为数据治理手艺,是盘算机软件领域的一个主要分支,发生于60年月末。现已组成相当规模的现实系统和适用手艺。
模子是对现实天下的笼统。在数据库手艺中,我们用模子的看法形貌数据库的结构与语义,对现实天下阻拦笼统,显露实体类型及实体直联系的模子称为“数据模子” 。
现在普遍作用的数据模子可分为两种类型。
一种是自力于盘算机系统的模子,完全不触及信息在系统中的体现,只是用来形貌某个特定组织所眷注的信息结构,这类模子称为“看法数据模子” 。要领模子用于培植信息天下的数据模子,强调其语义表达功效,应当看法质朴、清晰,易于用户明确,它是现实天下的第一层笼统,是用户和数据库设计职员之间阻拦交流的工具。这一其中著名的模子是“实体联系模子” 。
此外一种数据模子是直接面向数据库的逻辑结构,它是现实天下的第二层笼统。 这类模子触及到盘算机系统和数据库治理系统,又称为“结构数据模子” 。例如,条理、网状、关系、面向工具等模子。这类模子有严酷的形式化界说,以便于在盘算机系统中完成。
(1)条理模子。用树型结构显露实体类型及实体直联系的数据模子。树的结点是纪录类型,每个非根结点有且只需一个父结点。上一层纪录类型和下一层纪录类型直联系是1∶N联系。
条理模子的特点是纪录之间的联系经由历程指针完成,查询效力较高。但条理模子有两个弱点:一是只能体现1∶N联系,虽然有多种赞助手段完成了M∶N联系,但都较严重,用户不容易控制,二是由于树型结构条理序次的严酷和严重,惹起数据的查询和更新操作也很严重,是以,编写应用法式模范模范也很严重。
(2)网状模子。用有向图结构显露实体类型及实体直联系的数据模子。。1969年DBTG申报提出的数据模子是网状模子的主要代表。有向图中的结点是纪录类型,有向边体现从箭尾一真个纪录类型到箭头一真个纪录类型直联系是1∶N联系。
网状模子的特点:纪录之直联系经由历程指针完成,M∶N联系也容易完成(每个M∶N联系可拆成两个1∶N联系),查询效力较高。网状模子的弱点是编写应用法式模范模范较量严重,法式模范模范员必须熟悉数据库的逻辑结构。由于条理系统和网状系统的应用法式模范模范体例较量严重,是以,从20世纪80年月中期起,其市场已被关系系统所取代。然则应用这两种模子培植起的许多数据库依然在正常运转,只是在外层加了个关系数据库语言的接口。网状模子有许多告成的产物,20世纪70年月的产物大部门网状系统,例如,Honeywell公司的IDS/Ⅱ、HP公司的IMAGE/3000、Burroughs公司的DMSⅡ、Umivac公司的DMS1100、Cullinet公司的IDMS、Cimcom公司的TOTAL等
(3)关系模子。关系模子的主若是用二维表格结构表达实体集,用外键显露实体直联系。关系模子是由若干个关系形式组成的荟萃。关系形式相当于前面提到的纪录类型,它的实例称为关系,每个关系现实上是一张二维表格。
关系模子和条理、网状模子的最大分辨是用要害码而不是用指针导航数据,表格质朴用户易懂,编程时着实不触及存储结构,会见手艺等细节。关系模子是数学化模子。SQL语言是关系数据库的尺度化语言,已取得了普遍的应用。20世纪70年月对关系数据库的研究主要集中在现实和实验系统的开发方面。80年月初才组成产物,但很快取得普遍的应用和普及,并事实取代了条理、网状数据库产物。现在市场上尺度的关系DBMS产物有DB2、ORACLE、SYBASE、INFORMIX和微机型产物Foxpro、Access等。
关系模子和网状、条理模子的最大差异是:关系模子用表格数据而不是经由历程指针链来体现和实现实体直联系。关系模子的数据结构质朴、易懂。只需用质朴的查询语句便可对数据库阻拦操作。
关系模子是数学化的模子,可把表格算作一个荟萃,是以荟萃论、数理逻辑等知识可引入到关系模子中来。关系模子曾经是一个成熟的有前途的模子,已取得普遍应用。
(4)面向工具模子。现在,关系数据库的应用已相当普遍,然则,现实天下中依然存在着许多含有严重数据结构的应用领域,例如,CAD数据、图形数据等,而关系模子在这方面的处置赏罚赏罚才干就显得力有未逮。是以,人们须要更高等的数据库手艺来表达这类信息。面向工具的看法最早涌现在法式模范模范设计语言中,随后迅速渗透渗透渗透渗透到盘算机领域的每个分支。面向工具数据库是面向工具看法与数据库手艺相联络的产物。
面向工具模子能完全地形貌现实天下的数据结构,具有富厚的表达才干,但模子相对较严重,触及的知识面也广,是以面向工具数据库还没有到达关系数据库那样的普及水平。

2.2.2 数据库系统结构
数据库的系统结构分三级:外部级(internal),看法级(conceptual)和外部级(external)。这个三级结构有时也称为“三级形式结构”,或“数据笼统的三个级别”,最早是在1971年经由历程的DBTG申报中提出,厥后支出在1975年的美国ANSI/SPARC申报中。虽然现在DBMS的产物多种多样,在不合的操作系统支持下使命,然则大多数系统在总的系统结构上都具有三级形式的结构特点。从某个角度看到的数据特点称为“数据视图”(data view)。
外部级最靠近用户,是单个用户所能看到的数据特点。单个用户应用的数据视图的形貌称为“形状式”。
看法级触及到所有用户的数据界说,是全局的数据视图。全局数据视图的形貌称为“看法形式”。
外部级最靠近于物理存储装备,触及到现实数据存储的结构。物理存储数据视图的形貌称为“内形式”。
数据库的三级形式结构是数据的三个笼统级别。它把数据的详细组织留给DBMS去做,用户只需笼统地处置赏罚赏罚数据,而不用眷注数据在盘算机中的体现和存储,这样就减轻了用户应用系统的肩负。
三级结构之间经常差异很大,为了完成这三个笼统级其他联系和转换,DBMS在三级结构之间供应两个条理的映象(mappings):形状式/形式映象,形式/内形式映象。此处形式是看法形式的简称。
2.2.3 数据的自力性
由于数据库系统接纳三级形式结构,是以系统具有数据自力性的特点。在数据库手艺中,数据自力性是指应用法式模范模范和数据之间相互自力,不受影响。数据自力性分红物理数据自力性和逻辑数据自力性两级。
(1)物理数据自力性
假定数据库的内形式要阻拦修改,即数据库的存储装备和存储措施有所变换,那么形式/内形式映象也要阻拦相当的修改,使看法形式尽能够保持稳固。也就是对内形式的修改尽能够不影响看法形式,虽然,关于形状式和应用法式模范模范的影响更小,这样,我们称数据库到达了物理数据自力性。
(2)逻辑数据自力性
假定数据库的看法形式要阻拦修改,例如增添纪录类型或增添数据项,那么形状式/形式映象也要阻拦照顾的修改,使形状式尽能够保持稳固。也就是对看法形式的修改尽能够不影响形状式和应用法式模范模范,这样,我们称数据库到达了逻辑数据自力性。
现有关系系统产物均供应了较高的物理自力性,而对逻辑自力性的支持尚有完善,例如,对形状式的数据更新遭到限制等。
2.2.4 范式
培植起一个优胜的数据目的系统,是培植数据结构和数据库的最主要的一环。一个优胜的数据目的系统是培植DB的须要条件,但不是充实条件。我们完全可以以为所建目的系统中的一个目的类就是关系数据库中的一个基本表,而这个目的类下面的一个个详详目的就是这个基本表中的一个字段。但假定直接凭证这类要领建库显着还不克不及算最好。关于目的系统中数据的结构在建库前还必须阻拦尺度化的重新组织。
在数据的尺度化表达中,浅易将一组相互联系关系的数据称为一个关系(relation),而在这个关系下的每个数据目的项则被称为数据元素(data element),这类关系落实到详细数据库上就是基本表,而数据元素就是基本表中的一个字段(field)。尺度化表达还划定在每个基本表中必须界说一个数据元素为要害字(key),它可以唯一地标识出该表中其它相关的数据元素。在尺度化现实中表是二维的,它有以下四特点质:
在表中的随便任性一列上,数据项应属于统一个属性(如图中每列都存放着不合条约纪录的统一属性数据)。
表中所有行都是不类似的,禁绝可有重复组项泛起(如图中每行都是一个不合的条约纪录)。
在表中,行的序次无关紧要(如图中每行存的都是条约纪录,至于先放哪个条约都没紧要)。
在表中,列的序次无关紧要,但不克不及重复(如图中条约号和条约名谁先谁后都没紧要,但二者弗成重复或同名)。
在对表的形式阻拦了尺度化界说后,数据结构尚有五种尺度化界说,命名为尺度化形式,称为范式。在这五种范式中,浅易只用前三种,关于经常应用系统就足够了。而且这五种范式是“向上兼容”的,即知足第五范式的数据结构自动知足一、2、3、四范式,知足第四范式的数据结构自动知足第一、2、三范式,……,依此类推。
第一范式(first normal form,简称1st NF)就是指在统一表中没有重复项泛起,假定有则应将重复项去掉落落。这个去掉落落重复项的历程就称之为尺度化处置赏罚赏罚。在本文所议论辩说的开发措施里,1st NF现实上是没有甚么意义的。由于我们按尺度化培植的目的系统和表的历程都自动保证了所有表都知足1st NF。
第二范式(second normal form,简称 2nd NF)是指每个表必须有一个(而且仅一个)数据元素为主要害字(primary key),其它数据元素与主要害字逐一对应。例如,在图l9.7中假定我们将条约号界说为主要害字(其它数据元素中的纪录数据都有能够重名,故不克不及作为主要害字),故只需知道了一个条约纪录的条约号,便可以唯一地在统一行中找到该条约的任何一项详细信息。通常我们称这类关系为函数依附(functional depEndence)关系。即表中其它数据元素都依附于主要害字,或称该数据元素唯一地被主要害字所标识。
第三范式(third normal form,简称 3rd NF)就是指表中的所有数据元素不只需能够唯一地被主要害字所标识,而且它们之间还必须相互自力,不存在其它的函数关系。也就是说关于一个知足了 2nd NF的数据结构来讲,表中有能够存在某些数据元素依附于其它非要害宇数据元素的情形,必须加以扫除。
为防止数据库泛起更新异常、拔出异常、删除异常、数据冗余太大等情形,关系型数据库要尽能够按关系尺度化请求阻拦数据库设计。


§2.3 SQL语言基础
2.3.1 SQL简介
用户对数据库的应用,是经由历程数据库治理系统供应的语言来完成的。不合的数据库治理系统供应不合的数据库语言。关系数据库治理系统简直都供应关系数据库尺度语言——SQL。
SQL 的全称是Structured Query Language,即结构化查询语言。SQL语句可以从关系数据库中取得数据,也能够或许培植数据库、增添数据、修改数据。1986年ANSI接纳SQL语言作为关系数据库系统的尺度语言,后被国际化尺度组织(ISO)接纳为国际尺度。SQL语言应用便利、功效富厚、精练易学,是操作数据库的工业尺度语言,取得普遍地应用。例如关系数据库产物DB2、ORACLE等都完成了SQL语言。同时,其它数据库产物厂家也纷纷推出各自的支持SQL的软件或许与SQL的接口软件。这样SQL语言很快被所有盘算机界认可。
SQL语言是一种非历程化语言,它一次处置赏罚赏罚一个纪录荟萃,对数据供应自动导航。SQL语言允许用户在高层的数据结构上使命,而纰谬单个纪录阻拦操作。SQL语言不请求用户指定数据的存取措施,而是应用查询优化器,由系统决议对指定数据存取的最快速手段。当设计者在关系表上界说了索引时,系统会自动应用索引阻拦快速检索,用户不需知道表上能否有索引或许有甚么类型的索引等细节。
SQL语言可以完成许多功效,例如:
● 查询数据
● 在数据库表格中拔出、修改和删除纪录
● 培植、修改和删除数据工具
● 控制对数据和数据工具的存取
● 确保数据库的不合性和完全性等
2.3.2 SQL查询
数据查询是关系运算现着实SQL语言中的主要体现,SELECT 语句是SQL查询的基本语句,当我们在对一个数据库进种种各样的操作时,应用的最多的就是数据查询,在以SQL为基础的关系数据库中,应用的最多的就是SELECT查询语句。
SELECT语句的完全句法以下:
SELECT 目的表的列名或列表达式序列
FROM 基本表和(或)视图序列
[WHERE 行条件表达式]
[GROUP BY 列名序列]
[HAVING 组条件表达式]
[ORDER BY列名 [ASC│DEAC]…]
我在SELECT语句中还应用了大量的保留字和通配符以阻拦种种各样的条件查询。在系统中有大量的查询按钮,其应用了大量的查询语句,而且这些查询语句大部门应用的是模糊查询,以是大量的应用了形式婚配符LIKE(断定值能否与指定的字符通配名堂切合)。在网罗LIKE的查询语句中可以应用两个通配符:%(百分号):与零个或多个字符组成的字符串婚配;_(下划线):与单个字符婚配。系统中的条件断定经常网罗多个条件,这时间间就须要应用逻辑运算符NOT、AND、OR(用于多条件的逻辑毗连),谓词ALL和保留字DISTINCT等等。做为SELECT语句尚有许多的应用措施,这里就不再叙述。
2.3.3 SQL数据更新
应用数据库的目的是为了有用地治理数据,而数据的拔出、删除和修改则是必弗成少的一个功效。在本系统中就大量地应用了数据拔出、删除和修改这三种操作,现做一个质朴地简介。
●数据拔出
往数据库的基本表中拔出数据应用的是INSERT语句,其要领有两种:一种是元组值的拔出,此外一种是查询效果的拔出。在本系统中应用的是前一种要领,其句法以下:
INSERT INTO 基本表名(列表名)VALUES(元组值)
●数据删除
往数据库的基本表中删除数据应用的是DELETE语句,其句法以下:
DELETE FROM 基本表名 [WHERE 条件表达式]
在些作一点诠释,删除语句现实上是“SELECT * FROM 基本表名 [WHERE 条件表达式]”和DELETE操作的联络,每找到一个元组,就把它删除。此外,DELETE语句只能从一个基本表中删除元组,WHERE子句中条件可以嵌套,也可以是来自几个基本表的复合条件。
●数据修改
当须要修改基本表中元组的某些列值时,可以用UPDATE语句完成,其句法以下:
UPDATE基本表名
SET列名=值表达式[,列名=值表达式…]
[WHERE条件表达式]
在Delphi中应用SQL语句是很便利的,浅易来讲,都是经由历程TQuery组件来应用SQL语言的。有一点要阻拦诠释,虽然经由历程TQuery组件来应用SQL语言很便利,但推敲到自己对不合组件的明确水平、小我习气和其它各个方面,在本系统中我接纳的是ADO组件来对数据库阻拦操作。最质朴的措施好比在TADOQuery组件的SQL属性中便可以键入SQL语句,至于详细的应用措施在前面阻拦简介。


第三章 数据库开发工具
§3.1 Delphi 6.0 简介
Delphi类可以粗陋地分红两部门:一部门是组件类,这些组件类通常以某种要领涌现在组件面板上,当用户从组件面板上点取一个类的图标后,在法式模范模范中就自动天生了该类的工具(非可视组件除外);此外一部门是功效类,这此功效类的工具通常涌现在法式模范模范代码中,起着弗成取代的作用,然则这些功效类在组件面板上是找不到的。在Delphi中,每个类的祖先都是Tobject类,所有类的条理结构就像一棵倒挂的树,在最顶层的树根即为Tobject类。这样,凭证面向工具编程的基本头脑,就使得用户可用Tobject类这个类型取代任何其它类的数据类型。现实上在Delphi的类库中,Tobject类派生出了为数相当浩荡的子类,它们组成了一个重大的系统,通常情形下,假定不自行开发组件,就不用明确所有类的系统结构,只用到类条理树的叶结点就足够了。
通常做过法式模范模范开发的人都知道向来没有单纯的数据应用法式模范模范,也就是说,数据库应用法式模范模范必须和用户界面(可以是图形界面,也可以是敕令接口)元素相联络,只讲界面或只讲数据库自己都构不成数据库应用法式模范模范,是以用Delphi 6.0开发数据库应用法式模范模范就隐含着界面开发。Delphi6中的VCL组件可用图3-1来诠释。组件在Delphi法式模范模范的开发中是最显眼的角色。人人知道,在编写法式模范模范时浅易都泉源于在组件面板上选择组件并界说组件间的相互作用。但也有一些组件不在组件面板上,例如Tform和Tapplication(尺度的非可视组件)。组件是Tcomponents派生出来的子类,可以流的形式存放在DFM文件中,具有事宜和Publish属性。
窗口组件类是窗口化的可视化组件类,在Delphi的类库中占有最大的份额。在现实编程中,窗口组件类的工具都有句柄,可以吸收输入焦点和网罗其它组件。
图形组件与窗口组件并列,是此外一大类组件。图形组件不是基于窗口的,是以不克不及有窗口句柄,不克不及吸收输入焦点和网罗其它组件。从图8-43中可以看出,图形组件的基类是TgraphicControl,在现实编程中,它们必须寄生于它们的宿主——窗口组件类的工具,由它们的具有者担负其显示,而且它们还能触发一些和鼠标运动相关的事宜。图形控件最尺度的例子是Tlabel和TspeedButton。由此可以看出图形组件的功效很弱,有读者会问图形组件的用处何在呢?着实应用图形组件的最大利益在于节俭资源,正是由于它们的功效较弱,以是应用的系统资源就要少。在一个应用法式模范模范中,假定能在不影响其功效的条件下公正大量地应用图形组件,将会大增添法式模范模范对系统资源的消耗。
非可视组件是与可视组件相并列的此外一类组件,非可视组件在法式模范模范运转中是弗私见的(除种种对话框组件以外,现实上有人以为对话框组件不克不及归入非可视组件,应当是此外一种介于可视与非可视之间的组件)。
§3.2 Delphi 6.0 控件
用Delphi6开发数据库应用,重点是和种种数据库组件打交道,虽然也要应用其它的一些组件,现在就我在系统设计中所应用的主要组件授予质朴简介。
3.2.1 ADO数据会见组件
ADO数据工具(Active Data Objects)现实是一种供应会见种种数据类型的链接机制。ADO设计为一种极质朴的名堂,经由历程ODBC的措施同数据库接口中,可以应用任何一种ODBC数据源,即不止合适于SQL Server、Oracle、Access等数据库应用法式模范模范,也合适于Excel表格、文本文件、图形文件和无名堂的数据文件。ADO是基于OLE-DB之上的手艺,是以ADO经由历程其外部的属性和措施供应统一的数据会见接口措施。ADO使您的客户端应用法式模范模范能够经由历程OLE DB供应会见和操作在数据库服务器中的数据。ADO支持用于培植C/S和Web的应用法式模范模范的主要功效。其主要优点是易于应用、高速率、低内存支出和占用磁盘空间较少。ADO同时具有远程数据服务(RDS)功效,经由历程RDS可以在一次往复历程当中完成将数据从服务器移动到客户端应用法式模范模范和Web页、在客户端对数据阻拦处然后将更新效果前往服务器的操作。
Delphi 6.0一连对Microsoft的ADO会见才干的支持。这类才干是经由历程一组新组件完成的,这些组件是在企业版的ADO组件页中,在组件面版的ADO页上可以找到这些组件。应用在前面章节提到的TdataSet笼统类,ADO组件可以不经由历程BDE而直接完成ADO毗连。这意味着只须要很少的代码便可以完成该毗连而且性能取得前进。
应用ADO数据会见组件,可以只应用ADO结构与数据库取得联系并对其中的数据阻拦操作,而在这些历程当中完全不须要应用BDE。大多数的ADO毗连和数据集组件都是与基于BDE的毗连和数据集组件相类似的。TADOConnection组件与基于BDE的应用法式模范模范中的Tdatabase组件类似。TADOTable与Ttable,TADOQuery与Tquery,和TADOStoreProc和TstoredProc之间都具有这类类似的对应关系。应用这些ADO组件的要领与我们常应用的数据会见组件(基于BDE)都有许多类似的地方。TTADODataSet没有直接的BDE对应组件,但它供应了许多与Ttable和Tquery类似的功效。异常,TADOCommand也没有相对应的BDE组件,它是在Delphi/ADO情形中完成特定功效的组件。Delphi 6.0经由历程ADO数据聚会会议见组件,可以不借助BDE数据引擎而是经由历程微软的OLEDB来会见越发普遍的数据库中的数据。ADO数据聚会会议见组件与经常应用的数据会见组件是并列的关系。
在系统中我主要应用的是ADOTablet和ADOQuery两个组件。
3.2.2 数据控制类DataControl
数据控制类担正数据库数据的显示,并把用户对数据的修改传回。这里的绝大多数组件,如DBText, DBEdit, DBMemo, DBImage, DBListBox, DBComboBox, DBCheckBox, DBRadioGroup, DBLookupListBox, DBLookupCombox, DBCtrGrid的功效和对应的非数据感知组件类似,如TEdit框,TRadioGroups单选按钮组等,只不外在显示数据库数据时要用而已。
在系统中主要应用数据网格控件DBGrid和数据库导航器控件DBNavigator。
3.2.3 数据会见类DataAccess
数据库应用系统中数据会见是一个主要效果,网罗单用户和 C/S系统,都必须联系一些数据库和数据表文件。Delphi 6 供应了专门用于数据会见的基类控件。主要网罗数据源控件DataSource、客户数据集控件ClientDataSet、数据集供应器控件DataSetProvider等等。
Tdatabase:当一个基于BDE的数据库应用法式模范模范须要一个永世数据库毗连时,须要定制向一个数据库服务器的毗连时,须要事务控制和特另外数据库别号时就得用到Tdatabase工具。特殊是当毗连到一个远程的SQL数据库服务器时,假定要应用BDE阻拦数据库事务处置赏罚赏罚,那么,TDatabase工具的威力就体现出来了。在一个应用法式模范模范中为每个数据库毗连显示的声明Tdatabase工具要凭证须要而定,不是必须的。对一个数据库毗连,假定没有显示的声明并实例化TDatabase工具,系统就会发生一个带有默许属性的TDatabase工具。
TdataSource工具用于在DataSet工具(网罗Tquery,TstoredProc,Ttable等)和数据感知组件之间供应一个毗连的纽带,以便在窗体上显示数据库中的数据,在数据库中导航定位与编辑数据集中的数据。假定一个DataSet工具中的数据想在数据感知组件中显示和修改,它就必须和TdataSource工具相联系。异常,一个数据感知组件假设想和数据源相联系以便显示和独霸数据,就必须以TDataSource工具为中介。
用Delphi6作数据库应用开发归纳综合来讲以下:先应用数据存取组件和现实的数据库培植毗连,并用Tsession工具和Tdatabase工具治理这些毗连。然后以Tdatasource工具为中介,用数据感知组件向用户显示数据库的内容并吸收用户的查询和修改等操作。
3.2.4 SQL语言在Delphi中的应用
在Delphi中应用SQL语言异常便利,浅易来讲,都是经由历程Tquery组件来应用SQL语言的。可以在TQuery组件的SQL属性中设置SQL语句。设计法式模范模范时,在该组件的属性对话框被选择SQL属性,单击带省略号的按钮,便可以掀开String List Editor对话框,然后我们便可以在对话框中添加SQL语句。还可以应用Delphi的SQL Builder来自动天生SQL语句,如允许以防止手工编写SQL而能够组成的语法弱点。
静态SQL语句在法式模范模范设计时便已结实上去,它不网罗任何参数和变量。
静态SQL语句,也被称作参数化的语句,在其中央网罗着体现字段名或表名的参数,例以下面的语句是一条静态SQL语句:
Select * From Students Where StudentCode =: StudentCode;
其中的变量StudentCode就是一个参数变量,它由一个冒号指导,在法式模范模范运转历程当中,必须要为该参数赋值,该条SQL语句才干准确推行,每次运转应用法式模范模范时可以为该参数变量授予不合的值。为参数赋值有三种措施:
①凭证参数在SQL语句中泛起的序次,设置TQuery部件的Params属性值为参数赋值。
②直接凭证SQL语句中各参数的名字,挪用ParamByName措施来为各参数赋值。
③将TQuery部件的DataSource属性设置为此外一个数据源,这样将此外一个数据源中与以后TQuery部件的SQL语句中的参数名相婚配的字段值赋给其对应的参数。应用这类措施也能完成所谓的毗连查询,培植主要—明细型数据库应用。
在法式模范模范运转历程当中,要想设置TQuery部件的SQL属性,必须首先挪用Close措施,关闭TQuery部件,然后再挪用Clear措施扫除SQL属性中现存的SQL敕令语句, 最后再挪用Add措施为SQL属性设置新的SQL敕令语句。例如:
Query1.Close {关闭Query1)
Query1.SQL.Clear {扫除SQL属性中的SQL敕令语句}
Query1.SQL.Add(‘Select * From Students‘);
Query1.SQL.Add(‘ Where Name ="Lucy" ‘);
在为TQuery部件设置SQL属性时挪用Close措施总是很安然的,假定TQuery部件曾经被关闭了,挪用Close措施时不会发生任何影响。在应用法式模范模范中为SQL属性设置新的SQL 敕令语句时,必须要挪用Clear措施以扫除SQL属性中现存的SQL敕令语句,假定不挪用Clear措施,便挪用Add措施向SQL属性中设置SQL敕令语句,那么新设置的SQL敕令语句会追加在现存SQL敕令语句前面, 在法式模范模范运转经经常会泛起出乎意料的查询效果以致法式模范模范没法运转下去。
在这里要特殊重视的,浅易情形下TQuery部件的SQL属性只能网罗一条完全的SQL语句,它禁绝可被设置成多条SQL语句。虽然有些数据库服务器也支持在TQuery部件的SQL属性中设置多条SQL语句,只需数据库服务器允许这样,我们在编程时可以为 SQL 属性设置多条SQL语句。
在为TQuery部件设置完SQL属性的属性值以后,也即编写好适当的SQL法式模范模范以后,可以有多种要领来推行SQL法式模范模范。
在设计历程当中,设置完TQuery部件的SQL属性以后将其Active属性的值置为True, 这样便可以推行SQL属性中的SQL法式模范模范,假定应用中有与TQuery部件相连的数据浏览部件( 如TDDGrid TDBEdit等)那么在这些数据浏览部件中会显示SQL法式模范模范的推行效果。
在应用法式模范模范运转历程当中,经由历程法式模范模范挪用TQuery部件的Open措施或ExecSQL 措施可以推行其SQL属性中的SQL法式模范模范。Open措施和ExecSQL措施是纷歧样的。Open措施只能用来推行SQL语言的查询语句(Select敕令), 并前往一个查询效果集,而ExecSQL措施还可以用来推行其它经常应用的SQL语句(如INSERT, UPDATE, DELETE等敕令),例如:
Query1.Open (这样会前往一个查询效果集)
假定挪用Open措施,而没有查询效果时,会掉落足。此时应当挪用ExecSQL 措施来取代Open措施。如:
Query1.ExecSQL (没有前往效果)
虽然在设计应用法式模范模范时,法式模范模范设计职员是没法一定TQuery部件中的SQL 语句能否会前往一个查询效果的。关于这类情形应当用Try…Except模块来设计法式模范模范。在 Try 部门挪用Open措施,而在Except部门挪用ExceSQL措施,这样才干保证法式模范模范的准确运转。
Delphi中用ADOQuery来应用SQL语句异常很是便利。在ADOQuery组件中首先经由历程ConnectionString属性值来联接数据源,然后就经由历程双击SQL…属性值来写入SQL语句。在Delphi中挪用数据库,便可以挪用ADOQuery组件,经由历程修改其中的SQL…属性中的SQL语句来完成对数据库的各项操作。
值得重视的是,ADOQuery组件只需在激活的情形下才可以被准确地应用,这样就提出了一个效果,也就是说,在每次修改ADOQuery组件的SQL…属性时都必须先行阻拦关闭,待扫除掉落落SQL…中所有的SQL语句后才可以添加新的SQL语句。而且,在每次修改完成以后,还应当记得重新将ADOQuery激活。其它的应用措施与TTQuery有许多的类似的地方。
§3.3 Access 简介
培植一个数据库我们有多种选择,现在市场上有种种各样的数据库,而且每种数据库都有其自己的特点,不克不及说哪一种更好,只能在其中寻觅一种能更好地顺应系统需求、更好地知足用户的请求温柔应开发职员的习气。在本系统中,做为图书客栈治理系统是一个较量小的应用系统,它所发生和处置赏罚赏罚的数据量也较量小。是以,没有须要应用像SQL Server和Oracle这样的大型数据库。我首先想到的数据库是Borland公司的Paradox数据库。另外,Microsoft Office中的Access数据库在盘算机上的应用较量普及,是开发小型数据库系统的较量理想的选择,以是,在本系统中我选择了Access数据库。
Access做为一个数据库治理系统,它被集成在Microsoft Office中。Access数据库处置赏罚赏罚的基本结构,接纳关系型数据库形式。与其他的数据库系统相比,Access加倍质朴易学,一个浅易的盘算机用户可以很快地控制它。Access 2000的功效很是强盛,应用它可以便利地完成对信息生涯、掩护、查询、统计、打印、交流、宣布,而且它可以很是便利地与Office其他组件交流数据,这些功效对一个浅易用户而言曾经足够了。
第四章 系统全体设计
软件系统的全体设计约莫要履历可行性剖析和项目开发妄图,需求剖析,提要设计,详细设计,编码,测试和掩护等七个阶段。可行性剖析和项目开发妄图在前面曾经叙述,下面所要做的是阻拦软件需求剖析,提要设计和详细设计。编码历程将不才一节叙述,而测试和掩护历程不在本文叙及。
§4.1 系统需求剖析
在经由前一阶段的剖析以后,我一定了我的开发课题为图书客栈治理。现在所要做的是要准肯界说系统必须做甚么和系统必须具有的功效。
软件需求剖析中我接纳结构化剖析措施(Structured Analysis,简称SA),SA是面向数据流阻拦需求剖析的措施,像所有的软件剖析措施(如面向工具剖析措施、IDEF措施等等)一样,SA也是一种建模运动,它应用质朴易读的符号,凭证软件外部数据转达、变换的关系,自顶向下逐层分化,形貌知足功效请求的软件模子。
在系统中我接纳数据流图(DFD)这类半形式化的形貌要领表达需求。它是一种功效模子,以图形的要领形貌数据在系统中运动和处置赏罚赏罚的历程,只反映系统必须完成的逻辑功效。它有四种基本图形符号:
◆ →:箭头,体现数据流;
◆ 〇:圆或椭圆,体现加工;
◆ ═:双杠,体现数据存储;
◆ □:方框,体现数据的源点或终点。
为了表达较为严重效果的数据处置赏罚赏罚历程,用一张数据流图是不够的,要凭证效果的条理结构阻拦徐徐分化,并以一套分层的数据流图反映这类结构关系。在这里我一共应用了三层数据流图,即顶层图,0层图和1层图(也是底层图)。
在多层数据流图中,顶层流图仅网罗一个加工,它代表被开发系统,它的输入流是该系统的输入数据了,输入流是该系统的输入数据;底层流图是指其加工不须要再做分化的数据流图,中央层流图体现对其下层父图的细化,它的每步加工能够一连细化成子图。
经由对系统的剖析首先取得系统的顶层DFD,以下:
一步细化取得系统的0层DFD,以下:

再进一步细化每个数据加工功效,取得系统的1层DFD图。
在这里只给出有关入库治理和出库治理的1层数据流图,它们是系统的关鍵部门,也是主要的部门。经由历程以上对数据流图的剖析以后,我们已概略地明确了系统的功效和目的,接上去所要做的就是系统功效模块的划分和数据库的设计,也就是系统的提要设计。
§4.2 系统提要设计
在软件需求剖析阶段,弄清晰了软件“做甚么”的效果,组成了目的系统的逻辑模子。现在我们所要做的就是要把软件“做甚么”的逻辑模子变换为“怎样做”的物理模子,即着手完成软件的需求。首先,我们须要形貌的是系统的总的系统结构。
4.2.1 系统结构设计
系统的提要设计中最主要的就是系统的模块化。模块化是指处置赏罚赏罚一个严重效果时自项向下逐层把软件系统划分红若干个模块的历程。每个模块完成一个特定的功效,所有的模块按某种措施组织起来,成为一个所有,完玉成部系统所请求的功效。
将系统划分为多个模块是为了降低软件系统的严重性,前进可读性、可掩护性,但模块的划分不克不及是随便任性的,应尽能够保持其自力性。也就是说,每个模块只完成系统请求的自力的子功效,而且与其他模块的联系最少且接口质朴,即尽能够做到高内聚低耦合,前进模块的自力性,为设计高质量的软件结构奠基基础。
在系统的提要设计中我接纳结构化设计(Structure Design,简称SD),SD以需求剖析阶段发生的数据流图DFD为基础,按一定的法式模范映照成软件结构。我首先将所有系统化分为几个小效果,小模块,在系统中,我设计了用户治理、库存治理、入库治理、出库治理、员工治理和供应商治理6个小模块。然后,进一步细分模块,添加细节。好比,用户治理我又将其分为用户注册、用户刊出、密码修改;库存治理分为库存纪录查询、库存纪录修改、库存纪录打印等等。
以下就是系统的结构图:(在这里为了表达便利我将结构图脱离来表达。)
在取得系统的第一层功效模块图后,经由进一步地细化,得一系统的子功效模块图:

4.2.2 数据库设计
在信息天下中,信息从客不雅不雅事物出发流经数据库,经由历程决议妄图机构最后又回到客不雅不雅天下,信息的这一循环履历了三个领域:信息天下,数据天下,现实天下。现实天下的事物反映到人的头脑中,人的大脑对它有个熟悉历程,经太过析(选择、命名、分类等)进入信息天下。这些信息再进一步加工、编码,然落伍数据天下,而软件系统的开发使命须要推敲这两个方面的效果,也就是要推敲系统开发所须要的数据,和若何对这些数据阻拦操作。这两个效果贯串了所有软件系统的开发历程,这也就是数据库的设计效果,软件设计的一个焦点。
4.2.2.1 ER图设计
在系统设计的泉源,我首先推敲的是若何用数据模子来数据库的结构与语义,以对现实天下阻拦笼统。现在普遍应用的数据模子可分为两种类型,一种是自力于盘算机系统的“看法数据模子”,如“实体联系模子”;此外一种是直接面向数据库逻辑结构的“结构数据模子”。在本系统中我接纳“实体联系模子”(ER模子)来形貌数据库的结构与语义,以对现实天下阻拦第一次笼统。ER模子直接从现实天下笼统出实体类型及实体直联系,然后用ER图来体现数据模子。它有两个显着的优点:靠近于人的头脑,容易明确;与盘算机有关,用户容易吸收。但ER模子只能诠释实体间语义的联系,不克不及进一步诠释详细的数据结构,它只是数据库设计的第一步。

ER图是直不雅不雅体现看法模子的工具,它有四个基自己分:
◆ 矩形框,显露实体类型(推敲效果的工具)。
◆ 菱形框,体现联系类型(实体间的联系)。
◆ 椭圆形框,显露实体类型和联系类型的属性。关于要害码的属性,在属性名下整齐横线。
◆直线,联系类型与其触及的实体类型之间以直线毗连。
本系统为图书客栈治理,主要治理图书的入库、出库和库存等事项。客栈凭证须要可以查询图书供应商的信息,同时还须要明确在入库和出库中员工的加入情形。凭证客栈治理的现内情形,推敲了多方面的因素以后,一定系统的ER图以下:
(为了表达的便利,在这里我没有在一张图上表达出所有的关系,而是用一张全体ER图,和几张实体属性关系图来表达数据库的结构。)
在该数据库中,我设计了三个实体,划分是库存、员工和供应商和两个联系类型入库和出库。在本系统中库存是焦点,也是基本,没有了库存其它的也就没有甚么意义了。员工纪录的添加是推敲到义务效果,也就是说,在客栈治理的现实应用中,泛起了义务不清的情形,特殊是由于客栈的收支图书数目都较量大时发生了一系列效果,以是在设计数据库时,我特殊推敲到这一点,加入了员工纪录这一实体。供应商信息的添减轻要出于对图书泉源效果的思虑。经由历程添加供应商信息可以较量清晰地明确图书的进货渠道,从图书的质量到供应商的信用都可以阻拦明确,同时可以为以后的图书进购供应一定有用的信息。
入库联系类型将库存信息、供应商信息和员工信息联系在一起,可以便利地完成三个实体之间的联接,而出库联系类型则将库存信息和员工信息较好地联接起,同时这两个联系类型又都具有各自独占的属性。
下面就是各实体及联系类型的属性图:(带#号的属性为要害字段)4.2.2.2 数据库表格设计
在完成系统的ER图以后,须要将ER模子转化为关系模子,也就是说,要设计出数据库所须要的表格。在这里,我选用的是关系数据库。由于关系数据库中的二维表格可以很清晰地形貌数据之间的联系。
在这里不克不及不提到一个看法——范式。着实在上一节的ER图设计中,曾经应用了范式的头脑,不只云云,在数据库的表格设计中更离不开范式的头脑,它是数据库设计的基础,假定不重视这个效果将会招致一系列效果的泛起。
我在系统中界说的表格都严酷地凭证范式的头脑和请求去完成,数据库中的所有表格都到达了三范式的请求。凭证系统ER图,针对本系统的特点,在对所群集的数据阻拦尺度化以后,界说了以下六张表格,划分是库存信息表,入库信息表,出库信息表,员工信息表,供应商信息表和密码信息表。经由历程对这六张表格的操作可以较好地完成系统设计的各项功效,六张表格之间有着不合水平的联系。(诠释:在以下数据表中,K代表主键,#代表外键,字段值不为空。)
BookRecord 表(库存信息表)
字段称谓 数据类型 诠释
K BookID 数字 图书编号
BookName 文本 图书名
Author 文本 作者
Publisher 文本 出书社
PubDate 日期/时间 出书日期
Price 泉币 价钱
BookType 文本 图书类型
Number1 数字 库存数目
Addation 文本 备注
图4.13 库存信息表
库存信息表主要用于纪录客栈中现存放的所有图书的详细信息,网罗图书编号、书名、作者、出书社、图书类型等有关图书的种种信息,它即是该数据库的主表,也是系统主界面的主要内容。
在该表中图书编号是主键,它按图书入库的前后序次来编写,每当有图书入库,系统自动给出图书编号,这样我们按图书编号来查找图书是较量便利的。推敲到编号较量难于影象,以是应用了出书社和图书类型两个字段,在系统中我供应了出书社和图书类型的分类查找,而且所有接纳自动天生,每当系统中有新的出书社类型和图书类型,弹出菜单会自动添中新类型,这样便可以较量便利地完成按出书社和按图书类型查找。此外,库存数目也是一个较量要害的字段,该字段是在系统初始化时就给定的,每当有图书入库或出库操作,系统就会自动修改图书的库存数目,以保持数据的不合性。做为备注有一点诠释,我的数据库中备注的数据类型是文本,而不是备注类型,主要推敲到该字段的长度着实不大,而且在Delphi中文本数据类型的处置赏罚赏罚也较量便利一点。
Employee 表(员工信息表)
字段称谓 数据类型 诠释
K EmployeeID 数字 员工编号
EmployeeName 文本 员工姓名
Sex 文本 性别
BornDate 日期/时间 身世日期
Grade 文本 职称
WorkDate 日期/时间 使命日期
Telephone 文本 联系德律风
Address 文本 联系地址
图4.14 员工信息表
员工信息表主要用于纪录有关员工的种种信息,网罗姓名、职称、身世日期、联系德律风、联系地址等。它主要用来为系统供应员工的有关信息,由于在系统中,入库和出库操作均与员工有着一定的联系,在查询入库信息和出库信息时,有时须要查找有关此项纪录有关的员工信息,在系统中我是经由历程入库纪录与员工纪录(出库纪录和员工纪录)之间的联接查询来完成的。另外,作为一个客栈也有须要明确其所属员工的一些基本情形,以便查询。
Shopkeeper 表(供应商信息表)
字段称谓 数据类型 诠释
K ShopkeeperID 数字 供应商编号
ShopkeeperName 文本 供应商姓名
Address 文本 地址
PostNo 数字 邮编
OfficePhone 文本 办私德律风
HomePhone 文本 室庐德律风
Email 文本 E-mail
PayType 文本 付款要领
图4.15 供应商信息表
供应商信息表主要用于纪录有关供应商的种种信息,网罗姓名、地址、德律风、付款要领等。它主要用来为系统供应供应商的有关信息,在系统中入库纪录是与供应商纪录相联系的,经由历程入库纪录可以查找相关的供应商信息。在供应商信息中,推敲当现内情形,我特殊加入了Email和付款要领这两个字段,由于在当今信息天下中,多种多样的通讯要领和多种多样的付款要领是一定的,是数据库中必须与以纪录。

InRecord 表(入库信息表)
字段称谓 数据类型 诠释
K InID 数字 入库编号
# BookID 数字 图书编号
# EmployeeID 数字 员工编号
# ShopkeeperID 数字 供应商编号
Number 数字 入库数目
BuyDate 日期/时间 入库日期
图4.16 入库信息表

OutRecord 表(出库信息表)
字段称谓 数据类型 诠释
K OutID 数字 出库编号
# BookID 数字 图书编号
# EmployeeID 数字 员工编号
Number2 数字 出库数目
OutDate 日期/时间 出库日期
图4.17 出库信息表
入库信息表主要用于纪录有关入库的详细信息,网罗入库数目、入库日期和图书、员工、供应商三方的编号,以便查询。出库信息表主要用于纪录有关出库的详细信息,网罗出库数目、出库日期和图书、员工的编号。出库信息表和入库信息表一样,着实它们都属于联系类型,系统经由历程这两个表可以联接上其它的表为用户供应多种条件的联接查询。值得提出的一点是入库纪录和出库纪录的添加不只仅是单表操作,由于它们都与库存纪录相联系,以是,岂论您是添中入库纪录照样添加出库纪录,都必须同时修改库存纪录,以保持数据的不合性,否则将激起系统掉落足而这些我都让其在系统中自动完成。岂论您是添加入库纪录,照样添加出库纪录,系统都将自动修改库存中图书的数目,而且,在您出库的数目大于库存数目时,系统还会自动提醒弱点,这样便可以防止一定弱点的发生。
在入库信息表和出库信息表中我还界说了几个外键,它供应了一种体现几个关系联系的措施。好比,系统中经由历程在入库信息表中界说的外键 BookID、EmployeeID和ShopkeeperID可以将库存信息表、员工信息表和供应商信息表联系在一起,从而便利地完成联接查询,而且,引入外键的界说是实体完全性约束的一个主要方面。
Key 表(密码信息表)
字段称谓 数据类型 诠释
K KeyName 文本 用户姓名
KeyNo 文本 用户密码
图4.18 密码信息表
密码信息表主要用于纪录所有的用户名和用户密码。它是在用户上岸时用来一定用户和密码的准确性,以防止非法用户上岸。

经由历程以上设计曾经完成了系统的提要设计,当我们有了系统的功效模块图和数据库以后,就须要着手去完成每个模块,为每个功效设计法式模范模范流程图,这也就是系统的详细设计。
§4.3 系统详细设计
在前面的提要设计中,已将系统划分为多个模块,并将它们凭证一定的准绳组装起来,同时一定了每个功效及模块之间的外部接口。现在所要做的就是一定每个模块详细推行历程,也能够或许说是“历程设计”。
在处置赏罚赏罚历程设计时我接纳的是结构化法式模范模范设计(简称SP)措施。须要指出的是系统的详细设计着实不是指详细的编法式模范模范,而是将提要设计阶段发生的系统功效模块图细化成很容易发生法式模范模范的图纸。是以详细设计的效果基本决议了事实法式模范模范的质量。为软件的质量,延伸软件的生计期,软件的可测试性、可掩护性供应主要的保证。详细设计的目的不只是逻辑上准确地完成每个模块的功效,还应使设计出的处置赏罚赏罚历程清晰易读。
由前一阶段发生的系统功效模块图,我为系统的主要部门设计了以下法式模范模范流程图:经由历程以上法式模范,基本上完成了对所有系统的全体设计,接上去所要做的就是软件的编码使命。系统全体设计的短长直接影响着下一步使命,只需在这一阶段设计出好的模块图和法式模范模范流程图,才干更有益于编码,发生好的软件系统。


第五章 系统应用法式模范模范设计
§5.1 系统窗体模块组成
§5.2 数据模块窗体的设置
在编写数据库应用法式模范模范时,经常要遇到这样的情形,即许多若干许多几何组件、窗体同时会见类似的数据源,假定为每个组件或许窗体都设置一个数据源将是很是耗时的工件,而且要保证这些数据源着实现实上是类似的也需花一番功夫。那么,能不克不及将这些数据源集中治理,最好是做成一个统一的模块,须要时就将该模块引入而不用直接操作数据源自己呢?数据模块(DataModule)是处置赏罚赏罚这个效果最好的谜底。质朴说来,数据模块是用来集中治理数据源的一个窗体,该窗体可被须要的地方随时引入。
图5.2给出了本法式模范模范的数据模块(datamoduleform)窗体图,除报表窗体外所有的数据存取组件和数据源组件都在此数据模块中阻拦了界说。值得一提的是,设置了数据库Database组件,该组件引入了系统所需的唯一的数据库tsxs,Database组件的DatabaseName属性设置为tsckgl。tsxs数据库已在ODBC装备法式模范模范中阻拦了设置。其他的数据存取组件都是基于此数据库组件培植的,这样做的利益是,当数据库的别号或许其他信息改变以后,只需修改Tdatabase组件的AliasName属性便可。
另外,在本系统的数据模块窗体图中,我大多接纳的AODQuery组件而没有接纳BDE组,这主若是基于对ADO组件的明确。在Delphi的学习中我对ADO组件明确的加倍清晰,应用也较BDE越发闇练,而且,ADO组件的功效也较BDE越发强盛,以是在这里大多接纳ADO组件来阻拦数据库联接。同时我也应用了BDE组件中的Table,由于在某些时间BDE有着其自己独占的优胜性。 主窗体功效模块的完成
file://主窗体法式模范模范代码
public file://在法式模范模范的肇端部门,界说快捷按钮点击事宜
Procedure Popup1Handler(Sender:Tobject);
Procedure Popup2Handler(Sender:TObject);
**********************************************************************
procedure Tmainform.Popup1Handler(Sender: TObject);
begin file://快捷按钮1(点“按出书社分类”按钮发生)的点击事宜
with datamoduleform.MainQuery do
begin file://掀开数据模块窗体的MainQuery,对BookRecord表阻拦操作
close; file://关闭MainQuery
SQL.Clear; file://扫除SQL属性中的SQL敕令语句
SQL.Add(‘select * from BookRecord where Publisher=:Pub‘); file://添加新的SQL语句
Parameters.ParamByName(‘Pub‘).Value:=(Sender as TMenuItem).Caption;
open; file://重新掀开MainQuery
end;
end;
**********************************************************************
procedure Tmainform.SpeedButton1Click(Sender: TObject);
Var s1,s2,s3,s4,s5 :String; file://设立5个变量以便利完成模糊查询
begin file://主窗口库存查询按钮事宜
with datamoduleform.MainQuery do
begin
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord‘);
SQL.Add(‘where BookID Like :BookID and BookName Like :Name and Author Like :Author and Publisher Like :pub and BookType Like :BookType‘);
file://应用Like语句来完成模糊查询
if Edit1.Text<>‘‘ then s1:=‘%‘ Edit1.Text ‘%‘ else s1:=‘%‘;
Parameters.ParamByName(‘BookID‘).Value:=s1; file://给变量s1赋值
if Edit2.Text<>‘‘ then s2:=‘%‘ Edit2.Text ‘%‘ else s2:=‘%‘;
Parameters.ParamByName(‘Name‘).Value:=s2; file://给变量s2赋值
if Edit3.Text<>‘‘ then s3:=‘%‘ Edit3.Text ‘%‘ else s3:=‘%‘;
Parameters.ParamByName(‘Author‘).Value:=s3; file://给变量s2赋值
if Edit4.Text<>‘‘ then s4:=‘%‘ Edit4.Text ‘%‘ else s4:=‘%‘;
Parameters.ParamByName(‘Pub‘).Value:=s4; file://给变量s2赋值
if Edit5.Text <>‘‘ then s5:=‘%‘ Edit5.Text ‘%‘ else s5:=‘%‘;
Parameters.ParamByName(‘BookType‘).Value:=s5; file://给变量s2赋值
open;
if FieldValues[‘BookID‘]=NULL file://断定能否找到纪录
then begin
Messagedlg(‘没有找到你所须要的纪录!‘,mtInformation,[mbOK],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit4.Text:=‘‘;Edit5.Text:=‘‘;
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord‘); file://这里相当于一个刷新功效
open;
end;end;
end;
**********************************************************************
procedure Tmainform.SpeedButton3Click(Sender: TObject);
begin file://库存表刷新按钮事宜
with datamoduleform.MainQuery do
begin
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord‘);
open;
end;
end;
**********************************************************************
procedure Tmainform.SpeedButton11Click(Sender: TObject);
var PopupItem:TMenuItem;
begin file://自动天生快捷按钮1的内容
with datamoduleform.BookQuery do
begin file://从数据库被选择出书社类型
close;
SQL.Clear;
SQL.Add(‘select distinct Publisher from BookRecord‘);
open;
PopupMenu1:=TPopupMenu.Create(Self); file://自动天生快捷菜单
PopupMenu1.AutoHotkeys:=maManual; file://自界说热键
while Not Eof do
begin file://凭证出书社内容天生菜票据项
PopupItem:=TMenuItem.Create(Self);
PopupItem.Caption:=FieldByName(‘Publisher‘).AsString;
PopupMenu1.Items.Add(PopupItem);
PopupItem.onClick:=Popup1Handler; file://一定菜票据项的点击事宜
Next;
end; end;
PopupMenu1.Popup(384,67); file://在指定职位显示快捷菜单1
end;
**********************************************************************
procedure Tmainform.FormActivate(Sender: TObject);
begin file://系统初始化,在进入mainform时自动添加数据源
mainform.DBGrid1.DataSource:=datamoduleform.MainSource;
mainform.DBNavigator1.DataSource:=datamoduleform.MainSource;
mainform.DBGrid2.DataSource:=datamoduleform.EmpSource;
mainform.DBNavigator2.DataSource:=datamoduleform.EmpSource;
mainform.DBGrid3.DataSource:=datamoduleform.ShopSource;
mainform.DBNavigator3.DataSource:=datamoduleform.ShopSource;
mainform.DBGrid4.DataSource:=datamoduleform.InSource;
mainform.DBNavigator4.DataSource:=datamoduleform.InSource;
mainform.DBGrid5.DataSource:=datamoduleform.OutSource;
mainform.DBNavigator5.DataSource:=datamoduleform.OutSource;
end;
**********************************************************************
procedure Tmainform.FormCreate(Sender: TObject);
begin file://系统初始化,界说界面巨细,以顺应不合分辨率
Width:=800;Height:=600;
end;
**********************************************************************
procedure Tmainform.Timer1Timer(Sender: TObject);
begin file://在状态栏显示时间
StatusBar1.Panels[2].Text:=DateToStr(Date);
StatusBar1.Panels[4].Text:=TimeToStr(Time);
end;
§5.4 入库、出库窗体模块的完成

图5.4 系统入库治理窗体

图5.5 系统出库治理窗体
procedure Tinoutform.SpeedButton4Click(Sender: TObject);
begin file://入库治理查找按钮事宜
with datamoduleform.BookQuery do file://入库查询处置赏罚赏罚
begin
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord where BookID=:BookID‘);
Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text;
open;
if FieldValues[‘BookID‘]<>NULL
then
begin
Edit1.Text:=‘‘;
Edit1.ReadOnly:=true;Edit1.Color:=clMenu;
Edit6.Text:=FieldValues[‘BookName‘]; file://显示图书名
Edit6.ReadOnly:=true;Edit6.Color:=clMenu; file://设置显示框弗成更改属性
Edit7.Text:=FieldValues[‘Author‘];
Edit7.ReadOnly:=true;Edit7.Color:=clMenu;
Edit8.Text:=FieldValues[‘Publisher‘];
Edit8.ReadOnly:=true;Edit8.Color:=clMenu;
Edit9.Text:=FieldValues[‘PubDate‘];
Edit9.ReadOnly:=true;Edit9.Color:=clMenu;
Edit10.Text:=FieldValues[‘Price‘];
Edit10.ReadOnly:=true;Edit10.Color:=clMenu;
Edit11.Text:=FieldValues[‘BookType‘];
Edit11.ReadOnly:=true;Edit11.Color:=clMenu;
Edit12.Text:=FieldValues[‘Number1‘];
Edit12.ReadOnly:=true;Edit12.Color:=clMenu;
If FieldValues[‘Addation‘]<>NULL
then Edit25.Text:=FieldValues[‘Addation‘]
else Edit25.Text:=‘‘;
Edit25.ReadOnly:=true;Edit25.Color:=clMenu;
end
else
begin file://在没有查找到的情形下,清空所有显示框
Edit1.ReadOnly:=false;Edit1.Text:=‘‘;Edit1.Color:=clMenu;
Edit6.ReadOnly:=false;Edit6.Text:=‘‘;Edit6.Color:=clMenu;
Edit7.ReadOnly:=false;Edit7.Text:=‘‘;Edit7.Color:=clMenu;
Edit8.ReadOnly:=false;Edit8.Text:=‘‘;Edit8.Color:=clMenu;
Edit9.ReadOnly:=false;Edit9.Text:=‘‘;Edit9.Color:=clMenu;
Edit10.ReadOnly:=false;Edit10.Text:=‘‘;Edit10.Color:=clMenu;
Edit11.ReadOnly:=false;Edit11.Text:=‘‘;Edit11.Color:=clMenu;
Edit12.ReadOnly:=false;Edit12.Text:=‘‘;Edit12.Color:=clMenu;
Edit25.ReadOnly:=false;Edit25.Text:=‘‘;Edit25.Color:=clMenu;
MessageDlg(‘没有找到你所须要的纪录!‘,mtInformation,[mbOK],0);
Edit13.Text:=‘‘;Edit13.SetFocus;
end;
end;
with datamoduleform.InQuery do file://自动入库编号的取得
begin
close;
SQL.Clear;
SQL.Add(‘select * from InRecord where InID>=All(select InID from InRecord)‘);
open; file://找到入库编号中最大的一个
Edit26.ReadOnly:=false;
Edit26.Text:=FieldValues[‘InID‘] 1; file://最大的入库编号加1组成新的入库编号
Edit26.ReadOnly:=true;Edit26.Color:=clMenu; file://设置编号的弗成更改性
end;
end;
**********************************************************************
procedure Tinoutform.SpeedButton1Click(Sender: TObject);
var s:integer;
begin file://入库治理添加按钮事宜
if Edit1.Text<>NULL
then MessageDlg(‘请输入完全的入库信息和图手札息,然后单击一定按钮。‘,
mtInformation,[mbok],0)
else begin
if (Edit2.Text=‘‘) or (Edit3.Text=‘‘) or (Edit4.Text=‘‘) or (Edit5.Text=‘‘)
then begin
MessageDlg(‘请输入完全的入库信息!‘,mtInformation,[mbok],0);
Edit2.SetFocus;
end
else begin
with datamoduleform.InQuery do file://将找到的图手札息显示
begin
close;
SQL.Clear;
SQL.Add(‘insert into InRecord values(:InID,:BookID,:EmpID,:ShopID,
:Number,:InDate)‘); file://向入库信息表中拔出纪录
Parameters.ParamByName(‘InID‘).Value:=Edit26.Text; file://向Edit框取值
Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text;
Parameters.ParamByName(‘EmpID‘).Value:=Edit2.Text;
Parameters.ParamByName(‘ShopID‘).Value:=Edit3.Text;
Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;
Parameters.ParamByName(‘InDate‘).Value:=Edit5.Text;
execSQL;
end;
Edit12.ReadOnly:=False;
S:=StrToInt(Edit12.Text) StrToInt(Edit4.Text); file://盘算入库后库存图书数目
Edit12.Text:=IntToStr(s); file://将修改后的库存图书数目显示
Edit12.ReadOnly:=true;
with datamoduleform.BookQuery do file://修改库存纪录中图书数目
begin
close;
SQL.Clear;
SQL.Add(‘update BookRecord set Number1=:Number where
BookID=:BookID‘);
Parameters.ParamByName(‘Number‘).Value:=s;
Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text;
execSQL; file://提交SQL语句
MessageDlg(‘纪录已告成添加!‘,mtInformation,[mbOK],0);
Edit13.SetFocus;
end;
end;
end;
end;
**********************************************************************
procedure Tinoutform.SpeedButton2Click(Sender: TObject);
begin file://入库治理一定按钮事宜
if (Edit2.Text=‘‘) or (Edit3.Text=‘‘) or (Edit4.Text=‘‘) or (Edit5.Text=‘‘)
or (Edit6.Text=‘‘) or (Edit7.Text=‘‘) or (Edit8.Text=‘‘) or (Edit9.Text=‘‘)
or (Edit10.Text=‘‘) or (Edit11.Text=‘‘) or (Edit25.Text=‘‘)
then begin file://断定输入信息的完全性
MessageDlg(‘请输入所需的所有入库信息!‘,mtInformation,[mbok],0);
Edit2.SetFocus;
end
else
begin
with datamoduleform.InQuery do file://入库信息添加
begin
close;
SQL.Clear;
SQL.Add(‘insert into InRecord values(:InID,:BookID,:EmpID,:ShopID,
:Number,:InDate)‘); file://向入库信息表中拔出纪录
Parameters.ParamByName(‘InID‘).Value:=Edit26.Text;
Parameters.ParamByName(‘BookID‘).Value:=Edit1.Text;
Parameters.ParamByName(‘EmpID‘).Value:=Edit2.Text;
Parameters.ParamByName(‘ShopID‘).Value:=Edit3.Text;
Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;
Parameters.ParamByName(‘InDate‘).Value:=Edit5.Text;
execSQL;
end;
with datamoduleform.BookQuery do
begin
close;
SQL.Clear; file://在完成入库信息的添加后,修改库存纪录
SQL.Add(‘insert into BookRecord values(:BookID,:BookName,:Author,
:Publisher,:PubDate,:Price,:BookType,:Number,:Addration)‘);
Parameters.ParamByName(‘BookID‘).Value:=Edit1.Text;
Parameters.ParamByName(‘BookName‘).Value:=Edit6.Text;
Parameters.ParamByName(‘Author‘).Value:=Edit7.Text;
Parameters.ParamByName(‘Publisher‘).Value:=Edit8.Text;
Parameters.ParamByName(‘PubDate‘).Value:=Edit9.Text;
Parameters.ParamByName(‘Price‘).Value:=Edit10.Text;
Parameters.ParamByName(‘BookType‘).Value:=Edit11.Text;
Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;
Parameters.ParamByName(‘Addration‘).Value:=Edit25.Text;
execSQL;
end;
MessageDlg(‘纪录添加告成!‘,mtInformation,[mbok],0);
end;
end;
**********************************************************************
procedure Tinoutform.SpeedButton11Click(Sender: TObject);
begin file://旧书入库按钮事宜
Edit13.Text:=‘‘;Edit13.Color:=clMenu;
with datamoduleform.InQuery do file://自动入库编号的取得
begin
close;
SQL.Clear;
SQL.Add(‘select * from InRecord where InID>=All(select InID from InRecord)‘);
open;
Edit26.Text:=FieldValues[‘InID‘] 1;
Edit26.ReadOnly:=true;Edit26.Color:=clMenu;
end;
with datamoduleform.BookQuery do file://自动图书编号的取得
begin
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord where BookID>=All(select BookID from BookRecord)‘); file://找到库存图书编号中最大的一个
open;
Edit1.ReadOnly:=false;
Edit1.Text:=FieldValues[‘BookID‘] 1; file://显示自动天生的图书编号
Edit1.ReadOnly:=true;Edit1.Color:=clMenu;
end;
Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit4.Text:=‘‘;Edit5.Text:=‘‘;
Edit6.ReadOnly:=false;Edit6.Text:=‘‘;Edit6.Color:=clWindow;
Edit7.ReadOnly:=false;Edit7.Text:=‘‘;Edit7.Color:=clWindow;
Edit8.ReadOnly:=false;Edit8.Text:=‘‘;Edit8.Color:=clWindow;
Edit9.ReadOnly:=false;Edit9.Text:=‘‘;Edit9.Color:=clWindow;
Edit10.ReadOnly:=false;Edit10.Text:=‘‘;Edit10.Color:=clWindow;
Edit11.ReadOnly:=false;Edit11.Text:=‘‘;Edit11.Color:=clWindow;
Edit12.ReadOnly:=false;Edit12.Text:=‘‘;Edit12.Color:=clMenu;
Edit25.ReadOnly:=false;Edit25.Text:=‘‘;Edit25.Color:=clWindow;
end;
procedure Tinoutform.SpeedButton22Click(Sender: TObject);
var s:integer;
begin file://出库治理一定按钮事宜
if (Edit24.Text=‘‘) or (Edit27.Text=‘‘) or (Edit28.Text=‘‘)
then begin
MessageDlg(‘请输入完全的出库信息!‘,mtInformation,[mbok],0);
Edit24.SetFocus;
end
else begin
if Edit27.Text>Edit21.Text file://检查出库数目能否小于库存数目
then begin
MessageDlg(‘库存中的图书数目不够!‘,mtInformation,[mbok],0);
Edit27.Text:=‘‘;Edit27.SetFocus;
end
else begin
with datamoduleform.OutQuery do
begin
close;
SQL.Clear;
SQL.Add(‘insert into OutRecord values(:OutID,:BookID,:EmpID,
:Number,:OutTime)‘); file://添加出库纪录
Parameters.ParamByName(‘OutID‘).Value:=Edit23.Text;
Parameters.ParamByName(‘BookID‘).Value:=Edit14.Text;
Parameters.ParamByName(‘EmpID‘).Value:=Edit24.Text;
Parameters.ParamByName(‘Number‘).Value:=Edit27.Text;
Parameters.ParamByName(‘OutTime‘).Value:=Edit28.Text;
execSQL;
end;
Edit21.ReadOnly:=False;
s:=StrToInt(Edit21.Text)-StrToInt(Edit27.Text); file://盘算出库后库存图书数目
Edit21.Text:=IntToStr(s); file://显示出库后库存图书数目
Edit21.ReadOnly:=True;
with datamoduleform.BookQuery do
begin file://修改库存图书数目
close;
SQL.Clear;
SQL.Add(‘update BookRecord set Number1=:Number where BookID=:BookID‘);
Parameters.ParamByName(‘Number‘).Value:=s;
Parameters.ParamByName(‘BookID‘).Value:=Edit14.Text;
execSQL;
end;
MessageDlg(‘出库纪录添加告成!‘,mtInformation,[mbok],0);
Edit14.Text:=‘‘;Edit14.SetFocus;
end;
end;
end;
§5.5 查询功效的完成
查询功效网罗员工信息查询,供应商信息查询,入库信息查询和出库信息查询。由于每个功效的完成都差不太多,而且其窗体也差不太多,以是在这里只给出员工信息查询窗体及其源代码。

图5.6 员工信息查询窗体
procedure Tfindempform.SpeedButton1Click(Sender: TObject);
Var s1,s2,s3 :String;
begin file://员工纪录查询窗体查找按钮事宜
with datamoduleform.EmpQuery do
begin
close;
SQL.Clear;
SQL.Add(‘select * from Employee‘);
SQL.Add(‘where EmployeeID Like :EmpID and EmployeeName Like :Name and Grade Like :Grade‘); file://完成模糊查询功效
if Edit1.Text<>‘‘ then s1:=‘%‘ Edit1.Text ‘%‘ else s1:=‘%‘;
Parameters.ParamByName(‘EmpID‘).Value:=s1;
if Edit2.Text<>‘‘ then s2:=‘%‘ Edit2.Text ‘%‘ else s2:=‘%‘;
Parameters.ParamByName(‘Name‘).Value:=s2;
if Edit3.Text<>‘‘ then s3:=‘%‘ Edit3.Text ‘%‘ else s3:=‘%‘;
Parameters.ParamByName(‘Grade‘).Value:=s3;
open;
if FieldValues[‘EmployeeID‘]<>NULL
then findempform.Close file://在找到纪录的情形下关闭查找窗口
else
begin
MessageDlg(‘没有找到你所须要的纪录!‘,mtInformation,[mbOK],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
close; SQL.Clear;
SQL.Add(‘select * from Employee‘); file://刷新员工信息窗口
open;
end; end;
end;
§5.6 系统上岸窗体模块的完成
由于系统上岸窗体中有一幅彩图,在这里未便给出,而只给出了系统的完成。
var keyname: string; file://界说了一个全局变量,在key2中有挪用
procedure Tkeyform.SpeedButton1Click(Sender: TObject);
var s:string; file://上岸窗口上岸按钮事宜
begin
if (Edit1.Text=‘‘) then begin
MessageDlg(‘清输入上岸姓名和密码!‘,mtInformation,[mbok],0);
Edit1.SetFocus;
end
else begin
datamoduleform.KeyTable.Active:=true;
if not datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])
file://断定上岸名能否存在
then begin
MessageDlg(‘上岸名弱点,请重新输入!‘,mtInformation,[mbok],0);
Edit1.Text:=‘‘; Edit1.SetFocus;
end
else begin
with datamoduleform.KeyQuery do
begin
close; SQL.Clear;
SQL.Add(‘select * from Key where KeyName=:KeyName‘);
Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;
open;
s:=FieldValues[‘KeyNo‘];
end;
if s<>Edit2.Text file://断定上岸密码能否准确
then begin
MessageDlg(‘上岸密码弱点,请重新输入!‘,mtInformation,[mbok],0);
Edit2.Text:=‘‘; Edit2.SetFocus;
end
else begin
keyname:=Edit1.Text;
keyform.Hide;
mainform.Show;mainform.WindowState:=wsMaximized;
end; end; end;
end;
§5.7 用户治理功效的完成
5.7.1 用户治理主窗体

图5.7 用户治理主窗体
5.7.2 密码修改窗体模块的完成

图5.8 密码修改窗体
procedure Tkey2form.SpeedButton1Click(Sender: TObject);
begin file://密码修改窗口修改按钮事宜
if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)or(Edit3.Text=‘‘)
then begin
MessageDlg(‘请输入完全的信息。‘,mtInformation,[mbok],0);
Edit1.SetFocus;
end
else begin
if Not datamoduleform.KeyTable.Locate(‘KeyNo‘,Edit1.Text,[])
then begin
MessageDlg(‘原密码输入弱点,不克不及修改新密码!‘,mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
end
else begin
if Edit2.Text<>Edit3.Text
then begin
MessageDlg(‘两次密码输入不合,请重新输入新密码!‘,mtInformation,[mbok],0);
Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit2.SetFocus;
end
else begin file://在数据库中修改密码
with datamoduleform.KeyQuery do
begin
close; SQL.Clear;
SQL.Add(‘update key set KeyNo=:KeyNo where KeyName=:KeyName‘);
Parameters.ParamByName(‘KeyName‘).Value:=keyname;
Parameters.ParamByName(‘KeyNo‘).Value:=Edit2.Text;
execSQL;
MessageDlg(‘密码修改告成!‘,mtInformation,[mbok],0);
key2form.Close;
end; end; end; end;
end;
5.7.3 用户注册窗体模块的完成

图5.9 用户注册窗体
procedure Tkey3form.SpeedButton1Click(Sender: TObject);
begin file://用户注删窗口注删按钮事宜
if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)or(Edit3.Text=‘‘)
then begin
MessageDlg(‘请输入完全的信息!‘,mtInformation,[mbok],0);
Edit1.SetFocus;
end
else begin
if datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])
file://断定用户名能否存在,系统禁绝可用户名重复
then begin
MessageDlg(‘用户名已存在,请输入新的用户名和密码!‘,
mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
end
else begin
if Edit2.Text<>Edit3.Text
then begin
MessageDlg(‘您输入的两个密码不类似,请重新输入!‘,mtInformation,[mbok],0);
Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit2.SetFocus;
end
else begin
with datamoduleform.KeyQuery do file://在数据库中添加该用户
begin
close;
SQL.Clear;
SQL.Add(‘insert into Key values(:KeyName,:KeyNo)‘);
Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;
Parameters.ParamByName(‘KeyNo‘).Value:=Edit2.Text;
execSQL;
end;
MessageDlg(‘新用户添加告成,您可以一连添加用户,或按“撤消”加入。‘,mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
end; end; end;
end;
5.7.4 用户刊出窗体模块的完成

图5.10 用户刊出窗体
procedure Tkey4form.SpeedButton1Click(Sender: TObject);
var s:string;
begin file://用户刊出窗口刊出按钮事宜
if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)
then MessageDlg(‘请输入完全的信息!‘,mtInformation,[mbok],0)
else begin
if Not datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])
file://断定用户名能否存在,用户名必须存在,才可以删除
then begin
MessageDlg(‘您所输入的用户名不存在,请重新输入或按“撤消”加入。‘,
mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit1.SetFocus;
end
else begin
with datamoduleform.KeyQuery do
begin
close;
SQL.Clear;
SQL.Add(‘select * from Key where KeyName=:KeyName‘);
Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;
open;
s:=FieldValues[‘KeyNo‘];
end;
if s<>Edit2.Text file://断定该用户名下的密码能否准确
then begin
MessageDlg(‘您所输入的密码不准确,请重新输入或按“撤消”加入。‘,
mtInformation,[mbok],0);
Edit2.Text:=‘‘;Edit2.SetFocus;
end
else begin file://从数据库中删除该用户
with datamoduleform.KeyQuery do
begin
close;
SQL.Clear;
SQL.Add(‘delete from Key where KeyName=:KeyName‘);
Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;
execSQL;
end;
MessageDlg(‘用户已告成删除,您可以一连删除用户,或按“撤消”加入。‘,
mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit1.SetFocus;
end; end; end;
end;

阻拦语
本系统是一个面向小型图书企业,具有一定适用性的数据库信息治理系统。它主要完成对图书客栈的一系列治理,网罗入库、出库、库存和员工和供应商信息治理。本系统接纳以后盛行的面向工具的开发工具—Delphi来完玉成部系统的设计,在数据库的设计上应用了Access的便利性和适用性。
本系统具有相当的适用功效。在查询方面,系统完成了多条件随便任性字段的模糊查询,同时在分类查询上完成了静态天生,系统可以自动识别用户不合的输入。在图书入库、出库和库存三者之间培植了优胜的链接关系,某一部门地修改均会自动激起系统对与其相关的部门阻拦连锁修改。在用户治理方面,系统较好地完成了用户注册,用户刊出和密码修改等各项功效。
系统在设计历程当中弗成防止地遇到了种种各样的效果,由于所有系统完全都是由小我设计的,有关Delphi许多细节效果都要靠自己去探索,加上自己水平无限,并没有完全地明确Delphi的强盛功效,而且还存在着许多缺乏的地方。如:
※ 受开发条件和开发时间的限制,本系统只应用了当地数据库Access,它同应用法式模范模范处于统一系统中,能存储的数据量也有一定限制,并没有施展出Delphi其数据库方面的优势;
※ 报表打印功效尚不够周全完善,不克不及完成静态报表;
※ 在一些数据输入时没有实时的阻拦数据名堂校验,不克不及保证数据输入的相对准确性。
※ 由于时间关系,系统功效完成不够完善,应用不是很便利,好比,没有完成多条纪录的连锁删除和添加和数据的导入功效。
这些都是须要完善的地方,该系统离现实应用也尚有相当的距离,须要我阻拦赓续地填补和完善。
经由历程本次卒业设计我学到了许多新的器械,也发清晰了了大量的效果,有些在设计历程当中曾经处置赏罚赏罚,有些尚有待往后徐徐学习。只需学习就会有更多的效果,有更多的难点,但也会有更多的收获。

考 文 献
[1] 郑荣贵、黄平、谷会东,Delphi 6.0数据库开发与应用,中科多媒体电子出书社,2002
[2] 伍俊良,Delphi 6控件应用实例教程,北京欲望电子出书社,2002
[3] 卢国俊,Delphi 6数据库开发,电子工业出书社,2002
[4] 边萌,Delphi 编程起步,机械工业出书社,2002
[5] 伍俊良,Delphi 6课程设计案例精编,中国水利水电出书社,2002
[6] 丁宝康,数据库原理,经济迷信出书社,2000
[7] 陆丽娜,软件工程,经济迷信出书社,2000

 

  全套卒业设计论文现成制品行料请咨询 625110801      前往想页 如转载请注明泉源于mog-net.com  


打印本页 | 关闭窗口
 上一篇文章:暂时没有
本类最新文章
钢筋混凝土板的拉伸硬化历程剖析 自动变速器设计 应用法式模范模范基础Android&nb
Struts——一种开源MVC的 RFID医疗治理系统 喷灌工程妄图设计
| 关于我们 | 友谊链接 | 卒业设计招聘 |

Email:biyeshejiba@163.com 在线QQ:   625110801 师长教员卒业作品网站  
本站卒业设计卒业论文质料均属原创者所有,仅供学习交流之用,请勿转载并做其他非法用处.若有侵占您的版权有损您的利益,请联系我们会急速纠正或删除有关内容!