《面向连锁超市管理系统的分布式数据库设计与实现(共70页).doc》由会员分享,可在线阅读,更多相关《面向连锁超市管理系统的分布式数据库设计与实现(共70页).doc(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上专心-专注-专业分布式数据库课程设计与实现分布式数据库课程设计与实现面向连锁超市管理系统的分布式数据库设计与实现学院:计算机学院专业:计算机科学与技术专业组长:张王成 组员:耿丙辉 闫高洁 李 杰 石玉龙 日期:2011 年 11 月 27 日精选优质文档-倾情为你奉上专心-专注-专业目录目录精选优质文档-倾情为你奉上专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业1. 连锁超市管理系统概述连锁超市管理系统概述1.1背景介绍背景介绍 随着市场经济的发展和人民生活水平的提高,原来单一、小规模的超市已无法满足人民对购物环
2、境的要求,大规模、物品丰富的超市正在蓬勃发展。超市销售数据规模的日益庞大,商品数目的迅速增长,采用以往的手工管理已直接或间接地降低了工作效率,最终影响超市的日常运转。另外超市的发张壮大,尤其是连锁超市(如家乐福、美廉美)的扩张,使得他们具有地域上分散而管理上又相对集中的特点,往往既要有各门店的局部控制和分散管理,同时也要有整个组织的全局控制和高层次的协同管理。因此把这些门店和中心通过网络连接起来,设计开发一款基于分布式数据库的连锁超市管理系统 SMS(Supermarket management system)势在必行。1.2 可行性分析可行性分析(1)经济可行性使用连锁超市管理系统对超市连锁
3、店进行信息化管理将直接提高公司管理部门的工作效率。通过网络远程提交汇总各门店的信息,节省了许多的时间和金钱。另一方面,用信息化管理统计大量数据,节省了很多的人力和财力,为管理者提供更好的决策支持。精选优质文档-倾情为你奉上专心-专注-专业(2)技术可行性 网络应用基础设施完善,由于信息技术的发展,我国的计算机网络飞速发展,先后建成了中国公众多媒体通信网、China Net、 中国教育与科研计算机网络等组成了中国 Internet 主体,网络应用进入企业与普通家庭,这为发展连锁超市网络办公提供了基础设施。 网络安全技术应用,包括加密算法、CA 数字认证、数字签名等,为网络办公系统的应用提供安全保
4、证,它实现了网络传输数据的安全性、完整性等。 最后,就是网络技术的普及与掌握,如网络互联、网络安全技术、网络数据库技术等,使我们有能力开发实现适合自己的管理系统。因此,公司构建跨区域的管理系统的技术瓶颈问题(网络应用基础设施、网络安全、开发技术)得到了有效解决,公司构建网络管理系统技术上可行。(3)操作可行性由于 SMS 的操作是基于 C/S 的客户端的页面操作,简单明了,用户无需学习,一般都能够很容易的知道如何操作。而管理员也无需具备专业知识,只需要对一些数据进行输入以及平时的日常维护就够了。1.3 系统目标和先进之处系统目标和先进之处 (1)系统目标精选优质文档-倾情为你奉上专心-专注-专
5、业为连锁超市提高效率、降低成本;实现连锁超市管理的优化,简化工作流程,节省人力物力,提高工作效率,极大地满足客户需要;对各环节进行控制分析,实现统一调度。满足连锁超市的基本管理功能,发挥信息系统的灵活性,减轻企业管理人员和操作人员的工作负担,提高工作效率。 本系统是一项功能比较完善的连锁超市管理系统,对连锁店运作过程中的后台数据可以随时进行分析,便于企业管理人员的经营、决策。 全面体现了现代企业管理理论所倡导的工作高效、环境轻松的氛围。(2)系统先进之处 多数处理就地完成。 各地的计算机由数据通信网络相联系。 克服了中心数据库的弱点:降低了数据传输代价。 提高了系统的可靠性,局部系统发生故障,
6、其他部分还可继续工作。 各个数据库的位置是透明的,方便系统的扩充。 为了协调整个系统的事务活动,事务管理的性能花费高。1.4 小组成员和任务分配小组成员和任务分配 任务分配任务分配成员姓名成员姓名1) 任务分配、组织调度张王成精选优质文档-倾情为你奉上专心-专注-专业2) 调查、明确连锁超市的需求和业务流程3) 系统总体设计4) 系统的编码实现5) 设计文档的最终排版、审阅1) 建立实体-关系模型,E-R 图的绘制2) UML 建模中的用例的分析设计、用例图的绘制3) 数据库分配与分片的概要设计,相关图例的绘制设4) 系统联合测试石玉龙1) 调查、明确连锁超市的需求和业务流程2) 基于 SQL
7、server 和 Access 的分布式数据库实现3) 系统的编码实现耿丙辉1) 基于 SQLserver 和 Access 的分布式数据库实现2) 系统的编码实现3) 汇报 PPT 制作,项目最终成果汇报闫高洁1) 核心数据库表的设计2) 系统通信模型的建立,相关图例的绘制3) 数据库分配与分片的概要设计,相关图例的绘制4) 系统联合测试李杰2. 需求分析需求分析 精选优质文档-倾情为你奉上专心-专注-专业2.1 用户需求概述用户需求概述 下面是通过调查研究获得的关于连锁超市主要信息数据的需求分析结果:(1) 连锁超市通常由一个中心(公司总部) 、多个远程连锁店(门店)组成,并且每个连锁店分
8、布在不同地域。 (2)连锁超市的各个部门之间、各个分店之间、分店与总部之间需要交换数据,这种数据交换是通过局域网和广域网进行的。(3)公司总部负责产生并管理该连锁超市的整体汇总数据,即各门店的明细汇总表数据,如销售汇总表等。(4)每一个远程站点(各门店和公司总部)分别有一个数据库系统,各自组成一个独立的子系统,可以分别独立进行本部门业务处理。(5)总部为了便于对各店进行管理,同时也为了比较各店的销售情况,要求门店将所有商品归入相应的商品类别,由总部统一管理并提供各门店使用,而且,商品类别信息数据在各门店都要经常使用。(6)有关商品信息、供应商信息、POS 机信息、进货信息和销售信息等经营基础数
9、据都是各门店单独管理和使用,门店之间互不相关。(7)整个连锁超市的职员信息由公司总部管理和维护,各门店只可以查询本部门的职员信息。精选优质文档-倾情为你奉上专心-专注-专业2.2 业务需求分析业务需求分析通过对超市的营业、管理业务流程的调查,得到下面的业务需求。 可以对商品类别、商品、供应商、POS 机等基础信息进行管理。 可以实现采购开单、销售开单、采购退货、销售退货等基本功能。 软件可根据商品资料中设置的最高库存、最低库存进行库存报警。 商品的批发价、零售价可自动生成,减轻定价的工作量。 可以生成各类统计报表,提供详尽的营业报告,实现对商品进、销、存及利润等财务状况了如指掌。 所有单据、报
10、表均可以在打印前预览,并且可以导出为Excel 文件,然后根据实际需要进行特别的编排处理。 为了系统安全,每次用户登录都创建相应的日志文件,记录用户的所有操作。此外,对系统的性能主要有以下几个方面的需求。系统在设计过程中应充分考虑到可扩充性,要求操作界面美观大方,容易上手。2.3 功能分析功能分析根据对系统的业务调查和用户的需求分析,结合计算机信息管精选优质文档-倾情为你奉上专心-专注-专业理的特点,设计系统实现的功能如下。(1)基础信息管理基础信息管理包括业种商品类别信息、商品信息、供应商信息、POS 机信息和价格信息维护与管理,实现的功能包括: 基本信息的添加、删除和更新操作。 生成各类基
11、础信息报表。 打印和导出报表。(2)进货管理进货管理主要实现对商品的采购入库信息进行管理,具体实现功能如下: 进货开单,实现商品的进货结算、入库操作。 进货退货,退还商家相关的商品。 生成进货、退货的单据、商品报表。 打印和导出报表。(3)销售管理销售管理主要实现对商品的销售出库相关信息进行管理,具体实现的功能如下: 销售开单,实现商品的销售结算、出库操作。 销售退货,允许客户退出相关的商品。 生成销售、销售退货的单据、商品报表。 打印和导出报表。(4)库存管理精选优质文档-倾情为你奉上专心-专注-专业库存管理主要实现对商品的库存相关信息进行管理,具体实现的功能如下: 库存查询,可以查看所有库
12、存商品的相关信息。 库存报警,对库存过多或过少的商品进行报表统计。 库存盘点,可以修改商品的库存数量。(5)帐务管理帐务管理主要实现对营业员的销售商品、业务提成、营业收入等情况进行分类报表统计。(6)数据管理数据管理主要实现对数据库数据进行备份、还原及清理等相关工作。(7)系统管理系统管理主要实现登录用户(职员)管理、系统日志、修改登录密码等相关工作。3. 系统总体设计系统总体设计3.1 绘制用例图设计系统功能绘制用例图设计系统功能用例图表示了角色和用例以及它们之间的关系。它描述了系统、子系统和类的一致的功能集合,表现为系统和一个或多个外部交互者(角色)的消息交互动作序列。也就是角色(用户或外
13、部系统)和系统(要设计的系统)为了实现一个目的交互,这个目的的描述通常是一个谓词短语,例如签合同等。精选优质文档-倾情为你奉上专心-专注-专业系统设计包含超级管理员、管理员和营业员四种用户角色。超级管理员具有所有的操作权限,其用例图如图 3-1 所示。进货管理销售管理库存管理数据管理超级管理员进货开单进货退货生成报表数据备份数据恢复数据清理销售开单销售退货生成报表库存查询库存盘点库存报警系统管理用户管理系统日志修改密码图 3-1 超级管理员角色系统用例图管理员不具备系统设置模块中的用户管理和商品类别信息管理功能,其他功能均具备。而销售人员则只具有销售开单管理功能。3.2 绘制系统流程图绘制系统
14、流程图结合系统的具体设计要求,连锁超市管理系统的主要功能流程图如图 3-2 所示。精选优质文档-倾情为你奉上专心-专注-专业商品进货开单商品销售开单商品进货退单库存管理商品销售退单商品类别设置商品信息设置供应商信息设置POS机信息设置图 3-2 系统主要功能流程图系统首先对登录用户身份进行验证,根据用户的权限激活相关功能。超级管理员具有所有的操作权限,系统的功能结构图如图 3-3所示。图 3-3 系统功能结构图上图只是列出了一些主要功能,系统还能够根据不同需求生成各种统计报表。精选优质文档-倾情为你奉上专心-专注-专业3.3 系统开发环境系统开发环境 本系统是在 Windows XP 中文版操
15、作系统环境下,使用Microsoft Visual Studio 2008 中文版用 C+语言开发成功的。在开发过程中,使用了 OLE 技术和 ActiveX 控件技术。后台数据库系统设计采用的是 Microsoft 的 SQL Server 2005 和Access 数据库系统,通过 ADO 数据库开发技术,直接操作数据库文件。3.4 系统的运行环境系统的运行环境系统可以直接在 Win98、Win2000、WinXP 环境下运行。系统预设的超级管理员用户名为“admin”,密码为“admin”。3.5 系统运行演示系统运行演示程序启动,首先弹出如图 3-4 所示的“系统登录”对话框,只有输入
16、正确的用户 ID、登录密码才能进入系统能够。图 3-4 “系统登录”对话框如果登录用户为超级管理员或管理员,会进入系统的主界面窗精选优质文档-倾情为你奉上专心-专注-专业口,如图 3-5 所示。图 3-5 系统的主界面窗口如果登录用户权限为营业员,由于其只具有售货权限,因此系统会直接弹出“销售开单”对话框,如图 3-6 所示。精选优质文档-倾情为你奉上专心-专注-专业图 3-6 “销售开单”对话框在进行相关操作前,首先需要添加、设置一些基本资料,如商品分类登记,其操作设置对话框,如图 3-7 所示。精选优质文档-倾情为你奉上专心-专注-专业图 3-7 “商品分类登记”对话框另外,系统还提供了丰
17、富的报表功能,如图 3-8 所示的商品分类报表,同时对报表提供了导出到 Excel 文件和打印的功能。图 3-8 商品分类报表对话框3.6 系统类库设计系统类库设计 BITVRLab 超市管理系统主框架的设计是通过 MFC 创建向导创建的基于对话框的窗口程序,在对话框程序中添加了菜单栏,系统的主要类库设计如下。 自定义扩展类:为了提高开发效率、便于代码重用,自定义了一些数据操作类和控件扩展类,如表 3-1 所示。表 3-1 自定义扩展类及功能类类说说 明明精选优质文档-倾情为你奉上专心-专注-专业CADOConn通过 ADO 实现对 ACCESS、SqlServer 等数据库的访问Ctable
18、PartInfo根据数据库表的分配、分片信息,实现对数据库表的增、删、改、查CFileOperate实现对硬盘文件的常用操作CMyChiToLetter实现根据逐字提取汉字拼音的首字母CMyButtonCButton 类的派生类,实现带有位图和文本的按钮CMyMenuCMenu 类的派生类,用于定制自己的菜单CMenuItemContextCMenu 类中用到此类,用于保存菜单项的信息CMyTime实现简单的时间格式的转换CMyExcel完成 VC 对 Excel 文件的操作 对话框窗口类:在系统中,用户所有的数据查询、操作都是通过对话框窗口来实现的,系统开发的对话框类如表 3-2 所示。表
19、3-2 对话框类及说明类类说说 明明CDlgFenJiBasePOS 机基本信息管理对话框类CShopManageDlg主框架对话框类CDlgFenLeiBase商品分类基本信息管理对话框类CDlgDanganBase商品基本信息管理对话框类CDlgGongYingShangBase供应商基本信息管理对话框GDlgJiaGeSheZhi价格自动设置对话框类CDlgJinHuoKanDan商品进货开单管理对话框类CDlgJinHuoTuiDan商品进货退单管理对话框类CDlgXiaoShouKanDan商品销售开单管理对话框类CDlgXiaoShouTuiDan商品销售退单管理对话框类CDlgA
20、ll用于查找信息显示对话框类CDlgReport用于报表显示对话框类CDlgLogo用户登录对话框类CDlgPwd更改密码对话框类CDlgQuit退出系统提示对话框类 打印相关类:系统能够提供了报表的打印和打印预览功能,其相关的设计类如表 3-3 所示。表 3-3 打印相关类及说明类类说说 明明CPrintFrameCFrameWnd 派生类,用于构建打印框架类CPrintView打印视图类精选优质文档-倾情为你奉上专心-专注-专业另外,系统还包含一些主框架相关类、导入 ActiveX 控件(MFC Grid Control)相关类和导入 OLE 对象(Excel)相关类。4. 分布式数据库分
21、析与设计分布式数据库分析与设计 4.1 数据库分析数据库分析考虑到总站点的信息量大采用 SQL Server2005 数据库,而区域站点信息量相对较小采用 Access 数据库。当区域业务拓展,操作终端增加时,Access 数据库也很容易的移植到 SQL Server 数据库系统中。另外区域站点采用 Access 数据库可以实现方便的部署。4.2 数据库概念设计数据库概念设计分析超市管理功能流程,系统的数据实体主要包括基本资料对象实体、库存实体、进货/销售开单、进货/销售退单、进货/销售商品实体、各站点数据库服务器 IP 信息实体、数据库表分配分片信息实体等。 基本资料对象实体包括商品类别、商
22、品明细、供应商、POS机和登录用户实体。精选优质文档-倾情为你奉上专心-专注-专业 商品库存实体记录库存商品的数量和价格信息,其实体的 E-精选优质文档-倾情为你奉上专心-专注-专业R 图如下。 商品进货单实体用于记录进货单的统计信息,其实体的 E-R图如下所示。 进货商品实体用于记录进货单对应的商品信息,其实体的 E-R 图如下所示。 进货退单实体用于记录进货退单信息,其实体的 E-R 图如下所示。精选优质文档-倾情为你奉上专心-专注-专业与进货相对应的销售单实体、销售商品实体和销售退单实体的E-R 图如下所示。 各站点数据库服务器 IP 信息,记录各个区域数据库服务器对应的 IP 地址,其
23、实体的 E-R 图,如下图所示。精选优质文档-倾情为你奉上专心-专注-专业 数据库表分配分片信息,记录数据中所有的表的分布式分配和分片信息,其实体 E-R 图,如图所示。4.3 数据库逻辑结构设计数据库逻辑结构设计商品类别表、商品明细表、供应商表、POS 机表、登录用户表、库存表、进货/销售开单表、进货/销售商品表、进货/销售退货商品表、IP 地址登录信息表、数据库表的分配和分片信息。商品类别表:商品明细表:精选优质文档-倾情为你奉上专心-专注-专业供应商表:POS 机表:用户表:精选优质文档-倾情为你奉上专心-专注-专业库存表:进货单表:进货商品表:精选优质文档-倾情为你奉上专心-专注-专业
24、进货商品退单表:销售单表:销售商品表:销售商品退单表:精选优质文档-倾情为你奉上专心-专注-专业服务器 IP 信息表:分片及分布信息表:4.4 分片与位置分配设计分片与位置分配设计 4.4.1 站点通信模型站点通信模型在我们的连锁超市管理系统中,有一个总店并下分多个分店,总店和分店之间或分店与分店之间都可以进行通信。每个分店是一个相对独立的数据库服务系统,其可以连接任意数量的客户端。通信模型如下图所示:精选优质文档-倾情为你奉上专心-专注-专业4.4.2 数据表的分片与位置分配设计数据表的分片与位置分配设计根据以上得到的关于主要信息数据的需求分析结果,为该连锁超市系统的分布式数据库系统进行主要
25、信息数据的分片和分配设计如下:1、数据的分片设计(1)由于该连锁超市系统的各连锁店之间在经营上是独立的,每个门店只关心自己的经营状况,有关供应商信息、POS 机信息、精选优质文档-倾情为你奉上专心-专注-专业商品信息和进货/销货信息等基础数据都是各门店单独管理和使用,门店之间互不相关。因此,商品明细表、供应商表、POS 机表、库存表、进货/销售开单表、进货/销售商品表、进货/销售退货商品表按照地域(门店所在区域标志)采用水平分片的方法得到水平片段。(2)这里我们对于商品信息进行了垂直分片,分成了商品明细表和库存表,因为商品的某些属性,例如库存量等需要经常更新,因此将这些属性划分出来构成单独的实
26、体可以减少系统开销。(3)由于整个连锁超市的职员信息由总公司管理和维护,各门店只可以查询本店的职员信息。所以职员信息不必分片,可以采用视图的形式提供给各门店查询本门店的职员信息。另外,各个区域数据库服务器的 IP 地址信息也只是由总部管理、维护,所以也不必分片。(4)由于商品分类数据由总部统一管理并提供各门店使用,而且,商品类别信息数据在各门店都要经常使用。因此,商品类别信息数据也不必分片。(5)该分布式数据库系统实现了简单的目录管理,记录数据库中各个表的分片和分配信息,以便数据更新时,维护各个站点上数据的一致性。这个表由总部规划建立,各门店也会经常使用。因此,数据库目录信息表也不必分片。2、
27、数据及其片段的分配设计(1)对于只在各门店单独使用的除商品类别信息和数据库目录精选优质文档-倾情为你奉上专心-专注-专业信息以外的其他基础信息的片段,采用按区域分片然后分配到各个门店的数据库服务器上。总站上有所有门店的所有信息。(2)整个系统的职员信息、IP 地址信息由公司总部管理和维护,所以只分配在总部站点中。(3)商品类别信息、数据库目录信息是由总部统一规定并下发到各门店的,由于各店经常会使用到这类基础信息,因此在各门店都具有相同的副本。所以,商品类别信息、数据库目录信息都不会分片但被复制,且复制的个数为门店的个数。5. 基于基于 SQL 的的 SMS 的详细设计(实现)的详细设计(实现)
28、5.1 公共类设计公共类设计为了提高程序代码的开发效率,便于代码重用,在系统开发中,创建了一些数据操作类和控件扩展类。5.1.1 文件操作类文件操作类 CFileOperate为了便于对硬盘文件的操作,开发了文件操作类 CFileOperate,它通过调用 API 函数实现常用的文件操作。CFileOperate 类的声明代码如下。extern CString strTmpPath;class CFileOperatepublic:/构造函数CFileOperate();/取得当前程序运行的路径CString GetAppPath();/判断是否存在 strFn 文件夹精选优质文档-倾情为你奉
29、上专心-专注-专业BOOL IsFileExist(CString strFn, BOOL bDir);/制作 strFloderName 文件夹返回文件夹名CString MakeDirectory(CString strFloderName);/自动生成文件夹CString MakeDirectory();/得到文件夹名为 strFloderName 的路径CString GetDirectoryPath(CString strFloderName);/删除 strFloderdName 文件夹void delDirectory(CString strFloderdName);/删除主文件
30、夹(data)void delMainDirectory();/制作主文件夹void MakeMainDirectory();/判断 strIntDigit 是否为整数,是否小于 intBigBOOL CheckIntDigit(CString strIntDigit,int intBig);/判断 strFileName 是否可以做文件夹或文件的名字BOOL CheckFileName(CString strFileName);/判断 strText 是否为空BOOL CheckEmpty(CString strText);/删除 strFloderName 文件夹下名为 strFileNa
31、me 的文件void delFile(CString strFloderName,CString strFileName);/得到 strFloderName 文件夹下名为 strFileName 的文件路径CString GetFileName(CString strFolderName,CString strFileName);/制作 strFloderName 文件夹下名为 strFileName 的文件CString MakeFile(CString strFloderName,BOOL blnMake);/显示文件夹对话框BOOL GetFolder(CString* strSele
32、ctedFolder,const char* lpszTitle,const HWND hwndOwner,const char* strRootFolder,const char* strStartFolder);系统程序中主要用到了 CFileOperate 类中的 GetAppPath 函数。GetAppPath 函数用于获取当前运行程序所在文件夹的路径,其实现代码如下。CString CFileOperate:GetAppPath()/取得当前运行程序所在文件夹路径char lpFileNameMAX_PATH;/路径数组/获取当前运行程序的全路径GetModuleFileName(A
33、fxGetInstanceHandle(),lpFileName,MAX_PATH);CString strFileName = lpFileName;/从字符串的最右边向左搜索串int nIndex = strFileName.ReverseFind ();CString strPath;if (nIndex 0)精选优质文档-倾情为你奉上专心-专注-专业strPath = strFileName.Left (nIndex);/取串左边字符elsestrPath = ;return strPath;/返回前运行程序的文件夹路径5.1.2 时间格式转换类时间格式转换类 CMyTime系统开发中
34、,需要频繁的对日期、时间数据进行操作,因此这里设计了类 CMyTime,实现简单的时间日期转换,CMyTime 类的声明如下。class CMyTimepublic:CTime ValueTime;/CTime 类型的值/blnChinese:TRUE-年月日时分秒 FALSE-:CString GetAllString(BOOL blnChinese);/返回字符串形式的日期时间/blnChinese:TRUE-年月日 FALSE-CString GetDateString(BOOL blnChinese);/返回字符串形式的日期/blnChinese:TRUE-时分秒 FALSE-:CSt
35、ring GetTimeString(BOOL blnChinese);/返回字符串形式的时间CString GetSimpleString();/返回简单字符串形式的日期时间CString GetWeek();/返回星期星期日/设置字符串形式的值/blnSimple:TRUE-(%Y%m%d%H%M%S) FALSE-(年月日时分秒或-:)void SetAllString(CString Value,BOOL blnSimple);void SetNow();/设置成现在时间CMyTime();/构造函数;SetNow 函数获取当前日期,时间,将其值赋予 ValueTime。void CM
36、yTime:SetNow()ValueTime=CTime:GetCurrentTime();5.1.3 数据操作类数据操作类 CADOConn系统开发了数据操作类 CADOConn,它是本系统的核心,实现精选优质文档-倾情为你奉上专心-专注-专业了对数据库数据的基本操作功能,CADOConn 类的声明代码如下。#import c:program filescommon filessystemadomsado15.dll no_namespace rename (EOF, adoEOF)class CADOConn / 定义变量public:_ConnectionPtr m_pConnecti
37、on;/指向 Connection 对象指针:/添加一个指向 Recordset 对象的指针:_RecordsetPtr m_pRecordset;_bstr_t m_strData;int m_DataType;CADOConn(int DataType);/构造函数CADOConn();virtual CADOConn();void OnInitCADOConn();/初始化连接数据库_RecordsetPtr& GetRecordSet(CString strSQL);/执行查询BOOL ExecuteSQL(CString strSQL);/执行 SQL 语句,Insert Updat
38、e deletevoid ExitConnect();/退出连接BOOL MoveFirst();/字段集移向开头BOOL MoveNext();/字段集向下移BOOL Open(CString strSQL);/打开记录集BOOL OpenLogo(CString strSQL);/打开记录集CString GetValueString(int index,int strSum);/返回记录集中某字段的字符串byte GetValueByte(int index);/返回记录集中某字段的字节int GetValueInt(int index);/返回记录集中某字段的短整数double Get
39、ValueDouble(int index);/返回记录集中某字段的双精度数float GetValueFloat(int index);/返回记录集中某字段的单精度数long GetValueLong(int index);/返回记录集中某字段的长整型数CTime GetValueDate(int index);/返回记录集中某字段的日期时间/获取记录集某字段的 BYTE 值,并换为 CString 返回CString GetValueByteStr(int index,int strSum);/获取记录集某字段的 INT 值,并换为 CString 返回CString GetValueIn
40、tStr(int index,int strSum);/获取记录集某字段的 Double 值,并换为 CString 返回CString GetValueDoubleStr(int index,int strLSum,int strRSum);/获取记录集某字段的 Float 值,并换为 CString 返回CString GetValueFloatStr(int index,int strLSum,int strRSum);/获取记录集某字段的 Long 值,并换为 CString 返回CString GetValueLongStr(int index,int strSum);/获取记录集某
41、字段的 CTime 值,并换为 CString 返回CString GetValueDateStr(int index,CString strType);/添加单项数据精选优质文档-倾情为你奉上专心-专注-专业BOOL AddItem(CString strTable,int strSum,LPCTSTR pszText, . );/得到字段中数据的类型int GetValueType(int index);BOOL adoEOF();/记录集的结束判断BOOL FillList(CListCtrl *listMain,int ColOpenEnd);/填充列表(ColOpenEnd 代表展开
42、多少列)BOOL InitList(CListCtrl *listMain,int colSum);/初始化列表CString GetAppPath();/得到应用程序所在的文件夹BOOL FillList(CListCtrl *listMain);/填充列表CString GetFieldsName(int index);/返回字段名字int GetFeildsCount();/返回字段数量/返回数据集数long GetRecordCount();void WriteLog(CString strSql);/写日志文件void WriteLog1(CString userName);/写日志
43、文件,谁谁登录;1、数据库操作函数对常用的数据库操作定义了相关函数。(1)连接数据库在类的构造函数 CADOConn 中,声明数据库的名称。CADOConn:CADOConn()m_DataType=1;/数据库类型 Acessm_strData= _bstr_t(ShopData.mdb);/数据库名称在 OnInitCADOConn 函数中,实现连接数据库。void CADOConn:OnInitCADOConn()/ 初始化 OLE/COM 库环境:CoInitialize(NULL); try/初始化指针m_pConnection=NULL;/初始化指针m_pRecordset=NUL
44、L;/ 创建 Connection 对象m_pConnection.CreateInstance(ADODB.Connection);/ 设置连接字符串,必须是 BSTR 型或者_bstr_t 类型精选优质文档-倾情为你奉上专心-专注-专业_bstr_t strConnect;switch(m_DataType)case 1:/ACCESSstrConnect=_bstr_t(Provider=Microsoft.Jet.OLEDB.4.0;);strConnect=strConnect+_bstr_t(Data Source=);strConnect=strConnect+_bstr_t(I
45、PAddress)+_bstr_t(data);strConnect=strConnect+m_strData;break;case 2:/EXCELstrConnect=_bstr_t(Provider=Microsoft.Jet.OLEDB.4.0;);strConnect=strConnect+_bstr_t(Data Source=);strConnect=strConnect+_bstr_t(GetAppPath()+_bstr_t();strConnect=strConnect+m_strData;strConnect=strConnect+;Extended Properties
46、=Excel 8.0;break;case 3:/SQLSERVERstrConnect=Provider=SQLOLEDB; Server=+MainIP+;Database=ShopData; uid=admin; pwd=;break;m_pConnection-Open(strConnect,adModeUnknown);/ 捕捉异常catch(_com_error e)/ 显示错误信息AfxMessageBox(e.Description();ASSERT(m_pConnection != NULL);(2)对数据库进行查询GetRecordSet 函数实现执行 Select 查询语
47、句,返回查询结果集_RecordsetPtr& CADOConn:GetRecordSet(CString strSQL)try/ 连接数据库,如果 Connection 对象为空,则重新连接数据库if(m_pConnection=NULL)OnInitCADOConn();strSQL.TrimLeft();strSQL.TrimRight();精选优质文档-倾情为你奉上专心-专注-专业/ 创建记录集对象m_pRecordset.CreateInstance(_uuidof(Recordset);/ 取得表中的记录m_pRecordset-Open(_bstr_t(strSQL),m_pCo
48、nnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);/ 捕捉异常catch(_com_error e)/ 显示错误信息AfxMessageBox(e.Description();ASSERT(m_pRecordset!= NULL);/ 返回记录集return m_pRecordset;CADOConn 类的 Open 函数的实现与 GetRecordSet 函数基本类似,只是它不返回记录集,而是打开数据库表。(3)执行数据库操作语句ExecuteSQL 函数实现执行 SQL 数据操作语句,如 INSERT/
49、UPDATE/DELETE 语句等。BOOL CADOConn:ExecuteSQL(CString strSQL)try/ 是否已经连接数据库if(m_pConnection = NULL) OnInitCADOConn();strSQL.TrimLeft();strSQL.TrimRight();m_pConnection-Execute(_bstr_t(strSQL),NULL,adCmdText);WriteLog(strSQL);return TRUE;catch(_com_error e)AfxMessageBox(e.Description();return FALSE;2、记录
50、集操作函数精选优质文档-倾情为你奉上专心-专注-专业为了便于对记录集进行操作,在 CADOConn 类中定义了常用的记录集操作函数。GetValueInt 实现了从记录集中获取不同类型的字段值函数,以获取整形字段值。int CADOConn:GetValueInt(int index)_variant_t vValue;/var 型返回值_variant_t vIndex;/索引int iValue;/数值返回值vIndex.vt=VT_I2;vIndex.iVal=index;vValue=m_pRecordset-Fields-GetItem(vIndex)-Value;/获取索引字段的值