图书销售管理系统1引言传统的图书销售管理方法,都是通过人工统计和计算的管理方式进行的。这样的管理方法不但费时费力,也容易产生计算上的错误和疏漏;计算机技术的全面普及,打破了书店管理的传统管理方法,提高了管理效率的同时,克服了传统管理方法中易产生的问题,使管理员能够有序的、全面的对图书销售和库存进行管理。网上图书销售系统可以完成书店的日常管理,如图书录入、图书销售、销售统计、查询库存等功能,迅速准确地对已售图书和剩余库存进行统计和汇总工作,大大提高了书店的管理效率和准确性。2需求分析2.1国内外研究的现状在现代化的书店中,对图书销售工作运用现代化技术进行管理,是提高工作效率的有效手段。图书销售管理是书店日常工作中非常重要的一个方面,越来越受到书店经营者的重视。通过计算机管理系统对图书销售进行全面的统计与管理,全面解决了书店经营过程中所遇到的各种问题,并且克服了传统管理方式中的易出错等问题。图书销售管理系统成为书店管理的首选管理工具。2.2功能需求2.2.1待开发软件的功能需求本系统是根据书店的实际需求而开发的,要求稳定、可靠的实现图书销售的自动化管理,通过本系统可以达到以下目标:1.图书录入,包括图书的基本信息,如分类、进价、售价、作者等。2.图书销售,包括图书的售价、折扣、销售日期,并实现对库存量的修改。3.销售统计,包括按图书类型、书名、作者、出版社等进行统计。4.查询库存,对指定的某本图书剩余库存量进行查询。5.售完图书查询,对已售完图书进行查询。2.2.2待开发软件的功能按照用户需求,要满足以上功能,我设计出了图书销售管理系统的系统功能图,如图2.1所示。图2.1图书销售管理系统的系统功能图综合系统要求,对图2.1所示的系统功能解释如下:图书录入,包括图书的基本信息,如分类、进价、售价、作者等。图书销售,包括图书的售价、折扣、销售日期,并实现对库存量的修改。销售统计,包括按图书类型、书名、作者、出版社等进行统计。查询库存,对指定的某本图书剩余库存量进行查询。售完图书查询,对已售完图书进行查询。通过以上分析,可以得到仓库管理系统的数据流图,如图2.2所示。图2.2图书管理系统的数据流图2.3数据描述2.3.1数据库概要说明数据库中包括管理员信息表、图书基本信息表、图书类型表、图书销售记录表等4个数据表。图2.3所示的即为本系统中数据库中的数据表结构图,该数据表结构图包含图书销售管理系统图书录入查询库存图书销售销售统计售完图书查询管理员图书信息处理图书管理反馈信息图书信息反馈信息记录数据数据库系统所有数据表。可以清晰地反应数据库信息。图2.3数据表结构图2.3.2主要数据表的结构表2.1Pwd(管理员信息表)字段名数据类型字段大小描述IDint4管理员帐号Passwordnvarchar50r密码表2.2BookInfo(图书基本信息表)字段名数据类型字段大小描述BookIDint4图书编号BookNamenvarchar50图书名称CategoryIDint4图书类型编号Authornvarchar50作者Publishernvarchar50出版社PublishDatesmalldatetime4出版日期Purchasefloat8进价Pricefloat8售价Stockint4库存本数Discountint4折扣BarCodenvarchar50条形码表2.3BookCategory(图书类型表)字段名数据类型长度描述CategoryIDint4图书类型编号CategoryNamenvarchar8图书类型名称表2.4BookSale(图书销售记录表)字段名数据类型长度描述IDint4销售记录编号BookIDint4图书编号SalePricefloat8实际售价SaleDatesmalldatetime4销售日期2.4数据库描述本软件采用SQL数据库。3概要设计本系统是根据书店的实际需求而开发的,完全能够帮助书店实现高效、准确的图书销售自动化管理。在分析阶段,我们已经提出了系统的结构和数据字典。本节我们将对系统的使用环境作简要介绍,并对该系统作概要设计。3.1系统运行环境P4机Windows操作系统VisualC++6.03.2系统功能模块设计在前面系统功能分析的基础上,结合VisualC++程序编制的特点,得到如图3.1所示的系统功能模块图。图3.1图书销售管理系统功能模块图各模块功能分配如下:(1)用户登陆功能:管理员登陆模块(M1)。(2)图书录入功能:图书录入模块(M2)。(3)图书销售功能:图书销售模块(M3)。(4)销售统计功能:销售统计模块(M4)。(5)查询图书库存功能:查询库存模块(M5)。(6)售完图书查询功能:售完图书查询模块(M6)。图书销售管理系统图书录入模块(M2)查询库存模块(M5)图书销售模块(M3)销售统计模块(M4)售完图书查询模块(M6)管理员登录模块(M1)3.3系统处理流程(1)系统启动,进入身份验证。(2)初始化系统,导入数据库。(3)录入图书信息。(4)图书销售。(5)统计图书销售信息。(6)查询图书库存信息。(7)查询已售完图书信息。(8)退出系统。3.4接口设计3.4.1外部接口(1)用户界面采用图形用户界面,包含菜单、按钮、对话框等元素。(2)软件接口软件运行于VisualC++6.0平台上。(3)硬件接口运行于PC机上。3.4.2内部接口(1)用户登陆模块(M1):由相应事件驱动消息激活,完成用户登陆功能,之后进入消息循环状态。(2)图书销售模块(M3):由相应事件驱动消息激活,完成图书销售功能,之后进入消息循环状态。(3)销售统计模块(M4):由相应事件驱动消息激活,完成销售统计功能,之后进入消息循环状态。(4)查询库存模块(M5):由相应事件驱动消息激活,完成查询库存功能,之后进入消息循环状态。(5)售完图书查询模块(M6):由相应事件驱动消息激活,完成售完图书查询功能,之后进入消息循环状态。4详细设计该系统采用VC++6.0中的MFC连接SQL数据库的方式,使用图形用户界面,主要实现图书录入、图书销售等功能。下面具体对各模块进行介绍。4.1登录模块及主界面在登录界面(如图4.1所示)中输入用户名和密码,登录成功后进入主界面。登陆框流程图如图4.2所示,系统主界面如图4.3所示,单击某个按钮就能弹出某个功能的界面。图4.1系统登录界面图4.2登录模块流程图输入用户名开始验证密码是否正确输入密码登录成功进入主界面结束是否选择帐号类型图4.3系统主界面4.2图书录入模块4.2.1实现目标添加图书信息,图书录入对话框的设计如图4.4所示。“保存”按钮对应的方法为RAddBookDlg::OnSave(),流程图如图4.5所示。图4.4图书录入对话框图4.5RAddBookDlg::OnSave()方法的流程图4.2.2设计步骤(1)向项目中添加一个新Dialog资源,资源ID为IDD_ADDBOOK。在IDD_YGTJK对话框资源中单击鼠标右键,执行弹出快捷菜单的“Properties”菜单命令,打开“DialogProperties”对话框。在“DialogProperties”对话框中选择General选项卡,更改其“Caption”文本框内容为“图书信息录入”。(2)从Controls面板上向Dialog资源中添加所需控件,更改资源的属性,并为资源设置相对应的变量,如表4.1所示。表4.1图书录入Dialog资源属性设置IDPropertiesMemberVariablesTypeMemberIDC_BK_CATEGORY默认文本CategoryNameIDC_BK_NAME默认文本BookNameIDC_BK_AUTHOR默认文本AuthorIDC_BK_PUBLISHER默认文本PublisherIDC_BK_DATE默认日期/时间PublishDateIDC_BK_PURCHASE默认数字PurchaseIDC_BK_PRICE默认数字PriceIDC_BK_PAYOFF默认数字Price开始结束输入图书基本信息判断输入是否正确且完整添加该信息到关联表并写入数据库是否IDC_BK_STOCK默认数字StockIDC_BK_BARCODE默认文本BarCodeIDC_BK_DISCOUNT默认数字DiscountIDC_RESETCaption重填IDC_SAVECaption添加IDCANCELCaption退出4.2.3代码分析(1)打开ClassWizard窗口,添加在OnInitDialog成员函数,向OnInitDialog添加代码如下:BOOLRAddBookDlg::OnInitDialog(){CDialog::OnInitDialog();//TODO:AddextrainitializationhereGetBookGategory();returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//EXCEPTION:OCXPropertyPagesshouldreturnFALSE}(2)当用户单击“保存“按钮时,实现添加图书功能,其响应代码如下:voidRAddBookDlg::OnSave(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);if(!IsValidInput())return;if(IDYES!=AfxMessageBox(确定要保存吗?,MB_YESNO))//放弃保存return;if(SaveData()){AfxMessageBox(保存成功!);//保存后重置数据m_bHasNewBook=true;OnReset();GetDlgItem(IDC_BK_CATEGORY)-SetFocus();}elseAfxMessageBox(保存失败!);}(3)判断输入信息是否正确的函数是IsValidInput(),其响应代码如下:boolRAddBookDlg::IsValidInput(){CStringstr=0123456789;if(m_strBookCategory.IsEmpty()||m_strBookCategory.FindOneOf(str)!=-1){AfxMessageBox(输入有误!图书类型不能为空或包含数字。);GetDlgItem(IDC_BK_CATEGORY)-SetFocus();returnfalse;}if(m_strBookName.IsEmpty()){AfxMessageBox(输入有误!书名不能为空。);GetDlgItem(IDC_BK_NAME)-SetFocus();returnfalse;}if(m_strAuthor.IsEmpty()||m_strAuthor.FindOneOf(str)!=-1){AfxMessageBox(输入有误!作者名称不能为空或包含数字。);GetDlgItem(IDC_BK_AUTHOR)-SetFocus();returnfalse;}if(m_strPublisher.IsEmpty()||m_strPublisher.FindOneOf(str)!=-1){AfxMessageBox(输入有误!出版社名称不能为空或包含数字。);GetDlgItem(IDC_BK_PUBLISHER)-SetFocus();returnfalse;}if(m_dPurchase=0){AfxMessageBox(图书进价应为正值!);GetDlgItem(IDC_BK_PURCHASE)-SetFocus();returnfalse;}if(m_dPrice=0){AfxMessageBox(图书售价应为正值!);GetDlgItem(IDC_BK_PRICE)-SetFocus();returnfalse;}if(m_lDiscount0||m_lDiscount