超市进销存管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护,以及前台销售应用程序两个方面。对于后台数据维护关联部分要求建立起一个数据一致性和完整性强、数据安全性好的数据库。而对于前台销售部分则要求应用程序功能完备及操作相对简便等特点。通过阅读本章,可以学习到:如何在Oracle数据库中创建表如何使用程序向Oracle数据库插入数据如何使用程序在Oracle数据库中修改和删除数据如何在Oracle数据库中进行查询如何在基于对话框的程序中进行打印超市进销存管理系统(VisualC++6.0+Oracle10g数据库实现)17第章VisualC++典型模块与项目开发实战大全·2·17.1开发背景随着社会经济的发展,人们的工作越来越忙碌,为了节省时间,人们已经习惯到超市采购日常的生活用品,在节省时间的同时也促进了超市的发展。而超市为了能够吸引更多的消费者,应该引进更多的商品,并且要完善商品的管理。开发超市进销存管理系统不但可以简化超市的日常管理,并且可以减少员工的工作量,在提高效率的同时压缩了成本,是超市必不可少的管理工具。17.2需求分析在超市的经营中,离不开进货、销售和存储3方面,而如何能将这3方面都管理好就成了首要问题。在过去,通常是通过大量的人力来保证管理的正常运作,但当员工进行交接时就容易出错,而且由于参与管理的人相对较多,出现问题很难分清责任。为了解决这个问题,超市都开始使用超市进销存管理系统,根据需要,超市进销存管理系统应该具有以下功能:前台销售结账。基本信息管理。基本信息查询。日结查询。超市小票打印。17.3系统设计17.3.1系统目标对于超市进销存管理系统这样的数据库管理系统,必须具有存储数据量大,满足使用方便、操作灵活和安全性好等设计需求。本系统在设计时应该满足以下几个目标:采用人机对话的操作方式,界面设计美观友好、操作灵活、方便、快捷、准确、数据存储安全可靠。系统可以进行大量数据的存储和操作。提供基本信息查询功能,查询员工和库存等信息。提供结算查询功能,查询每天的销售额。在销售时提供超市小票打印功能。系统昀大限度地实现易维护性和易操作性。系统运行稳定、安全可靠。第17章超市进销存管理系统(VisualC++6.0+Oracle10g数据库实现)·3·17.3.2系统功能结构超市进销存管理系统功能结构图如图17.1所示。超市进销存管理系统超市进销存管理系统后台超市进销存管理系统前台销售基础信息商品信息员工信息供应商信息销售管理销售退货销售查询销售退货查询仓库管理入库登记入库退货库存信息退货查询财务管理入库退货库存信息系统管理用户管理关于图17.1超市进销存管理系统17.3.3系统预览超市进销存管理系统由多个功能模块组成,下面仅列出几个典型的功能模块,其他模块可参见光盘中的源程序。超市进销存管理系统的后台登录模块如图17.2所示,该模块用于管理员登录系统;超市进销存管理系统后台主窗口如图17.3所示,后台主窗口用于进行相关的操作。图17.2后台登录模块图17.3后台主窗口供应商信息模块如图17.4所示,该模块用于将供应商信息添加到数据库中;日结查询模块如图17.5所示,该模块用于查询当日的销售情况。VisualC++典型模块与项目开发实战大全·4·图17.4供应商信息模块图17.5日结查询模块17.3.4业务流程图超市进销存管理系统的业务流程图如图17.6所示。用户登录是退出系统否设置基础信息员工管理供应商管理商品信息管理仓库管理入库等级退货查询入库退货库存信息前台销售客户选购商品结账销售管理财务管理系统管理图17.6超市进销存管理系统的业务流程图17.3.5数据库设计1.数据库分析超市进销存管理系统需求包括对商品信息、供应商信息、员工信息、销售信息、退货信息和库存信息的管理,这些信息都保存在数据库中,管理员可以通过修改数据库中的数据来对这些信息进行管第17章超市进销存管理系统(VisualC++6.0+Oracle10g数据库实现)·5·理。在数据库中存储了9张数据表,用于存储相关信息,如图17.7所示。图17.7数据库中的表2.数据库概念设计根据前面介绍的需求分析和系统设计规划出本系统中使用的数据库实体对象,分别为管理员实体、商品实体、供应商实体、员工实体、库存实体和销售实体等。下面将给出几个关键实体的E-R图。1)管理员实体管理员实体包括管理员名称、管理员密码和管理员权限。管理员实体E-R图如图17.8所示。2)商品实体商品实体包括商品编号、商品名称、商品简码、商品类别、商品单位、条形码、进货价格和销售价格。商品实体E-R图如图17.9所示。3)供应商实体供应商实体包括供应商编号、供应商名称、供应商简称、供应商地址、联系人、供应商电话和供应商传真。供应商实体E-R图如图17.10所示。4)员工实体员工实体包括员工编号、员工姓名、员工性别、员工职务和员工薪资。员工实体E-R图如图17.11所示。VisualC++典型模块与项目开发实战大全·6·管理员管理员权限管理员名称管理员密码商品商品简码商品类别商品单位条形码进货价格商品名称商品编号销售价格图17.8管理员实体E-R图图17.9商品实体E-R图供应商供应商简称供应商地址联系人供应商电话供应商名称供应商编号供应商传真员工员工姓名员工性别员工职务员工编号员工薪资图17.10供应商实体E-R图图17.11员工实体E-R图5)库存实体库存实体包括商品编号、商品名称、商品进价、商品数量、进货时间、供应商编号和供应商名称。库存实体E-R图如图17.12所示。6)销售实体销售实体包括销售票号、商品编号、商品名称、商品简码、商品类别、条形码、销售数量、商品单价和销售时间。销售实体E-R图如图17.13所示。库存商品进价商品数量进货时间供应商编号商品名称商品编号供应商名称?????????????????????????????????????????图17.12库存实体E-R图图17.13销售实体E-R图3.数据库逻辑结构设计本例使用的是Oracle10g数据库,在安装Oracle数据库时会自动创建一个全局数据库供用户使用。根据在数据库概念设计中给出的数据库实体E-R图,可以设计数据表结构。在Oracle10g客户端企业第17章超市进销存管理系统(VisualC++6.0+Oracle10g数据库实现)·7·管理控制台中,方案是实现管理表、索引和视图等Oracle10g对象的工具,所以在创建表时需要选择该表处在哪个方案中。下面就来介绍一下创建表的步骤。(1)在Oracle10g数据库“企业管理器”的“管理目标导航器”中将目录逐级展开,在要创建表的方案下会有一个表文件夹,用鼠标右键单击该文件夹,在弹出的快捷菜单中选择“创建”命令,如图17.14所示。(2)在弹出的“创建表”对话框中的“一般信息”选项卡中输入表名,在“方案”组合框中选择方案名(本例使用的是MR),在“表空间”组合框中选择表所在的空间(本例使用的是DRSYS),在“表结构编辑区”中设置字段名、数据类型和字段大小等信息,如图17.15所示。图17.14管理目标导航器VisualC++典型模块与项目开发实战大全·8·图17.15创建表(3)单击“创建”按钮,一个数据表就创建成功了。下面给出超市进销存管理系统数据库中主要表的表结构。(1)TB_USER(管理员信息表),该表用于保存管理员的信息,如图17.16所示。(2)TB_SHANGPIN(商品信息表),该表用于保存超市所有商品的信息,如图17.17所示。图17.16管理员信息表图17.17商品信息表(3)TB_PROVIDE(供应商信息表),该表用于保存供应商的信息,如图17.18所示。(4)TB_EMPLOYEES(员工信息表),该表用于保存员工的相关信息,如图17.19所示。第17章超市进销存管理系统(VisualC++6.0+Oracle10g数据库实现)·9·图17.18供应商信息表图17.19员工信息表(5)TB_DEPOT(商品库存信息表),该表用于保存商品库存的信息,如图17.20所示。(6)TB_SELL(商品销售信息表),该表用于保存商品销售情况的详细信息,如图17.21所示。图17.20商品库存信息表图17.21商品销售信息表17.4公共模块设计在使用ADO连接数据库时,通常将连接代码封装成一个类,这样在程序的各个模块中都可以使用,可以降低代码的重复使用。本实例将连接数据库的代码封装到了ADOConn类中,该类的头文件如下:#if!defined(AFX_ADOCONN_H__5FB9A9B2_8D94_44F7_A2DA_1F37A4F33D10__INCLUDED_)#defineAFX_ADOCONN_H__5FB9A9B2_8D94_44F7_A2DA_1F37A4F33D10__INCLUDED_#importC:\ProgramFiles\CommonFiles\System\ado\msado15.dllno_namespace\rename(EOF,adoEOF)rename(BOF,adoBOF)//导入ADO动态连接数据库#if_MSC_VER1000#pragmaonce#endif//_MSC_VER1000classADOConn{public:_ConnectionPtrm_pConnection;//连接对象指针_RecordsetPtrm_pRecordset;//记录集对象指针public:ADOConn();virtual~ADOConn();voidOnInitADOConn();//连接数据库BOOLExecuteSQL(_bstr_tbstrSQL);//执行SQL语句VisualC++典型模块与项目开发实战大全·10·_RecordsetPtr&GetRecordSet(_bstr_tbstrSQL);//执行SQL查询并返回记录集指针voidExitConnect();//关闭记录集并断开数据库连接};#endif//!defined(AFX_ADOCONN_H__5FB9A9B2_8D94_44F7_A2DA_1F37A4F33D10__INCLUDED_)ADOConn类的源文件如下:voidADOConn::OnInitADOConn()//用于连接数据库{try{m_pConnection.CreateInstance(ADODB.Connection);//创建连接对象实例charstrConnect[]=Provider=MSDAORA.1;Password=sxm;UserID=mr;DataSource=mrsoft_sxm;PersistSecurityInfo=True;m_pConnection-Open(strConnect,,,adModeUnknown);//打开数据库}catch(_com_errore){AfxMessageBox(e.Description());//弹出错误处理}}BOOLADOConn::ExecuteSQL(_bstr_tbstrSQL)//用于执行SQL语句{try{if(m_pConnection==NULL)//判断是否已连接数据库OnInitADOConn();m_pConnection-Execute(bstrSQL,NULL,adCmdText);//执行SQL语句returntrue;//返回真值}catch(_com_errore){e.Description();returnfalse;//返回假值}}voidADOConn::ExitConnect()//用于关闭记录集并断开数据库连接{if(m_pRecordset!=NULL)//判断记录集是否打开m_pRecordset-Close();//关闭记录集m_pConnection-Close();//断开数据库连接}_RecordsetPtr&ADOConn::GetRecordSet(_bs