仓库管理系统的设计与实现计算机管理信息系统计算机管理信息系统.pdf
精心整理 数据库 课程设计报告 题目:仓库管理系统 组长:王 组员:徐 葛 张 指导教师:曹永春 计算机科学与信息工程学院 仓库管理系统 一、设计目标 企业的仓库物资管理往往复杂、繁琐。本系统主要针对企业生产所需要的各种设备而设计,实施验收入库并填写入库单和入库登记;企业各个部门根据所需要提出物质申请,计划员根据整个企业的需求开出物资设备出库单,仓库管理员根据出库单核对发放设备;设备使用完毕需要及时归还入库,填写还入库单。系统还根据需要按照月、季、年进行统计分析,产生相应报表。根据系统功能的要求,仓库管理系统可以分为日志管理、入库、出库、还库、查询、报表等主要模块。企业的物资供应管理往往是很复杂、繁琐的。由于掌握的物资种类众多,订货、管理、发放的渠道各有差异,各个企业之间的管理机制不尽相同,各类统计计划报表繁多,因此物资管理必须实现计算机化,而且必须根据企业的具体情况制定相应的方案以便提高工作效率。根据当前的企业管理体制,一般物资供应管理系统,总是根据所掌握的物资类别,相应分成几个科室来进行物资的计划、订货、核销托收、验收入库。根据企业各个部门的来发送物资设备,并随时按期进行库存盘点、做台帐、根据企业自身领导和自身管理的需要按月、季、年进行统计分析,产生相应的报表。为了加强相应物资、设备的管理,要定期掌握其储备、消耗情况,根据计划定额和实际消耗定额的比较,进行定额管理。仓库管理的物资在本章中主要是企业生产所需的各种设备。进货时检查合同确认为有效托收之后,进行验收入库、填写入库单和入库登记。企业各个部门根据所需要的物资设备总额和部门生产精心整理 活动所需要提出物资需求申请,计划员根据企业的需求开出物资设备出库单,仓库管理员根据出库单核对发放设备。设备使用完毕需要及时归还入库,填写还入库单。系统还根据需要按照月、季、年进行统计分析,产生相应报表。为了跟好的理解该系统和读懂该系统的源代码,读者应对以下的知识点有所了解:Access 数据库操作的基础知识。ODBC 数据源基础知识。基本的 SQL语句,如添加、查询、修改和删除记录语句。VisualC+界面设计和关于数据库的基础知识。二、系统设计 仓库管理的特点是信息处理量比较大,所管理的物资设备种类繁多,而且入库单、出库单、需求单等单据的发生量特别大,关联信息多,查询和统计的方式各不相同,在管理上实现起来有一定的困难。在管理的过程中经常出现信息的重复传递;单据、报表的种类繁多,各个部门管理规格不统一等问题。在本系统的设计过程中,为了克服这些困难,满足计算机管理的需要,采取了下面的一些原则:统一各种原始单据的格式,统一账目和报表的格式。删除不必要的管理冗余,实现管理规范化、科学化。程序代码标准化,软件统一化,确保软件的可维护性和实用性。界面尽量简单化,做到实用、方便,尽量满足企业中不同层次员工的需要。建立操作日志,系统自动记录所进行的各种操作。1、系统功能分析 本例中的仓库管理系统需要完成的功能主要有以下几点:仓库管理各种信息的输入,包括入库、出库、还库、需求信息的输入等。仓库管理各种信息的查询、修改和维护。设备采购报表的生成。在库存管理中加入最高储备和最低储备字段,对仓库中的物资设备实现监控和报警。企业各部门的物资需求的管理。操作日志的管理。仓库管理系统的使用帮助。2、系统功能模块设计 在系统功能分析的基础上,结合 VisualC+程序编制的特点,得到如图 1 所示的系统功能模块图。序如何解例某溴苯与反应只得到一种三溴苯产物该溴苯应为解因是邻对位定位基所以和都有两种三溴苯产物而有种三溴苯产物亲核取代反应在特殊结构或特殊条件下产生加成消除历程芳环上有吸电子基使之活化以最强如胺等生成碳是什么亲电取反应双分子消除加成反应双分子加成消除反应单分子亲核取反应答苯炔历程消除加成历程发生于试剂碱性很强时特征为亲核试剂不一定进入离去基团所在位置上可以在它的邻位例氯苯与氨基钠在液氨中作用生成苯胺时式是其中表示亲核试剂可以是负离子或带未共享电子对的中性分子表示作用物为中性分子或正离子表示离去基团反应进行有两种类型一种是单分子亲核取代反应速率另一种为双分子亲核取代反应速率为一步反应亲核试剂进攻与离去精心整理 图 1 系统功能模块图 系统主要界面及流程如下所示。程序开始运行之后先出现如图 2 的登陆界面。成功输入用户名和密码后将进入主对话框。图 2 登陆界面 单击“设备代码”按钮进入设备代码表(device_code)的管理。单击“库存信息”按钮进入现有库存表(device)的管理。单击“设备入库”按钮开始设备入库操作,若成功,则在设备入库表(device_in)中增加一条记录,同时修改现有的库存表(device)中的相关数据。单击“设备出库”按钮开始设备出库操作,如图 3 所示。若成功,则在设备出库表(device)中的相关数据。图 3 设备出库登记窗口 单击下方的“出库信息”按钮进入设备出库表(device_out)的管理。如图 4 所示。图 4 出库信息管理界面 单击“设备还库”按钮开始设备还库操作。若成功,则在设备还库表(device_return)中增加一条记录,同时修改现有库存表(device)中的相关数据。单击下方的“还库信息”按钮进入设备还库表(device_return)的管理。单击“设备需求”进入设备需求登记的界面,如图 5 所示。用户在这里填写设备需求。若成功,则在设备需求表(device_need)中增加一条设备需求记录。图 5 设备需求登记窗口 单击下方“需求信息”按钮进入设备需求表(device_need)的管理。如图 6 所示。单击“操作日志”按钮查看目前的所有操作日志记录,在里面还可以删除所有日志记录。单击“帮助”按钮进入联机帮助。单击“关于”按钮查看程序信息 图 6 需求信息管理窗口 仓库管理系统 系统模块 输入模块 维护模块 查看模块 报表模块 帮助模块 日志管理 需求模块 还库模块 出库模块 入库模块 序如何解例某溴苯与反应只得到一种三溴苯产物该溴苯应为解因是邻对位定位基所以和都有两种三溴苯产物而有种三溴苯产物亲核取代反应在特殊结构或特殊条件下产生加成消除历程芳环上有吸电子基使之活化以最强如胺等生成碳是什么亲电取反应双分子消除加成反应双分子加成消除反应单分子亲核取反应答苯炔历程消除加成历程发生于试剂碱性很强时特征为亲核试剂不一定进入离去基团所在位置上可以在它的邻位例氯苯与氨基钠在液氨中作用生成苯胺时式是其中表示亲核试剂可以是负离子或带未共享电子对的中性分子表示作用物为中性分子或正离子表示离去基团反应进行有两种类型一种是单分子亲核取代反应速率另一种为双分子亲核取代反应速率为一步反应亲核试剂进攻与离去精心整理 三、数据库设计 1、数据库需求分析 在仔细调查企仓库物资设备管理过程的基础上,得到本系统所处理的数据流程,如图 7 所示。图 7 数据流程图 针对本实例,通过对企业仓库管理的内容和数据流程的分析,设计的数据项和数据结构如下:设备代码信息:其数据项有设备号、设备名称 现有库存信息:其数据项有现有设备、现有数目、总数目、最大库存和最小库存等 设备使用信息:其数据项有使用的设备、使用部门、数目、使用时间和出库时状态等 设备采购信息:其数据项有采购的设备、采购员、供应商、采购数目和采购时间等 设备归还信息:其数据项归还设备、归还部门、归还数目、归还时间和经手人等 设备需求信息:其数据项有需求的部门、需求设备、需求数目和需求时间等 2、数据概念结构设计 这一设计阶段是在需求分析的基础上,设计出能满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。本实例根据上面得设计规划出实体有库存实体,入库实体、出库实体、采购实体、还库实体和需求实体。各实体的 E-R图及其关系描述如下:图 8 库存实体E-R图 现有库存 现有库存 现有库存 现有库存 设备号 设备入库 设备采购 设备还库 设备出库 仓库现有库存 各部门需求 企业生产计划 汇总 入库 序如何解例某溴苯与反应只得到一种三溴苯产物该溴苯应为解因是邻对位定位基所以和都有两种三溴苯产物而有种三溴苯产物亲核取代反应在特殊结构或特殊条件下产生加成消除历程芳环上有吸电子基使之活化以最强如胺等生成碳是什么亲电取反应双分子消除加成反应双分子加成消除反应单分子亲核取反应答苯炔历程消除加成历程发生于试剂碱性很强时特征为亲核试剂不一定进入离去基团所在位置上可以在它的邻位例氯苯与氨基钠在液氨中作用生成苯胺时式是其中表示亲核试剂可以是负离子或带未共享电子对的中性分子表示作用物为中性分子或正离子表示离去基团反应进行有两种类型一种是单分子亲核取代反应速率另一种为双分子亲核取代反应速率为一步反应亲核试剂进攻与离去精心整理 图 9 入库实体 E-R图 图 10 出库实体 E-R图 图 11 部门需求实体 E-R图 图 12 还库实体 E-R图 图 13 计划采购实体 E-R图 图 14 实体和实体之间的关系 E-R图 3、数据库逻辑结构设计 在上面的实体以及实体之间的关系的基础上,形成数据库中的表格和各个表格之间的关系。仓库管理系统数据库中的各个表格的设计结果如下面的几个表格所示。每个表格表示在数据库中的一个表。列名 数据类型 可否为空 说明 Code VARCHAR2(6)NOTNULL 设备号(主键)Name VARVHAR2(20)NULL 设备名称 设备代码表 device_code 列名 数据类型 可否为空 说明 入库 现有库存 出库 还库 部门需求 设备采购 出库 使用部门 数量、时间 经手人 设备号 部门需求 需求部门 需求数量 需求时间 设备号 设备还库 还库时间人 还库数量 经手人 设备号 计划采购 库存信息 供应信息 时间 设备号 序如何解例某溴苯与反应只得到一种三溴苯产物该溴苯应为解因是邻对位定位基所以和都有两种三溴苯产物而有种三溴苯产物亲核取代反应在特殊结构或特殊条件下产生加成消除历程芳环上有吸电子基使之活化以最强如胺等生成碳是什么亲电取反应双分子消除加成反应双分子加成消除反应单分子亲核取反应答苯炔历程消除加成历程发生于试剂碱性很强时特征为亲核试剂不一定进入离去基团所在位置上可以在它的邻位例氯苯与氨基钠在液氨中作用生成苯胺时式是其中表示亲核试剂可以是负离子或带未共享电子对的中性分子表示作用物为中性分子或正离子表示离去基团反应进行有两种类型一种是单分子亲核取代反应速率另一种为双分子亲核取代反应速率为一步反应亲核试剂进攻与离去精心整理 Code VARCHAR2(6)NOTNULL 设备号 In_date DATE NOTNULL 入库时间(主键)Provider VARCHAR2(20)NULL 供应商 Teleno VARCHAR2(20)NULL 供应商电话 In_number NUMBER(6)NULL 入库数量 Price NUMBER(6)NULL 价格 Buyer VARCHAR2(10)NULL 采购 设备库表 device_in 列名 数据类型 可否为空 说明 Code VARCHAR2(6)NOTNULL 设备号 Department VARCHAR2(20)NULL 使用部门 Out_date DATE NULL 出库时间(主键)Out_state NUMBER(1)NULL 出库状况 Out_person VARCHAR2(10)NULL 经手人 Out_number NUMBER2(10)NOTNULL 出库数量 Taker VARCHAR2(10)NULL 领取 Usage VARCHAR2(20)NULL 用途 设备出库表 device_out 列名 数据类型 可否为空 说明 code VARCHAR2(6)NOTNULL 设备号(主键)now_number NUMBER(6)NULL 现有库存 high_number NUMBER(6)NULL 最大库存 low_number NUMBER(6)NULL 最小库存 total_number NUMBER(6)NULL 总数 现有数据库表 device 列名 数据类型 可否为空 说明 code VARCHAR2(6)NOTNULL 设备号 department VARCHAR2(20)NOTNULL 部门名称 need_number NUMBER(6)NULL 需要数量 begin_date DATE NULL 需求开始时间 end_date DATE MULL 需求结束时间 设备需求表 device_need 列名 数据类型 可否为空 说明 code VARCHAR2(6)NOTNULL 设备号 return_date DATE NULL 还库时间(主键)keeper VARCHAR2(10)NULL 仓库管理员 return_number NUMBER(6)NULL 归还数量 return_person VARCHAR2(10)NULL 归还人 设备还库表 device_return 列名 数据类型 可否为空 说明 do_user VARCHAR2(10)NOTNULL 操作员 序如何解例某溴苯与反应只得到一种三溴苯产物该溴苯应为解因是邻对位定位基所以和都有两种三溴苯产物而有种三溴苯产物亲核取代反应在特殊结构或特殊条件下产生加成消除历程芳环上有吸电子基使之活化以最强如胺等生成碳是什么亲电取反应双分子消除加成反应双分子加成消除反应单分子亲核取反应答苯炔历程消除加成历程发生于试剂碱性很强时特征为亲核试剂不一定进入离去基团所在位置上可以在它的邻位例氯苯与氨基钠在液氨中作用生成苯胺时式是其中表示亲核试剂可以是负离子或带未共享电子对的中性分子表示作用物为中性分子或正离子表示离去基团反应进行有两种类型一种是单分子亲核取代反应速率另一种为双分子亲核取代反应速率为一步反应亲核试剂进攻与离去精心整理 do_what VARCHAR2(40)NOTNULL 操作内容 do_date DATE NOTNULL 操作时间 操作日志表 howdo 列名 数据类型 可否为空 说明 code VARCHAR2(6)NOTNULL 设备号 now_number NUMBER(6)NULL 现有库存 total_number NUMBER(6)NULL 总库存 max_number NUMBER(6)NULL 购买数量 provider VARCHAR(2)NULL 供应商 price NUMBER(6)NULL 价格 buy_date DATE NULL 计划采购时间(主键)设备采购计划表 device_wantbuy 4、数据库结构的实现 创建设备代码 device_code CREATETABLE“DMS”.device_code(codeVARCHAR2(6)NULL,nameVARCHAR2(20)NULL,CONSTRANTcode_code_pkPRIMARYKEY(code)TABLESPACE”USER_DATA”;创建设备入库表 device_in CREATETABLE“DMS”.device_in(codeVARCHAR2(6)NOTNULL,in_dateDATENOTNULL,providerVARCHAR2(20)NULL,telenoVARCHAR2(10)NULL,in_numberNUMBER(6)NULL,priceNUMBER(6)NULL,buyerVARCHAR2(10)NULL,CONSTRAINTin_date_pkPRIMARYKEY(in_date)TABLESPACE“USER_DATA”;创建设备出库表 device_out CREATETABLE“DMS”.device_out(codeVARCHAR2(6)NOTNULL,departmentVARCHAR2(20)NULL,out_dateDATENULL,out_stateNUMBER(1)NULL,out_pensonVARCHAR2(20)NULL,序如何解例某溴苯与反应只得到一种三溴苯产物该溴苯应为解因是邻对位定位基所以和都有两种三溴苯产物而有种三溴苯产物亲核取代反应在特殊结构或特殊条件下产生加成消除历程芳环上有吸电子基使之活化以最强如胺等生成碳是什么亲电取反应双分子消除加成反应双分子加成消除反应单分子亲核取反应答苯炔历程消除加成历程发生于试剂碱性很强时特征为亲核试剂不一定进入离去基团所在位置上可以在它的邻位例氯苯与氨基钠在液氨中作用生成苯胺时式是其中表示亲核试剂可以是负离子或带未共享电子对的中性分子表示作用物为中性分子或正离子表示离去基团反应进行有两种类型一种是单分子亲核取代反应速率另一种为双分子亲核取代反应速率为一步反应亲核试剂进攻与离去精心整理 out_numberNUMBER(6)NOTNULL,takerVARCHAR2(10)NULL,usageVARCHAR2(20)NULL,CONSTRAINTout_date_pkPRIMARYKEY(out_date)TABLESPACE”USER_DATA”;创建现有库存表 device CREATETABLE”DMS”.device(codeVARCHAR2(6)NULL,now_numberNUMBER(6)NULL,high_numberNUMBER(6)NULL,low_numberNUMBER(6)NULL,total_numberNUMBER(6)NULL,CONSTRAINTdevice_code_pkPRIMARYKEY(code)TABLESPACE”USER_DATA”;创建部门需求表 device_need CREATETABLE“DMS”,device_need(codeVARCHAR2(10)NOTNULL,departmentVARCHAR2(10)NOTNULL,need_numberNUMBER(6)NULL,begin_dateDATENULL,end_dateDATENULL,)TABLESPACE”USER_DATA”;创建设备还库表 device_return CREATETABLE“DMS”,device_return(codeVARHAR2(6)NOTNULL,departmentVARCHAR2(20)NULL,return_dateDATENULL,keeperVARCHAR2(10)NULL,return_numberNUMBER(6)NULL,return_personVARCHAR2(10)NULL,CONSTRAINTreturn_date_pkPRIMARYKEY(return_date)TABLESPACE”USER_DATA”;创建设备采购计划表 device_wantbuy CREATETABLE“DMS”,device_wantbuy(codeVARCHAR2(10)NOTNULL,序如何解例某溴苯与反应只得到一种三溴苯产物该溴苯应为解因是邻对位定位基所以和都有两种三溴苯产物而有种三溴苯产物亲核取代反应在特殊结构或特殊条件下产生加成消除历程芳环上有吸电子基使之活化以最强如胺等生成碳是什么亲电取反应双分子消除加成反应双分子加成消除反应单分子亲核取反应答苯炔历程消除加成历程发生于试剂碱性很强时特征为亲核试剂不一定进入离去基团所在位置上可以在它的邻位例氯苯与氨基钠在液氨中作用生成苯胺时式是其中表示亲核试剂可以是负离子或带未共享电子对的中性分子表示作用物为中性分子或正离子表示离去基团反应进行有两种类型一种是单分子亲核取代反应速率另一种为双分子亲核取代反应速率为一步反应亲核试剂进攻与离去精心整理 now_numberNUMBER(6)NULL,total_numberNUMBER(6)NULL,max_numberNUMBER(6)NULL,buy_numberNUMBER(6)NULL,providerVARCHAR2(20)NULL,priceNUMBER(6)NULL,buy_dateDATENULL,CONSTRAINTwantbuy_date_pkPRIMARYKEY(buy_date)TABLESPACE”USER_DATA”;创建操作日志表 howdo CREATETABLE“DMS”,howdo(do_userVARCHAR2(10)NOTNULL,do_whatVARCHAR2(40)NOTNULL,do_dateDATENOTNULL,)TABLESPACE“USER_DATA”;四、系统实现 1、创建应用程序 此仓库系统应用程序的创建步骤如下:、选择菜单“File|New”中的“新建项目”选项卡中“MFCAppWizard(exe)”,设置合适的目录和项目名,比如“E:Projects”目录下的“DMS”项目。、创建一个对话框应用程序(“DialogBased”),单击“Next”按钮。、由于在这个项目中将要使用 ADO,所以在 MFCAppWizard的第 2 步,需要选中“Automation”选项,使应用程序能够支持自动化对象,如图 15 所示。图 15 使应用程序支持自动化(Automation)、单击“Finish”按钮,结束项目的创建。至此一个基于对话框的应用程序框架就搭建好了。主对话框名为 CDMSDlg。、项目创建完毕之后,在头文件 stdafx.h 中加入下面 4 行:#importc:programfilescommonfilessystemadomsado15.dllno_namespacerename(EOF,adoEOF)#includeicrsint.h inlinevoidTESTHR(HRESULTx)ifFAILED(x)_com_issue_error(x);#defineDATEFMT CString(%s)第 1 行中的路径可能根据 VisualStudio安装路径的不同而不同。其中的 rename 指令,把 ADO中的 EOF重命名为 adoEOF,这是为了避免和其他库的常量名冲突。注意第 3 行,这里定义了一个 inline函数 TESTHER,它的作用是测试 COM函数的返回值,在这个返回值包含一个错误的时候,抛出一个_com_error型的异常。ADO作为一个 COM 组件接口,它的许多函数都会返回一个 HRESULT 型的值作为结果。如果在每一步都用 SUCCEEDED 或 FAILED宏测试返回值的话,将会不胜其烦,还有可能制造出一连串嵌套的 if 语句这样不美观的代码。这个函数简化了这种验证操作,利用 C+的异常处理机制,使代码显得紧凑而高效,为后面的工作带来很大方便。第 4 行定义了一个宏。这是不同的后台数据库对 SQL语句中日期的用法要求不同引起的。比如序如何解例某溴苯与反应只得到一种三溴苯产物该溴苯应为解因是邻对位定位基所以和都有两种三溴苯产物而有种三溴苯产物亲核取代反应在特殊结构或特殊条件下产生加成消除历程芳环上有吸电子基使之活化以最强如胺等生成碳是什么亲电取反应双分子消除加成反应双分子加成消除反应单分子亲核取反应答苯炔历程消除加成历程发生于试剂碱性很强时特征为亲核试剂不一定进入离去基团所在位置上可以在它的邻位例氯苯与氨基钠在液氨中作用生成苯胺时式是其中表示亲核试剂可以是负离子或带未共享电子对的中性分子表示作用物为中性分子或正离子表示离去基团反应进行有两种类型一种是单分子亲核取代反应速率另一种为双分子亲核取代反应速率为一步反应亲核试剂进攻与离去精心整理 Access 数据库要求 SQL语句中的日期用两个#字符括起,而其他的数据库可能需要使用单引号或者双引号。所以在这里定义了这个 DATEFMT 宏,为了方便程序在不同的后台数据库键切换。这是一个在开发的时候需要注意的细节,后面还会具体提到。2、COM 知识准备 下面介绍一些关于 COM 知识。这部分内容是针对那些没有学习过的COM 技术的读者,目的是为他们理解 ADO 提供一些背景知识。COM 技术在微软公司的应用中可以说是无处不在,Windows系统相当多的服务都以这种方式提供,例如着名的 DirectX,还有在这一章中广泛应用的 ADO。ADO的底层是 OLEDB,他本身则是对OLEDB 的一个 COM 包装。所以具备一些 COM 的知识,对使用 ADO 是很有帮助的,但并不是说必须要精通 COM 才能使用 ADO。事实上,在一般的应用中,只需要理解下面这段代码即可。/DlgViewReport.cpp _RecordsetPtrpRst=NULL;IADORecordBinding*picRs=NULL;/InterfacePointerdeclared.(VC+Extensions)CDevBuyRsrs;try _bstr_tstrSQL(SELECT*FROMDEVICE_WANTBUY);TESTHR(pRst.CreateInstance(_uuidof(Recordset);pRst=m_DBCnt-Execute(strSQL,NULL,adCmdText);TESTHR(pRst-QueryInterface(_uuidof(IADORecordBinding),(LPVOID*)&picRs);TESTHR(picRs-BindToRecordset(&rs);inti=0;while(!pRst-adoEOF)m_list.InsertItem(0,rs.m_sz_code);m_list.SetItemText(i,1,rs.m_sz_now);m_list.SetItemText(i,2,rs.m_sz_total);m_list.SetItemText(i,3,rs.m_sz_max);m_list.SetItemText(i,4,rs.m_sz_buy);m_list.SetItemText(i,5,rs.m_sz_provider);m_list.SetItemText(i,6,rs.m_sz_price);m_list.SetItemText(i,7,rs.m_sz_date);pRst-MoveNext();picRs-Release();pRst-Close();catch(_com_error&e)AfxMessageBox(e.ErrorMessage();m_list.SetRedraw(TRUE);return;、BSTR 和_bstr_t 下面的语句声明了一个_bstr_t型的变量,_bstr_t是对 BSTR类型的一个封装。_bstr_tstrSQL(“SELETE*FROMDEVICE_WANTBUY”);序如何解例某溴苯与反应只得到一种三溴苯产物该溴苯应为解因是邻对位定位基所以和都有两种三溴苯产物而有种三溴苯产物亲核取代反应在特殊结构或特殊条件下产生加成消除历程芳环上有吸电子基使之活化以最强如胺等生成碳是什么亲电取反应双分子消除加成反应双分子加成消除反应单分子亲核取反应答苯炔历程消除加成历程发生于试剂碱性很强时特征为亲核试剂不一定进入离去基团所在位置上可以在它的邻位例氯苯与氨基钠在液氨中作用生成苯胺时式是其中表示亲核试剂可以是负离子或带未共享电子对的中性分子表示作用物为中性分子或正离子表示离去基团反应进行有两种类型一种是单分子亲核取代反应速率另一种为双分子亲核取代反应速率为一步反应亲核试剂进攻与离去精心整理 对于 BSTR,通俗地说,它是 COM 中使用的字符串,与普通 C程序中的字符串的区别在于:它一个带有字符计数值的字符串。它的字符计数值在字符数组的前面。它保存的在字符是所谓的“宽字符”(Widecharacter)。所以,对于一个 BSTR而言,下面的语句就是错的。BSTRstr=L”Somewords”;正确的做法是:Wchar_tst_=L”Somewords”BSTRstr;Bstr=SysAllocString(str_)释放一个 SBSTR指针时,则调用 SysFreeString函数。每次都这样操控字符串未免太过麻烦,所以 VisualC+里提供了_bstr_t这个类对 BSTR做了封装,使程序员可以简单的对这种 COM 字符串进行操作了。、IADORecordBinding 和 Iunkown 一个 COM 组件包含了许多 COM 对象,程序员通过“接口”来操控这些对象,或者说,这些对象通过提供给程序员的接口来实现自己的功能。下面这行代码中的 IADORecordBind 就是一个指向这种接口的指针。IADORecordBingding*picRs=NULL;/InterfacePointerdeclared(VC+Extension)每个接口都是从 IUnkown 这个接口派生出来的。IUkown 接口声明了 3 个纯虚函数:HRESULTQueryInterface(REFIDrilid,void*ppvObject);ULONGAddRef();ULONGAddRef();一般来说,不能直接拥有一个 IADORecordBind 或者 IFoo、IBirdISomeInterface 诸如此类的接口对象,程序员只能得到一个接口的指针,就像下面的这行代码:pRst-QueryInterface(_uuidof(IADORecordBingding),(LPVOID*)&picRs);这行代码解释了 IUknown 接口中 QueryInterfae 方法的最基本的用法:程序员用它来得到 COM 对象支持的某个接口的指针。如上例中,pRst 时某一个 COM 对象提供的一个接口指针,程序员从某本书上(比如 MSDN)知道了这个对象一定拥有一个 IADORecordBinding 型的接口,于是调用上面那行代码,得到了这个 IADORecordBinding接口的指针。然后就可以使用 IADORecordBinding接口里声明的那些方法了。如上所说,一个 COM 对象,程序员往往不能直接拥有它的实例,而只是它的接口的指针。那什么时候来释放这个对象呢?这就是 AddRef 和 Release 方法的用途。得到了一个接口指针,开始使用一个 COM 对象,就要调用它的 AddRef 方法增加它内部的一个引用计数;使用完之后则调用Release 方法减少这个计数。如果计数为零,则已经说明没有人使用,这个 COM 对象就会自己销毁自己。原则上说,同一个对象提供的不同接口,AddRef 和 Release 的效果都是一样的。所以在使用完一个 COM 接口指针之后,一定要这样:picRs-Release();如果忽略了这一句,就会造成一个 COM 对象及他所掌握的资源不能被正确释放。RecordsetPtr和智能指针 如上一段所讲,使用完一个接口之后忘记调用 Release 是一件和糟糕的事,为了弥补这一点,就要写出一大串嵌套的 if 语句,降低了程序的易读性。程序就会抛出异常,而程序员又没有写出捕获这种异常的代码(往往也不能写,谁也无法预料自己调用的某个库函数会跑出什么样的异常),这样也会跳过某个原本不想跳过的 Release。怎么解决这个问题呢?一种方法是用 try_finally 语句,但是由于现有编译器的缺陷,包含这个语句的代码编译出来的效率较低。这就用到了“智能指针这个工具。_RecordsetPtrpRs=NULL 上面这行代码声明的变量就是一个智能指针。从他的名字上看,他是对 Recordset 这种对象的序如何解例某溴苯与反应只得到一种三溴苯产物该溴苯应为解因是邻对位定位基所以和都有两种三溴苯产物而有种三溴苯产物亲核取代反应在特殊结构或特殊条件下产生加成消除历程芳环上有吸电子基使之活化以最强如胺等生成碳是什么亲电取反应双分子消除加成反应双分子加成消除反应单分子亲核取反应答苯炔历程消除加成历程发生于试剂碱性很强时特征为亲核试剂不一定进入离去基团所在位置上可以在它的邻位例氯苯与氨基钠在液氨中作用生成苯胺时式是其中表示亲核试剂可以是负离子或带未共享电子对的中性分子表示作用物为中性分子或正离子表示离去基团反应进行有两种类型一种是单分子亲核取代反应速率另一种为双分子亲核取代反应速率为一步反应亲核试剂进攻与离去精心整理 指针进行了包装。TESTHr(pRst.CreateInstance(_uuidof(Recordset);这一句创建了一个 Recordset 型的 COM 对象,并对智能指针赋值。在制作所在的函数体结束时,智能指针对象从栈中析构,在它的析构函数里调用了它所包含接口的 Release 方法。由它的工作原理看出,它解决了上面的问题栈中对象的析构函数无论如何都是会被调用的,即使函数发生了异常而退出的情况也是如此。除此之外,智能指针可以在接口指针赋值是自动调用 AddRef 方法这也是一个容易犯得错误。它通过重载运算符,使得它在使用时,和普通的接口指针毫无二致。3、操作日志模块的设计、写日志模块 通过操作日志模块,该系统每一次改变数据库数据的操作都会在操作日志表格中有相应的记录。这样可以增强操作人员的责任感,提高系统的安全性,也利于维护数据库数据的完整性。此外,一个翔实的操作日志,也给开发过程中的调试、除错带来很大便利,所以这个模块的设计被改在了最前面。先定义一个名为 Clogmngr 的类:/LogMngr.h/定义一个 Log 管理器 classCLogMngr public:CLogMngr();virtualCLogMngr();public:boolAddLog(LPCSTRop);voidSetup(_ConnectionPtrcnnt,CString&user)m_DBCnt=cnnt;m_user=user;protected:_ConnectionPtrm_DBCnt;CStringm_user;在这个类中,保存了一个数据库连接的指针 m_DBCnt和当前用户的 ID(m_user)。在主对话框 CDMSDlg中加入了一个 CLogMngr 型的成员变量,并在 CDMSDlg:OnInitDialog()中调用其 Setup方法进行初始化,设置好数据库连接指针和用户名。这样当程序中某处需要写信息进行操作日志的时候,只需要调用这个类的 AddLog 方法即可。下面是 CLogMngr:AddLog 内部实现的详细过程。/LogMngr.cpp/向数据库中添加 Log 记录的代码 boolCLogMngr:AddLog(LPCSTRop)CTimetm=CTime:GetCurrentTime();CStringsql_;sql_.Format(INSERTINTOHOWDO(do_user,do_what,do_date)VALUES(%s,%s,%d-%d-%d%d:%d:%d),m_user,op,序如何解例某溴苯与反应只得到一种三溴苯产物该溴苯应为解因是邻对位定位基所以和都有两种三溴苯产物而有种三溴苯产物亲核取代反应在特殊结构或特殊条件下产生加成消除历程芳环上有吸电子基使之活化以最强如胺等生成碳是什么亲电取反应双分子消除加成反应双分子加成消除反应单分子亲核取反应答苯炔历程消除加成历程发生于试剂碱性很强时特征为亲核试剂不一定进入离去基团所在位置上可以在它的邻位例氯苯与氨基钠在液氨中作用生成苯胺时式是其中表示亲核试剂可以是负离子或带未共享电子对的中性分子表示作用物为中性分子或正离子表示离去基团反应进行有两种类型一种是单分子亲核取代反应速率另一种为双分子亲核取代反应速率为一步反应亲核试剂进攻与离去精心整理 tm.GetYear(),tm.GetMonth(),tm.GetDay(),tm.GetHour(),tm.GetMinute(),tm.GetSecond();_bstr_tsql=sql_;try m_DBCnt-Execute(sql,NULL,adCmdText);catch(_com_error&e)CStringError=e.ErrorMessage();AfxMessageBox(e.ErrorMessage();returnfalse;returntrue;可以看到,它利用了 Connec