仓库管理系统课程设计 44页

  • 1017.51 KB
  • 2022-05-16 18:34:37 发布

仓库管理系统课程设计

  • 44页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
仓库管理系统一、课程设计的内1、学习与实践数据库应用程序开发流程;2、学习使用某一种数据库服务,学会数据库应用程序编程,安装配置系统开发环境;3、设计和实现仓库管理系统;4、撰写课程设计报告。二、课程设计的要求与数据系统应该实现以下功能:(1)进、出库管理。对进、出库信息进行记录。(2)查询功能。仓库管理对查询要求高,通过主菜单记录当前操作用户的用户编号,保证了对进、出库信息录入负责人的确认。(3)部门资料管理与库存报表生成。资料管理包括了人员信息管理,财政支出信息管理,以及各项业务单据的资料管理。报表主要分类为:日报表,月报表,销售报表,入库报表等等。(4)由于计算机能存贮大量的数据,而且数据只要一次存入,便可多次重复使用,所以管理数据达到完整,统一,原始记录能保证及时,准确。(5)许多重复性的工作,都可由计算机去执行,从而使管理人员从事务性工作解脱出来,真正变为从事一些信息的分析,判断,决策等创造性的工作。数据自己自行编造测试。论文要求结构严谨、格式规范,内容正确、文字通顺。三、课程设计应完成的工作该系统主要分为三大功能:管理员功能、信息安全功能、一般用户功能、报表生成。(1)管理员功能:产品入库登记、确认入库信息、删除库内信息、借出信息登记、产品分类管理、添加人员、删除人员、查询库内信息。(2)信息安全功能:人员权限区分、事件记录、数据警告、数据备份、数据恢复;(3)一般用户功能:查询库内信息、查询出库信息、查询入库信息、修改本用户密码;(4)报表生成:库存信息报表生成。五、应收集的资料及主要参考文献[1]MySQL5.1参考手册http://dev.mysql.com/doc/refman/5.1/zh/introduction.html#features[2]Devart.comhttp://www.devart.com/mydac/[3]数据库系统概论(第四版)王珊萨师煊高等教育出版社2006.5[4]软件工程(第二版)李代平等编著清华大学出版社2008.144 [5]MySQL开发者SQL权威指南(荷)RickF.vanderLans著许杰星李强等译机械工业出版社2008.1[6]学习MySQL(影印版)SeyedM.M."Saied"Tabagbogbi&HugbE.Williams著南京:东南大学出版社2007.6[7]C++Builder程序员成长攻略蒙祖强龚涛等编著北京:中国水利水电出版社2007.1目录一、相关技术介绍71.1MySQL71.2BorlandC++Builder集成开发环境81.3MyDAC组件库8二、需求分析102.1功能需求及用户需求102.1.1功能需求102.1.2用户需求102.2系统流图112.3数据描述112.3.1数据字典112.3.1.1基本数据项及数据结构112.3.1.2数据流条目122.3.1.3数据存储条目122.3.1.4加工条目132.3.2数据流图142.4安全性和完整性要求152.4.1安全性要求152.4.2完整性要求16三、概念结构设计16四、逻辑结构设计184.1关系模型设计184.2用户子模式设计224.3系统结构图264.4安全性和完整性设计264.4.1安全性设计264.4.2完整性设计27五、数据库物理设计285.1建立索引285.2确定数据的存放位置285.3确定系统配置295.4模块设计30六、数据库实施306.1创建数据库及数据库对象SQL脚本306.2数据库备份和恢复方案446.2.1静态备份446.2.2动态备份446.2.3恢复备份446.3界面设计456.4关键代码4844 七、系统测试方案507.1登录测试507.2新建用户测试507.3更改用户测试507.4删除用户测试507.5数据录入测试517.6查询测试51八、系统主要功能和使用说明51九、系统安装说明52十、心得体会54参考文献:54相关技术介绍1.1MySQLMySQL是最受欢迎的开源SQL数据库管理系统,它由MySQLAB开发、发布和支持。MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去。MySQL的特性:1)使用C和C++编写,用众多不同的编译器进行了测试,能够工作在众多不同的平台上。2)使用GNUAutomake、Autoconf和Libtool进行移植。3)提供了用于C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl的API。4)采用核心线程的完全多线程如果有多个CPU,它能方便地使用这些CPU。5)提供了事务性和非事务性存储引擎。6)使用了极快的“B树”磁盘表(MyISAM)和索引压缩。7)添加另一个存储引擎相对简单。如果打算为内部数据库添加一个SQL接口,该特性十分有用。8)极快的基于线程的内存分配系统。9)通过使用优化的“单扫描多连接”,能实现极快的连接。10)存储器中的哈希表用作临时表。11)SQL函数是使用高度优化的类库实现的,运行很快。通常,在完成查询初始化后,不存在存储器分配。12)采用Purify(商业内存溢出检测器)以及GPL工具Valgrind测试了MySQL代码。13)44 服务器可作为单独程序运行在客户端/服务器联网环境下。它也可作为库提供,可嵌入(链接)到独立的应用程序中。这类应用程序可单独使用,也能在网络环境下使用。简言之,MYSQL具有功能强,使用简单,管理方便,运行速度快,可靠性高,安全保密等特点。1.2BorlandC++Builder集成开发环境BorlandC++Builder(以下简称BCB)是Borland公司(现更名为Inprise)继Delphi之后推出的又一个优秀的可视化编程环境,它在32位Windows环境下为我们提供了一种极具吸引力的快速Windows应用程序开发系统(RAD)。它基于最流行的面向对象程序设计语言C++,采用领先的数据库技术,并结合使用了图形用户界面(GUI)的许多先进特性和设计思想。VCL是可视化组件库的简称,它是一个面向对象的函数库,完全支持所有面向对象编程的标准概念如继承、多态和封装等。C++Builder的集成开发环境提供了120多个VCL组件,使开发人员不需太多编码,就能够实现很多复杂的功能,体现了软件的“重用性”原则。C++Builder的用户界面也非常友好,易于使用,并且采用了停驻式(docking)工具条,可以自由组合集成开发环境窗口和工具条的排放方式。在编码过程中,还可以使用CodeExplorer技术对源代码进行管理。CodeCompletion技术使编译器能够自动列出VCL组件的可用属性和方法供程序员选择,而不必手工输入冗长的代码。C++Builder含有20多个数据感知控件。在许多情况下,甚至不须要编写任何程序代码,便可以开发一个复杂的应用程序。C++Builder还提供了强大的Borland数据库引擎,这是一种非常成熟的数据库连接技术,它提供了3种访问数据库的方式:一是可以直接存取dBase、FoxPro、Paradox等文件型数据库生成的DB、DBF文件;二是提供了标准的ODBC接口;三是提供了高效的SQLLinks数据库驱动程序,允许直接存取Oracle、Informix、SyBase、MSSQLServer、DB2和InterBase。此外,C++Builder还提供了一组ADO控件,使C++Builder编程人员不用依靠BDE来创建应用程序,可直接使用ADO存取数据。C++Builder率先引入了多层数据库应用模型,通过C++Builder提供的多层分布式应用服务(MIDAS)可以轻松开发出高可靠性、高效率、高负载的分布式数据处理系统。此外,还可以通过ActiveForm或InterBaseExpress为多层数据库应用程序创建基于Web的客户端,这样用户通过普通的浏览器就可以与远程数据库系统进行交互。在C++cBuilder6中,MIDAS更名为DataSnap、DataSnap强化了MIDAS原有的功能,并改善了MIDAS的执行效率,更方便使用。1.3MyDAC组件库MyDAC,全称为MySQLDataAccessComponents(MySQL数据访问组件),支持BorlandDelphi,C++Builder和Kylix。它提供访问MySQL数据库的一种方式,可以代替标准的BorlandDatabaseEngine(BDE)或dbExpress。MyDAC能够通过MySQLclient或MySQLnetworkprotocol工作。假如直接使用MySQLprotocol协议MyDAC不需要clientlibrary,仅需要TCP/IP44 protocol。这个特征允许编译真正的瘦客户数据库应用。在基于MySQL的client/server应用中使用BDE或dbExpress有些不足,许多情况下BDE和dbExpress不能够使用服务器的特殊特征,还有BDE必须容忍过多的资源使用,限制一个应用程序的分发和管理。使用BDE:[MySQL]<->[ODBC]<->[BDE]<->[Application]通过MySQL接口:[MySQL]<->[Clientlibrary]<->[Application]使用MySQL网络协议:[MySQL]<->[Application]二、需求分析2.1功能需求及用户需求2.1.1功能需求该系统主要分为三大功能:管理员功能、信息安全功能、一般用户功能、报表生成。(1)管理员功能:产品入库登记、确认入库信息、删除库内信息、借出信息登记、产品分类管理、添加人员、删除人员、查询库内信息。(2)信息安全功能:人员权限区分、事件记录、数据警告、计划备份、即时备份、数据恢复;(3)一般用户功能:查询库内信息、查询出库信息、查询入库信息、修改本用户密码;(4)报表生成:库存信息报表生成。2.1.2用户需求44 根据用户需求,该系统应该实现以下功能:(1)进、出库管理。对进、出库信息进行记录。(2)查询功能。仓库管理对查询要求高,通过主菜单记录当前操作用户的用户编号,保证了对进、出库信息录入负责人的确认。(3)部门资料管理与库存报表生成。资料管理包括了人员信息管理,财政支出信息管理,以及各项业务单据的资料管理。报表主要分类为:日报表,月报表,销售报表,入库报表等等。(4)由于计算机能存贮大量的数据,而且数据只要一次存入,便可多次重复使用,所以管理数据达到完整,统一,原始记录能保证及时,准确。(5)许多重复性的工作,都可由计算机去执行,从而使管理人员从事务性工作解脱出来,真正变为从事一些信息的分析,判断,决策等创造性的工作。查询操作库存操作2.2系统流图定货报告入库信息处理出库信 息处理购货商需求表采购货物入库仓库管理系统存储文件入库信息出库信息表库存报表供货商出入库库存报表2.3数据描述2.3.1数据字典2.3.1.1基本数据项及数据结构l零部件信息。包括的数据项有零件号、零件名称、规格、单价、描述。l仓库信息。包括的数据项有仓库号、已用库存、库存总量、负责人、电话号码。l供应商信息。包括的数据项有编号、供应商、电话号码、地址。l部门信息。包括的数据项有部门号、名称、电话。44 数据项名称别名简述类型长度取值范围零件号-零件的编号字符型7第1位:进口/国产(I/D)第2-4位:类别第5-7位:物资编号零件名称-零件的名称字符型20-规格-零件规格字符型10单价-零件的单位价格货币型6默认计量单位:元描述-零件描述/说明文本型--仓库号-仓库的编号字符型3-已用库存-仓库已用存储容量数值型6>0:仓库非空=0:空仓库<0:不允许库存总量-仓库总存储容量数值型6>0:物资存量=0:空仓库<0:不允许负责人-仓库负责人字符型20-供应商编号-供应商编号字符型3-供应商-供应商名称字符型20-地址-供应商联系地址文本--部门号-公司部门编号字符型3-部门名-公司部门名称字符型20-电话-电话号码字符型15-2.3.1.2数据流条目名称别名简述来源去向入库单-入库单位在把相应的零件送人仓库时必须填写的单据供应商库存出库单-领料人员从仓库中领取零件时必须填写的单据库存公司部门客户还库单-零件使用后归还入库必须填写的单据公司部门库存需求单-对新零件需求所填写的单据公司部门库存采购单-购买新零件所填写的单据采购员供应商2.3.1.3数据存储条目名称别名简述组织方式查询要求仓库库存-存放索引文件,以仓库编号为关键字要求立即查询零件库存-存放索引文件,以零件编号为关键字要求立即查询2.3.1.4加工条目44 加工名激发条件优先级输入输出零件入库接收到合格入库单时普通合格入库单库存满,零件成功入库加工逻辑根据库存记录。Loop:If(入库物资的数量+物资现有存量)<=该物资库存量临界值Then物资存入仓库;物资现有存量=物资现有存量+入库物资的数量;Else物资库存已足,If物资现有存量=该物资库存量临界值Then结束,入库失败Endif;调整入库单;gotoloop,直到(入库物资的数量+物资现有存量)<=该物资库存量临界值;Endif;零件入库;统计仓库库存已用量;加工名激发条件优先级输入输出零件出库接收到合格出库单时普通合格出库单库存量不足,零件成功出库加工逻辑根据库存记录。Loop:零件是否存在?是:If需求单物资的数量<该物资库存量的临界值Then零件出库物资现有存量=物资现有存量-出库零件的数量;Else物资短缺,If物资现有存量<=物资最少存量Then结束,出库失败Endif;调整入库单;gotoloop,直到(物资现有存量-出库零件的数量)>=该物资库存量临界值;Endif;否:零件不存在,gotoloop;零件入库;统计仓库库存已用量;44 2.3.2数据流图1)本系统的顶层数据流图2)细化后的数据流图3)货物入库信息管理细化44 1)货物出库信息管理细化2.4安全性和完整性要求2.4.1安全性要求系统安全性要求至少达到TCSEC(TDI)的C1级。即只提供了非常初级的自主安全保护。能够实现对用户和数据的分离,进行自主存取控制(DAC),保护或限制用户权限的传播。实行用户标识与鉴别,具有数据备份和日志审计功能。2.4.2完整性要求44 每个关系中都至少要有一个主键,并且都有一个聚集索引(ClusteredIndex)。关系与关系之间通过主外键关联。定义属性上的约束条件,定义触发器。二、概念结构设计1)库存实体E-R图:2)入库实体E-R图:3)出库实体E-R图:4)部门需求实体E-R图:44 5)还库实体E-R图:6)计划采购实体E-R图:7)实体和实体之间的关系图如图所示:8)仓库管理E-R图如图所示44 二、逻辑结构设计4.1关系模型设计1)仓库表storehouseNO.字段名代码类型约束1仓库号stoIDChar(3)主键2已用库存Used_volumeSmallint非空,默认0,unsigned,<=All_volume3库存总量All_volumeSmallint非空,默认10000,unsigned4负责人principalVarchar(20)非空5电话号码stoTELVarchar(15)2)零件表partsNO.字段名代码类型约束1零件号parIDChar(7)主键2名称partVarchar(20)非空3规格specChar(10)44 4单价priceDecimal(6,2)非空,默认0,unsigned5计量单位mensurationChar(4)非空,默认“元”6描述descriptionText1)供应商supplierNO.字段名代码类型约束1编号supIDChar(3)主键2供应商supNameVarchar(20)非空3电话号码supTELVarchar(15)非空4地址addressText2)部门表deptNO.字段名代码类型约束1部门号depIDChar(3)主键2名称depNameVarchar(20)非空3电话depTELVarchar(15)3)库存表storageNO.字段名代码类型约束1仓库号stoIDChar(3)主键,与storehouse表中的stoID外键关联,级联删除、更新2零件号parIDChar(7)主键,与parts表中的parID外键关联,级联删除、更新3现有存量Now_volumeSmallint非空,默认0,>=Min_volume,<=Max_volume4最小存量Min_volumeSmallint非空,默认0,unsigned44 5最大存量Max_volumeSmallint非空,默认0,unsigned1)供应表supplyNO.字段名代码类型约束1供应商号supIDChar(3)主键,与supplier表中的supID外键关联,级联删除、更新2零件号parIDChar(7)主键,与parts表中的parID外键关联,级联删除、更新3供应量supVolumeSmallint非空,默认0,unsigned4供应时间supDateTimestamp非空2)部门需求表demandNO.字段名代码类型约束1零件号parIDChar(7)主键,与parts表中的parID外键关联,级联删除、更新2部门号depIDChar(3)主键,与dept表中的depID外键关联,级联更新、删除3需求数量demVolumeSmallint非空,默认0,unsigned4开始时间startTimeTimestamp非空5结束时间endTimeTimestamp非空3)零件归还表restoreNO.字段名代码类型约束0编号resIDSmallint主键,AUTO_INCREMENT1仓库号stoIDChar(3)主键,与storehouse表中的stoID外键关联,级联删除、更新44 2零件号parIDChar(7)主键,与parts表中的parID外键关联,级联更新、删除3部门号depIDChar(3)主键,与dept表中的depID外键关联,级联更新、删除4归还数量resVolumeSmallint非空,默认0,unsigned5经手人cmakerVarchar(20)非空6归还者returnerVarchar(20)非空7归还时间resDateTimestamp非空1)零部件采购计划表stockNO.字段名代码类型约束1零件号parIDChar(7)主键,与parts表中的parID外键关联,级联更新、删除2采购量stoVolumeSmallint非空,默认0,unsigned3供应商号supIDChar(3)与supplier表中的supID外键关联4采购时间stoDateTimestamp主键5采购员buyerVarchar(20)2)入库表warehousingNO.字段名代码类型约束0编号inIDSmallint主键,AUTO_INCREMENT1仓库号stoIDChar(3)44 主键,与storehouse表中的stoID外键关联,级联删除、更新2供应商号supIDChar(3)非空,与supplier表中的supID外键关联3零件号parIDChar(7)主键,与parts表中的parID外键关联,级联更新、删除4入库数量inVolumeSmallint非空,默认0,unsigned5经手人cmakerVarchar(20)非空6入库时间inDateTimestamp非空,默认当前时间1)出库表stockoutNO.字段名代码类型约束0编号outIDsmallint主键,,AUTO_INCREMENT1仓库号stoIDChar(3)主键,与storehouse表中的stoID外键关联,级联删除、更新2零件号parIDChar(7)主键,与parts表中的parID外键关联,级联更新、删除3出库数量outVolumeSmallint非空,默认0,unsigned4使用者userVarchar(20)非空5经手人cmakerVarchar(20)非空6领取人receiptorVarchar(20)非空7出库时间outDateTimestamp非空,默认当前时间4.2用户子模式设计1)仓库信息视图storehouse_viewNO.字段名代码类型备注44 1仓库号stoIDChar(3)连storehouse表2已用库存Used_volumeInt连storehouse表3库存总量All_volumeInt连storehouse表4负责人principalVarchar(20)连storehouse表6电话号码stoTELVarchar(15)连storehouse表1)零部件库存视图parts_storage_viewNO.字段名代码类型备注1仓库号stoIDChar(3)连storage表2零件号parIDChar(7)连parts表3名称partVarchar(20)连parts表4规格specChar(10)连parts表5单价priceDecimal(6,2)连parts表6计量单位mensurationChar(4)连parts表7现有存量Now_volumeSmallint连storage表8最小存量Min_volumeSmallint连storage表9最大存量Max_volumeSmallint连storage表2)零部件入库视图warehousing_viewNO.字段名代码类型备注0仓库号stoIDChar(3)连warehousing表1零件号parIDChar(7)连parts表,更新warehousing表的parID项2供应商号supIDChar(3)连supplier表44 3供应商supNameVarchar(20)连supplier表4电话supTELVarchar(15)连supplier表5零件名partVarchar(20)连parts表NO.字段名代码类型备注6规格specChar(10)连parts表7单价priceDecimal(6,2)连parts表8计量单位mensurationChar(4)连parts表9入库数量inVolumeSmallint连warehousing表,更新parts_storage_view视图的Now_volume项10描述descriptionText连parts表11经手人cmakerVarchar(20)连warehousing表12入库时间inDateTimestamp连warehousing表1)零部件出库视图stockout_viewNO.字段名代码类型备注0仓库号stoIDChar(3)连stockout表1零件号parIDChar(7)连parts表,更新stockout表的parID项2出库数量outVolumeSmallint连stockout表,更新storage表的now_volume3使用单位userVarchar(20)连stockout表4经手人cmakerVarchar(20)连stockout表5领取人receiptorVarchar(20)连stockout表44 6出库时间outDateTimestamp连stockout表1)零部件计划采购视图stock_viewNO.字段名代码类型备注1零件号parIDChar(7)连stock表2采购量stoVolumeSmallint连stock表3供应商号supIDChar(3)连supplier表,更新stock表的supName4电话supTELVarchar(15)连supplier表NO.字段名代码类型备注5价格priceDecimal(6,2)连parts表6计量单位mensurationChar(4)连parts表7规格specChar(10)连parts表8采购时间stoDateTimestamp连stock表9采购员buyerVarchar(20)连stock表2)部门需求视图demand_viewNO.字段名代码类型备注1零件号parIDChar(7)连demand表2部门号depIDChar(3)连demand表3需求数量demVolumeSmallint连demand表4开始时间startTimeTimestamp连demand表5结束时间endTimeTimestamp连demand表3)供应商零件供应视图supply_view44 NO.字段名代码类型备注1供应商号supIDChar(3)连supplier表2零件号parIDChar(7)连supply表3单价priceDecimal(6,2)连parts表4计量单位mensurationChar(4)连parts表5规格specChar(10)连parts表6供应量supVolumeSmallint连supply表7供应时间supDateTimestamp连supply表8电话supTELVarchar(15)连supplier表1)零部件归还入库视图restore_viewNO.字段名代码类型备注0仓库号stoIDChar(3)连restore表1零件号parIDChar(7)连restore表2部门号depIDChar(3)连restore表3归还数量resVolumeSmallint连restore表4经手人cmakerVarchar(20)连restore表5归还者returnerVarchar(20)连restore表6归还时间resDateTimestamp连restore表4.3系统结构图44 4.4安全性和完整性设计4.4.1安全性设计用户类别有:信息查询员inf,仓库管理员dba和系统管理员sys。他们的权限分别为:l信息查询员inf:只有信息查询的权限。l仓库管理员dba:具有信息查询,更新,删除,报单打印权限。l系统管理员sys:除具有仓库管理员dba所有权限外,还具有用户管理,数据恢复备份。4.4.2完整性设计各表中各个字段的完整性约束已在“4.1关系模型设计”中各表的“约束”列做了详细说明。触发子设计:1)零件入库触发子设置触发子parts_warehousing_update,当warehousing表插入或更新一条新记录后,更新storage表的零件存量Now_volume和更新storehouse表的已用存量Used_volume。设置触发子parts_warehousing_delete,当warehousing表删除一条(错误)记录前,更新storage表的零件存量Now_volume和更新storehouse表的已用存量Used_volume2)零件出库触发子设置触发子parts_stockout_update,当stockout表插入或更新一条新记录后,更新storage表的零件存量Now_volume和更新storehouse表的已用存量Used_volume。44 设置触发子parts_warehousing_delete,当stockout表删除一条(错误)记录前,更新storage表的零件存量Now_volume和更新storehouse表的已用存量Used_volume1)零件归还入库触发子设置触发子parts_restore_update,当restore表插入或更新一条新记录后,更新storage表的零件存量Now_volume和更新storehouse表的已用存量Used_volume。设置触发子parts_restore_delete,当restore表删除一条(错误)记录前,更新storage表的零件存量Now_volume和更新storehouse表的已用存量Used_volume二、数据库物理设计5.1建立索引各表索引设计如下:表名索引字段索引类型排列次序唯一值零件零件号聚集索引升序√零件名非聚集索引升序供应商供应商号聚集索引升序√供应商名非聚集索引升序部门部门号聚集索引升序√部门名非聚集索引升序库存零件号非聚集索引升序供应供应商号非聚集索引升序零件号非聚集索引升序供应时间聚集索引降序部门需求零件号非聚集索引升序部门号非聚集索引升序开始时间非聚集索引降序结束时间非聚集索引降序零件归还归还时间聚集索引降序零件号非聚集索引升序部门号非聚集索引升序零件采购零件号非聚集索引升序采购时间聚集索引降序零件入库入库时间聚集索引降序零件号非聚集索引升序零件出库出库时间聚集索引降序零件号非聚集索引升序5.2确定数据的存放位置该数据库的数据文件都存放在MySQL的安装目录的/data/warehouse文件夹下.44 5.3确定系统配置1)运行环境v操作系统:Windows2003或WindowsXP,以上v数据库系统:5.1.29-rc-community-logMySQLCommunityServer(GPL)v开发平台:C++Builder6.0+MyDAC5.70.0.42forC++Builder62)数据库配置44#适合于内存256M--512M的用户。用于服务器搭建[client]port=3306[mysql]default-character-set=gbk[mysqld]port=3306basedir="D:/PC_webserver/mysql/"datadir="D:/PC_webserver/mysql/Data/"default-character-set=gbkdefault-storage-engine=INNODBsql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"max_connections=447query_cache_size=12Mtable_cache=128tmp_table_size=8Mthread_cache_size=4myisam_max_sort_file_size=100Gmyisam_max_extra_sort_file_size=100Gmyisam_sort_buffer_size=16Mkey_buffer_size=32Mread_buffer_size=64Kread_rnd_buffer_size=256Ksort_buffer_size=2Minnodb_data_home_dir="D:/PC_webserver/mysql/datafiles/"innodb_additional_mem_pool_size=2Minnodb_flush_log_at_trx_commit=1innodb_log_buffer_size=1Minnodb_buffer_pool_size=29Minnodb_log_file_size=10Minnodb_thread_concurrency=8log=D:PC_webservermysqllogsql.loglog-output=FILE445.4模块设计仓库管理HIPO图44 二、数据库实施6.1创建数据库及数据库对象SQL脚本44/*MySQLDataTransferSourceHost:localhostSourceDatabase:warehouseTargetHost:localhostTargetDatabase:warehouseDate:2009-1-60:01:49*/SETFOREIGN_KEY_CHECKS=0;--------------------------------Tablestructurefordemand------------------------------CREATETABLE`demand`(`parID`char(7)NOTNULLCOMMENT"零件号",`depID`char(3)NOTNULLCOMMENT"部门号",`demVolume`smallint(6)unsignedNOTNULLDEFAULT"0"COMMENT"需求数量",`startTime`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT"开始时间",`endTime`timestampNOTNULLDEFAULT"0000-00-0000:00:00"COMMENT"结束时间",PRIMARYKEY(`parID`,`depID`),KEY`depID`(`depID`),KEY`parID`(`parID`),44 KEY`startTime`(`startTime`),KEY`endTime`(`endTime`),CONSTRAINT`demand_parID`FOREIGNKEY(`parID`)REFERENCES`parts`(`parID`)ONDELETENOACTIONONUPDATECASCADE,CONSTRAINT`depID`FOREIGNKEY(`depID`)REFERENCES`dept`(`depID`)ONDELETENOACTIONONUPDATECASCADE)ENGINE=InnoDBDEFAULTCHARSET=gbkCOMMENT="需求表";--------------------------------Tablestructurefordept------------------------------CREATETABLE`dept`(`depID`char(3)NOTNULLCOMMENT"部门号",`depName`varchar(20)NOTNULLCOMMENT"名称",`depTEL`varchar(15)DEFAULTNULLCOMMENT"电话",PRIMARYKEY(`depID`),UNIQUEKEY`depID`(`depID`),KEY`depName`(`depName`))ENGINE=InnoDBDEFAULTCHARSET=gbkCOMMENT="部门表";--------------------------------Tablestructureforparts------------------------------CREATETABLE`parts`(`parID`char(7)NOTNULLCOMMENT"零件号",`part`varchar(20)NOTNULLCOMMENT"名称",`spec`char(10)DEFAULTNULLCOMMENT"规格",`price`decimal(6,2)unsignedNOTNULLDEFAULT"0.00"COMMENT"单价",`mensuration`char(4)NOTNULLDEFAULT"元"COMMENT"计量单位",`description`textCOMMENT"述描",PRIMARYKEY(`parID`),UNIQUEKEY`parID`(`parID`),KEY`part`(`part`))ENGINE=InnoDBDEFAULTCHARSET=gbkCOMMENT="零件表";--------------------------------Tablestructureforpriv------------------------------CREATETABLE`priv`(`user`varchar(16)NOTNULL,`type`char(3)NOTNULL,PRIMARYKEY(`user`))ENGINE=InnoDBDEFAULTCHARSET=gbk;------------------------------44 --Tablestructureforrestore------------------------------CREATETABLE`restore`(`resID`smallint(6)unsignedNOTNULLAUTO_INCREMENTCOMMENT"编号",`stoID`char(3)NOTNULLCOMMENT"仓库号",`parID`char(7)NOTNULLCOMMENT"零件号",`depID`char(3)NOTNULLCOMMENT"部门号",`resVolume`smallint(6)unsignedNOTNULLDEFAULT"0"COMMENT"归还数量",`cmaker`varchar(20)NOTNULLCOMMENT"经手人",`returner`varchar(20)NOTNULLCOMMENT"归还者",`resDate`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT"归还时间",PRIMARYKEY(`resID`,`parID`,`depID`),KEY`stoID`(`stoID`),KEY`depID`(`depID`),KEY`parID`(`parID`),KEY`resDate`(`resDate`),CONSTRAINT`restore_ibfk_7`FOREIGNKEY(`stoID`)REFERENCES`storehouse`(`stoID`)ONDELETENOACTIONONUPDATECASCADE,CONSTRAINT`restore_ibfk_8`FOREIGNKEY(`depID`)REFERENCES`dept`(`depID`)ONDELETENOACTIONONUPDATECASCADE,CONSTRAINT`restore_ibfk_9`FOREIGNKEY(`parID`)REFERENCES`parts`(`parID`)ONDELETENOACTIONONUPDATECASCADE)ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=gbkCOMMENT="归还表";--------------------------------Tablestructureforstock------------------------------CREATETABLE`stock`(`parID`char(7)NOTNULLCOMMENT"零件号",`stoVolume`smallint(6)unsignedNOTNULLDEFAULT"0"COMMENT"采购量",`supID`char(3)DEFAULTNULLCOMMENT"供应商",`stoDate`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT"采购时间",`buyer`varchar(20)DEFAULTNULLCOMMENT"采购员",PRIMARYKEY(`parID`,`stoDate`),KEY`supID`(`supID`),KEY`partID`(`parID`),KEY`stoDate`(`stoDate`),CONSTRAINT`stock_ibfk_1`FOREIGNKEY(`supID`)REFERENCES`supplier`(`supID`)ONUPDATECASCADE,CONSTRAINT`stock_parID`FOREIGNKEY(`parID`)REFERENCES`parts`(`parID`)ONDELETENOACTIONONUPDATECASCADE)ENGINE=InnoDBDEFAULTCHARSET=gbkCOMMENT="采购表";------------------------------44 --Tablestructureforstockout------------------------------CREATETABLE`stockout`(`outID`smallint(6)NOTNULLAUTO_INCREMENTCOMMENT"编号",`stoID`char(3)NOTNULL,`parID`char(7)NOTNULLCOMMENT"零件号",`outVolume`smallint(6)NOTNULLDEFAULT"0"COMMENT"出库数量",`user`varchar(20)NOTNULLCOMMENT"使用者",`cmaker`varchar(20)NOTNULLCOMMENT"经手人",`receiptor`varchar(20)NOTNULLCOMMENT"领取人",`outDate`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT"出库时间",PRIMARYKEY(`outID`,`parID`),KEY`out_parID`(`parID`),KEY`out_stoID`(`stoID`),KEY`outDate`(`outDate`),CONSTRAINT`out_parID`FOREIGNKEY(`parID`)REFERENCES`parts`(`parID`)ONDELETENOACTIONONUPDATECASCADE,CONSTRAINT`out_stoID`FOREIGNKEY(`stoID`)REFERENCES`storehouse`(`stoID`)ONDELETENOACTIONONUPDATECASCADE)ENGINE=InnoDBAUTO_INCREMENT=19DEFAULTCHARSET=gbkCOMMENT="出库表";--------------------------------Tablestructureforstorage------------------------------CREATETABLE`storage`(`stoID`char(3)NOTNULLCOMMENT"仓库号",`parID`char(7)NOTNULLCOMMENT"零件号",`Now_volume`smallint(6)NOTNULLDEFAULT"0"COMMENT"现有存量",`Min_volume`smallint(6)unsignedNOTNULLDEFAULT"0"COMMENT"最小存量",`Max_volume`smallint(6)unsignedNOTNULLDEFAULT"100"COMMENT"大最存量",PRIMARYKEY(`stoID`,`parID`),KEY`parID`(`parID`),CONSTRAINT`storage_ibfk_1`FOREIGNKEY(`parID`)REFERENCES`parts`(`parID`)ONDELETENOACTIONONUPDATECASCADE,CONSTRAINT`storage_ibfk_2`FOREIGNKEY(`stoID`)REFERENCES`storehouse`(`stoID`)ONDELETENOACTIONONUPDATECASCADE)ENGINE=InnoDBDEFAULTCHARSET=gbkCOMMENT="库存表";--------------------------------Tablestructureforstorehouse------------------------------CREATETABLE`storehouse`(`stoID`char(3)NOTNULLCOMMENT"仓库号",`Used_volume`smallint(6)unsignedNOTNULLDEFAULT"0"COMMENT"已用库存",44 `All_volume`smallint(6)unsignedNOTNULLDEFAULT"10000"COMMENT"库存总量",`principal`varchar(20)NOTNULLCOMMENT"负责人",`stoTEL`varchar(15)DEFAULTNULLCOMMENT"电话号码",PRIMARYKEY(`stoID`))ENGINE=InnoDBDEFAULTCHARSET=gbkCOMMENT="仓库表";--------------------------------Tablestructureforsupplier------------------------------CREATETABLE`supplier`(`supID`char(3)NOTNULLCOMMENT"编号",`supName`varchar(20)NOTNULLCOMMENT"供应商",`supTEL`varchar(15)NOTNULLCOMMENT"电话号码",`address`textCOMMENT"地址",PRIMARYKEY(`supID`),UNIQUEKEY`supID`(`supID`),KEY`supName`(`supName`))ENGINE=InnoDBDEFAULTCHARSET=gbkCOMMENT="供应商表";--------------------------------Tablestructureforsupply------------------------------CREATETABLE`supply`(`supID`char(3)NOTNULLCOMMENT"供应商",`parID`char(7)NOTNULLCOMMENT"零件号",`supVolume`smallint(6)unsignedNOTNULLDEFAULT"0"COMMENT"供应量",`supDate`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT"供应时间",PRIMARYKEY(`parID`,`supID`),KEY`supply_supID`(`supID`),KEY`parID`(`parID`),KEY`supDate`(`supDate`),CONSTRAINT`parID`FOREIGNKEY(`parID`)REFERENCES`parts`(`parID`)ONDELETENOACTIONONUPDATECASCADE,CONSTRAINT`supply_supID`FOREIGNKEY(`supID`)REFERENCES`supplier`(`supID`)ONDELETENOACTIONONUPDATECASCADE)ENGINE=InnoDBDEFAULTCHARSET=gbkCOMMENT="供应表";--------------------------------Tablestructureforwarehousing------------------------------CREATETABLE`warehousing`(`inID`smallint(6)NOTNULLAUTO_INCREMENTCOMMENT"编号",`stoID`char(3)NOTNULL,`supID`char(3)NOTNULLCOMMENT"供应商",44 `parID`char(7)NOTNULLCOMMENT"零件号",`inVolume`smallint(6)unsignedNOTNULLDEFAULT"0"COMMENT"入库数量",`cmaker`varchar(20)NOTNULLCOMMENT"经手人",`inDate`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT"入库时间",PRIMARYKEY(`inID`,`parID`),KEY`ware_parID`(`parID`),KEY`supID`(`supID`),KEY`stoID`(`stoID`),KEY`inDate`(`inDate`),CONSTRAINT`stoID`FOREIGNKEY(`stoID`)REFERENCES`storehouse`(`stoID`)ONDELETENOACTIONONUPDATECASCADE,CONSTRAINT`supID`FOREIGNKEY(`supID`)REFERENCES`supplier`(`supID`)ONDELETENOACTIONONUPDATECASCADE,CONSTRAINT`ware_parID`FOREIGNKEY(`parID`)REFERENCES`parts`(`parID`)ONDELETENOACTIONONUPDATECASCADE)ENGINE=InnoDBAUTO_INCREMENT=3DEFAULTCHARSET=gbkCOMMENT="入库表";--------------------------------Viewstructurefordemand_view------------------------------CREATEALGORITHM=UNDEFINEDDEFINER=`root`@`localhost`SQLSECURITYDEFINERVIEW`demand_view`ASselect`demand`.`parID`AS`零件号`,`demand`.`depID`AS`部门号`,`demand`.`demVolume`AS`需求数量`,`demand`.`startTime`AS`开始时间`,`demand`.`endTime`AS`结束时间`from`demand`;--------------------------------Viewstructureforparts_storage_view------------------------------CREATEALGORITHM=UNDEFINEDDEFINER=`root`@`localhost`SQLSECURITYDEFINERVIEW`parts_storage_view`ASselect`storage`.`stoID`AS`仓库号`,`storage`.`parID`AS`零件名`,`parts`.`part`AS`零件`,`parts`.`spec`AS`规格`,`parts`.`price`AS`价格`,`parts`.`mensuration`AS`计量单位`,`storage`.`Now_volume`AS`现有存量`,`storage`.`Min_volume`AS`最少存量`,`storage`.`Max_volume`AS`最大存量`from(`storage`join`parts`on((`parts`.`parID`=`storage`.`parID`)));--------------------------------Viewstructureforrestore_view------------------------------CREATEALGORITHM=UNDEFINEDDEFINER=`root`@`localhost`SQLSECURITYDEFINERVIEW`restore_view`ASselect`restore`.`stoID`AS`仓库号`,`restore`.`parID`AS`零件号`,`restore`.`depID`AS`部门号`,`restore`.`resVolume`AS`归还数量`,`restore`.`cmaker`AS`经手人`,`restore`.`returner`AS`归还者`,`restore`.`resDate`AS`归还时间`from`restore`;--------------------------------Viewstructureforstock_view------------------------------CREATEALGORITHM=UNDEFINEDDEFINER=`root`@`localhost`SQLSECURITYDEFINERVIEW`stock_view`ASselect`parts`.`parID`AS`零件号`,`stock`.`stoVolume`AS`采购量`,`supplier`.`supID`AS`供应商号`,`supplier`.`supTEL`AS`联系电话`,`parts`.`price`AS`价格`,`parts`.`mensuration`AS`计量单位`,`parts`.`spec`AS`规格`,`stock`.`stoDate`AS`采购日期`,`stock`.`buyer`AS`采购员`from((`stock`join`supplier`on((`supplier`.`supID`=`stock`.`supID`)))join`parts`on((`parts`.`parID`=`stock`.`parID`)));------------------------------44 --Viewstructureforstockout_view------------------------------CREATEALGORITHM=UNDEFINEDDEFINER=`root`@`localhost`SQLSECURITYDEFINERVIEW`stockout_view`ASselect`stockout`.`stoID`AS`仓库号`,`parts`.`parID`AS`零件号`,`stockout`.`outVolume`AS`出库数量`,`stockout`.`user`AS`使用单位`,`stockout`.`cmaker`AS`经手人`,`stockout`.`receiptor`AS`领取人`,`stockout`.`outDate`AS`出库日期`from(`parts`join`stockout`on((`parts`.`parID`=`stockout`.`parID`)));--------------------------------Viewstructureforstorehouse_view------------------------------CREATEALGORITHM=UNDEFINEDDEFINER=`root`@`localhost`SQLSECURITYDEFINERVIEW`storehouse_view`ASselect`storehouse`.`stoID`AS`仓库号`,`storehouse`.`Used_volume`AS`已用库存`,`storehouse`.`All_volume`AS`库存总量`,`storehouse`.`principal`AS`负责人`,`storehouse`.`stoTEL`AS`电话`from`storehouse`;--------------------------------Viewstructureforsupply_view------------------------------CREATEALGORITHM=UNDEFINEDDEFINER=`root`@`localhost`SQLSECURITYDEFINERVIEW`supply_view`ASselect`supplier`.`supID`AS`供应商号`,`parts`.`parID`AS`零件号`,`parts`.`price`AS`价格`,`parts`.`mensuration`AS`计量单位`,`parts`.`spec`AS`规格`,`supply`.`supVolume`AS`供应量`,`supply`.`supDate`AS`供应时间`,`supplier`.`supTEL`AS`联系电话`from((`parts`join`supply`on((`parts`.`parID`=`supply`.`parID`)))join`supplier`on((`supplier`.`supID`=`supply`.`supID`)));--------------------------------Viewstructureforwarehousing_view------------------------------CREATEALGORITHM=UNDEFINEDDEFINER=`root`@`localhost`SQLSECURITYDEFINERVIEW`warehousing_view`ASselect`warehousing`.`stoID`AS`仓库号`,`parts`.`parID`AS`零件号`,`supplier`.`supID`AS`供应商号`,`supplier`.`supName`AS`供应商`,`supplier`.`supTEL`AS`联系电话`,`parts`.`part`AS`零件`,`parts`.`spec`AS`规格`,`parts`.`price`AS`价格`,`parts`.`mensuration`AS`计量单位`,`warehousing`.`inVolume`AS`入库量`,`warehousing`.`cmaker`AS`负责人`,`warehousing`.`inDate`AS`入库时间`from((`parts`join`warehousing`on((`parts`.`parID`=`warehousing`.`parID`)))join`supplier`on((`warehousing`.`supID`=`supplier`.`supID`)));--------------------------------Triggerstructureforparts_restore_update------------------------------DELIMITER;;CREATETRIGGER`parts_restore_update`AFTERINSERT,UPDATEON`restore`FOREACHROWbeginset@maxID=(selectMAX(resID)fromrestore);set@newparID=(selectparIDfromrestorewhereresID=@maxID);set@now_stoID=(selectstoIDfromrestorewhereresID=@maxID);set@now_used_volume=(selectUsed_volumefromstorehousewherestoID=@now_stoID);set@old_now_volume=(selectNow_volumefromstoragewhereparID=@newparID);set@res_volume=(selectresVolumefromrestorewhereresID=@maxID);updatestoragesetNow_volume=@old_now_volume+@res_volumewhereparID=@newparID;updatestorehouse44 setUsed_volume=@now_used_volume+@res_volumewherestoID=@now_stoID;end;;DELIMITER;--------------------------------Triggerstructureforparts_restore_delete------------------------------DELIMITER;;CREATETRIGGER`parts_restore_delete`BEFOREDELETEON`restore`FOREACHROWbeginset@maxID=(selectMAX(resID)fromrestore);set@newparID=(selectparIDfromrestorewhereresID=@maxID);set@now_stoID=(selectstoIDfromrestorewhereresID=@maxID);set@now_used_volume=(selectUsed_volumefromstorehousewherestoID=@now_stoID);set@old_now_volume=(selectNow_volumefromstoragewhereparID=@newparID);set@res_volume=(selectresVolumefromrestorewhereresID=@maxID);updatestoragesetNow_volume=@old_now_volume-@res_volumewhereparID=@newparID;updatestorehousesetUsed_volume=@now_used_volume-@res_volumewherestoID=@now_stoID;end;;DELIMITER;--------------------------------Triggerstructureforparts_stockout_update------------------------------DELIMITER;;CREATETRIGGER`parts_stockout_update`AFTERINSERT,UPDATEON`stockout`FOREACHROWbeginset@maxID=(selectMAX(outID)fromstockout);set@newparID=(selectparIDfromstockoutwhereoutID=@maxID);set@now_stoID=(selectstoIDfromstockoutwhereoutID=@maxID);set@now_used_volume=(selectUsed_volumefromstorehousewherestoID=@now_stoID);set@old_now_volume=(selectNow_volumefromstoragewhereparID=@newparID);set@out_volume=(selectoutVolumefromstockoutwhereoutID=@maxID);updatestoragesetNow_volume=@old_now_volume-@out_volumewhereparID=@newparID;updatestorehousesetUsed_volume=@now_used_volume-@out_volumewherestoID=@now_stoID;end;;44 DELIMITER;--------------------------------Triggerstructureforparts_stockout_delete------------------------------DELIMITER;;CREATETRIGGER`parts_stockout_delete`BEFOREDELETEON`stockout`FOREACHROWbeginset@maxID=(selectMAX(outID)fromstockout);set@newparID=(selectparIDfromstockoutwhereoutID=@maxID);set@now_stoID=(selectstoIDfromstockoutwhereoutID=@maxID);set@now_used_volume=(selectUsed_volumefromstorehousewherestoID=@now_stoID);set@old_now_volume=(selectNow_volumefromstoragewhereparID=@newparID);set@out_volume=(selectoutVolumefromstockoutwhereoutID=@maxID);updatestoragesetNow_volume=@old_now_volume+@out_volumewhereparID=@newparID;updatestorehousesetUsed_volume=@now_used_volume+@out_volumewherestoID=@now_stoID;end;;DELIMITER;--------------------------------Triggerstructureforparts_warehousing_update------------------------------DELIMITER;;CREATETRIGGER`parts_warehousing_update`AFTERINSERT,UPDATEON`warehousing`FOREACHROWbeginset@maxID=(selectMAX(inID)fromwarehousing);set@newparID=(selectparIDfromwarehousingwhereinID=@maxID);set@now_stoID=(selectstoIDfromwarehousingwhereinID=@maxID);set@now_used_volume=(selectUsed_volumefromstorehousewherestoID=@now_stoID);set@old_now_volume=(selectNow_volumefromstoragewhereparID=@newparID);set@in_volume=(selectinVolumefromwarehousingwhereinID=@maxID);updatestoragesetNow_volume=@old_now_volume+@in_volumewhereparID=@newparID;updatestorehousesetUsed_volume=@now_used_volume+@in_volumewherestoID=@now_stoID;end;;DELIMITER;------------------------------44 --Triggerstructureforparts_warehousing_detele------------------------------DELIMITER;;CREATETRIGGER`parts_warehousing_detele`BEFOREDELETEON`warehousing`FOREACHROWbeginset@maxID=(selectMAX(inID)fromwarehousing);set@newparID=(selectparIDfromwarehousingwhereinID=@maxID);set@now_stoID=(selectstoIDfromwarehousingwhereoutID=@maxID);set@now_used_volume=(selectUsed_volumefromstorehousewherestoID=@now_stoID);set@old_now_volume=(selectNow_volumefromstoragewhereparID=@newparID);set@in_volume=(selectinVolumefromwarehousingwhereinID=@maxID);updatestoragesetNow_volume=@old_now_volume-@in_volumewhereparID=@newparID;updatestorehousesetUsed_volume=@now_used_volume-@in_volumewherestoID=@now_stoID;end;;DELIMITER;446.2数据库备份和恢复方案6.2.1静态备份服务器不再进行数据更新,定期进行备份,使用mysqldump命令进行在线非块备份。1)全局备份:完整备份数据库shell>mysqldump--user=root--password=the_mysql_root_password--result-file=outputfile.sql--databaseswarehouse2)局部备份:备份具体某些表shell>mysqldump--user=root--password=the_mysql_root_password--result-file=outputfile.sql--databaseswarehousetable_name6.2.2动态备份运行服务器进行数据更新,用FLUSHLOGS或mysqladminflush-logs清空日志进行定期增量备份。如果mysqld在运行则停止,然后用--log-bin[=file_name]选项来启动。当想要进行增量备份时(包含上一次完全备份或增量备份之后的所有更改),应使用FLUSHLOGS回滚二进制日志。然后,你需要将从最后的完全或增量备份的某个时刻到最后某个点的所有二进制日志复制到备份位置。这些二进制日志为增量备份。下次进行完全备份时,还应使用FLUSHLOGS或mysqlhotcopy--flushlogs回滚二进制日志。另外可以使用事件对某个表数据进行自动定时备份,但那样占用相当的数据库系统资源处理事件,会影响服务器的性能。44 6.2.3恢复备份1)静态数据恢复假定所备份的数据库已经存在,以管理员身份登录数据库,输入命令:>usebackup_database_name;>sourcebackup_name.sql;2)动态数据恢复1.恢复原mysqldump备份,或二进制备份。2.执行下面的命令重新更新二进制日志:shell>mysqlbinloghostname-bin.[0-9]*|mysql6.3界面设计²登录界面和用户管理界面²信息查询界面44 ²零件信息管理界面和部门信息管理界面²供应商信息管理界面和零件入库管理界面²零件出库管理界面和零件还库管理界面²零件供应管理界面和部门需求管理界面44 ²计划采购管理界面和仓库管理界面²主界面界面6.4关键代码1)创建用户并分配权限44 1)修改用户(包括权限重新分配)2)根据不用用户分配不同的功能44 二、系统测试方案44 7.1登录测试l输入空账号l输入不存在的账号密码l输入正确的账号和错误的密码l输入正确账号和空密码7.2新建用户测试l创建一个已存在的账号l创建每种用户类型的空密码的账号l正常创建每种用户类型的账号(非空密码)l创建每种用户类型的空账号且空密码l创建每种用户类型的非空密码的空账号7.3更改用户测试l更改每种用户类型已存在的用户l更改每种用户类型一个不存在的用户l每种用户类型将一个非空密码的用户改为空密码l每种用户类型将一个空密码的用户改为空密码l每种用户类型将一个用户只更改权限l每种用户类型更改一个空账号密码的用户l每种用户类型更改一个空帐户但密码非空7.4删除用户测试l删除一个不存在的用户l删除一个已存在的用户l删除一个空用户7.5数据录入测试44 l录入一条空记录l录入一条以上全部数据项非空记录l录入一条以上只填必填数据项的记录l录入一条以上只填非必填数据项的记录l对具有外键关联的表录入一条以上检验外键约束的记录l录入一条以上正确的记录l录入一条以上检验其他自定义完整性约束的记录7.6查询测试l正常查询一条以上记录l查询各种查非所查的记录l查询各种不对应选项的查询二、系统主要功能和使用说明本系统的主要功能如下表所示:不同的用户类型具有不同的功能。Inf用户类型:注销、登录、退出、信息查询;Dba用户类型:系统管理、仓库管理;Sys用户类型:系统管理、仓库管理、备份恢复。44 正确登录系统,选择程序菜单上的菜单项进入相应的功能窗体进行操作。:第一条记录:最后一条记录:下上一条记录和下一条记录:添加一条记录和删除一条记录:提交改变和取消改变:编辑记录:刷新记录二、系统安装说明由于MyDAC插件的关系,插件存在着“MyDACtrialversionrequiesC++BuilderIDE”(MyDAC试用版依赖于C++BuilderIDE),所以安装有点麻烦。运行此程序必须安装C++Builder6.0、MyDAC5.70和MySQL5.1,运行此程序前必须先运行C++BuilderIDE。数据库连接及数据导入。安装好MySQL后以管理员登录,登录后输入命令:>createdatabasewarehousecharactersetgbk;导入数据,输入命令:>usewarehouse;>sourcewarehouse.sql;(如果warehouse.sql文件不是在当前目录,请指明warehouse.sql的详细目录)创建程序默认用户:>createuser"inf"@"localhost"identifiedby"inf";>createuser"dba"@"localhost"identifiedby"dba";>createuser"sys"@"localhost"identifiedby"sys";数据库连接:(1)进入Windows的控制面板,在控制面板中找到【数据源(ODBC)】选项并双击,进入【ODBC数据源管理器】对话框。如果控制面板中没有该选项可以在Windows目录下查找“odbcad32.exe”可执行文件并运行它。44 (1)选择【系统DSN】选项卡并单击【添加】按钮,出现创建新数据源窗体,从中选择【MySQLODVBC5.1Drive】项。(2)单击【完成】按钮,出现数据源参数设置窗体,从中输入数据源的名称及数据源指向的服务器名称,本例输入的是warehouse和localhost,端口号为3306,数据库选择warehouse,填写完账号密码后点击【test】,测试成功后点击【OK】退出配置,完成MySQL的ODBC数据源的建立。二、心得体会44 在这次数据库课程设计中,我花了3周的时间做需求分析和数据库设计,只用了不到一周的时间编写程序。开始时真的不知道该怎么做,仓库管理系统到底要创建哪些表,表里到底要有哪些数据项,这些都很模糊。于是就找别人的设计作参考,按着设计要求一步一步的设计。需求分析真的很重要,也不容易,比编程还难。在需求设计阶段,把系统的功能勾画出来,分析系统的数据字典、数据流向,画出E-R图,根据E-R图数据库设计关系模型,这样一步步下来,自己对仓库管理系统有更多的了解,对后面的程序编程也明朗了。在数据库设计的时候也花了不少的时间,多次的在数据库关系模型、E-R图和数据字典之间循环修改,重复的修改完整性定义,优化表格。在定义check完整时发现MySQL的check完整性定义失效,翻书发现原来MySQL对check的完整性定义还没有强化。等数据关系模型最终确定了,才开始设计索引和触发子。之后的编程就简单多了。在数据库设计期间,我是在设计的过程中就去创建数据库,建表,所以当修改完整性定义和数据项时现得相当麻烦,因为有主键外键的完整性定义在修改时就不好做了。最终结论,我该把数据库设计完后才去创建数据库创建完整性定义等等,还有一点是创建表时最好也把后面程序功能的需要考虑进来。在这次数据库课程设计中真的学到不少。参考文献[1]MySQL5.1参考手册http://dev.mysql.com/doc/refman/5.1/zh/introduction.html#features[2]Devart.comhttp://www.devart.com/mydac/[3]数据库系统概论(第四版)王珊萨师煊高等教育出版社2006.5[4]软件工程(第二版)李代平等编著清华大学出版社2008.1[5]MySQL开发者SQL权威指南(荷)RickF.vanderLans著许杰星李强等译机械工业出版社2008.1[6]学习MySQL(影印版)SeyedM.M."Saied"Tabagbogbi&HugbE.Williams著南京:东南大学出版社2007.6[7]C++Builder程序员成长攻略蒙祖强龚涛等编著北京:中国水利水电出版社2007.144