医药管理系统库存管理子系统的设计与实现本科学位论文_第1页
医药管理系统库存管理子系统的设计与实现本科学位论文_第2页
医药管理系统库存管理子系统的设计与实现本科学位论文_第3页
医药管理系统库存管理子系统的设计与实现本科学位论文_第4页
医药管理系统库存管理子系统的设计与实现本科学位论文_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河北大学2009届本科生毕业论文(设计)PAGEPAGE1医药管理系统--库存管理子系统的设计与实现摘要伴随着信息技术的发展,很多产业的销售管理已经由电脑来控制完成。在医药管理方面,库存管理工作如果由人工完成,是既费时又费力的。这次我所做的这个系统就是为了使医药销售部门的医药库存管理实现电子化。设计并实现这样一个软件,需要使用到VisualC++,MicrosoftAccess,ADO,等设计平台。整个系统的设计由模块构成,主要有主窗体及系统登录设计模块,基础信息管理设计模块,销售管理模块,入库管理模块,调货管理模块,账务管理模块,系统设置管理模块构成。各个模块共同完成整个软件的所有工作。关键词:VisualC++MicrosoftAccessADO模块ABSTRACTAccompanywithaninformationtechnicaldevelopment,alotofsalesofindustriesmanagingisalreadycontroledcompletionbycomputer.Managesaspectinthemedicine,iftheinventorymanagmentworkcompletesto°fromtheartificial,issincetime-consumingandhardtotackle.Thistimethesystemdonebymebeformakingthemedicineinventorymanagmentofmedicinesaledepartmenttherealizationiselectronical.Designandcarryoutsuchasoftware,needtouseVisualC++,MicrosoftAccess,ADO,waitdesignterrace.Thedesignofthewholesystemconstitutestofromthemoldpieceandmainlyhasmainwindowbodyandsystemtoregisterdesignmoldpiece,foundationinformationmanagementdesignmoldpiece,sellmanagementmoldpiece,storeinwarehousemanagementmoldpiece,adjustagoodsmanagementmoldpiece,Zhangworkmanageamoldpiece,thesystemestablishesmanagementmoldpiececomposing.Eachmoldpieceiscommontocompleteallworksofthewholesoftware.Keywords:VisualC++MicrosoftAccessADOmold前言随着我国市场经济的蓬勃发展和人们对医药产品需求的迅速增加,医药行业正处于一个高速发展的时期。行业的快速发展必然导致竞争的加剧,要想在激烈的市场竞争中谋求发展,客观上要求企业必须加强内部管理,提高运营效率。另外,由于医药产品种类繁多、销售模式特殊、业务量大,单凭手工记账已远远适应不了企业快速发展的需求。如何尽快建立和完善现代企业的信息化管理机制,己成为医药企业快速发展的关键所在。因此,尽快建立和完善现代企业的信息化管理机制问题,是医药企业发展的关键所在。高效、稳定的信息化管理系统是医药企业的核心竞争力之一。要建立符合医药企业经营、管理、创新等要求的信息化管理系统,开发期间必须遵循以下规律:一是系统规划。医药行业管理的信息化是一个系统工程,需要有科学的系统规划与设计。二是不贪大求全,循序渐进。贪大求全是很多企业对信息系统的要求,这容易造成系统功能相对全面但缺乏稳定性和应用资源的保障,进而影响、拖累系统主要功能的运转。三是避免重系统的表象轻其内核。管理软件产品必须以管理流程和业务流程为基础,其内核应蕴含先进的管理思想,缺乏管理思想支撑的系统,很难成为优秀的医药管理系统。四是避免重产品初期运转,轻维护与服务。在信息系统初期应用时,多数企业都能给予相当的重视,当完成系统验收后,企业往往不重视对该系统资源的保障、维护与服务的投入,以及对系统适应的调整,使得信息系统生命周期大大缩短。随着信息时代的发展,管理者意识到只有采用信息化管理,才能取得市场领域的主导地位。一系统开发环境和主要技术简介1.1.1VisualC++的介绍VisualC++是Microsoft公司的重要产品之一DeveloperStudio工具集的重要组成部分。它用来在Windows环境下开发应用程序,是一种功能强大,行之有效的可视化编程工具。VC以可视化技术为基础,以C++语言为蓝本,以众多的集成工具为骨架,在计算机领域的诸多方面都发挥着重要的作用。VisualC++提供了简洁实用的开发环境,集成的工具集能够让用户高效率的开发应用程序。VisualC++提供了MFC类库,一般性工作可以全部交给VC来完成,用户只要在其基础上做出自己想要实现的功能即可。完成目标(尤其对于图形界面的程序)所花费的时间要少得多。1.1.2MFC和VisualC++VisualC++的核心是Microsoft基础类库,即通常所说的MFC(MicrosoftFoundationClassLibrary)。MFC相当彻底的封装了Win32软件开发工具包(SoftwareDevelopmentKit,即通常所说的SDK)中的结构、功能,它为编程者提供了一个应用程序框架,这个应用程序框架为编程者完成了很多Windows编程中的例行性工作,如管理窗口、菜单和对话框,执行基本的输入和输出、使用集合类来保存数据对象等等,并且,MFC使得在程序中使用很多过去很专业、很复杂的编程课题,如ActiveX、OLE、本地数据库和开放式数据库互联(OpenDatabaseConnectivity,简写为ODBC)、Windows套接字和Internet应用程序设计等,以及其它的应用程序界面特性,如属性页(也叫标签对话框)、打印和打印预览、浮动的和可定制的工具条变得更加的容易。1.2MicrosoftAccess概述1.2.1MicrosoftAccess的发展自从1992年首次发布以来,MicrosoftAccess已经逐步成为桌面数据库领域的领导者,并且拥有广泛的用户。在90年代早期,作为用于MicrosoftWindows操作系统的第一个桌面关系型数据库(RDBMS)而初次登场的是Access1.0给有经验的数据库用户留下的深刻印象是,使用一个功能强大的桌面数据库竟然如此简单。Access2.0继续改变终端数据库用户理解和使用数据库的方法。当Access第一次加入MicrosoftOffice套件时,Office用户开始产生对关系数据库的强烈需要。1995年末,世界上第一个32位RDBMSAccess95发布,使这种普及趋势继续发展。1997年1月发布的Access97是数据库与Web的最佳组合。今天,Access的普及已经上了一个新的台阶,其用户不仅包括有经验的数据库用户,还包括初次使用数据库的用户。使用Access2000,新用户会欣喜的发现它与Office应用程序高度集成,熟悉的界面使迅速启动和运行更加容易。通过以更紧密的集成将Access2000延伸到企业级数据库,Access高级用户和开发人员将会找到崭新的方法,来充分利用Access在最终用户中的普及。不论用户是创建数据库来管理联络信息和客户,还是创建存货跟踪系统,Access都能找到为各种级别的桌面用户查找,管理和共享数据提供的一种简单方法。1.2.2MicrosoftAccess的主要功能MicrosoftAccess数据库是对传统数据库的发展,是一个数据库管理系统(RDBMS)。在Access中,用户可以构造应用程序来归档和存储数据,并且可以用多种方法进行筛选,分类和查询数据,同时也可以将不同数据类型之间的联系存储起来,供产生综合性数据使用。此时,每条信息仅在一处存放,减少数据重复,节约存储空间,这样更新数据时速度既快又准确,修改表结构也非常容易。用户既可以为每一种类型的信息创建一个表,将自己的数据分别保存在自己创建的表中,同时又可以使用联机窗体更加有效的查看,添加和更新表中的数据;使用查询来查找并检索符合指定条件的数据;使用报表分析数据,并以特定的版面布局来打印数据;使用宏完成自己定义的一系列操作,同时又不需要编写程序。Access的主要功能:(1)定义数据创建表,利用表存储相应的信息。(2)定义表之间的关系,从而很容易地将各个表中相关的数据有机的结合在一起。(3)方式多样的数据处理能力。可以创建查询来检索数据;可以创建联机窗体来直接查看。输入和更改表中的数据;可以创建报表来分析数据或将数据以特点的方式打印出来。(4)创建Web页时,建立对Internet和Intranet的支持。(5)开发应用程序。可以利用宏或VisualC++将各种数据库对象连接在一起,形成一个数据库应用系统,而且用户也不需要编写复杂的程序。与其他数据库不同的是,Access在实现上述功能时提供了各种向导,用户在操作时只需按照向导提供的步骤执行就可以了,用起来非常方便。1.2.3MicrosoftAccess的组成Access2000由以下几个部分组成数据库引擎:它是实际存储,排序和获取数据的软件,一般来说,是不可见的。数据库对象:Access2000的数据库窗口非常便于用户访问各种对象。所谓对象就是提供一种特定的使用界面,用于查看,输入和抽取数据库的有关信息。设计工具:Access包含一套设计工具,可用于创建对象。(4)编程工具:Access与MicrosoftOffice中其他的应用程序共享编程语言VBA。Access2000加入了VBE,可以直接将自己的代码管理和开发技巧转移到Word,Excel或PowerPoint中,从而丰富Access应用程序的数据访问功能。

Access2000具有储存文件单一,支持长文件名,兼容多种数据库格式,具有Web网页发布功能,可应用于客户/服务器方式,操作使用方便等特点。

Access2000所使用的对象包括表,查询,报表,窗体,宏,模块和数据访问页。在一个数据库中,除数据访问页之外,其他的对象都存放在一个扩展名为.mdb的数据库文件中,而不像其他数据库那样分别存放在不同的文件中,这样就方便了数据库文件的管理[10]。1.3ADO1.3.1ADO概述ADO是Microsoft为最新和最强大的数据访问范例OLEDB而设计的,是一个便于使用的应用程序层接口。ADO使您能够编写应用程序以通过OLE.DB提供者访问和操作数据库服务器中的数据。ADO最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。之所以称为ADO,是用了一个比较熟悉的暗喻,OLE自动化接口。OLEDB是一组组件对象模型(COM)接口,是新的数据库低层接口,它封装了ODBC的功能,并以统一的方式访问存储在不同信息源中的数据。OLEDB是MicrosoftUDA(UniversalDataAccess)策略的技术基础。OLEDB为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。也就是说,OLEDB并不局限于ISAM、Jet甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在Excel电子数据表、文本文件、电子邮件/目录服务甚至邮件服务器,诸如MicrosoftExchange中的数据。但是,OLEDB应用程序编程接口的目的是为各种应用程序提供最佳的功能,它并不符合简单化的要求。您需要的API应该是一座连接应用程序和OLEDB的桥梁,这就是ActiveXDataObjects(ADO)。1.3.2MFC的ADO类(1)引入ADO库文件使用ADO前必须在工程的stdafx.h文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示:代码1:用#import引入ADO库文件#import"c:\programfiles\commonfiles\system\ado\msado15.dll"no_namespacesrename("EOF"adoEOF")这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免常数冲突,将常数EOF改名为adoEOF。现在不需添加另外的头文件,就可以使用ADO接口了。(2)初始化OLE/COM库环境必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。代码2:初始化OLE/COM库环境BOOLCADOApp::InitInstance(){if(!AfxOleInit()){AfxMessageBox(“OLE初始化出错!”);returnFALSE;}}函数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语句。(4)使用_ConnectionPtr接口_ConnectionPtr是一个连接接口,它类似于CDatabase和CDaoDatabase。它们的工作原理相似。首先创建一个_ConnectionPtr接口实例,接着指向并打开一个ODBC数据源或OLEDB数据提供者(Provider)。以下代码创建一个基于DSN的数据连接。代码3:使用_ConnectionPtr(基于DSN)_ConnectionPtrMyDb;MyDb.CreateInstance(__uuidof(Connection));MyDb->Open("DSN=samp;UID=admin;PWD=admin","","",-1);(5)使用_RecordsetPtr接口_RecordsetPtr接口的使用方法和CDaoDatabase类似,通过以下代码的比较,你会发现使用_RecordsetPtr接口非常简单(以下代码使用上面已经创建的数据连接):代码4:使用_RecordsetPtr执行SQL语句_RecordsetPtrMySet;MySet.CreateInstance(__uuidof(Recordset));MySet->Open("SELECT*FROMsome_table",MyDb.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);二系统总体设计2.1需求分析2.1.1系统介绍“医药库存系统”是专门针对医药公司、药店的综合业务而开发的医药管理系统。该软件集进、销、存、决策于一体,同时还集成了财务管理、报表打印、查询统计等多种实用的功能,真正实现了进、销、存一体化。本软件的前台采用目前流行的面向对象的编程语言V1sualC++6.0开发,后台采用Access数据库。软件的界面美观大方,软件运行稳定。该软件有以下特点:(1)功能强大。该软件以医药经营企业为应用对象,结合医药企业当前和未来发展的管理需求提供实用先进的应用模式,实现对多部门、多规格、大范围的复杂经营活动的业务监控、财务监控、质量监控,提高业务财务各环节工作效率和协作监督能力,真正面向市场提高企业效益。(2)实用高效。通过建立规范的业务管理模式,使业务人员从繁忙的手工开票、统计报表工作中解脱出来,提高工作效率,减少人为差错。(3)系统结构灵活,适用多种经营模式。整个系统由问题域子系统、数据访问子系统、用户界面子系统组成。各子系统可以从其他相关的子系统中直接获取所需的数据,同时也可以将子系统内产生的数据自动传递给其他相关子系统,减少了重复录入,提高了工作效率和准确率。因此,无论是大型集团企业,还是小型公司,无论是连锁零售企业,还是批发企业,本系统均可适用。(4)用户界面操作简洁。系统的每个功能都经过精心设计,充分考虑到使用人员的计算机知识较少的特点,全部使用业务人员最熟悉的业务流程、提示用语和操作方式,即使不懂计算机的人也能熟练使用本软件,完成业务处理。(5)系统性能稳定。严格按照规范的软件工程管理,充分利用面向对象技术,以Access数据库为平台,利用Windows系统的内存管理和多任务特性,从技术上保证了系统的稳定性、可靠性和先进性。本系统在实施后,集中处理药品的进销存业务及其应收应付账目,为企业的发展奠定了一个新的台阶。2.1.2数据字典重要数据及其简要描述如表2-1、表2-2、表2-3所示。

表2-1数据项名称说明药品编号惟一标识一种药品,形式如YP00001员工编号惟一标识一位员工,形式如YG00001客户编号惟一标识一个客户,形式如KH00001供应商编号惟一标识一个供应商,形式如GYS00001销售票号惟一标识每次销售登记,形式如2009-05-01xsd0023入库票号惟一标识每次入库登记,形式如2009-05-01rkd0001销售退货票号惟一标识每次销售退货登记,形式如2009-05-01THD0001入库退货票号惟一标识每次入库退货登记,形式如2009-05-01rkt0001库存盘点票号惟一标识每次库存盘点登记,形式如:2009-05-01pdd0001调货票号惟一标识每次调货登记,形式如:2009-05-28DHD0001毛利销售某种商品时,获得的利润操作员管理员,使用系统,拥有系统账号的人经手人员工,对某次业务或交易实际上直接操作的人备份编号惟一标识某次备份记录,形式如:BACKUP2009-05-20-10-23-00001仓库名称惟一标识某个仓库盈亏数量库存盘点出现的与实际不符的数量管理员权限对权限分成4个等级,方便不同的用户有不同的访问权限结算方式进行交易时所采用的结算方式是否结清判断某笔交易是否已结清帐警戒上限药品数量的最高限警戒下限药品数量的最低限表2-2存储数据名称说明药品信息表记录药品的基本信息员工信息表记录员工的基本信息客户信息表记录客户的基本信息供应商信息表记录供应商的基本信息仓库信息表记录仓库的基本信息管理员表记录管理员的用户名,密码,权限名称说明库存表记录库存信息备份表记录备份信息销售登记表记录销售时药品及数量信息销售票号表记录销售时的客户,经手人,操作员,日期等信息入库登记表记录入库时药品及数量信息入库票号表记录入库时的供应商,经手人,操作员,日期等信息销售退货登记表记录销售退货时药品及数量信息销售退货票号表记录销售退货时的客户,经手人,操作员,日期等信息入库退货登记表记录入库退货时药品及数量信息入库退货票号表记录入库退货时的供应商,经手人,操作员,日期等信息库存盘点登记表记录库存盘点时的药品,仓库及盈亏信息库存盘点退货表记录入库退货时的经手人,操作员,日期等信息调货登记表记录调货时的药品,数量及仓库信息调货票号表记录调货时的经手人,操作员,日期等信息销售结帐表记录销售结帐时的金额,经手人,操作员,日期等信息入库结帐表记录入库结帐时的金额,经手人,操作员,日期等信息销售退货结帐表记录销售退货结帐时的金额,经手人,操作员,日期等信息入库退货结帐表记录入库退货结帐时的金额,经手人,操作员,日期等信息表2-3处理过程名称说明销售登记对客户进行销售交易,即出库入库登记对供应商进行入库交易,即采购销售退货登记对客户进行销售退货交易入库退货登记对供应商进行入库退货交易库存盘点登记确保数据库的数据符合实际库存调货登记在仓库之间重新分配库存数量销售结账登记销售结账操作入库结账登记入库结账操作,也可以称为采购结账销售退货结账销售退货结账操作2.2概要设计2.2.1设计目标面对医药行业的高速发展和医药企业信息化发展的过程中出现的各种情况,该系统在实施后,应能够达到以下目标:(1)建立规范的业务管理模式,使业务人员从繁忙的手工开票、统计报表工作中解脱出来,提高工作效率,减少人为差错。(2)实现多点操作的信息共享,相互之间的信息传递要准确、快捷和顺畅。(3)提供快速、准确的处理企业药品进、销、存、调、退、盘点等多种业务模式。(4)系统界面友好美观,操作简单易行,查询灵活方便,数据存储安全可靠。(5)利用客户档案、应收应付、预警系统等模块结合在一起,可以对往来客户进行业务监控,防止坏账的发生。(6)支持多种结算方式。(7)使业务、财务、库房三账合一,使三种账务系统化、集成化和统一化,消除三种账务不统一造成的混乱。(8)系统维护方便可靠,有较高的安全性,满足实用性、先进性的要求。2.2.2编码设计编码设计是数据库系统开发的前提条件,是系统不可缺少的重要内容。编码是指与原来名称对应的符号或记号。它是进行信息交换、处理、传输和实现信息资源共享的关键。编码也用于指定数据的处理方法、区别数据类型,并指定计算机处理的内容等。本系统内部信息编码分4种情况:采用7字符定长编码,8字符定长编码,17字符定长编码,28字符定长编码。(1)7字符定长编码,其中前两位表示信息分类,由各类信息的汉语拼音字母缩写组成,后5位为具体信息编码,从00001开始,按顺序递增的方式编码。如药品信息编码为YP00001。(2)8字符定长编码,其中前3位表示信息分类,由各类信息的汉语拼音字母缩写组成,后5位为具体信息编码,从00001开始,按顺序递增的方式编码。如供应商信息编码为GYS00001。(3)17字符定长编码,其中前10位是系统日期,中间3位表示分类,由各类信息的汉语拼音字母缩写组成,后4位为具体信息编码,从0001开始,顺序递增的方式编码。如入库登记票号的编码为2009-06-23rkd0001。(4)28字符定长编码,其中前6位表示数据备份的英文单词,中间的16位是系统日期时间,后6位为具体的信息编码,从00001开始,按顺序递增的方式编码。如数据备份编号为BACKUP2009-06-01-13-46-00001。根据以上编码原则,本系统的各类信息编码设计如下:(1)基础信息(采用7位编码)药品信息类别编码采用药品二字的汉语拼音缩写YP,例如YP00001。客户信息类别编码采用客户二字的汉语拼音缩写KH,例如KH00001。员工信息类别编码采用员工二字的汉语拼音缩写YG,例如YG00001。(2)基础信息(采用8位编码)供应商信息类别编码采用供应商三字的汉语拼音缩写GYS,例如GYS00001。(3)数据录入信息查询(采用17位编码)入库登记票号的编码采用入库单三字的汉语拼音缩写rkd,例如2009-05-23rkdO001。入库退货票号的编码采用入库退三字的汉语拼音缩写rkt,例如2009-05-23rkt0001。销售登记票号的编码采用销售单三字的汉语拼音缩写xsd,例如2009-05-23xsd0001。销售退货票号的编码采用退货单三字的汉语拼音缩写thd,例如2009-05-23thd0001。入库结账票号的编码采用入库结三字的汉语拼音缩写rkj,例如2009-05-23rkj0001。销售结账票号的编码采用销售结三字的汉语拼音缩写xsj,例如2009-05-23xsj0001。(4)数据备份(采用28位编码)数据备份编码采用数据备份的英文单词BACKUP,BACKUP2009-05-23-13-40-00001。2.2.3输入设计本系统输入接口应满足如下要求:键盘:标准键盘,具有Windows98功能键。鼠标:两键或三键鼠标小口或USB鼠标。汉字输入法:五笔输入法、拼音输入法等。录入软件界面:本系统所有输入均支持鼠标和键盘两种输入方式。录入方式有文本式和表单式两种风格。文本方式录入该企业的基础信息,如药品信息、客户信息等;表单式主要录入销售和入库相关的业务工作。两种风格都设置了灵活多样的录入方式,在表单式录入时,可同时录入多条记录。输入方式的简单、快捷、易学易用是医药管理系统的基本要求,特别是药品销售的输入直接影响着操作员的开票速度。2.2.4输出设计本系统输出方式采用屏幕显示和打印机输出两种方式。2.2.5系统安全和可靠性设计为保证软件与数据库系统的安全运行,防止不合法的运行或计算机系统的不稳定对系统造成损害,应对系统的软件和硬件进行合理的安全设置和可靠性设计。安全措施包括用户标识和口令,不同操作员的权限设置,数据库文件的加密等。系统安全设计主要应考虑如下几点:(1)应保证计算机系统的稳定性,对相应计算机应配UPS进行断电保护。(2)当本地局域网与本地企业网或Internet连接的时候,网络安全应当是网络建设的首要解决的问题,主要设计容错方案、安装防毒软件、安装防火墙等。(3)在不影响系统功能的情况下要尽可能考虑系统的安全性。(4)进入系统时必须通过操作员密码控制,方可进入系统,用户输入错误密码多次,将退出系统。(5)对公司内部人员对数据的访问进行控制,对用户、信息及操作分类授权。(6)为了防止系统错误、硬件冲突引起的系统瘫痪而造成数据丢失,可以随时对数据进行备份。一旦数据丢失,可以将备份的数据进行恢复。(7)要建立合理的安全制度,防止无关人员随意登录服务器、客户端。防止软件的非法使用。2.2.6主要模块介绍(1)主程序界面主程序也是程序控制前核心,操作权限、程序功能调用等都要通过主程序调用实现。本程序通过菜单、工具栏两种方式调用系统。(2)销售登记销售登记是医药管理系统中的重要部分,可以高效地完成医药商品的销售工作。本模块支持多种结算方式;删除当前行显示的销售信息;打印、预览当前显示的销售单。(3)销售查询销售查询是销售管理模块的重要组成部分。销售查询模块设有两个选项卡,其中【销售信息管理】选项卡记载销售商品的基本信息;【销售信息查询】选项卡可按不同字段,不同条件对销售的商品进行查询,支持模糊查询及在查询结果中查询。(4)入库登记入库登记是库存管理系统的重要组成部分,该模块主要完成商品的入库操作。在入库登记时自动统计入库金额,并可打印,预览当前显示的入库单;支持多种结算方式。(5)药品信息管理药品信息管理是录入药品信息的基础模块,是进行入库,销售,及其他操作的基础。本模块设有两个选项卡,【药品信息管理】完成添加,修改,删除等操作;【药品信息查询】可对药品的基本信息进行查询,支持模糊查询及在查询结果中查询。(6)客户往来帐客户往来帐是库存管理系统的重要组成部分,该模块的主要功能是按用户自定义时间段查询客户往来帐信息,并可完成客户往来帐打印工作[2]。2.2.7系统结构根据该企业的业务情况及要求,结合计算机管理的特点与当前医药企业信息化的方向,设置医药库存管理系统结构图如图所示。药品管理系统药品管理系统帐务管理库存管理系统管理销售管理入库管理调货管理结帐管理基础信息销售退货结帐供应商往来帐修改用户销售查询入库查询仓库管理供应商信息日结库存盘点修改密码销售入库据库入库登记调货登记销售结帐药品信息月结库存查询修改权限销售退货入库退货调货查询入库结帐员工信息客户往来帐数据备份销售退货查询入库退货查询入库退货结帐客户信息图2-1医药库存管理系统结构图2.3数据库设计本系统数据库名为yaopin。数据库yaopin中共包含46个表,其中作为临时表的有20个,作为数据存储表的有26个。临时表:lsdhinfo0、lsdhinfo1、lsgys0、lsgys1、lskcquery0、lskcquery1、1sM10、lsM11、lsrkquery0、lsrkquery1、1srkthinfo0、1srkthinfol、lsxsquery0、lsxsquery1、lsxsthinfo0、lsxsthinfo1、lsyg0、lsyg1、lsypinfo0、lsypinfol.数据存储表:tabbf、tabck、tabdhdj、tabdhph、tabgys、tabjsfs、tabkc、tabkcpddj、tabkcpdph、tabhk、tabpurview、tabpurviewctrl、tabrkdj、tabrkjz、tabrkph、tabrkthdj、tabrkthjz、tabrkthph、tabxsdj、tabxsjz、tabxsph、tabxsthdj、tabxsthjz、tabxsthph、tabyginfo、tabypinfo.由于篇幅原因,下面主要介绍8个关键表的结构。(临时表是为了实现在查询结果中进行查询,在这里不做具体介绍)。tabgys表用于保存供应商的基础信息。表2-4tabgys表字段名类型宽度是否可为空注释gys_idChar20NotNull供应商编码(主)gys_nameChar30Null供应商名称JcChar10Null简称AddressChar50Null地址AreaChar50Null地区mailChar20Null邮编phoneChar20Null电话faxChar20Null传真linkmanChar20Null联系人lm_phoneChar20Null联系人电话bankChar20Null开户银行accountsChar20Null银行帐号taxpayerChar20Null纳税人登记emailChar20Null邮箱tabkc表用于保存库存信息。表2-5tabkc表字段名类型宽度是否可为空注释yp_idChar10NotNull药品编号(主)ck_nameChar30NotNull仓库名称(外)kc_numberIntNull库存数量alert_leverupIntNull警戒上限alert_leverdownIntNull警戒下限tabhk表用于保存客户信息。表2-6tabhk表字段名类型宽度是否可为空注释kh_idChar10NotNull客户编码(主)kh_nameChar30NotNull客户名称jcChar10Null简称addressChar50Null地址areaChar50Null地区mailChar20Null邮编phoneChar20Null电话faxChar20Null传真linkmanChar20Null联系人lm_phoneChar20Null联系人电话bankChar20Null开户银行accountsChar20Null银行帐号taxpayerChar20Null纳税人名称emailChar20Null邮箱tabpurview表用于保存权限信息。表2-7tabpurview表字段名 类型宽度是否可为空注释admi_nameChar20NotNull用户名(主)admi_passwordChar255Null密码admi_purviewIntNotNull权限(外)tabxsdj表用于保存商品的销售信息。表2-8tabxsdj表字段名类型宽度是否可为空注释xs_phChar20NotNull销售票号(外)yp_idChar10Null药品编号(外)ck_nameChar30Null仓库名称(外)slIntNull数量djfloatNull单价jefloatNull金额profitfloatNull毛利tabxsph表用于保存销售票号信息。表2-9tabxsph表字段名类型宽度是否可为空注释xs_phChar20NotNull销售票号(主)pzsfloatNull品种数ysfloatNull应收ssfloatNull实收wsfloatNull未收kh_idChar10NotNull客户编号(外)rqtimeNotNull日期jsfsChar10NotNull结算方式(外)is_jqboolNull是否结清czyChar20NotNull操作员(外)jsrChar20NotNull经手人tabyginfo表用于保存员工的基础信息。表2-10tabyginfo表字段名类型宽度是否可为空注释yg_idChar10NotNull员工编号(主)yg_nameChar20Null员工姓名sexChar5Null员工性别sortChar10Null员工类别positionChar10Null职务rqtimeNull聘用日期salaryfloatNull薪金memoChar100Null备注tabrkdj表用于保存入库登记的相关信息。表2-11tabrkdj表字段名类型宽度是否可为空注释rk_phChar20NotNull入库票号(主)yp_idChar10Null药品编号(外)ck_nameChar30Null仓库名称(外)slfloatNull数量djfloatNull单价jefloatNull金额三系统详细设计3.1主窗体及系统登录设计本章主要介绍程序框架的生成,系统登陆程序设计等内容,包括主窗体程序和系统登陆程序两个部分。3.1.1主窗体设计登录后的主窗体程序是本软件的交互控制中心,具体实现与功能模块相对应的菜单及工具栏设计,通过菜单及工具栏调用相应的子程序。状态栏显示当前系统时间、当前操作员。根据操作员操作权限,设置响相应的菜单栏、工具栏是否有效。3.1.2数据库连接设计为了方便数据库连接的统一控制和方便对异常的捕捉,需要将ADO封装到类中。头文件声明如下:classLRunSql{public: LRunSql(); ~LRunSql(); boolRunSQL(CStringsql); boolCheckSQLResult(CStringsql);public: static_ConnectionPtrm_database; staticboolRollbackTrans(); staticboolCommitTrans(); staticboolBeginTrans(); staticboolClose(); staticboolInitConnectPtr(); staticboolConnectDataBase(); _RecordsetPtrm_recordset;};3.1.3系统登录程序设计为了保证应用程序的安全,通常要设计系统登录程序来验证用户是否合法。3.2基础信息管理设计基础信息管理主要完成企业基础信息的管理,包括药品信息管理,供应商信息管理,客户信息管理,员工信息管理4个子模块。关键技术:在查询结果中查询。在查询结果中查询可以缩小查询范围,更好的进行操作。3.2.1抽象出查询的基类实现目标:完成所有查询系统的基本功能和统一接口,查询系统主要包括药品查询,员工查询,供应商查询,客户查询,销售查询,销售退货查询,入库查询,入库退货查询,调货查询,库存查询10个子模块。这些查询功能有许多相同的地方,可以抽象出查询模块的基类以节省代码。由于存在数据处理的功能,所以决定将信息显示与数据处理分开各建一个基类:对于信息显示,采用从CTabCtrl派生出来的类CBaseTabCtrl做基类;对于数据处理,自定义一个CDataTable做基类。(1)创建数据访问基类CDataTable每个数据访问基类对应数据库的表或视图,可以对数据库进行增加,修改,删除,查询操作。数据显示在ClistCtrl控件上。 (2)创建信息显示基类CBaseTabCtrl查询界面分为两个视图显示查询数据,一个视图用列表控件显示所有查询数据,另一个视图用来显示某条记录的详细信息。图3-1信息查询界面3.2.2基础信息管理类的具体设计实现目标:具体实现用户的交互,完成数据的基本操作。主要功能有:处理查询增加操作修改操作保存操作删除操作3.3销售管理销售管理主要完成药品销售信息的管理,包括销售登记,销售退货,销售查询,销售退货查询4个子模块。3.3.1销售登记模块设计图3-2销售登记界面整个界面由4个部分组成。标题部分包括用户录入客户编号,客户名称,结算方式,经手人,销售日期。自动生成票号部分根据销售票号表自动生成新的销售票号。列表控件部分以列表形式录入销售数据。功能按纽提供实现确定,打印,删除,退出功能的按纽。创建左上角的标题信息。创建白色背景,其他控件做他的子窗体。对于经手人和结算方式两个下拉框,需要从数据库中取得相应的数据来初始化两个窗口。系统自动产生销售编号,系统4个按纽,其中打印按纽将在第十五章详细介绍。3.3.2销售退货模块设计图3-3销售退货界面整个界面由4个部分组成。1.标题部分包括用户输入结算方式,经手人,日期。2.自动生成退货票号部分根据销售退货票号表自动生成新的销售退货票号。3.列表控件部分以列表形式录入销售退货数据。4.功能按纽提供实现确定,打印,删除,退出功能的按纽。销售退货模块与销售模块相似,不做累叙。其他管理模块也与之相似,只做简单介绍。3.3.3销售查询模块设计该模块设计思路与基础信息查询模块相似,主要区别在与查询字段名不同。3.3.4销售退货查询模块设计该模块设计思路与基础信息查询模块相似,主要区别在与查询字段名不同。3.4入库管理入库管理主要完成药品入库等信息的管理,包括入库登记和入库退货登记两个数据录入子模块及入库登记查询和入库退货查询两个信息查询子模块。3.4.1入库登记模块设计图3-4入库登记界面整个界面由4个部分组成。1.标题部分包括用户录入供应商编号,供应商名称,结算方式,经手人,日期。2.自动生成票号部分根据入库票号表自动生成新的入库票号。3.列表控件部分以列表形式录入入库数据。4.功能按纽提供实现确定,打印,删除,退出功能的按纽。3.4.2入库退货登记模块设计图3-5入库退货登记界面整个界面由4个部分组成。1.标题部分包括用户录入结算方式,经手人,日期。2.自动生成票号部分根据入库退货票号表自动生成新的入库退货票号。3.列表控件部分以列表形式录入入库退货数据。4.功能按纽提供实现确定,打印,删除,退出功能的按纽。3.4.3入库登记查询模块设计该模块设计思路与基础信息查询模块相似,主要区别在与查询字段名不同。3.4.4入库退货查询模块设计该模块设计思路与基础信息查询模块相似,主要区别在与查询字段名不同。3.5调货管理调货管理主要对药品调货信息进行管理,包括调货登记和调货查询两个子模块。3.5.1调货登记模块设计图3-6调货登记界面整个界面由4个部分组成。1.标题部分包括用户录入经手人,日期,备注。2.自动生成票号部分根据调货票号表自动生成新的调货票号。3.列表控件部分以列表形式录入调货数据。4.功能按纽提供实现确定,打印,删除,退出功能的按纽。3.5.2调货查询模块设计该模块设计思路与基础信息查询模块相似,主要区别在与查询字段名不同。3.6库存管理库存管理主要对药品库存信息进行管理,主要包括库存盘点,库存查询和仓库管理3个子模块。3.6.1库存盘点模块设计图3-7库存盘点界面整个界面由4个部分组成。1.标题部分包括用户录入经手人,日期。2.自动生成票号部分根据盘点票号表自动生成新的盘点票号。3.列表控件部分以列表形式录入盘点数据。4.功能按纽提供实现确定,打印,删除,退出功能的按纽。3.6.2库存查询模块设计图3-8库存查询界面该模块设计思路与基础信息查询模块相似,主要区别在与查询字段名不同。3.6.3仓库管理模块设计仓库管理模块主要实现增加,修改,删除仓库信息等功能。图3-9仓库管理界面3.7帐务管理帐务管理按功能分为结帐管理和帐务管理两大模块。其中结帐管理由销售结帐,销售退货结帐,入库结帐和入库退货结帐4个子模块组成;帐务管理由日结算,月结算,供应商往来帐,客户往来帐4个子模块组成。3.8打印及打印预览概述MFC准备了用于打印预览的设备环境类CPreviewDC和预览视图类CPreviewView,并且在Document/View模式下提供了方便的打印方式,而且还有已经做好的打印预览,当使用向导生成一个单文档的应用程序,就可以使用现成的打印预览和打印功能。图3-10视图绘图界面图3-11打印预览界面四系统实现4.1主窗体及系统登录设计4.1.1主窗体程序设计(1)创建主窗体选择应用程序类型为“基于对话框”,其他采用缺省设置。(2)创建程序菜单栏在menu选项中添加菜单栏,并编辑相应的菜单资源。(3)创建工具栏应用程序中经常要使用工具栏,工具栏也是最常用的界面元素,对应着应用程序最常用的功能。登录后的主窗体共有9个工具栏按纽,分别是销售登记,销售退货,销售结帐,入库登记,入库退货,入库结帐,调货登记,库存登记,退出。创建工具栏可使用mfc类库中的CtoolBarCtrl类,该类用来生成工具条。本系统主窗体的工具栏将引用MSDN提供的类CstandardBar,该类派生自CtoolBarCtrl类。 SetBitmapSize(CSize(32,32));//设置单个位图大小 VERIFY(AddBitmap(m_nButtonCount,IDR_STANDARDBAR)!=-1);//添加位图(4)创建状态栏为了使应用程序操作界面更加友好,可以使用状态栏显示程序当前的状态信息或提示信息。VC中提供了CstatuBarCtrl类显示状态栏。状态栏显示作者信息,当前操作员及时间。在CA1Dlg的初始化函数中初始化状态栏对象。 CA1App*app=(CA1App*)::AfxGetApp();MessageBox(app->m_sUserName);//显示操作员信息CTimet=CTime::GetCurrentTime(); CStrings=t.Format("%H:%M:%S"); s="当前系统时间:"+s;//将访问时间转化为字符串 CStringstr; str.LoadString(IDS_COMPANY);//显示作者信息 this->SetTimer(12,1000,NULL);//设置时间响应频率(5)设置窗体背景设置窗体背景加入一个Bitmap资源,增加界面友好度。(6)设置权限根据不同的用户,对用户权限加以区分。根据用户名取得用户的权限值,再根据权限值来确定模块是否可用(8个模块)。4.1.2数据库连接设计该阶段的具体设计详见本文3.1.2部分。4.1.3系统登录程序设计图4-1登录界面确定按钮进行密码判断,代码如下:voidCDlgLogin::OnOK(){ BOOLbLogOn=FALSE; CStringsUserPassWord,sPurview,sUserName,sInputPassWord; LRunSqlm_runsql; CStringsql; _variant_tvalue; CStringsError; this->m_editPassWord.GetWindowText(sInputPassWord); this->m_editUserName.GetWindowText(sUserName); CA1App*App=(CA1App*)AfxGetApp(); sql.Format("selectadmi_password,admi_purviewfromtabpurviewwhereadmi_name='%s'", sUserName); if(m_runsql.CheckSQLResult(sql)) { value=m_runsql.m_recordset->GetCollect("admi_password"); if(value.vt!=VT_NULL) sUserPassWord=(char*)(_bstr_t)value; value=m_runsql.m_recordset->GetCollect("admi_purview"); if(value.vt!=VT_NULL) sPurview=(char*)(_bstr_t)value; if(sUserPassWord==CCrypt::Encrypt(sInputPassWord)) { App->m_sUserName=sUserName; App->m_sPurview=sPurview; bLogOn=TRUE; } else { sError="请重新输入密码。\n注意大小写!","密码错误"; this->m_editPassWord.SetFocus(); } } else { sError="请确认用户名大小写是否正确!","无此用户"; this->m_editUserName.SetFocus(); } if(bLogOn)EndDialog(IDOK); else { m_iLogOnCount++; if(m_iLogOnCount>=3) this->EndDialog(0); else MessageBox(sError); }}4.2基础信息管理设计本系统后台数据库为access数据库,在数据库中建两个表充当临时表,分别进行0,1编号。CStringm_sTable;CStringm_sTempTables[2];Intm_iCurTable;如果用户不选择在查询结果中查询,就从查询视图中进行查询,并将结果送到当前临时表中;如果拥护在查询结果中查询,就在当前临时表中进行查询,并将结果送到另一个临时表中。CStringoutput;CStringinput;Intsel=m_check.GetCheck();if(sel){output=m_sTempTables[m_iCurTable];input=m_sTempTables[!m_iCurTable];m_iCurTable=!m_iCurTable;}else{output=m_sTable;input=m_sTempTables[m_iCurTable];}基础信息管理类在前面提到过分为:(1)增加操作(2)修改操作(3)保存操作(4)删除操作在查询的组合框中选择要查询的字段,在查询的文本框中输入查询条件,单击确定按纽进行查询,系统刷新列表控件。查询时使用的比较运算符直接用>、<、<=、>=、LIKE来表示。处理查询时,因涉及到字符串查询、数值查询、日期查询,所以需要在代码中对查询内容加以区分。根据不同的查询内容,生成不同的查询语句。查询结果中查需要建立两个临时表,在这里需要控制。代码入下:voidCTabYG::OnChaXun(){this->m_dataYg.RefreshListView(this->PrepareSQL());}CStringCTabYG::PrepareSQL(){ CStringfield_name,field,fuhao,value,inputtable,outputtable,sql; this->PrepareTables(outputtable,inputtable); m_combofields.GetWindowText(field_name); field=this->m_dataYg.GetFieldFromName(field_name); m_combofuhao.GetWindowText(fuhao); if(this->state==STRINGQUERY) { m_editvalue.GetWindowText(value); if(fuhao=="LIKE")value="%"+value+"%"; sql.Format("INSERTINTO%sSELECT*FROM%sWHERE%s%s'%s'",inputtable,outputtable,field,fuhao,value); m_dataYg.m_runsql.RunSQL(sql); sql.Format("select*from%s",inputtable); } else { m_tcvalue.GetWindowText(value); value="#"+value+"#"; sql.Format("INSERTINTO%sSELECT*FROM%sWHERE%s%s%s",inputtable,outputtable,field,fuhao,value); m_dataYg.m_runsql.RunSQL(sql); sql.Format("select*from%s",inputtable); } returnsql;}(2)增加操作编号字段由系统自动生成,其他信息由用户输入,单击保存按纽,将信息保存到数据库中。代码入下:voidCTabYG::OnZengJiaClick(){ CBaseTabCtrl::OnZengJiaClick(); CTimet=CTime::GetCurrentTime(); m_rq.SetTime(&t); m_edits[0].SetWindowText(this->ChanShengID()); m_edits[0].SetReadOnly(); m_edits[1].SetFocus();}(3)修改操作用户选定一条记录,单击修改按纽,用户可以输入修改信息,修改完成,按保存按纽保存修改信息。代码如下:voidCTabYG::OnXiuGaiClick(){ CStringstr; m_edits[0].GetWindowText(str); if(str=="") { MessageBox("请选择某条纪录"); return; } CBaseTabCtrl::OnXiuGaiClick(); m_edits[0].SetReadOnly(); m_edits[1].SetFocus(); m_edits[1].SetSel(0,-1);}(4)保存操作增加、修改记录的操作在保存按纽的消息相应函数中。代码如下:voidCTabYG::OnBaoCunClick(){ CStringvalue; this->GetValuesFromEdits(); if(this->baseinfo_state==ZENGJIA) { if(!this->m_dataYg.InsertCurValue()) { MessageBox("增加数据错误","错误"); return; } } elseif(this->baseinfo_state==XIUGAI) { this->GetValuesFromEdits(); if(!this->m_dataYg.UpdateCurValue()) { MessageBox("修改数据错误","错误"); return; } } else return; CBaseTabCtrl::OnBaoCunClick(); baseinfo_state=NORMAL;}(5)删除操作选定一条记录,单击删除按纽,系统提示用户是否确定删除,然后删除数据库相关内容。代码如下:voidCTabYG::OnShanChuClick(){ CStringstr; m_edits[0].GetWindowText(str); if(str=="") { MessageBox("请选择某条纪录"); } if(MessageBox("确定要删除吗?删除后不可恢复,并且相关的库存信息也将被删除!","注意!", MB_YESNO)!=IDYES) return; this->GetValuesFromEdits(); if(!this->m_dataYg.DeleteCurValue()) return; CBaseTabCtrl::OnShanChuClick(); this->m_dataYg.data=CDataYG::data_yg();}4.3库存管理4.3.1仓库管理模块设计(1)实现增加按纽:图4-2增加仓库界面voidCDlgCK::OnButtonAdd(){CDlgTheCKdlg;dlg.m_bAdd=true;if(dlg.DoModal()==IDOK){ inti=m_list.GetItemCount();this->m_list.InsertItem(i,dlg.m_strCkName);this->m_list.SetItemText(i,1,dlg.m_strCkAdmi);}}(2)实现删除按纽:voidCDlgCK::OnButtonDel(){ if(MessageBox("确定删除仓库及其相关的库存信息吗?","注意",MB_YESNO)!=IDYES) return; intmark=this->m_list.GetSelectionMark(); if(mark<0)return; m_sSelectedUser=this->m_list.GetItemText(mark,0); CStringsql; bool m_bNULL=true; _variant_tvalue; sql.Format("selectkc_numberfromtabkcwhereck_name='%s'",m_sSelectedUser); m_runsql.CheckSQLResult(sql); while(!m_runsql.m_recordset->adoEOF) { value=m_runsql.m_recordset->GetCollect("kc_number"); if(value.vt!=VT_NULL) { if(value.lVal!=0) { m_bNULL=false; break; } } m_runsql.m_recordset->MoveNext(); } if(!m_bNULL){ MessageBox("请将数据库清0后,再删除该仓库!","注意"); return; } sql.Format("delete*fromtabckwhereck_name='%s'",m_sSelectedUser); m_runsql.RunSQL(sql); sql.Format("delete*fromtabkcwhereck_name='%s'",m_sSelectedUser); m_runsql.RunSQL(sql); m_list.DeleteItem(mark);}(3)实现修改按纽:图4-3修改仓库界面voidCDlgCK::OnButtonXiugai(){ intmark=this->m_list.GetSelectionMark(); if(mark<0)return; CDlgTheCKdlg; dlg.m_bAdd=false; dlg.m_strCkName=this->m_list.GetItemText(mark,0); dlg.m_strCkAdmi=this->m_list.GetItemText(mark,1); dlg.DoModal(); this->m_list.SetItemText(mark,0,dlg.m_strCkName); this->m_list.SetItemText(mark,1,dlg.m_strCkAdmi);}4.4帐务管理4.4.1供应商往来帐,客户往来帐管理模块设计图4-4供应商往来帐界面图4-5客户往来帐界面以时间和编号为查询条件进行查询。代码入下:voidCDlgWLZ::OnButtonQuery(){ this->m_tcRqDown.GetWindowText(this->m_strRqDown); this->m_tcRqUp.GetWindowText(this->m_strRqUp); this->m_editId.GetWindowText(m_strId); if(this->m_strlist->Find(m_strId)==NULL) { MessageBox("请输入正确的编号","错误"); m_editId.SetFocus(); return; } if(m_strRqUp==this->m_strOldRqUp&&m_strRqDown==this->m_strOldRqDown&&this->m_strOldId==this->m_strId) return; else { this->m_strOldRqUp=m_strRqUp; this->m_strOldRqDown=m_strRqDown; this->m_strOldId=this->m_strId; } this->RefreshListView(); this->m_list.SetFocus(); }4.4.2结帐管理模块设计图4-6销售结帐界面单击确定按纽时,确定所选信息,刷新数据库。voidCDlgXSJZ::OnButton1(){ if(!this->CheckAll())return; is_jq=0; if(m_dLeft<=0.00001)is_jq=-1; CStringph,fs,rq,czy,jsr,bz,sql; this->m_editPh.GetWindowText(ph); this->m_comboJsr.GetWindowText(jsr); this->m_comboSkfs.GetWindowText(fs); this->m_editBz.GetWindowText(bz); this->m_tcRq.GetWindowText(rq); CA1App*app=(CA1App*)AfxGetApp(); czy=app->m_sUserName;sql.Format("update%ssets%s=%f,w%s=%f,is_jq=%dwhere%s='%s'" ,this->m_strTablePh, this->m_strsf,this->m_dYsfk-m_dLeft, this->m_strsf,m_dLeft,is_jq, this->m_strPhKeyField,this->m_strdataPh); this->m_runsql.RunSQL(sql); sql.Format("INSERTINTO%s(%s,%s,je,fs,rq,czy,jsr,bz)VALUES('%s','%s',%f,'%s',#%s#,'%s','%s','%s')" ,this->m_strTableJz, this->m_strJzKeyField,this->m_strPhKeyField, ph,m_strdataPh,this->m_dSFk_BC,fs,rq,czy,jsr,bz); this->m_runsql.RunSQL(sql); MessageBox("OK","医药管理系统"); this->EndDialog(0);}4.4.3日结算,月结算管理模块设计日结算模块完成日结帐操作,完成信息汇总操作,并支持打印功能。图4-7日结算界面月结算模块完成月结帐操作,完成信息汇总操作,并支持打印功能。图4-8月结算界面日结算,月结算的查询方式与客户往来帐,供应上往来帐相似,在这里不做累叙。4.5系统设置管理系统设置管理主要管理与系统设置有关的内容。主要包括密码设置,权限设置,拥护设置,数据备份,数据恢复5个子模块。4.5.1密码设置模块设计图4-9主要设置当前用户的密码设置当前用户密码,密码效验通过,完成密码设置工作。只准许设置当前操作员密码,不能设置其他用户密码。用户单击确定按纽时,检查新密码与确认密码是否相等,若不相等则返回,若相等则修改数据库信息。实现确定按纽代码如下:voidCDlgChangePassWord::OnOK(){ CStringsMM1; CStringsMM2; m_editMM1.GetWindowText(sMM1); m_editMM2.GetWindowText(sMM2); if(sMM1!=sMM2) { MessageBox("请确认密码相同","医药管理系统"); m_editMM2.SetFocus(); } else { try{ CStringsql; CA1App*app=(CA1App*)AfxGetApp(); sMM2=CCrypt::Encrypt(sMM2); sql.Format("updatetabpurviewsetadmi_password='%s'whereadmi_name='%s'", sMM2,app->m_sUserName); m_runsql.RunSQL(sql); } catch(_com_error&e) { AfxMessageBox(e.ErrorMessage()); return; } MessageBox("成功修改密码!","医药管理系统"); } CDialog::OnOK();}4.5.2权限设置模块设计图4-10权限设置界面权限设置分超级用户,管理员,标准用户,一般用户4个用户组。超级用户的权限不限,可以使用全部功能。并且可以修改其他用户的权限。设计对话框及相关资源代码入下:voidCDlgPurview::OnRadio1(){ this->UpdateData(); this->GetDataFromDatabase(m_iPurview); this->RefreshData(t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论