还剩90页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
毕业设计(论文)商品信息管理系统层 次 本科 专 业 计算机科学与技术姓 名 毕业时间
2009.7 毕业设计任务书专业名称计算机科学与技术班号2005级本科2班姓 名 毕业设计题目 商品信息管理系统 指导教师 负责人签字 2009年6 月28 日内容和要求内容1.应用软件工程的概念,进行系统分析和设计2.应用数据库的基本知识,进行数据库的设计3.应用PowerBuilder数据库应用系统开发工具完成代码设计与实现要求1.熟悉软件工程的系统分析及设计方法2.掌握数据库设计的基本原理3.熟练掌握PowerBuilder数据库开发工具毕业设计(论文)评语表
(一)指导教师对毕业设计(论文)评语钟玲同学圆满地完成了毕业设计任务,该生所完成的“商品信息管理系统”课题集中了数据库技术、办公自动化等先进技术,本课题以PB为数据库应用系统的开发工具,设计与实现了”数据维护、检索、报表处理模块“,解决了对商品信息进行管理等实际问题,表明作者在计算机应用领域具有扎实的理论基础和专业知识以及独立从事科研的能力论文立论正确,内容充实,具有一定的实用参考价值指导教师 (签字)2009年 6月 26日评阅人对毕业设计(论文)的评语该同学在对商品信息管理需求分析基础上,运用当前先进的计算机技术,设计了数据维护、检索、报表处理等模块,较好地解决了商品信息的管理问题论文叙述清楚,内容充实,实用性强,已达到了对毕业设计的要求和内容 评阅人 (签字) 2009 年 6 月 27日毕业答辩情况答辩委员会(小组)成员姓 名职 称工 作 单 位备 注答辩中提出的主要问题及回答的简要情况概述第三范式内容面向对象开发的特点对连锁店应用环境有何设计数据输入方式回答问题正确毕业设计(论文)评语表
(二)答辩委员会的评语及给定的成绩论文立论正确,表达清晰,回答问题正确,按时圆满地完成了毕设任务答辩委员会一致通过论文答辩,成绩为优毕业设计(论文)起止日期2009 年2 月 17 日至2009 年 6 月 27 日毕业设计(论文)答辩日期2009 年 6 月28 日论文题目商品信息管理系统目录TOC\o1-3\h\z摘要3前言5第一章绪论
61.1课题研究内容
61.
1.1问题的提出
61.
1.2课题背景及意义
61.2课题研究的软硬件环境7第二章开发环境及开发工具
72.1开发环境
72.2开发工具
72.
2.1PowerBuilder的概述
72.
2.2PowerBuilder
7.0的新特性8第三章系统需求分析
103.1系统开发策略
103.2系统功能需求分析
103.
2.1需求分析的任务
103.
2.2商品信息管理系统的需求分析
113.
2.3商品信息管理系统的业务流程图12第四章系统分析与设计
134.1系统功能模块设计
134.
1.1商品信息管理系统功能模块图
134.2数据库设计
144.
2.1概念结构设计
144.
2.2E-R模型
154.
2.3范式
154.
2.4商品信息管理系统E-R图
164.
2.5系统数据流图
204.
2.6系统数据字典21第五章代码设计与实现
295.1定义库表关联
295.2总体菜单功能设计
305.3对象与库表的关联性
315.4功能界面的设计
345.5软件调试
505.6可执行文件的生成
515.7分发应用程序52第六章研究成果及软件测试
546.1研究成果
546.2软件测试
546.
2.1黑盒测试和白盒测试
546.3商品信息管理系统测试55第七章技术难点及解决方案
657.1DropDownDW编辑样式
657.2以下拉列表框实现的动态操作66致谢69附录69参考文献69摘要本课题是以一个百货连锁总部的商品信息管理为基础,结合集团商品部工作的实际需求,详细阐述了《商品信息管理系统》软件设计、开发的全过程,并对技术难点作出分析,提出解决方法使“商品信息管理系统”最终具有数据维护、数据检索和报表处理的功能本系统后台以AdaptiveServerAnywhere
6.0(ASA
6.0)作为数据库系统的客户端软件,前台采用基于C/S的应用系统开发工具PowerBuilder
7.0,从而快捷方便的实现了系统的开发本系统主要功能模块有数据维护实现新建、修改、删除、存储功能数据检索实现按不同要求分类模糊查询,组合查询功能报表处理根据查询方式不同,选择输出检索信息本系统将信息检索作为研究重点,力求通过关键字段实现模糊检索功能,使信息查询更加简单灵活,即使第一次接触系统的人也可轻松操作,快速的找到所需信息同时,在操作界面的设计上,按照数据间的关系在同一界面中系统根据不同操作激活相应操作对象,使直观视觉上更加符合传统习惯此外本系统以下拉数据窗口(DropDownDW)方式为数据编辑风格,从而保证了数据录入的规范性,比传统的下拉列表框方式更加灵活简便关键字商品档案、信息管理系统、数据检索、操作界面AbstractThisprojectisbasedontheProductsInformationManagementSystemofachainstoresheadofficeandfocusingonthesoftwaredevelopmentforproductsbasicinformationmanagementwithaviewofthepracticalrequirementsofthebusinessinMerchandisingDepartment.ThisstudywillexplainindetailthewholeprocessofthesoftwaredesignanddevelopmentoftheProductsInformationManagementSystemthetechnicaldifficultieswillbeanalyzedandthesolutionwillberaisedhere.Finallyintegratethefollowingfunctionsintothissystem:DatumMaintenancesearchesandreportformsprocessing.Client/ServerC/Smodehasbeenusedinthesystem.TheclientsoftwareofthehostdatabasesystemisAdaptiveServerAnywhere
6.0ASA
6.0andusingthePowerBuilder
7.0applicationdevelopementtoolsinthefrontendwhichfacilitiesthedevelopmentofthewholesystem.Themainfunctionmodulesaremadeupofthefollowing:.DatumMaintenance:withNewModifyDeleteSavefunctions.DatumSearches:withFuzzysearchCombinedsearchfunctions.ReportformsProcessing:filterthesearchresultaccordingtosearchmode.ThissystememphasizesontheinformationsearchingtrystorealizethefuzzysearchfunctionbytheKEYfieldswhichwillsimplifythesearchingworkuserfriendlyandallowedeasyacessment.Astotheuserinterfacesthesystemcanactivatetheappropriateobjectaccordingtodifferentoperationsconsideringtherelationshipamongdatumswhichmakesitlooksmoreaccordantwiththetraditionalstyle.BesidestheDATAEDITSTYLEofthesystemisDropDownDataWindowwhichensurethenormativeofdatarecordinganditismoreflexiblecomparetothetraditionalstyle.KEYWORDS:ProductsBasicInformationDatumSearchesInformationManagementSystemUIUserInterface.前言在信息时代的今天,计算机以其快速、准确的信息处理功能渗透于我们周围的方方面面,同时随着网络技术和软件技术的飞速发展,当今社会也正快速向信息化社会前进,信息系统的作用也越来越大,商业经营管理也日渐体现出运用计算机的优越性我从事商业工作多年,使用过很多商品查询、管理系统,发现其中或多或少的存在一些漏洞,特别是随着数据量的增大,系统的信息管理变得更加困难,查询时间也变的无法接受因此,在这次毕业设计中,我运用所学的软件工程及数据库知识,采用目前流行的基于客户机/服务器的开发工具PowerBuilder
7.0,利用面向对象的可视化设计方法,结合自己日常的工作需求,开发了《商品信息管理系统》任何软件系统本质上都是信息处理系统,因此,《商品信息管理系统》的主要功能就是对商品三大基本信息(即供应商信息、品牌信息及单品信息)的建立、删除及数据维护,并可为用户提供多表交叉组合的模糊查询方式,对数据检索提供了快捷的方式本系统主要功能模块有数据维护数据检索报表处理通过这次毕业设计的系统开发,使自己对软件工程生命周期的各阶段有了更为深刻的认识,同时对面向对象的可视化图形界面的数据库应用系统开发工具的开发使用,有了一次全面实践的机会在毕业设计过程中,我得到了宋晔老师的热情指导,在此我衷心感谢培养教育我的各位老师第1章绪论
1.1课题研究内容
1.
1.1问题的提出随着全球经济一体化和电子商务浪潮的冲击,特别是我国加入WTO后,我国企业生存与发展的环境面临重大变化企业面对激烈的市场竞争,不仅要努力提高自身的技术能力,更要在管理上下功夫为使公司商品部人员能够方便快捷地共享信息、交流信息,高效地协同工作;同时又实现迅速、全方位的信息采集、信息处理,为管理和决策提供科学的依据,使各项管理工作更加规范化、标准化为此提出《商品信息管理系统》开发的课题
1.
1.2课题背景及意义我现从事商品市场分析工作,向公司决策层提供各种市场信息其中包括供应商支持、产品结构决策、市场拓展等我们利用市场信息,了解提供企业主营商品的其他供应商及同类或替代产品的情况,并与现有供应商及其产品进行对比,从中发掘新的供应商或新产品,为拓展采购渠道,开发新商品提供信息并向公司提交供应商对比分析、产品对比分析等报告我公司目前使用的系统过于庞大,它含盖了物流、信息流、资金流各个方面,大而全,但对于商品部的工作缺乏针对性,无用信息量大,使用及维护都很不便为此,本课题结合我的工作内容,以信息流为切入点,提出了以应用面向对象的数据库应用开发技术——PowerBuilder为依据的《商品信息管理系统》的开发课题,开发一种针对性更强的简单实用的查询系统,可以排除大量无用信息,减小工作强度,提高工作效率和工作质量,为决策层及时提供准确的信息
1.2课题研究的软硬件环境在当今的信息时代,仅仅依靠本企业的内部资源,不可能有效地参与市场竞争,必须把经营过程中的相关环节供应商、制造商、分销网络、客户等纳入一个紧密的供应链中,才能有效地安排企业的供、销活动企业只有利用社会的一切市场资源,才能快速高效地满足市场需求,提高自我经营效率,并在市场上获得竞争优势《商品信息管理系统》力求满足这种市场需求,实现对供应链的基本管理与查询,特别为适应连锁经营的企业决策,满足信息时代市场竞争的需要第2章开发环境及开发工具
2.1开发环境在PowerBuilder中可创建的数据库依赖于系统所安装的数据库客户软件及相应的驱动程序,只有安装了各种数据库管理系统的客户端应用软件,创建了数据库,才能在PowerBuilder开发环境中连接到数据库,并通过PowerBuilder访问数据库AdaptiveServerAnywhere
6.0数据库系统既能运行在数据库服务器上,又能运行在客户机上作为本地数据库系统来使用,且在PowerBuilder中的操作又完全一致它可以和PowerBuilder
7.0实现无缝对接,对ASA数据库的操作由PowerBuilder
7.0中所提供的专门接口完成基于以上ASA
6.0的特性,本系统以此平台作为后台数据库使用
2.2开发工具
2.
2.1PowerBuilder的概述PowerBuilder(简称PB)是由著名的数据库公司Sybase提供的一种客户/服务器前端应用程序开发工具;可以在Windows环境下运行,采用的图形界面可以快速开发出独立的应用程序对象,对象可以重复使用及共享;它不但可以从个人计算机上读取数据,还可以通过内建的驱动程序直接连接大型数据库PowerBuilder作为集成强大且易于使用的第四代编程语言(4GL),可以使开发人员的开发进程更快、成本更低、质量更高、功能更强,为应用开发提供了全面综合的支持
2.
2.2PowerBuilder
7.0的新特性PowerBuilder
7.0新功能主要表现在用户接口和开发方法的改进和增强、组件开发和配置方法的更新、对数据库连接的增强与扩充等方面
1.全新的用户接口可开发界面在PowerBuilder
7.0中对用户接口和开发界面作了较大的改进,改进后的用户接口和开发界面使应用程序创建更容易,更高效
①崭新的主界面在PowerBuilder
7.0中,用户始终工作在应用程序背景下PowerBuilder
7.0的另一个用户接口新特性是PowerBar工具栏具有更加简洁的工具按纽
②以对象为中心的开发环境PowerBuilder
7.0以对象为中心,PowerBar工具栏中的New、Inherit、Open、Run和Preview按钮不再从属于特定的画板,而是在任务之间进行切换
③非模态的开发视图区PowerBuilder
7.0的画板一般是一个拥有多个视窗(view)的画板窗口,每个视窗提供查看和修改对象的特定方式或者显示与对象相关的某种信息,用户可以同时进行多项任务PowerBuilder
7.0在界面方面的改进包括允许用户自定义键盘快捷键增加To-DoList操作历史列表用于跟踪用户操作记录最近访问过的应用程序
2.支持开发和配置更多类型的组件在PowerBuilder
7.0增加了可开发的组件类型,对于每种组件都提供了向导,通过向导的运行可迅速的创建某一类型组件的基本框架,然后将这一框架加以丰富完善就可以创建完整的组件,各种组件的创建工具都是自定义用户对象类开发工具PowerBuilder
7.0支持创建控制PowerBuilder虚拟机的Jaguar组件,Com/MTS组件,并支持远程调试
3.数据库连接新特性在PowerBuilder
7.0中增加了对新数据库类型连接的支持,减少了对不常用数据库的支持,对旧数据库也作了较大改进导入和导出数据库描述文件(PROFILES)在PowerBuilder
7.0中每一个数据库接口都增加了导入和导出数据库描述文件的选项导入选项可以直接导入相应数据库接口以前所定义的描述文件,导出选项也可导出描述文件供其他接口使用增加访问数据库的使用工具PowerBuilder
7.0在Database画板的Objects视窗中列出了每一种数据库接口中可使用的使用工具,在DatabaseFrofiles对话框中可以配置和测试软件
4.其他新特性对ActiveX和OLE的支持新增了Tracbar,Progressbar,StatixHyperLink和PictureHyperLink空件允许存储过程更新数据库支持ActiveX和DataWindowWeb控件第3章系统需求分析
3.1系统开发策略由于本系统属于商业数据处理系统,是直接面向终端用户,因此它的开发方法是应该有区别于传统方法学的一种快速、灵活、交互式的模式快速原型法的提出,打破了传统自顶向下的开发模式,通过“试用-反馈-修改”的多次反复,开发出真正符合用户需要的应用系统,如图3-1所示图3-1快速原型法的开发过程
3.2系统功能需求分析
3.
2.1需求分析的任务需求分析是软件定义时期的最后一个阶段,也是设计数据库的一个起点,它确定了系统必须完成哪些工作,提出完整、准确、清晰和具体的要求,直接影响到后面各个阶段的设计,及设计结果是否合理和实用需求分析的任务是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统/计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计系统其主要解决的问题信息要求用户希望从数据库中获取什么数据,并由此决定在数据库中存储哪些数据处理要求明确用户对数据有什么样的处理要求,从而确定数据之间的相互关系安全性与完整性要求确定用户的最终需求是一件很困难的事情,用户缺少计算机知识,不能准确表达自己的需求,所提出的需求往往经常变化设计人员缺少用户的专业知识,不易理解用户的真正需求因此在需求分析阶段要求客户的广泛参与,设计人员也要去熟悉客户的业务工作,才能逐步确定用户的实际需求
3.
2.2商品信息管理系统的需求分析商品信息管理系统是一个基于全国连锁制管理的百货店统一集团内部商品档案的管理工具,以实现信息共享、规范管理此商品信息管理系统完成以下主要任务商品基本档案维护(新建、查询、统计)商品基本档案的数据检索(按不同要求分类模糊查询,组合查询)报表处理(以不同选择方式,输出基本档案信息)
3.
2.3商品信息管理系统的业务流程图如图3-2所示图3-2商品信息管理系统业务流程图第4章系统分析与设计
4.1系统功能模块设计
4.
1.1商品信息管理系统功能模块图商品信息管理系统主要实现的是档案数据的查询功能,它采用模块化程序设计,共有三大主要功能模块,如图4-1所示图4-1商品管理信息系统功能模块图I.数据维护对三大基本档案信息(供应商、品牌、单品)进行新建、删除、查询、更新的维护对商品分类信息(部门、分类、次分类)进行数据维护II.数据检索对供应商档案的查询,提供按供应商主档查询、按单品查找和按品牌查找供应商主档信息,并提供排序功能对品牌查询,提供按品牌主档查询和按供应商查找品牌主档信息和合作信息,并提供排序功能对单品查询,提供按单品主档查询和供应商查找单品主档信息和合作信息,并提供排序功能III.报表处理按不同的检索条件产生不同的主档信息
4.2数据库设计
4.
2.1概念结构设计概念结构设计是将分析得到的用户需求抽象为信息结构(即概念模型)的过程,它是整个数据库设计的关键概念结构的主要特点是
1.能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求是对现实世界的一个真实模型
2.易于理解,从而可以用它和不熟悉计算机的用户交换意见,用户的积极参与是数据库的设计成功的关键
3.易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充
4.易于向关系、网状、层次等各种数据模型转换概念结构是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定为了把用户的数据要求清晰明确的表达出来,通常要建立一种面向问题的数据模型,按照用户的观点来对数据和信息建模最常用的概念性数据模型就是ER模型
4.
2.2E-R模型ER模型中包含“实体”、“联系”和“属性”等三个基本成分1实体实体是客观世界存在的且可相互区分的事物它可以是人也可以是动物;可以是具体事物也可以是抽象概念2联系联系是指客观世界中各事物彼此间的联系联系分为三类一对一的关系,一对多的关系,多对多的关系3属性属性是实体或联系所具有的性质,通常一个实体用若干属性来刻画人们通常就是用实体、联系和属性这三个概念来理解现实问题,因此,ER模型比较接近人的思维方式此外,ER模型使用简单的图形符号表示系统分析员对问题的理解,不熟悉计算机的人也能理解它,因此,ER模型可以作为用户与系统分析员之间的交流工具
4.
2.3范式通常用“范式(NormalForms)”定义消除数据的冗余程度第一范式冗余程度最大,第五范式冗余程度最小但是,范式级别越高,存储同样数据就需要分解成更多的表,因此,“存储自身”的过程也就越复杂第二,随着范式级别的提高,数据的存储结构与基于问题域的结构间的匹配程度也随之下降,因此,在需求变化时数据的稳定性较差第三,范式级别提高则需要访问的表就越多,因此,性能(速度)将下降从实用角度来看,大多数场合下,选用第三范式比较合适第一范式(不可分性)每个属性值都必须是原子值,即仅仅是一个简单值而不含内部结构第二范式(依赖性和从属性)满足第一范式条件,而且每个非关键字属性都由整个关键字决定第三范式(不依赖性或独立性)符合第二范式的条件,每个非关键字有关键字决定,而且一个非关键字属性不能是对另一个非关键字属性的进一步描述
4.
2.4商品信息管理系统E-R图
1.实体关系E-R图如图4-2所示图4-2商品信息管理系统实体关系E-R图
2.实体属性图1供应商实体属性E-R分图,如图4-3所示图4-3商品信息管理系统供应商实体属性E-R分图2品牌实体属性E-R分图,如图4-4所示图4-4商品信息管理系统品牌实体属性E-R分图3单品实体属性E-R分图,如图4-5所示图4-5商品信息管理系统单品实体属性E-R分图4供应商-品牌实体属性E-R分图,如图4-6所示图4-6商品信息管理系统供应商-品牌实体属性E-R分图5供应商-单品实体属性E-R分图,如图4-7所示图4-7商品信息管理系统供应商-单品实体属性E-R分图6部门实体属性E-R分图,如图4-8所示图4-8商品信息管理系统部门实体属性E-R分图7分类实体属性E-R分图,如图4-9所示图4-9商品信息管理系统分类实体属性E-R分图8次分类实体属性E-R分图,如图4-10所示图4-10商品信息管理系统次分类实体属性E-R分图逻辑结构设计的任务就是把概念结构设计阶段设计的基本E-R图转换为数据库系统所支持的实际数据模型把实体的属性定义为关系模型(表)的属性,实体或实体之间关系的主键就是关系模型的主键,商品信息管理系统E-R图中的实体和实体之间关系转化为如下的关系模型1GYSDAvdr_id*pvdr_nmvdr_tpvdr_pryreg_mnypmt_cdvdr_adrtax_nobankacct_notel_nocntctrwrk_md2CFLPPDAbrd_id*pdep_id*fbrd_nmnml_dis_rtvip_dis_rtemp_dis_rt3DPDAgds_id*psubcls_id*fgds_nmgds_tpsl_prcunt_idstandbar_cdprd_ara4GYSPPDZvdr_id*p*fbrd_id*p*fdis_rtbas_mnynml_shr_rtvip_shr_rtemp_shr_rt5GYSDPDZvdr_id*p*fgds_id*p*fod_unt_idin_tax_rtout_tax_rtnml_dis_rtvip_dis_rtemp_dis_rtgds_csttax_flg6BMDAdep_id*pdep_nm7CFLDAsubcls_id*pcls_id*fsubcls_nm8FLDAcls_id*pdep_id*fcls_nm注加*号的为该表的主键
4.
2.5系统数据流图数据流图描绘系统的逻辑模型,图中没有任何具体的物理元素,只是描绘信息在系统中流动和处理的情况因为数据流图是逻辑系统的图形表示,即使不是专业的计算机技术人员也容易理解,所以是极好的通信工具此外,设计数据流图只需要考虑系统必须完成的基本逻辑功能,完全不需要考虑如何具体地实现这些功能,所以它也是软件设计很好的出发点商品信息管理系统的数据流图,如图4-11所示图4-11商品信息管理系统的数据流图
4.
2.6系统数据字典数据字典是关于数据信息的集合,也就是对数据流图中包含的所有元素的定义的集合任何字典最主要的用途都是供人查阅对不了解的条目的解释,数据字典的作用也正是在软件分析和设计的过程中给人提供关于数据的描述信息数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,然而没有数据流图数据字典也难于发挥作用只有数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明
1.数据字典的内容一般说来,数据字典应该由四类元素组成数据流数据元素(数据项)数据存储处理
2.数据字典的用途数据字典最重要的用途是作为分析阶段的工具在数据字典中建立的一组严密一致的定义很有助于改进分析员和用户之间的通信,也有助于改进在不同的开发人员或不同的开发小组之间的通信数据字典中包含的每个数据元素的控制信息是很有价值的它列出了使用一个给定的数据元素的所有程序(或模块),能很容易估计改变一个数据将产生的影响,并能对所有受影响的程序或模块作出相应的改变数据字典是开发数据库的第一步,而且是很有价值的一步
3.商品信息管理系统数据字典1数据流,如表4-1所示编号名称组成来源去向D
1.
1.1供应商档案品牌档案单品档案供应商编码+供应商名称+供应商结构+公司性质+注册资金+营业执照号+地址+税号+银行名称+银行帐号+电话+接洽人+经营方式次分类品牌编码+部门编码+品牌名称+普通折扣率+会员折扣率+员工折扣率单品编码+次分类编码+单品名称+单品类别+售价+销售单位+规格+原条码+产地业务人员系统操作员D
2.
1.1供应商档案供应商编码+供应商名称+供应商结构+公司性质+注册资金+营业执照号+地址+税号+银行名称+银行帐号+电话+接洽人+经营方式系统操作员系统操作员D
2.
1.2供应商档案供应商编码+供应商名称+供应商结构+公司性质+注册资金+营业执照号+地址+税号+银行名称+银行帐号+电话+接洽人+经营方式系统操作员信息库D
2.
2.1供应商档案供应商编码+供应商名称+供应商结构+公司性质+注册资金+营业执照号+地址+税号+银行名称+银行帐号+电话+接洽人+经营方式信息库系统操作员D
2.
2.2品牌档案次分类品牌编码+部门编码+品牌名称+普通折扣率+会员折扣率+员工折扣率系统操作员信息库D
2.
2.3经销单品档案单品编码+次分类编码+单品名称+单品类别+售价+销售单位+规格+原条码+产地系统操作员信息库D
3.1供应商品牌对照供应商编码+品牌编码+倒扣率+保证金+普通折扣承担比+会员折扣承担比+员工折扣承担比信息库信息库D
3.2供应商单品对照供应商编码+单品编码+订购单位+进项税+销项税+普通折扣率+会员折扣率+员工折扣率+订购成本+含税标志信息库信息库D
4.1供应商档案品牌档案单品档案供应商编码+供应商名称+供应商结构+公司性质+注册资金+营业执照号+地址+税号+银行名称+银行帐号+电话+接洽人+经营方式次分类品牌编码+部门编码+品牌名称+普通折扣率+会员折扣率+员工折扣率单品编码+次分类编码+单品名称+单品类别+售价+销售单位+规格+原条码+产地信息库业务人员D
4.2表4-1商品信息管理系统数据流2数据处理编号P1名称查询处理输入信息D
1.
1.1输出信息D
2.
1.1D
4.1激发条件业务人员通知业务简要说明系统操作人员接受业务部门的新品上架业务需求加工逻辑系统操作人员查询商品信息库是否有已维护的信息记录出错处理出错后提示用户编号P2名称记录建档输入信息D
2.
1.1D.
2.
2.1文件信息F1F2输出信息D
3.1D
3.2激发条件系统操作员执行建档操作简要说明系统操作员执行建档操作加工逻辑系统操作员对未查询到的新记录,键入商品信息库出错处理出错后提示用户编号P3名称商品信息库更新商品记录输入信息D
3.1D
3.2输出信息D
4.2激发条件新建商品档案简要说明对新建入的记录自动更新加工逻辑系统对于新建立的商品产生标准编码,对新调整的供货关系改变主档对照关系表出错处理出错后提示用户编号P4名称查询处理输入信息D
3.1D
3.2输出信息D
4.1D
4.2激发条件执行查询操作简要说明业务人员根据需要执行各类查询操作加工逻辑将各类查询结果在数据窗口中显示,并打印输出出错处理出错后提示用户
4.数据库文件1供应商档案GYSDA表结构字段名称字段类型字段长度是否为空字段释意备注VDR_IDCHAR10notnull供应商编码primarykeyVDR_NMCHAR50notnull供应商名称VDR_TPCHAR2notnull供应商结构1-股份有限公司2-有限责任公司3-国有独资公司4-非公司VDR_PRYCHAR2notnull公司性质1-生产厂商2-总代理3-分销商REG_MNYCHAR10notnull注册资金万元PMT_CDCHAR30notnull营业执照号VDR_ADRCHAR70notnull地址TAX_NOCHAR15notnull税号UniqueindexBANKCHAR40notnull银行名称ACCT_NOCHAR30notnull银行帐号TEL_NOCHAR15notnull电话CNTCTRCHAR10notnull接洽人WRK_MDCHAR1notnull经营方式1-经销2-联销2品牌档案CFLPPDA表结构字段名称字段类型字段长度是否为空字段释意备注BRD_IDCHAR10notnull品牌编码primarykeyDEP_IDCHAR3notnull部门编码foreignkeyBRD_NMCHAR40notnull品牌名称NML_DIS_RTFLOATnotnull普通折扣率VIP_DIS_RTFLOATnotnull会员折扣率EMP_DIS_RTFLOATnotnull员工折扣率3单品档案DPDA表结构字段名称字段类型字段长度是否为空字段释意备注GDS_IDCHAR12notnull单品编码primarykeySUBCLS_IDCHAR6notnull次分类编码foreignkeyGDS_NMCHAR40notnull单品名称GDS_TPCHAR1notnull单品类别1超市2百货SL_PRCDECIMAL124notnull售价UNT_IDCHAR5notnull销售单位STANDCHAR35notnull规格BAR_CDCHAR20notnull原条码UniqueindexPRD_ARACHAR5notnull产地4供应商品牌对照GYSPPDZ表结构字段名称字段类型字段长度是否为空字段释意备注VDR_IDCHAR10notnull供应商编码primarykeyforeignkeyBRD_IDCHAR10notnull品牌编码primarykeyforeignkeyDIS_RTFLOATnotnull倒扣率BAS_MNYDECIMAL162notnull保证金NML_SHR_RTFLOATnotnull普通折扣承担VIP_SHR_RTFLOATnotnull会员折扣分担EMP_SHR_RTFLOATnotnull员工折扣分担5供应商单品对照GYSDPDZ表结构字段名称字段类型字段长度是否为空字段释意备注VDR_IDCHAR10notnull供应商编码primarykeyforeignkeyGDS_IDCHAR12notnull单品编码primarykeyforeignkeyOD_UNT_IDCHAR5notnull订购单位IN_TAX_RTCHAR2notnull进项税率OUT_TAX_RTCHAR2notnull销项税率NML_DIS_RTFLOATnotnull普通折扣率VIP_DIS_RTFLOATnotnull会员折扣率EMP_DIS_RTFLOATnotnull员工折扣率GDS_CSTDECIMAL124notnull单品成本TAX_FLGCHAR1notnull含税标志6部门档案表BMDA表结构字段名称字段类型字段长度是否为空字段释意备注DEP_IDCHAR3notnull部门编码primarykeyDEP_NMCHAR40notnull部门名称7经销次分类档案CFLDA表结构字段名称字段类型字段长度是否为空字段释意备注SUBCLS_IDCHAR6notnull次分类编码primarykeyCLS_IDCHAR3notnull分类编码foreignkeySUBCLS_NMCHAR40notnull次分类名称8分类档案FLDA表结构字段名称字段类型字段长度是否为空字段释意备注CLS_IDCHAR3notnull分类编码primarykeyDEP_IDCHAR3notnull部门编码foreignkeyCLS_NMCHAR40notnull分类名称第5章代码设计与实现商品信息管理系统是采用面向对象的PowerBuilder开发数据库应用系统进行的开发
5.1定义库表关联各库表之间关联关系,如图5-1所示图5-1库表关联图
5.2总体菜单功能设计商品信息管理系统总菜单,如图5-2所示图5-2系统菜单
5.3对象与库表的关联性商品信息管理系统各对象与库表的关联关系,如表5-1所示窗口名称数据窗口数据窗口对象数据源库表列字段w_main登录无无无无无w_login密码确认无无无无无w_modify主界面无无无无无w_gys供应商档案维护窗口dw_1d_gys_detailq_gysGYSDAvdr_id*vdr_nmvdr_tpvdr_pryreg_mnypmt_cdvdr_adrtax_nobankacct_notel_nocntctrwrk_mdw_pp品牌档案维护窗口tab_
1.tabpage_
1.dw_1tab_
1.tabpage_
2.dw_2d_cflppd_gysppq_ppq_gysppCFLPPDAGYSPPDZbrd_id*dep_idbrd_nmnml_dis_rtvip_dis_rtemp_dis_rtvdr_id*brd_id*dis_rtbas_mnynml_shr_rtvip_shr_rtemp_shr_rtw_dp单品档案维护窗口tab_
1.tabpage_
1.dw_1tab_
1.tabpage_
2.dw_2d_dpd_gysdpq_dpq_gysdpDPDAGYSDPDZgds_id*subcls_id*gds_nmgds_tpsl_prcunt_idstandbar_cdprd_aravdr_id*gds_id*od_unt_idin_tax_rtout_tax_rtnml_dis_rtvip_dis_rtemp_dis_rtgds_csttax_flgw_spfl商品分类档案维护窗口dw_1d_bmd_fld_subclsq_bmq_flq_subclsBMDAFLDACFLDAdep_id*dep_nmcls_id*dep_idcls_nmsubcls_id*cls_idsubcls_nmw_change_password密码修改无无无无无w_gys_cx供应商基本信息查询窗口tab_
1.tabpage_
1.dw_1tab_
1.tabpage_
1.dw_2tab_
1.tabpage_
2.dw_3tab_
1.tabpage_
2.dw_4tab_
1.tabpage_
3.dw_5tab_
1.tabpage_
3.dw_6d_gys_masterd_gys_detaild_gys_dp_masterd_gys_dp_detaild_gys_pp_masterd_gys_pp_detalq_gysq_gysq_dpgysq_dpgysq_ppgysq_ppgysGYSDADPDAGYSDAGYSDPDZCFLDAGYSDACFLPPDAGYSPPDZvdr_id*vdr_nmvdr_tpvdr_pryreg_mnypmt_cdvdr_adrtax_nobankacct_notel_nocntctrwrk_mdgds_nmvdr_nmvdr_tpvdr_pryreg_mnypmt_cdvdr_adrtax_nobankacct_notel_nocntctrwrk_mdbrd_nmvdr_nmvdr_tpvdr_pryreg_mnypmt_cdvdr_adrtax_nobankacct_notel_nocntctrwrk_mdw_pp_cx品牌基本信息查询窗口dw_1dw_2dw_1dw_2d_cflpp_master1d_cflpp_gysdz22d_cflpp_gys_masterd_cflpp_gysdz33q_cflppq_gysppdzq_cflpp_gysq_gysppdz1CFLPPDABMDAGYSDABMDACFLPPDAGYSPPDZGYSDABMDACFLPPDAGYSPPDZGYSDABMDACFLPPDAGYSPPDZbrd_id*dep_idbrd_nmnml_dis_rtvip_dis_rtemp_dis_rtdep_nmvdr_nmbrd_idbrd_nmdis_rtbas_mnynml_shr_rtvip_shr_rtemp_shr_rtvdr_idvdr_nmdep_nmbrd_idbrd_nmnml_dis_rtvip_dis_rtemp_dis_rtvdr_nmdep_nmbrd_nmvdr_idbrd_iddis_rtbas_mnynml_shr_rtvip_shr_rtemp_shr_rtw_dp_cx单品基本信息查询窗口dw_1dw_2dw_1dw_2d_cfldp_master1d_dp_gysdz22d_cfldp_gys_master1d_dp_gysdz33q_cfldpq_dp_gysdz22q_gysdpdaq_gysdpdzCFLDADPDACFLDADPDAGYSDAGYSDPDZCFLDADPDAGYSDAGYSDPDZCFLDADPDAGYSDAGYSDPDZgds_id*subcls_nm*gds_nmgds_tpsl_prcunt_idstandbar_cdprd_aragds_nmvdr_nmgds_id*od_unt_idin_tax_rtout_tax_rtnml_dis_rtvip_dis_rtemp_dis_rtvdr_idvdr_nmgds_idgds_nmsubcls_nmgds_tpsl_prcunt_idstandbar_cdprd_aravdr_id*gds_id*od_unt_idin_tax_rtout_tax_rtnml_dis_rtvip_dis_rtemp_dis_rtgds_csttax_flgsubcls_nmgds_nmvdr_nmw_select_report报表类型选择无无无无无w_filter_condition检索条件无无无无无w_filter_report查询报表窗口dw_1d_dp_bbd_gys_bbd_pp_bbq_dpq_gysq_ppDPDAGYSDACFLPPDAgds_id*subcls_id*gds_nmgds_tpsl_prcunt_idstandbar_cdprd_aravdr_id*vdr_nmvdr_tpvdr_pryreg_mnypmt_cdvdr_adrtax_nobankacct_notel_nocntctrwrk_mdbrd_id*dep_idbrd_nmnml_dis_rtvip_dis_rtemp_dis_rtw_sort_report排序报表窗口dw_1表5-1对象与库表关联
5.4功能界面的设计“商品信息管理系统”整体的功能界面,是以点击主菜单各菜单项内容,打开相应功能窗口界面而实现应用程序对象spgl.pbl的open事件代码,详见附录-1系统运行,屏幕首先显示友好的主窗口界面,分为“系统操作员”和“业务操作员”两种用户登录方式,以实现按不同的访问级别进行统一定义和管理,保证了数据的安全性和共享性“登录”w_main窗口各对象源代码,详见附录-2在窗口中放置了3个控件,如图5-3所示控件名称控件显示文字控件类型rb_1系统操作员RadioButtonrb_2业务操作员RadioButtonp_1Picture图5-3系统登录窗口点击“系统操作员”,登录系统,屏幕将显示密码确认窗口,用以检验用户帐户和密码的正确性“密码确认”w_login窗口各对象源代码,详见附录-3在窗口中放置了7个控件,如图5-4所示控件名称控件显示文字控件类型p_1Picturest_1操作员帐号StaticTextst_2操作员密码StaticTextsle_1SingleLineEditsle_2SingleLineEditcb_1确认CommandButtoncb_2取消CommandButton图5-4密码确认窗口输入正确的用户帐号和密码,确认通过后,将登录到主菜单窗口,开始进行正常的业务操作主界面w_modify各菜单项的源代码,详见附录-4在窗口中只关联了m_frame菜单,如图5-5所示图5-5主界面菜单窗口其中“数据维护”、“数据检索”、“报表处理”菜单项的下拉菜单内容如下单击不同的菜单内容,将展现不同的操作窗口界面在各操作窗口界面均设有“返回”按钮,单击“返回”按钮,即可关闭该活动窗口,并返回主菜单窗口
1.数据维护模块“数据维护”模块主要实现对三大基本档案信息(供应商、品牌、单品)进行新建、删除、查询、更新的维护,以及对商品分类信息(部门、分类、次分类)进行数据维护其部分界面内容如下供应商档案维护w_gys窗口各对象源代码,详见附录-5在窗口中放置了23个控件,如图5-6所示控件名称控件显示文字控件类型dw_1DataWindowcb_1保存CommandButtoncb_2返回CommandButtoncb_3查询CommandButtoncb_4取消CommandButtoncb_5新建CommandButtoncb_6删除CommandButtoncb_7第一条CommandButtoncb_8前一条CommandButtoncb_9后一条CommandButtoncb_10最后一条CommandButtongb_1查询GroupBoxgb_2GroupBoxst_1第StaticTextst_2共StaticTextst_3供应商编码StaticTextst_4供应商名称StaticTextst_5StaticTextst_6StaticTextst_7条StaticTextst_8条StaticTextsle_idSingleLineEditsle_nameSingleLineEdit图5-6供应商档案维护窗口由于品牌信息的维护内容包括两部分品牌档案的属性信息和品牌与供应商的合作信息,因此在界面实现上,采取了标签控件进行开发品牌档案维护w_pp窗口与供应商维护窗口的实现功能一致,因此就不再列举各窗口控件的脚本代码在窗口中放置了个42控件,如图5-7所示控件名称控件显示文字控件类型tab_1Tabtabpage_1UserObjectdw_1DataWindowcb_1查询CommandButtoncb_2取消CommandButtoncb_3新建CommandButtoncb_4删除CommandButtoncb_5保存CommandButtoncb_6返回CommandButtonst_1品牌编码StaticTextst_2品牌名称StaticTextst_3第StaticTextst_4共StaticTextst_9StaticTextst_10StaticTextst_11条StaticTextst_12条StaticTextsle_idSingleLineEditsle_nameSingleLineEditgb_1查询GroupBoxcb_12第一条CommandButtoncb_13前一条CommandButtoncb_14后一条CommandButtoncb_15最后一条CommandButtontabpage_2UserObjectdw_2DataWindowgb_2查询GroupBoxst_5供应商编码StaticTextst_6品牌编码StaticTextst_7第StaticTextst_8共StaticTextst_13StaticTextst_14StaticTextst_15条StaticTextst_16条StaticTextsle_vdrSingleLineEditsle_brdSingleLineEditcb_7查询CommandButtoncb_8取消CommandButtoncb_9新建CommandButtoncb_10删除CommandButtoncb_11保存CommandButton图5-7品牌档案维护窗口图5-7品牌档案维护窗口商品分类档案维护窗口,通过下拉菜单中选择不同的表名,来实现在同一数据窗口控件中关联不同的数据窗口对象在表名中选择“次分类编码表”,数据窗口中将显示次分类档案信息,点击“新建”按钮,将增加一条新的空白记录,在进行“分类编码”信息维护时,以下拉菜单方式进行编辑,且该菜单内容可进行用户维护,具体的解决方法将在第七章“技术难点及解决方案”中论述商品分类档案维护w_spfl窗口各对象源代码,详见附录-6在窗口中放置了21个控件,如图5-8所示控件名称控件显示文字控件类型ddlb_1DropDownListBoxdw_1DataWindowcb_1保存CommandButtoncb_2返回CommandButtoncb_3查询CommandButtoncb_4取消CommandButtoncb_5新建CommandButtoncb_6删除CommandButtonst_1第StaticTextst_2StaticTextst_3编码StaticTextst_4名称StaticTextst_5表名StaticTextst_6条StaticTextst_7共StaticTextst_8StaticTextst_9条StaticTextgb_1查询GroupBoxgb_2GroupBoxsle_idSingleLineEditsle_nameSingleLineEdit图5-8商品分类档案维护窗口密码修改窗口可以提供为用户提供密码修改功能密码修改w_change_password窗口各对象源代码,详见附录-7在窗口中放置了11个控件,如图5-9所示控件名称控件显示文字控件类型p_1Picturest_1账号StaticTextst_2旧密码StaticTextSt_3新密码StaticTextSt_4确认密码StaticTextsle_1SingleLineEditsle_2SingleLineEditsle_3SingleLineEditsle_4SingleLineEditcb_1确认CommandButtoncb_2取消CommandButton图5-9密码修改窗口
2.数据检索模块“数据检索”模块主要实现对三大基本信息的主档查询,并可以为用户提供基本信息的交叉组合模糊查询其部分界面内容如下供应商基本信息查询窗口,提供按供应商主档查询、按单品查找和按品牌查找供应商主档信息的功能,同时还可按编码、名称方式进行排序供应商基本信息查询w_gys_cx窗口各对象源代码,详见附录-8在窗口当前标签卡中放置了23个控件,其它标签卡控件内容与此相同,这里就不再一一列举,如图5-10所示控件名称控件显示文字控件类型tab_1Tabtabpage_1UserObjectgb_1查询GroupBoxgb_2排序GroupBoxdw_1DataWindowdw_2DataWindowst_1供应商编码StaticTextst_2供应商名称StaticTextst_4公司性质StaticTextst_3第StaticTextst_5条StaticTextst_6共StaticTextst_7条StaticTextst_8StaticTextst_9StaticTextsle_1SinglineEditsle_2SinglineEditddlb_1DropDownListBoxcb_1查询CommandButtoncb_2取消CommandButtoncb_3返回CommandButtonrb_1编码RadioButtonrb_2名称RadioButton图5-10供应商基本信息查询窗口品牌基本信息查询窗口提供按品牌主档查询和按供应商查找品牌主档信息和合作信息,同时还可按不同方式进行排序通过下拉菜单选择不同的表名,实现在同一数据窗口控件中关联不同的数据窗口对象,同时还将触发“查询”标签选中不同的标签卡内容,且未选中的标签卡也将禁止用户使用;排序组框内也将根据选择的不同表,而显示不同的排序条件具体的解决方法将在第七章“技术难点及解决方案”中论述品牌基本信息查询w_pp_cx窗口各对象源代码,详见附录-9在窗口中放置了26个控件,如图5-11所示控件名称控件显示文字控件类型tab_1Tabtabpage_1UserObjecttabpage_2UserObjectgb_1查询GroupBoxgb_2排序GroupBoxdw_1DataWindowdw_2DataWindowcb_1查询CommandButtoncb_2取消CommandButtoncb_3返回CommandButtonst_1品牌名称StaticTextst_2部门名称StaticTextst_3供应商名称StaticTextst_4表名StaticTextst_5第StaticTextst_6StaticTextst_7条StaticTextst_8共StaticTextst_9StaticTextSt_10条StaticTextddlb_1DropDownListBoxrb_1RadioButtonrb_2RadioButtonsle_brdSinglelineEditsle_depSinglelineEditsle_vdrSinglelineEdit图5-11品牌基本信息查询窗口
3.报表处理“报表处理”模块主要实现的功能是按不同的报表类型产生不同的主档信息内容,并进行输出打印单击“报表处理”下拉菜单中的处理信息(供应商档案,品牌档案,单品档案),除了打开“报表类型选择”窗口外,还将根据所点击的内容通过TriggerEvent函数触发“数据窗口切换”相应的单选按钮,以备关联到所需的数据窗口对象其部分界面如下报表选择w_select_report窗口各对象源代码,详见附录-10在窗口中放置了10个控件,如图5-12所示控件名称控件显示文字控件类型gb_1检索条件GroupBoxgb_2数据窗口切换GroupBoxrb_1按排序产生报表RadioButtonrb_2按查询产生报表RadioButtonrb_3供应商档案RadioButtonrb_4品牌档案RadioButtonrb_5单品档案RadioButtonddlb_1DropDownListBoxcb_1确定CommandButtoncb_2返回CommandButton图5-12报表类型选择窗口为检索条件组框内单选按钮定义了窗口级函数wf_selectwho,来确定激活排序或查询单选按钮按排序产生报表,如图5-13所示排序报表w_sort_report窗口各对象源代码,详见附录-11在窗口中放置了8个控件,如下控件名称控件显示文字控件类型gb_1打印GroupBoxdw_1GroupBoxcb_1首页CommandButtoncb_2尾页CommandButtoncb_3上页CommandButtoncb_4下页CommandButtoncb_5打印CommandButtoncb_6返回CommandButton图5-13排序报表窗口检索条件w_filter_condition窗口各对象源代码,详见附录-12在窗口中放置6了个控件,如图5-14所示控件名称控件显示文字控件类型gb_1查询GroupBoxst_1名称StaticTextst_2编码StaticTextst_3若不输入查询条件,则显示全部信息StaticTextsle_idSingleLineEditsle_nameSingleLineEditcb_1确认CommandButtoncb_2返回CommandButton图5-14检索条件窗口查询报表w_filter_report窗口各对象源代码,详见附录-13在窗口中放置了3个控件,如图5-15所示控件名称控件显示文字控件类型dw_1DataWindowcb_1打印CommandButtoncb_2返回CommandButton图5-15查询报表窗口
5.5软件调试应用程序的调试和运行是开发过程中必不可少的步骤,对应用程序必须经过调试来改正错误,在验证程序的正确性后,才能生成脱离PowerBuilder开发环境独立运行的可执行程序调试的基本过程在应用程序中可能会出现问题的控制语句处设置断点在调试状态下运行应用程序当执行到断点挂起时可以检查或更新变量的值若需要则可以单步执行代码根据需要在运行程序中添加或修改断点当发现问题时正确纠正错误代码以上步骤并非一成不变,可以根据实际情况,进行调整
5.6可执行文件的生成应用程序经过设计、开发、调试,排除了明显与潜在的错误并达到预期功能后,就到了向用户交付应用程序的时候,这样就必要生成可脱离PowerBuilder开发环境独立运行的可执行文件分发应用程序前需要将要提供给用户的全部应用程序和环境部件打包,打包的内容包括外部函数、位图和图形、声音文件等可执行文件所需要的文件有
1.可执行文件可执行文件分成两类伪代码格式P-Code和机器代码两者的主要差别在于伪代码是PowerBuilder编译对象时生成的一种中间代码,它保存在应用库中,运行时PowerBuilder虚拟机(由一组DLL组成)解释并执行中间代码机器代码是PowerBuilder生成的真正二进制文件,PowerBuilder的运行库(.DLL)根据需要装入该二进制文件
2.动态连接库PowerBuilder动态库包括PBD和DLL,动态库中包含了相应PowerBuilder库文件中所有编译好的代码PBD文件只能与伪代码格式的可执行文件一起使用,并且需要放置在库搜索路径指定的路径上利用动态库可以在多个应用程序之间共享代码,避免了相同代码的重复分发
3.资源文件(PBR文件)资源文件是一种ASCII码文件,由需要编译到可执行文件或动态库中的每个对象(位图、图标、指针、数据窗口等)的名称组成在创建可执行文件时,需要确认该应用程序为当前应用程序,且所有必要的PBL文件都必须包含在应用程序搜索路径中如果用PBR,则必须确认它已经创建创建商品信息管理系统可执行文件步骤,如下
1.创建Project工程对象
2.指定库文件名(D:\zl\毕设\spgl.pbl)
3.指定工程应用名(P_spgl)
4.选择生成应用类型
5.选择是否生成机器代码
6.选择是否生成动态库文件
7.单击”Finish”按钮,生成一个工程对象
8.打开工程对象名P_spgl
9.打开该工程对象,单击工程画笔工具栏中的图标进行工程的编译
5.7分发应用程序在PowerBuilder中编译生成的.exe文件不是一个完全独立执行的程序,它必须与PowerBuilder提供的一组动态连接库同时提供给用户才能真正脱离PowerBuilder环境独立运行商品信息管理系统编译通过后,生成可执行文件spgl.exe离开PowerBuilder开发环境,返回操作系统环境为编译生成的spgl.exe文件建立一个独立的目录,并将应用程序拷贝到该目录下在独立的目录下运行应用程序,若执行不成功,则应用程序会提示找不到哪个动态连接库从而不能运行的信息查找所需要的动态连接库,并逐次拷贝至应用程序同一目录下libjcc.dllpb.inipbadd
70.dllpbdwe
70.dllpbodb
70.inipbodb
70.dllpbvm
70.dllspgl.dll第6章研究成果及软件测试
6.1研究成果目前《商品信息管理系统》已经具备了数据的建立、删除及数据维护、查询等用户所需的基本功能,并能保证数据操作中的规范性,同时实现了数据的模糊检索,下拉数据窗口的设计最大限度地简化系统日常维护工作
6.2软件测试软件测试不同于程序测试,是为了发现错误而执行程序的过程,它贯穿于软件定义与开发的整个期间软件测试的目的是发现程序中的错误,是为了证明程序有错,而不是证明程序无错,因此,它是保证软件质量,提高软件可靠性的关键软件测试阶段的工作步骤
1.单元测试即模块测试,检验每个模块能否单独工作
2.子系统测试检验概要设计中模块接口设计问题
3.系统测试综合检验把经过测试的子系统装配成一个系统进行测试,不仅应该发现设计和编码的错误,还应验证系统确实能提供需求说明书中的功能(子系统测试和系统测试,统称集成测试)
4.验收测试把软件系统作为单一实体进行测试,在用户的积极参与使用实际数据进行测试
6.
2.1黑盒测试和白盒测试测试任何产品都有两种方法如果已经知道了产品已具有的功能,可以通过测试来检验是否每个功能都能正常使用如果知道了产品的内部工作过程,可以通过测试来检验内部动作是否按照规格说明书的规定正常进行白盒测试也称为结构测试,根据程序内部逻辑结构进行测试黑盒测试也称为功能测试,从用户观点,按规格说明书要求的输入数据和输出数据的对应关系设计测试用例,是程序外部特征进行的测试无论黑盒测试还白盒测试都不可能作到穷尽测试,因为不可能作到穷尽测试,所以软件测试中的不可能发现程序中的所有错误我们的目的就是要通过测试保证程序的可靠性,因此必须仔细设计测试方案,力争用可能少的测试发现尽可能多的错误
6.3商品信息管理系统测试由于本系统的功能明确,因此采用黑盒测试的方法进行测试,并采取商业模拟测试使用类似真实的数据,去执行在日常的工作环境中所做的工作,这样可以发现软件测试难以捕捉到的错误测试步骤如下登录窗口测试数据维护模块测试(品牌、次分类数据维护)数据检索模块测试(供应商、单品基本信息查询)报表处理测试(供应商档案报表处理)
1.登录窗口测试运行可执行文件spgl.exe,屏幕窗口显示“欢迎使用商品信息管理系统”窗口,如图6-1所示图6-1系统登录界面点击‘系统操作员’单选按钮,进入密码确认窗口,如图6-2所示图6-2密码确认输入操作员帐号及密码,点击‘确认’按钮,进入系统主菜单窗口,如图6-3所示图6-3主菜单窗口
2.数据维护模块测试数据维护模块的功能是对商品三大主档信息(供应商、品牌、单品)及商品分类进行日常的建档、删除、修改,同时可按编码、名称进行查询,排除同一记录多次建立的误操作,从而保证了数据的唯一和标准性(以品牌、次分类为例,进行测试)单击数据维护菜单‘品牌’/‘商品分类’菜单项,进入品牌/商品分类档案维护界面,点击‘新建’按钮,可插入新记录查询需删除的记录,单击选中,并点击‘删除’按钮,系统提示删除确认信息在维护窗口中,可按编码/名称,进行各主档信息的复合、模糊查询部分测试结果如下进入‘品牌档案’维护窗口,新建记录,如图6-4所示图6-4新建记录在品牌名称单行编辑框中输入“美”字进行单项模糊查询,如图6-5所示图6-5模糊查询点击‘后一条’按钮,可以查看查询到的另一记录,如图6-6所示图6-6下一条记录按品牌名称、品牌编码进行组合模糊查询,如图6-7所示图6-7组合模糊查询点击‘删除’按钮,显示确认信息,如图6-8所示图6-8删除记录信息确认“商品分类档案”维护窗口,如图6-9所示图6-9商品分类档案维护窗口从‘表名’下拉框中选择‘次分类编码表’,如图6-10所示图6-10选择“次分类编码表”点击‘新建’按钮,在‘分类编码’信息项内,以下拉数据窗口方式,进行选择输入,如图6-11所示图6-11新建记录
3.数据检索模块测试(供应商、单品基本信息查询)对供应商基本信息可以按供应商编码、名称和公司性质进行模糊组合查询,同时还可对查询结果进行编码和名称的排序,在主表窗口中点击所需信息,在明细表窗口中显示相应的基本信息,如图6-12所示图6-12按供应商进行信息查询对供应商基本信息还可以交叉表的方式进行查询,按单品名称/品牌名称,查询提供某一商品的供应商信息资料同时还可对查询结果进行编码和名称的排序,在主表窗口中点击所需信息,在明细表窗口中显示相应的基本信息,如图6-13所示在界面实现上,以标签页的展现方式进行开发图6-13按单品进行信息查询单品基本信息可以通过对次分类单品或供应商单品两种表进行查询,通过选择不同的表名,在同一数据窗口中调用不同的数据窗口对象;查询条件组框内的标签控件将根据不同表而选中不同的标签卡内容;排序组框内也将显示不同的排序条件当选择“次分类单品”表,进行用户需求查询,在主窗口内显示满足查询条件的次分类单品信息(即单品主档属性信息),点击目标记录,在明细窗口中将显示提供该单品所有供应商的合作信息,如图6-14所示图6-14按次分类单品表进行查询当选择“供应商单品”表,进行用户需求查询,在主窗口内显示满足查询条件的供应商单品信息(即供应商与单品的对照信息),点击目标记录,在明细窗口中将显示提供该单品与供应商具体的合作信息,如图6-15所示图6-15按供应商单品进行信息查询第7章技术难点及解决方案
7.1DropDownDW编辑样式采用DropDownDW数据编辑风格,实现数据维护的规范性解决方案
1.定义数据编辑风格的名称为cls_id,类型为DropDownDW,如图7-1所示图7-1定义数据编辑风格DropDownDW
2.为数据窗口对象的列字段cls_id指定编辑风格为DropDownDW,如图7-2所示图7-2定义数据窗口对象列字段的编辑风格功能实现,如图7-3所示图7-3以下拉数据窗口的方式维护信息心得体会以下拉DataWindow编辑样式进行数据维护,可以避免从其他信息源查询,具有即时、精确的优点,同时也是为一种人性化的界面操作,可以从用户实际操作的方便性入手,进行程序开发
7.2以下拉列表框实现的动态操作以下拉列表框选择不同内容形式,实现以下三种功能同一数据窗口关联不同的数据窗口对象标签控件打开不同的标签卡内容修改静态文本控件的内容解决方案窗口界面设计,如图7-4所示图7-4下拉列表框动态激活不同对象在窗口中填加‘表名’下拉列表框ddlb_1对象,编辑selectionchanged事件代码,具体的解决方案stringt1t1=ddlb_
1.textchoosecaset1//定义开关变量t1以实现通过变量的选择,而动态关联不同的数据窗口对象case次分类单品dw_
1.dataobject=d_cfldp_master1dw_
2.dataobject=d_dp_gysdz22tab_
1.SelectedTab=1//指定tab_1标签打开第一个标签卡内容tab_
1.tabpage_
1.sle_gds.setfocustab_
1.tabpage_
1.enabled=truetab_
1.tabpage_
2.enabled=false//使tab_
1.tabpage_1控件有效,使tab_
1.tabpage_2无效rb_
1.text=次分类名称rb_
2.text=单品名称//指定静态文本控件text属性显示值case供应商单品dw_
1.dataobject=d_cfldp_gys_master1dw_
2.dataobject=d_dp_gysdz33tab_
1.SelectedTab=2//指定tab_1标签打开第二个标签卡内容tab_
1.tabpage_
2.sle_vdr.setfocustab_
1.tabpage_
2.enabled=truetab_
1.tabpage_
1.enabled=false//使tab_
1.tabpage_1控件有效,使tab_
1.tabpage_2无效rb_
1.text=单品名称rb_
2.text=供应商名称//指定静态文本控件text属性显示值case请选择dw_
1.dataobject=dw_
2.dataobject=rb_
1.text=rb_
2.text=endchoosedw_
1.settransobjectsqlcadw_
1.retrievest_
9.text=stringdw_
1.RowCount//在st_9静态文本控件text属性显示dw_1数据窗口的总行号st_
6.text=stringdw_
1.GetRow//在st_6静态文本控件text属性显示在dw_1数据窗口中获取到的当前行号心得体会为使操作界面能够体现数据间的关系,在同一界面中,根据不同操作,激活相应操作对象,最大限度的满足视觉上的统一致谢我的毕业设计到目前为止已初步完成在这次毕业设计过程中,我得到了宋晔老师的热情帮助和指导,并对我的毕业设计提供了大量资料和宝贵意见,对此我深表感谢由于《商品信息管理系统》是我开发的第一个实用软件,无论在界面设计还是脚本编写风格上,都有很多需要进一步改进的地方,但这足以使我得到了锻炼通过这次毕业设计的实际开发,使我四年来所学到的软件工程、数据库相关知识,进行了一次很好的综合提炼,使我对数据库的开发与应用有了更新的认识,这对我今后的工作和学习都是宝贵的经验积累最后我要再一次衷心感谢直接参与毕设指导的马华老师,和几年来培养教育我的各位老师附录《商品信息管理系统》源代码参考文献
1.《PowerBuilder实用教程》----数据库应用系统开发宋晔张弘编著北京理工大学出版社2002年8月出版
2.《数据库系统概论》第三版范师煊王珊编著高等教育出版社2002年2月出版
3.《软件工程导论》张海藩编著清华大学出版社2002年1月出版
4.《PowerBuilder
6.0开发人员指南》张长富李匀等编著北京希望电脑公司1998年10月出版附录《商品信息管理系统》源代码
1.spgl.pbl应用程序对象open事件代码//Profilegoods1SQLCA.DBMS=ODBCSQLCA.AutoCommit=FalseSQLCA.DBParm=ConnectString=DSN=goods;UID=dba;PWD=sqlCONNECTUSINGSQLCA;IFSQLCA.SQLCODE0THENMESSAGEBOX无法连接数据库SQLCA.SQLERRTEXTHALTENDIFOPENw_main
2.登录w_main窗口w_main窗口的open事件代码-//----窗口置于屏幕中央Environmentl_envintl_ScrWidthl_ScrHeight//定义坐标变量//关闭窗口刷新setredrawfalse//取得屏幕的高度和亮度GetEnvironmentl_envl_ScrWidth=PixelsToUnitsl_env.ScreenWidthXpixelsToUnits!l_ScrHeight=PixelsToUnitsl_env.ScreenHeightYpixelsToUnits!//移动窗口到屏幕中间Movel_ScrWidth-this.width/2l_ScrHeight-this.height/2//打开窗口刷新setredrawtrue//将窗口置于屏幕中央“系统管理员”rb_1单选按钮clicked事件代码-openw_loginclosew_main“业务操作员”rb_2单选按钮clicked事件代码-openw_modifym_frame.m_sjwh.enabled=falseclosew_main
3.密码确认w_login窗口“操作员密码”sle_2单行编辑框getfocus事件代码-stringpassword2accountaccount=trimsle_
1.textselectacc_pass.passwordinto:password2fromacc_passwhereacc_pass.account=:account;ifpassword2=thenmessagebox账号错误此账号不存在请重新输入!sle_
1.setfocussle_
1.text=endif“确认”cb_1命令按钮clicked事件代码-stringpasswordaccountpassword2password2=trimsle_
2.textifpassword2=thenmessagebox密码错误!操作员密码为空值请重新输入!sle_
2.setfocuselseaccount=trimsle_
1.textselectacc_pass.passwordinto:passwordfromacc_passwhereacc_pass.account=:account;ifpassword=trimsle_
2.textthenopenw_modifyclosew_loginelsemessagebox密码错误!请重新输入!sle_
2.setfocussle_
2.text=endifendif“取消”cb_2命令按钮clicked事件代码-openw_mainclosew_login
4.主界面w_modify窗口各菜单项代码:数据维护-供应商openw_gys数据维护-品牌:openw_pp数据维护-单品openw_dp数据维护-商品分类:openw_spfl数据维护-密码修改openw_change_password数据检索-供应商基本信息openw_gys_cx数据检索-品牌基本信息openw_pp_cx数据检索-单品基本信息openw_dp_cx报表处理-供应商档案openw_select_reportw_select_report.rb_
3.triggereventclicked!w_select_report.rb_
3.checked=true报表处理-品牌档案openw_select_reportw_select_report.rb_
4.triggereventclicked!w_select_report.rb_
4.checked=true报表处理-单品档案openw_select_reportw_select_report.rb_
5.triggereventclicked!w_select_report.rb_
5.checked=true系统-关闭closew_modify
5.供应商档案维护w_gys窗口w_gys窗口的open事件代码-//----窗口置于屏幕中央Environmentl_envintl_ScrWidthl_ScrHeight//定义坐标变量//关闭窗口刷新setredrawfalse//取得屏幕的高度和亮度GetEnvironmentl_envl_ScrWidth=PixelsToUnitsl_env.ScreenWidthXpixelsToUnits!l_ScrHeight=PixelsToUnitsl_env.ScreenHeightYpixelsToUnits!//移动窗口到屏幕中间Movel_ScrWidth-this.width/2l_ScrHeight-this.height/2//打开窗口刷新setredrawtrue//将窗口置于屏幕中央dw_
1.settransobjectsqlcadw_
1.retrievedw_
1.scrolltorowdw_
1.rowcountw_gys窗口的closequery事件代码-Integerli_retifdw_
1.modifiedcount+dw_
1.deletedcount0thenli_ret=messagebox注意!数据已经改变是否需要保存Question!yesnocancel!choosecaseli_retcase1cb_
1.triggereventclicked!case2case3message.returnvalue=1endchooseendifdw_1数据窗口dberror事件代码-messagebox警告!发生数据库错误码+stringsqldbcode+的错误信息+错误原因:+sqlerrtextstopsign!ok!return1dw_1数据窗口rowfocuschanged事件代码-st_
5.text=stringdw_
1.GetRowst_
6.text=stringdw_
1.RowCount“第一条”命令按钮clicked事件代码-dw_
1.ScrollToRow1“前一条”命令按钮clicked事件代码-dw_
1.ScrollPriorRow“后一条”命令按钮clicked事件代码-dw_
1.ScrollNextRow“最后一条”命令按钮clicked事件代码-dw_
1.ScrollToRowdw_
1.RowCount“查询”cb_3命令按纽clicked事件代码-Stringa1a2a1=vdr_idlike+%+trimsle_id.text+%+a2=vdr_nmlike+%+trimsle_name.text+%+Ifsle_id.textandsle_name.text=thendw_
1.setfiltera1Elseifsle_id.text=andsle_name.textthendw_
1.setfiltera2Elseifsle_id.textandsle_name.textthendw_
1.setfiltera1+and+a2Elsemessagebox提示请输入查询条件Endifdw_
1.filterdw_
1.setfocusst_
5.text=stringdw_
1.GetRowst_
6.text=stringdw_
1.RowCount“取消”cb_4命令按钮clicked事件代码-dw_
1.setfilterdw_
1.retrievesle_id.text=sle_name.text=st_
5.text=st_
6.text=“新建”cb_5命令按钮clicked事件代码-intnn=dw_
1.getrowdw_
1.insertrown+1dw_
1.scrollnextrowdw_
1.setfocus“删除”cb_6命令按钮clicked事件代码-ifmessagebox删除您确实要删除此项记录吗question!okcancel!=1thendw_
1.deleterow0dw_
1.updateendif“保存”cb_1命令按钮clicked事件代码-IFdw_
1.update0thencommit;ELSEmessagebox错误!对不起!数据无法保存rollback;ENDIF“返回”cb_2命令按钮clicked事件代码-closew_gys
6.商品分类档案维护w_spfl窗口dw_1窗口clicked事件代码-dw_
1.selectrow0false//把前面所选的所有行清除高亮显示dw_
1.selectrowrowtrue//把所选的当前行设置为高亮显示dw_1窗口dberror事件代码-messagebox警告!发生数据库错误码+stringsqldbcode+的错误信息+错误原因:+sqlerrtextstopsign!ok!return1dw_1窗口rowfocuschanged事件代码-st_
8.text=stringdw_
1.RowCountst_
2.text=stringdw_
1.GetRow“表名”下拉列表框selectionchanged事件代码-stringt1t1=ddlb_
1.textchoosecaset1case部门编码表dw_
1.dataobject=d_bmcase分类编码表dw_
1.dataobject=d_flcase次分类编码表dw_
1.dataobject=d_subclsendchoose“表名”下拉列表框Items属性值“查询”cb_3命令按钮clicked事件代码-Stringa1a2a3a4a5a6intna1=dep_idlike+%+trimsle_id.text+%+a2=dep_nmlike+%+trimsle_name.text+%+a3=cls_idlike+%+trimsle_id.text+%+a4=cls_nmlike+%+trimsle_name.text+%+a5=sublcs_idlike+%+trimsle_id.text+%+a6=subcls_nmlike+%+trimsle_name.text+%+Ifsle_id.textandsle_name.text=thenn=1Elseifsle_id.text=andsle_name.textthenn=2Elseifsle_id.textandsle_name.textthenn=3elsen=4Endifchoosecasencase1ifdw_
1.dataobject=d_bmthendw_
1.setfiltera1Elseifdw_
1.dataobject=d_flthendw_
1.setfiltera3Elseifdw_
1.dataobject=d_subclsthendw_
1.setfiltera5Endifcase2ifdw_
1.dataobject=d_bmthendw_
1.setfiltera2Elseifdw_
1.dataobject=d_flthendw_
1.setfiltera4Elseifdw_
1.dataobject=d_subclsthendw_
1.setfiltera6Endifcase3ifdw_
1.dataobject=d_bmthendw_
1.setfiltera1+and+a2Elseifdw_
1.dataobject=d_flthendw_
1.setfiltera3+and+a4Elseifdw_
1.dataobject=d_subclsthendw_
1.setfiltera5+and+a6Endifcase4messagebox提示请输入查询条件Endchoosedw_
1.filterdw_
1.setfocusst_
8.text=stringdw_
1.RowCountst_
2.text=stringdw_
1.GetRow其余各控件与供应商档案维护窗口的实现功能一致,这里不再列举各控件的脚本代码
7.密码修改w_change_password窗口“旧密码”sle_2单行编辑框getfocus事件代码-//确认帐户是否存在stringpassword1accountaccount=trimsle_
1.textselectacc_pass.passwordinto:password1fromacc_passwhereacc_pass.account=:account;ifpassword1=thenmessagebox账号错误!此账号不存在请重新输入!sle_
1.text=sle_
1.setfocusendif“旧密码”sle_2单行编辑框losefocus事件代码-stringpassword1accountintreinputaccount=trimsle_
1.textselectacc_pass.passwordinto:password1fromacc_passwhereacc_pass.account=:account;ifpassword1=trimsle_
2.textthensle_
3.setfocuselsereinput=messagebox密码错误!您不是管理员!不能进行修改要重新输入吗question!yesno!ifreinput=1thensle_
2.setfocussle_
2.text=return0elseifreinput=2thencb_
2.setfocusendifendif“新密码”sle_3单行编辑框getfocus事件代码-//确认必须输入旧密码stringpassword3intreinputpassword3=trimsle_
2.textifpassword3=thenreinput=messagebox错误!必须输入旧密码!是否继续question!yesno!ifreinput=1thensle_
1.text=sle_
1.setfocusreturn0elseifreinput=2thencb_
2.setfocusendifendif“确认密码”sle_4单行编辑框losefocus事件代码-//确认两次新密码的一直性intreinputiftrimsle_
3.texttrimsle_
4.textthenreinput=messagebox密码错误!两次密码不一致是否重新输入question!yesno!1elsecb_
1.setfocusendififreinput=1thensle_
3.text=sle_
4.text=sle_
3.setfocuselseifreinput=2thencb_
2.setfocusendif“确认”cb_1命令按钮clicked事件代码-//确认两次新密码的一直性intreinputiftrimsle_
3.texttrimsle_
4.textthenreinput=messagebox密码错误!两次密码不一致是否重新输入question!yesno!1elsecb_
1.setfocusendififreinput=1thensle_
3.text=sle_
4.text=sle_
3.setfocuselseifreinput=2thencb_
2.setfocusendif“取消”cb_2命令按钮clicked事件代码-closew_change_password
8.供应商基本信息查询w_gys_cx窗口w_gys_cx窗口open事件代码-//----窗口置于屏幕中央Environmentl_envintl_ScrWidthl_ScrHeight//定义坐标变量//关闭窗口刷新setredrawfalse//取得屏幕的高度和亮度GetEnvironmentl_envl_ScrWidth=PixelsToUnitsl_env.ScreenWidthXpixelsToUnits!l_ScrHeight=PixelsToUnitsl_env.ScreenHeightYpixelsToUnits!//移动窗口到屏幕中间Movel_ScrWidth-this.width/2l_ScrHeight-this.height/2//打开窗口刷新setredrawtrue//将窗口置于屏幕中央tab_
1.tabpage_
1.dw_
1.settransobjectsqlcatab_
1.tabpage_
1.dw_
1.retrievetab_
1.tabpage_
1.dw_
1.selectrowtab_
1.tabpage_
1.dw_
1.getrowtruetab_
1.tabpage_
1.dw_
1.sharedatatab_
1.tabpage_
1.dw_2tab_
1.tabpage_
1.ddlb_
1.text=请选择tab_
1.tabpage_
2.dw_
3.settransobjectsqlcatab_
1.tabpage_
2.dw_
3.retrievetab_
1.tabpage_
2.dw_
3.selectrowtab_
1.tabpage_
2.dw_
3.getrowtruetab_
1.tabpage_
2.dw_
3.sharedatatab_
1.tabpage_
2.dw_4tab_
1.tabpage_
3.dw_
5.settransobjectsqlcatab_
1.tabpage_
3.dw_
5.retrievetab_
1.tabpage_
3.dw_
5.selectrowtab_
1.tabpage_
3.dw_
5.getrowtruetab_
1.tabpage_
3.dw_
5.sharedatatab_
1.tabpage_
3.dw_6“查询”tab_
1.tabpage_
1.cb_1命令按钮clicked事件代码-Stringa1a2a3a4a5intna1=vdr_idlike+%+trimtab_
1.tabpage_
1.sle_
1.text+%+a2=vdr_nmlike+%+trimtab_
1.tabpage_
1.sle_
2.text+%+a3=vdr_pry=1a4=vdr_pry=2a5=vdr_pry=3Iftab_
1.tabpage_
1.sle_
1.textandtab_
1.tabpage_
1.sle_
2.text=andtab_
1.tabpage_
1.ddlb_
1.text=请选择thenn=1Elseiftab_
1.tabpage_
1.sle_
1.text=andtab_
1.tabpage_
1.sle_
2.textandtab_
1.tabpage_
1.ddlb_
1.text=请选择thenn=2Elseiftab_
1.tabpage_
1.sle_
1.text=andtab_
1.tabpage_
1.sle_
2.text=andtab_
1.tabpage_
1.ddlb_
1.text=生产厂家thenn=3Elseiftab_
1.tabpage_
1.sle_
1.text=andtab_
1.tabpage_
1.sle_
2.text=andtab_
1.tabpage_
1.ddlb_
1.text=总代理thenn=4Elseiftab_
1.tabpage_
1.sle_
1.text=andtab_
1.tabpage_
1.sle_
2.text=andtab_
1.tabpage_
1.ddlb_
1.text=分销商thenn=5Elseiftab_
1.tabpage_
1.sle_
1.textandtab_
1.tabpage_
1.sle_
2.textandtab_
1.tabpage_
1.ddlb_
1.text=请选择thenn=6Elseiftab_
1.tabpage_
1.sle_
1.textandtab_
1.tabpage_
1.sle_
2.text=andtab_
1.tabpage_
1.ddlb_
1.text=生产厂家thenn=7Elseiftab_
1.tabpage_
1.sle_
1.textandtab_
1.tabpage_
1.sle_
2.text=andtab_
1.tabpage_
1.ddlb_
1.text=总代理thenn=8Elseiftab_
1.tabpage_
1.sle_
1.textandtab_
1.tabpage_
1.sle_
2.text=andtab_
1.tabpage_
1.ddlb_
1.text=分销商thenn=9Elseiftab_
1.tabpage_
1.sle_
1.text=andtab_
1.tabpage_
1.sle_
2.textandtab_
1.tabpage_
1.ddlb_
1.text=生产厂家thenn=10Elseiftab_
1.tabpage_
1.sle_
1.text=andtab_
1.tabpage_
1.sle_
2.textandtab_
1.tabpage_
1.ddlb_
1.text=总代理thenn=11Elseiftab_
1.tabpage_
1.sle_
1.text=andtab_
1.tabpage_
1.sle_
2.textandtab_
1.tabpage_
1.ddlb_
1.text=分销商thenn=12Elseiftab_
1.tabpage_
1.sle_
1.textandtab_
1.tabpage_
1.sle_
2.textandtab_
1.tabpage_
1.ddlb_
1.text=生产厂家thenn=13Elseiftab_
1.tabpage_
1.sle_
1.textandtab_
1.tabpage_
1.sle_
2.textandtab_
1.tabpage_
1.ddlb_
1.text=总代理thenn=14Elseiftab_
1.tabpage_
1.sle_
1.textandtab_
1.tabpage_
1.sle_
2.textandtab_
1.tabpage_
1.ddlb_
1.text=分销商thenn=15Elsemessagebox提示请输入查询条件Endifchoosecasencase1tab_
1.tabpage_
1.dw_
1.setfiltera1case2tab_
1.tabpage_
1.dw_
1.setfiltera2case3tab_
1.tabpage_
1.dw_
1.setfiltera3case4tab_
1.tabpage_
1.dw_
1.setfiltera4case5tab_
1.tabpage_
1.dw_
1.setfiltera5case6tab_
1.tabpage_
1.dw_
1.setfiltera1+and+a2;case7tab_
1.tabpage_
1.dw_
1.setfiltera1+and+a3;case8tab_
1.tabpage_
1.dw_
1.setfiltera1+and+a4;case9tab_
1.tabpage_
1.dw_
1.setfiltera1+and+a5;case10tab_
1.tabpage_
1.dw_
1.setfiltera2+and+a3;case11tab_
1.tabpage_
1.dw_
1.setfiltera2+and+a4;case12tab_
1.tabpage_
1.dw_
1.setfiltera2+and+a5;case13tab_
1.tabpage_
1.dw_
1.setfiltera1+and+a2+and+a3;case14tab_
1.tabpage_
1.dw_
1.setfiltera1+and+a2+and+a4;case15tab_
1.tabpage_
1.dw_
1.setfiltera1+and+a2+and+a5;endchoosetab_
1.tabpage_
1.dw_
1.filterst_
8.text=stringtab_
1.tabpage_
1.dw_
1.GetRowst_
9.text=stringtab_
1.tabpage_
1.dw_
1.RowCount排序组框内“编码”tab_
1.tabpage_
1.rb_1单选按纽clicked事件代码-tab_
1.tabpage_
1.dw_
1.setsortvdr_idtab_
1.tabpage_
1.dw_
1.sort排序组框内“名称”tab_
1.tabpage_
1.rb_2单选按纽clicked事件代码-tab_
1.tabpage_
1.dw_
1.setsortvdr_nmtab_
1.tabpage_
1.dw_
1.sort主窗口tab_
1.tabpage_
1.dw_1控件clicked事件代码-tab_
1.tabpage_
1.dw_
1.selectrow0false//把前面所选的所有行清除高亮显示tab_
1.tabpage_
1.dw_
1.selectrowrowtrue//把所选的当前行设置为高亮显示tab_
1.tabpage_
1.dw_
2.scrolltorowrow//将显示细节的窗口滚动到所选择的当前行该控件rowfocuschanged事件代码-st_
8.text=st_
9.text=st_
8.text=stringtab_
1.tabpage_
1.dw_
1.GetRowst_
9.text=stringtab_
1.tabpage_
1.dw_
1.RowCount
9.品牌基本信息查询w_pp_cx窗口dw_1数据窗口clicked事件代码-dw_
1.selectrow0false//把前面所选的所有行清除高亮显示dw_
1.selectrowrowtrue//把所选的当前行设置为高亮显示Strings1s2Intc_rowc_row=GetRowdw_1//提取当前数据窗口的行号ifc_row1thenReturn//若点击在数据窗口范围之外则返回ifdw_
1.dataobject=d_cflpp_masterthens1=dw_
1.GetItemStringrowcflppda_brd_idelseifdw_
1.dataobject=d_cflpp_gys_masterthens1=dw_
1.GetItemStringrowgysda_vdr_ids2=dw_
1.GetItemStringrowcflppda_brd_idendifdw_
2.SettransobjectSQLCA//建立数据窗口控件dw_2与数据对象SQLCA的连接dw_
2.Retrieves1s2st_
9.text=stringdw_
1.RowCountst_
6.text=stringdw_
1.GetRow“表名”ddlb_1下拉列表框selectionchanged事件代码-stringt1t1=ddlb_
1.textchoosecaset1case部门品牌dw_
1.dataobject=d_cflpp_masterdw_
2.dataobject=d_cflpp_gysdz22rb_
1.text=部门名称rb_
2.text=品牌名称tab_
1.SelectedTab=1tab_
1.tabpage_
1.sle_brd.setfocustab_
1.tabpage_
1.enabled=truetab_
1.tabpage_
2.enabled=falsecase供应商品牌dw_
1.dataobject=d_cflpp_gys_masterdw_
2.dataobject=d_cflpp_gysdz33rb_
1.text=品牌名称rb_
2.text=供应商名称tab_
1.SelectedTab=2tab_
1.tabpage_
2.sle_vdr.setfocustab_
1.tabpage_
1.enabled=falsetab_
1.tabpage_
2.enabled=truecase请选择dw_
1.dataobject=dw_
2.dataobject=rb_
1.text=rb_
2.text=endchoosedw_
1.settransobjectsqlcadw_
1.retrievest_
9.text=stringdw_
1.RowCountst_
6.text=stringdw_
1.GetRow“查询”cb_1命令按纽clicked事件代码-Stringa1a2a3intniftab_
1.SelectedTab=1thenn=1elseiftab_
1.SelectedTab=2thenn=2endifa1=cflppda_brd_nmlike+%+trimtab_
1.tabpage_
1.sle_brd.text+%+a2=bmda_dep_nmlike+%+trimtab_
1.tabpage_
1.sle_dep.text+%+a3=gysda_vdr_nmlike+%+trimtab_
1.tabpage_
2.sle_vdr.text+%+choosecasencase1Iftab_
1.tabpage_
1.sle_brd.textandtab_
1.tabpage_
1.sle_dep.text=thendw_
1.setfiltera1Elseiftab_
1.tabpage_
1.sle_brd.text=andtab_
1.tabpage_
1.sle_dep.textthendw_
1.setfiltera2Elseiftab_
1.tabpage_
1.sle_brd.textandtab_
1.tabpage_
1.sle_dep.textthendw_
1.setfiltera1+and+a2elsemessagebox提示请输入查询条件endifcase2iftab_
1.tabpage_
2.sle_vdr.textthendw_
1.setfiltera3elsemessagebox提示请输入查询条件endifendchoosedw_
1.filterdw_
1.setfocusst_
9.text=stringdw_
1.RowCountst_
6.text=stringdw_
1.GetRow单品基本信息查询w_dp_cx窗口与品牌基本信息查询w_pp_cx窗口口的实现功能一致,这里就不再列举各窗口控件的脚本代码
10.报表类型选择w_select_report窗口“确定”cb_1命令按纽clicked事件代码-choosecaseis_selectcaseaopenw_sort_reportcasebopenw_filter_conditionendchoose定义窗口函数wf_selectwho定义窗口实例变量stringis_select编写窗口函数wf_select代码-//定义函数wf_selectwhochoosecasewhocaserb_1ddlb_
1.enabled=true//is_select是在当前窗口的declareinstancevaribles视窗中定义的字符型窗口实例变量is_select=acaserb_2ddlb_
1.enabled=falseis_select=b//用变量a和b分别控制打开不同的窗口endchoose
11.排序报表w_sort_repost窗口:w_sort_report窗口open事件代码-ifw_select_report.rb_
3.checked=truethendw_
1.dataobject=d_gys_bbdw_
1.settransobjectsqlcadw_
1.retrievew_sort_report.title=供应商档案ifw_select_report.ddlb_
1.text=编码thendw_
1.setsortvdr_idelsedw_
1.setsortvdr_nmendifelseifw_select_report.rb_
4.checked=truethendw_
1.dataobject=d_pp_bbdw_
1.settransobjectsqlcadw_
1.retrievew_sort_report.title=品牌档案ifw_select_report.ddlb_
1.text=编码thendw_
1.setsortbrd_idelsedw_
1.setsortbrd_nmendifelseifw_select_report.rb_
5.checked=truethendw_
1.dataobject=d_dp_bbdw_
1.settransobjectsqlcadw_
1.retrievew_sort_report.title=单品档案ifw_select_report.ddlb_
1.text=编码thendw_
1.setsortgds_idelsedw_
1.setsortgds_nmendifendifdw_
1.sort“首页”cb_1命令按纽clicked事件代码-dw_
1.scrolltorow0“尾页”cb_2命令按纽clicked事件代码-dw_
1.scrolltorow9999999“上页”cb_3命令按纽clicked事件代码-dw_
1.scrollpriorpage“下页”cb_4命令按纽clicked事件代码-dw_
1.scrollnextpage“打印”cb_5命令按纽clicked事件代码-dw_
1.print“返回”cb_6命令按纽clicked事件代码-closeparent
12.检索条件w_filter_condition窗口“确认”cb_1命令按纽clicked事件代码-openw_filter_report“返回”cb_2命令按纽clicked事件代码-closew_filter_condition
13.查询报表w_filter_report窗口w_filter_report窗口open事件代码-ifw_select_report.rb_
3.checked=truethendw_
1.dataobject=d_gys_bbw_filter_report.title=供应商档案dw_
1.settransobjectsqlcadw_
1.retrieveelseifw_select_report.rb_
4.checked=truethendw_
1.dataobject=d_pp_bbw_filter_report.title=品牌档案dw_
1.settransobjectsqlcadw_
1.retrieveelseifw_select_report.rb_
5.checked=truethendw_
1.dataobject=d_dp_bbw_filter_report.title=单品档案dw_
1.settransobjectsqlcadw_
1.retrieveendifStringa1a2a3a4a5a6intna1=vdr_idlike+%+trimw_filter_condition.sle_id.text+%+a2=vdr_nmlike+%+trimw_filter_condition.sle_name.text+%+a3=cflppda_brd_idlike+%+trimw_filter_condition.sle_id.text+%+//加上表名a4=cflppda_brd_nmlike+%+trimw_filter_condition.sle_name.text+%+//加上表名a5=gds_idlike+%+trimw_filter_condition.sle_id.text+%+a6=gds_nmlike+%+trimw_filter_condition.sle_name.text+%+Ifw_filter_condition.sle_id.textandw_filter_condition.sle_name.text=thenn=1Elseifw_filter_condition.sle_id.text=andw_filter_condition.sle_name.textthenn=2Elseifw_filter_condition.sle_id.textandw_filter_condition.sle_name.textthenn=3Elsen=4EndIfchoosecasencase1Ifdw_
1.dataobject=d_gys_bbthendw_
1.setfiltera1Elseifdw_
1.dataobject=d_pp_bbthendw_
1.setfiltera3Elseifdw_
1.dataobject=d_dp_bbthendw_
1.setfiltera5EndIfcase2ifdw_
1.dataobject=d_gys_bbthendw_
1.setfiltera2Elseifdw_
1.dataobject=d_pp_bbthendw_
1.setfiltera4Elseifdw_
1.dataobject=d_dp_bbthendw_
1.setfiltera6Endifcase3ifdw_
1.dataobject=d_gys_bbthendw_
1.setfiltera1+and+a2Elseifdw_
1.dataobject=d_pp_bbthendw_
1.setfiltera3+and+a4Elseifdw_
1.dataobject=d_dp_bbthendw_
1.setfiltera5+and+a6Endif//case4//messagebox提示请输入查询条件Endchoosedw_
1.filter//dw_
1.setfocus动态关联数据窗口对象动态打开标签卡内容动态显示静态文本内容。