毕业设计 书店管理信息系统设计.doc
*学院课程设计报告课设名称 书店管理信息系统 日 期 2009.6.152009.7.3 指导教师 * 班 级 06 姓 名 * 学 号 成 绩 文献综述21 前 言32 关键技术分析33 总 结8参考文献91、书店管理信息系统概述(前言)102、书店管理信息系统规划102.1业务调查102.2 业务及流程102.2.1图书入库业务流程132.2.2会员注册业务流程142.2.3销售管理业务流程152.2.4库存管理业务流程152.3 E-R图162.4关系数据模式172.5应用系统体系结构设计183、书店管理信息系统分析193.1系统需求193.2功能需求203.2.1权限设置203.2.2 图书销售213.2.3图书入库213.2.4图书库存223.3数据库设计233.4交互式界面设计273.4.1书店管理系统登录界面273.4.2书店管理系统主界面274、代码实现295、总结49参 考 文 献51文献综述摘 要40多年来,计算机在处理各方面的应用发展迅速。尤其在计算机飞速发展的今天,计算机的应用已在社会的各个领域深入开来,无论是在商业,工业还是政府部门都早已普及。本文对实现书店图书销售系统的关键技术MFC和ADO进行了概括的描述,探讨了MFC的宏观框架体系、构成应用程序的对象、ADO以及在VC中使用ADO的步骤。本次设计采用了MFC技术、ADO技术,并且结合Access2000来开发书店的图书销售系统。关键词: 图书销售,MFC,ADO 1 前 言在科技飞速发展的今天,计算机的应用已经深入到各行各业当中。为了提高书店日常工作效率,因此设计了图书销售系统,协助书店的图书销售的管理。该前台销售部分的开发是为了简化销售过程,能够方便快捷的销售图书,系统配合了后台管理系统和数据库使用,完成零售业的供销存等商业活动过程。本次设计的实现采用Visual C+6.0和Access 2000等工具来完成,其环境为单击环境,采用MFC连接数据库,设计出了简洁、易用的人性化界面。实现的功能有:登陆过程、增加记录、删除记录、查询功能、计费功能等。特点:操作简单,界面和谐,有一定安全性(登陆过程)和可维护性,查询和计费准确快捷等。这些功能都在系统中实现,MFC将数据库的操作封装起来,通过用户对界面的操作产生相应的消息,从而进行相对应的消息处理并得出的结果。2 关键技术分析根据任务书及系统的要求,采用VC+6.0和Access 2000完成整个设计。用Access 2000作为后台数据库,并运用MFC技术和ADO技术等设计出简洁、易用的符合人们使用习惯的操作界面,完成书店图书销售系统的设计与实现。2.1 MFC概述2.1.1 MFC的宏观框架体系MFC1 4实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板等等。 这些模板都采用了以文档-视为中心的思想,每一个模板都包含一组特定的类。 为了支持对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。 总之,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。 MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。 MFC是C+类库29,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C+对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。 2.1.2 构成应用程序的对象 (1)应用程序 应用程序类派生于CWinApp。基于框架的应用程序必须有且只有一个应用程序对象,它负责应用程序的初始化、运行和结束。 (2)边框窗口 如果是SDI应用程序,从CFrameWnd类派生边框窗口类,边框窗口的客户子窗口(MDIClient)直接包含视窗口;如果是MDI应用程序,从CMDIFrameWnd类派生边框窗口类,边框窗口的客户子窗口(MDIClient)直接包含文档边框窗口。 如果要支持工具条、状态栏,则派生的边框窗口类还要添加CToolBar和CStatusBar类型的成员变量,以及在一个OnCreate消息处理函数中初始化这两个控制窗口。 边框窗口用来管理文档边框窗口、视窗口、工具条、菜单、加速键等,协调半模式状态(如上下文的帮助(SHIFT+F1模式)和打印预览)。 (3)文档边框窗口 文档边框窗口类从CMDIChildWnd类派生,MDI应用程序使用文档边框窗口来包含视窗口。 (4)文档 文档类从CDocument类派生,用来管理数据,数据的变化、存取都是通过文档实现的。视窗口通过文档对象来访问和更新数据。 (5)视 视类从CView或它的派生类派生。视和文档联系在一起,在文档和用户之间起中介作用,即视在屏幕上显示文档的内容,并把用户输入转换成对文档的操作。 (6)文档模板 文档模板类一般不需要派生。MDI应用程序使用多文档模板类CMultiDocTemplate;SDI应用程序使用单文档模板类CSingleDocTemplate。 应用程序通过文档模板类对象来管理上述对象(应用程序对象、文档对象、主边框窗口对象、文档边框窗口对象、视对象)的创建。2.2 VC开发数据库之ADO2.2.1 ADO概述ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。之所以称为 ADO,是用了一个比较熟悉的暗喻,OLE 自动化接口。OLE DB是一组”组件对象模型”(COM) 接口,是新的数据库低层接口,它封装了ODBC的功能,并以统一的方式访问存储在不同信息源中的数据。OLE DB 并不局限于 ISAM、Jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。OLE DB 应用程序编程接口的目的是为各种应用程序提供最佳的功能,它并不符合简单化的要求。您需要的API 应该是一座连接应用程序和 OLE DB 的桥梁,这就是 ActiveX Data Objects (ADO)。2.2.2 在VC中使用ADO(1)引入ADO库文件使用ADO前必须在工程的stdafx.h文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示:代码1:用#import引入ADO库文件#import "c:program filescommon filessystemadomsado15.dll"no_namespaces rename("EOF" adoEOF")这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免常数冲突,将常数EOF改名为adoEOF。现在不需添加另外的头文件,就可以使用ADO接口了。(2)初始化OLE/COM库环境必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。加入一句AfxOleInit();即可。代码2:初始化OLE/COM库环境函数AfxOleInit在每次应用程序启动时初始化OLE/COM库环境。同DAO和CDatabase一样,ADO由几个接口组成:_ConnectionPtr,_CommandPtr和_RecordsetPtr.不同于DAO和Cdatabase的是,ADO基于COM的接口。(3)ADO接口简介ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。_ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。通常同CDatabase一样,使用它创建一个数据连接,然后使用其它对象执行数据输入输出操作。_CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。_RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口,然后使用_RecordsetPtr执行存储过程和SQL语句78。代码3:使用_RecordsetPtr执行SQL语句_RecordsetPtr MySet;MySet.CreateInstance(_uuidof(Recordset);MySet->Open("SELECT * FROM some_table",MyDb.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);现在我们已经有了一个数据连接和一个记录集,接下来就可以使用数据了。使用ADO的_RecordsetPtr接口,就不需要象DAO那样频繁地使用大而复杂的数据结构VARIANT,并强制转换各种数据类型了,这也是ADO的优点之一。假定程序有一个名称为m_List的的ListBox控件,下面代码我们用_RecordsetPtr接口获取记录集数据并填充这个ListBox控件:代码4:使用DAO访问数据VARIANT * vFieldValue;COleVariant covFieldValue;CString Holder;while(!MySet->IsEOF()MySet->GetFieldValue("FIELD_1", covFieldValue);vFieldValue = (LPVARIANT)covFieldValue;if(vFieldValue->vt!-VT_NULL)Holder.Format("%s",vFieldValue->pbVal);m_List.AddString(Holder);MySet.MoveNext();代码5:使用ADO访问数据_variant_t Holdertrywhile(!MySet->adoEOF)Holder = MySet->GetCollect("FIELD_1");if(Holder.vt!=VT_NULL)m_List.AddString(char*)_bstr_t(Holder);MySet->MoveNext();catch(_com_error * e)CString Error = e->ErrorMessage();AfxMessageBox(e->ErrorMessage();catch(.)MessageBox("ADO发生错误!");必须始终在代码中用try和catch来捕获ADO错误,否则ADO错误会使你的应用程序崩溃。当ADO发生运行时错误时(如数据库不存在),OLE DB数据提供者将自动创建一个_com_error对象,并将有关错误信息填充到这个对象的成员变量.3 总 结书店图书销售系统是书店提高效率的必要组成部分,为其图书销售提供了方便快捷准确的操作。通过以上的分析。我们可以充分认识到设计开发一个图书销售系统的重要性,本次设计开发图书信息管理系统符合一个书店销售的基本规定,并达到操作过程中的直接,方便,实用,安全等要求。系统采用模块化程序设计的方法,便于系统的组合和修改,又便于系统以后的维护和升级。本设计采用的MFC技术,并使用ADO操作数据库,这是很多应用软件常用的一种方法,虽然技术还算比较陈旧,但很实用,也是很多企业常用的方法。这几个月中我阅读了大量的专业类书籍,使我受益匪浅。学会了如何把所学到的理论知识运用到实践当中去,同时对软件开发和设计有了更深一层的理解,这段时间的学习也锻炼了我的创新思维能力。也为下一阶段的系统的开发和论文的撰写做好了充分的准备。参考文献1 王华. Visual C+ 6.0 编程实例与技巧.M 北京:中国水利水电出版社,19992 朱晴婷. Visual C+程序设计.M 北京:清华大学出版社,20063 (美)Stabley B.Lippman. C+ Primer. M 北京:人民邮电出版社,20064 侯俊杰. 深入浅出MFC.M 武汉:华中科技大学出版社,20015 陆惠恩. 实用软件工程.M 北京:清华大学出版社,20066陈禹.软件开发工具.M 北京:经济科学出版社,2005 7王珊 洒师煊. 数据库系统概论. M 北京:高等教育出版社,20058 罗骏.SQL Server2000实用教程. M 北京:清华大学出版社.,20079 严华峰. Visual C+ 课程设计案例精编.M 北京:中国水力水电出版社,200210 谭浩强. C+程序设计.M 北京:清华大学出版社,19981、书店管理信息系统概述(前言)书店管理系统是一个大型书店不可缺少的部分。人工管理方式存在着许多缺点:效率低,保密性差,另外时间一长,将产生大量的文件和数据,这对于查找,更新和维护都带来不少困难。随着科学技术的不断提高。计算机学日渐成熟。它已进入人类社会的各个领域并发挥重要作用。使用计算机档案信息管理,有好多好处:查找方便,可靠性高,存储量大,保密性好,成本低等,能够极大提高管理的效率,也是企业的科学化,与世界接轨的重要条件。开发了书店管理系统就可以进行统一数字化管理,为书店工作人员提供明确,有效的信息,使工作人员工作更方便,更简单。 2、书店管理信息系统规划2.1业务调查了解书店的进书,售书,退书及会员管理等业务流程,分析功能实现的模块,大体制定设计方案,针对每一模块所要实现的具体要求进行详细的调查分析。2.2 业务及流程系统总结构图 图2-1图2-1本书店销售管理系统主要有以下四大模块:(1)、系统管理 包括用户的登陆、用户修改密码、重新登陆和退出系统。 (2)、经理子系统:包括统计分析、用户管理和会员政策。统计分析包括对销售、库存、退货等信息的统计这样管理员就能够很直观的了解当前书店的运营情况,可以及时的制定下一时间段的销售和管理策略。用户管理包括对用户的添加、删除和修改,由于在系统用户中有部分是书店的管理人员聘请过来的,这些人员不是一成不变的,总是在不断变化,这就涉及到用户信息的添加、删除和修改。另外,会员还分有不同的级别,有的在本店里买的书籍比较多了会员级别比较高,这样打的折也多,新入的会员等级低打的折也少,这样就需要对会员的等级进行管理(3)、仓库管理子系统 包括库存管理、供应商信息管理和图书分类管理。图书存在仓库总有入库和出库,为了对图书的入库和出库信息进行详细的统计和管理我们需要对库存进行管理,并且我们要对库存里的书籍进行书目管理,这也属于库存管理的范畴。由于现在供应商很多,书店会有选择的选取其中的一些作为固定的合作伙伴,这样就需要对他们的信息进行管理,这就涉及到供应商信息的添加、删除和修改。另外,图书还分为不同的类型,有文学的,有经济类的等等,不同的类型的书籍的销售情况,摆放位置也不一样,这需要对图书的类型进行管理。(4)、销售管理子系统包括图书的销售、销售统计和会员管理。本系统的一个主要的功能就是销售图书的功能。销售统计是让营业员查看一下当天的销售记录。由于本书店是会员制的所有我们就需要对会员进行管理,这里面包括会员的增加,修改和删除。(5)、查询子系统 包括对图书的库存信息,会员信息,供应商信息进行查询。如果想知道某本书的相关信息,可以输入该书的编号、书名任意查询,同时该操作还支持模糊查询。如果想知道某会员的购买情况、某种书的销售情况同样可以通过查询得到。2.2.1图书入库业务流程 图2-2图2-22.2.2会员注册业务流程 图2-3图2-3会员优惠政策判断表:决策规格号1234条件会员时间>60天YYNN购买金额>100元YNYN应采取的政策优惠25%Y优惠20%Y优惠15%Y优惠 5%Y2.2.3销售管理业务流程 图2-4图2-42.2.4库存管理业务流程 图2-52.3 E-R图管理员:职员:部门:会员:书籍:供应商2.4关系数据模式管理员(管理员编号,部门编号,姓名,工资,性别,年龄,学历,住址,电话)部门(部门编号,部门名称,职员人数)职员(职员编号,部门编号,工资,姓名,性别,年龄,学历,住址,电话)书籍信息(书籍编号,书名,作者,价格,货架号,供书商编号,在库数量)供书商(供书商编号,名称,地址,联系电话,书籍名称,供应量)会员(会员编号,姓名,性别,联系方式,会员有效期,累计消费,享有优惠)2.5应用系统体系结构设计将业务流程与规划出的主题数据库结合在一起画出U-C矩阵。矩阵中的U表示某项业务使用某一数据库,C表示某项业务负责产生某一主题数据库,同时也使用该主题数据库。主题数据库与业务流程中的各项业务处理环节所组成的U-C矩阵见表.。数据库项目职员信息数据库会员信息数据库图书信息数据库图书分类信息数据库图书销售信息数据库库存信息数据库订单明细数据库订单信息数据库职员管理C会员注册业务C会员管理U图书分类管理UC图书销售管理库存管理U供应商信息管理在U-C矩阵基础上进行的体系结构设计见表.。将U-C矩阵进行调整,使C集中在对角线上,然后划分出信息系统的子系统,如表2.3所示。其中,落在黑框外的U表示子系统之间的信息交换关系,从而可以看出数据库的共享性。表2.3中各子系统的功能如下:子系统1:基础数据管理,提供了对各类编码数据的维护功能。子系统2:图书销售管理,提供了图书的信息、分类信息、车图书销售信息处理功能。子系统3:库存管理,提供了仓库基本信息的管理、出入库管理和库存结算以及供应商信息等。数据库项目职员信息数据库会员信息数据库图书信息数据库图书分类信息数据库图书销售信息数据库库存信息数据库订单明细数据库订单信息数据库职员管理系统1会员注册业务会员管理图书分类管理系统2图书销售管理库存管理U系统3供应商信息管理3、书店管理信息系统分析3.1系统需求 书店管理系统需要满足来自三个方面需求:第一,书店工作人员通过计算机来管理各类图书,进行图书分类编号,调整图书结构,增加图书库存,适应读者的需求。第二,工作人员对读者的需求情况能作好全面的掌握,及时得到历史销售记录。第三,也是书店的核心工作,对图书的销售管理。原始落后的管理已经远远不能满足,不但工作繁琐,出错的几率也是很大的,大大降低了工作效率。另外现在比较有先见之明的书店都慢慢发展自己的特色业务,比如会员制度,针对会员有免费借阅书籍的业务,要求是每月消费达到一定金额,据悉这种举措很受市场的欢迎,极大的带动了书店的消费,为书店自身的发展积累了一定的资金和管理经验。除此之外还有各色名目繁多的会员活动等等,给读者一种心理上的优越感,刺激了消费。为了优化书店管理模式,我们尝试开发了这个书店综合管理系统,让用户很方便的通过这套系统管理书店的日常事务和繁琐数据,让用户在整洁的环境下轻松的进行书店的日常业务的开展。3.2功能需求基于系统需求分析,该系统需要实现以下基本功能:3.2.1权限设置本系统的使用用户分两种:管理员和普通用户。管理员具有使用本系统的所有功能,而普通用户是需要具有日常书店的管理功能即可。用户权限的设置通过用户登陆界面的输入来进行。会员注册数据流程图3.2.2 图书销售图书管理人员通过此模块来销售各类图书并对销售情况进行记录,记录的信息包括图书销售的数量,价格,折扣比例等。在进行销售图书时,输入图书的编号,系统就可以搜索到该图书编号对应的图书信息,然后列出该图书销售是需要的基本信息,书名,出版社价格等。销售可以输入折扣数以便打折,在购买相同的多本书时,可以直接输入图书数量,避免重复输入图书编号。同时,也提供撤销销售记录的功能,销售员可以撤销销售时的上一条记录。程序还能自动统计读者购买的总金额,便于销售员掌握。销售管理数据流程图3.2.3图书入库书店工作人员通过此模块来管理各类图书库存的数目。当一批图书入库时,只需要输入图书编号和图书数量,程序将自动更改库存的图书数量。使用的公式为:现有图书库存=原有图书库存 + 新入库图书数量。图书入库数据流程图 3.2.4图书库存书店工作人员通过次模块来管理各类图书信息,包括图书的库存。 当一种图书的库存数量规定值本时,系统将图书的信息列入不足表中,以便进货员及时购书入库。库存管理数据流程图3.3数据库设计图书信息的表结构,为了便于说明,其中bookISBN是主键,区分不同的图书。 JavaBeans要根据不同的图书bookISBN来获得起相应的书名,作者,出版社,价格,简介等信息。同时JavaBeans还要有列出书店中所有图书的信息的功能。 表3.1 bookinfo图书的信息序号字段名类型是否可置空含义是否是关键字1bookISBN文本否图书编号是2bookName文本否书名否3bookAuther文本否作者否4publisher文本否出版社否5price文本否价格否6introduce文本否简介否表3.2 buyerInfo会员信息库序号字段名类型是否可置空含义是否是关键字1memberID文本否用户代码是2membername文本否用户名称否3logonTimes文本否登陆次数否4pwd文本否密码否5phoneCode文本否电话否6Zipcode文本否邮政编码否7address文本否地址否8email文本否电子邮件地址否表3.3 workersInf职员信息库序号字段名类型是否可置空含义是否是关键字1memberID文本否职员代码是2membername文本否职员姓名名称否3sex文本否性别否4Age文本否年龄否5phoneCode文本否电话否6Wage 文本否工资否7address文本否地址否8Part文本否部门编号否表3.4 图书销售表-booksale字 段 名 称类 型主 键非 空saleno销售数目自动编号是 是bookno销售图书编号文本 否 是bookname销售图书名文本 否 否author销售图书作者文本 否 否publisher销售图书出版社文本 否 否price销售图书价格数字 否 是discount打折数字 否 是number销售图书数量数字 否 是moneysum金额数字 否 是date销售日期数字否 是35图书类别表-booktypeinfo名 称字 段 名 称类 型主 键非 空booktypeno图书类别编号自动增长 是 是booktypename图书类别名称 文本 否 是表3.6 bookinfo图书库存的信息序号字段名类型是否可置空含义是否是关键字1bookISBN文本否图书编号是2bookName文本否书名否3bookAuther文本否作者否4publisher文本否出版社否5price文本否价格否Storecount数字否库存量否introduce文本否简介否表3.7orderdetail定单明细序号字段名类型是否可置空含义是否是关键字1orderID数字否定单号是2bookISBN文本否书号是3bookcount数字否数量否表3.8 orderInfo定单信息表序号字段名类型是否可置空含义是否是关键字1orderID文本否是2userID文本否会员ID否3receiverName文本否接受者姓名否4receiverAddress文本否接受者地址否5receiverZip文本否接邮政编码否6orderRem文本否备注否7orderPrice文本否否8orderdate文本否否9handled数字否否3.4交互式界面设计3.4.1书店管理系统登录界面3.4.2书店管理系统主界面本系统基本能适合小型书店的应用,书店实现了前台销售模块,包括图书销售,图书查询,查询不足,销售管理;后台管理模块,实现了图书入库,入库纪录,退书管理,退书查询;高级管理模块实现了客户管理,会员管理,管理员管理等功能。本系统有着人性化的界面,方便用户操作,所有菜单栏都在左侧,实现简单、美观,通过自定义属性可以动态的添加菜单项和图标,为以后软件的扩展提供了接口。由于时间原因,系统中部分功能未能实现,有待于以后完善。4、代码实现Public Sub LogOff()Dim retVal As IntegerretVal = MsgBox("你确定要注销吗?", vbOKCancel + vbQuestion, "注销当前用户")If retVal = vbCancel Then Exit SubLoad LoginLogin.ShowUnload mainEnd SubPrivate Sub ab_Click()Load AboutAbout.ShowEnd SubPrivate Sub bf_Click()backup.ShowUnload MeEnd SubPrivate Sub C11_Click()Adodc_rk1.CommandType = adCmdTextAdodc_rk1.RecordSource = "select * from 图书 "Adodc_rk1.RefreshAdodc_rk2.CommandType = adCmdTextAdodc_rk2.RecordSource = "select 编号 from 图书 where 编号=""" & Text_rk3.Text & """"Adodc_rk2.RefreshIf Text_rk1.Text = "" Or Text_rk2.Text = "" Or Text_rk3.Text = "" Or Text_rk4.Text = "" Or Text_rk5.Text = "" Or Text_rk6.Text = "" Or Text_rk7.Text = "" Or Text_rk8.Text = "" ThenMsgBox "请填入完整的书籍信息", vbInformation, "提示"Exit SubElseIf Text_rk3.Text = Adodc_rk2.Recordset!编号 ThenMsgBox "此书籍已存在,请选择旧书入库", vbInformation, "提示"Exit SubElse Adodc_rk1.Recordset.AddNew Adodc_rk1.Recordset!编号 = Text_rk3.Text Adodc_rk1.Recordset!书名 = Text_rk1.Text Adodc_rk1.Recordset!作者 = Text_rk5.Text Adodc_rk1.Recordset!单价 = Text_rk7.Text Adodc_rk1.Recordset!出版社 = Text_rk1.Text Adodc_rk1.Recordset!库存量 = Text_rk2.Text Adodc_rk1.Recordset!ISBN = Text_rk4.Text Adodc_rk1.Recordset!类型 = Text_rk6.Text Adodc_rk1.Recordset.UpdateAdodc_rk3.CommandType = adCmdTextAdodc_rk3.RecordSource = "select * from 进货记录 "Adodc_rk3.RefreshAdodc_rk3.Recordset.AddNewAdodc_rk3.Recordset!书籍编号 = Text_rk3.TextAdodc_rk3.Recordset!单价 = Text_rk7.TextAdodc_rk3.Recordset!数量