版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
74/74序言随着计算机技术的不断进展,公司、企业和机关的计算机自动化治理差不多十分普及,计算机技术差不多深入到企业治理的各个方面。一般小型企业的库存治理大部分依旧手工操作,工作起来效率专门低,同时不能及时了解库存的具体情况。同时,由于不可幸免的人为因素,造成库存商品数量及价格的错报和漏报等情况。本文设计的库存治理系统实现了仓库的计算机量化治理,利用它能够安全、可靠的治理仓库物品来往业务,不仅能够保障仓库安全和商品数量的透明,更能够提高公司的治理水平和对外形象。库存治理是企业各项工作的重点,市场经济的高速进展给企业带来了专门多变革的契机,我们必须在进行机构改革的同时,尽快使用现代化治理设备、治理手段、治理方法。计算机在企业治理中应用的普及,利用计算机实现库存治理势在必行。将计算机技术应用到库存治理中关于提高工作效率,有专门大的关心,特不是库存治理系统的应用,关于大中型企业来讲,利用计算机支持企业高效率完成物资来往的复杂性,是适应现代企业制度要求、推动库存治理走向科学化、规范化的必要条件;计算机治理所无法比拟的优点检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高库存治理的效率,也是企业的科学化、正规化治理,与世界接轨的重要条件。因此,企业特不需要一套既有先进治理思想又适合国内企业的库存治理系统,作为实现目标和提高现有水平的一种重要手段,库存治理系统是一个公司不可缺少的部分,它的内容关于公司的治理者来讲至关重要,随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
第2章系统分析2.1库存治理系统需求分析2.1.1.用例分析通过库存治理系统实际需求,进行详细的用例分析。库存治理系统用例分析如图2-1所示。图2-1库存治理用例图用例图建立完成,就需要编写用例描述,用例描述也确实是对系统各个功能进行描述,这一部是进行系统设计前最重要的一个过程。准确地描述出系统的功能有助于清理自己的思路,更是和用户进行有效沟通的保障。基础信息治理在基础信息治理中应包括供应商信息、客户信息治理、仓库信息治理、地域信息治理、计量单位治理。供应商信息治理、客户信息治理、仓库信息治理、商品信息治理都应该具备添加、修改、删除、扫瞄功能;地域信息治理应以树状视图形式显示。日常业务治理在日常业务治理模块中应包括入库治理、出库治理、调货治理、库存盘点。各模块同意一次对多种商品进行操作,并可自动核算合计数量及合计金额,最好能够提供联想输入提示功能。查询统计治理在查询统计治理中包含过期商品查询,它的功能是实现自动筛选过期商品。系统治理系统治理模块包括用户信息治理模块。2.2业务流程商品库存治理系统的业务流程如图2-2所示。图2-2业务流程图2.3系统目标1)完成入库、出库业务,且同意一张单据涉及多种商品。2)跟踪仓库中每种商品的库存数量,且能够对其进行盘点。3)提供过期商品查询功能。4)能够满足多仓库需要。5)支持联想输入设计。2.4.系统总体设计系统总体设计工作应该由上而下的进行。首先设计总体结构,然后逐层深入,直到进入每一个模块的设计。总体设计要紧是指在系统分析的基础上,对整个系统的划分、软硬件配置、数据存储以及整个系统实现等方面的合理安排。2.4.1系统功能结构设计通过前面的系统分析工作,下面将库存治理系统划分为4部分,它们是基础信息治理、日常业务治理、查询统计治理、系统信息治理。结构图如图2-3所示。图2-3系统结构图2.4.2编码设计编码设计是治理信息系统过程中的一个重要内容。设计一个好的编码,能够使信息统计和查询变得更方便。编码一般由数字和字符组成,用来代表事物的实体类不和属性的特定符号或记号。在库存治理系统中,需要对出、入库单进行编码,以入库单为例,入库单据号用来标记入库单的单号,具有唯一性。通过该编码,能够推断某一张入库单是哪年、哪月、哪日第几张单据。程序模块设计如下:首先,推断入库信息表中是否有记录,假如无记录,则讲明要录入的入库单是本天的第一张入库单据。该单据编码由字母“RK”、当前日期的“年”“月”“日”,再加“000001”组成;假如有记录,那么该单据编码由字母“RK”、当前日期,和当天上一张单据编码后6位加1组成。
第3章数据库设计数据库是应用程序的核心。数据库设计师开发应用程序的重要组成部分。一个好的数据库结构能够使系统处理速度快、占用空间少、操作处理过程简单、查找容易等。数据商品库存治理系统的实际需要和数据流量的大小,数据库使用了MicrosoftAccess。下面介绍数据库的创建过程。3.1创建数据库库存治理系统采纳了MicrosoftAccess作为后端数据库,创建数据库名称为“spkc.mdb”3.2创建数据表及数据库逻辑结构设计库存治理系统共使用13张数据表,分不为仓库信息表、出库明细表、出库信息表、入库信息表、入库明细表、入库信息表、地域信息表、供应商信息表、客户信息表、计量单位表、库存信息表、商品调拨表、商品信息表、用户信息表。表3-1供应商信息表字段名称字段类型主键外键同意为空默认值编号文本型(10)是否名称文本型(40)简称文本型(20)地址文本型(40)地区编号长整形是电话文本型(13)传真文本型(13)联系人文本型(13)联系人电话文本型(10)银行文本型(20)账号文本型(15)纳税人文本型(8)邮箱地址文本型(40)表3-2入库信息表字段名称字段类型主键外键是否为空默认值票号文本型(15)是否入库时刻日期时刻型合计数量长整型合计金额货币型操作员长整型是表3-3入库明细表字段名称字段类型主键外键是否为空默认值票号文本型(15)是商品编号文本型(10)入库仓库长整型数量长整型表3-4库存信息表字段名称字段类型主键外键是否为空默认值商品编号文本型(10)是库存编号长整型是库存数量长整型库存上限长整型库存下限长整型单价货币型销售价格货币型表3-5商品调拨表字段名称字段类型主键外键是否为空默认值商品编号文本型(10)是所在仓库长整型调拨仓库长整型掉拨数量长整型操作员长整型表3-6供应商基础信息表字段名称描述讲明编号标记一个供应商用来区分同名的供应商名称标记供应商名称简称供应商名称的拼音缩写表3-7库存信息表字段名称描述讲明商品编号标识一种商品用来区分同名的商品库存数量商品数量库存上限仓库中能够容纳某种商品的最大数量库存下限仓库中能够存在某种商品的最小数量表3-8商品调拨表字段名称描述讲明所在仓库商品为调拨前所在仓库调拨仓库商品到调拨到的仓库调拨数量调拨商品的数量操作员记录此操作的操作员编号
第4章程序模型设计4.1进入环境AppWizard的建立完毕,需要完成以下工作:在StdAfx.h中引入头文件#import”C:\ProgramFiles\CommonFiles\SYSTEM\ADO\MSADO15.dll”rename(”EOF”,”_EOF”)usingnamespaceADODB;声明全局变量_ConnectionPtrcnn;在boolCmyApp::InitInstance()中初始化数据库连接::CoInitialize(NULL);cnn=NULL;cnn.CreateInstance(__uuidof(Connection));cnn->ConnectionString="uid=admin;pwd=111;DRIVER={MicrosoftAccessDriver(*.mdb)};DBQ=spkc.mdb;";cnn->Open(L"",L"",L"",adCmdUnspecified);4.2类模型分析本程序涉及27个类,要紧类的讲明如下表所示:表4-1库存治理系统中的类及讲明类名派生自讲明CBaseComboBoxCComboBox添加数据源连接功能与回车移动功能的CcomboBox类CBaseEditCEdit添加回车移动焦点功能的CEdit类CBaseDateTimeCtrlCDateTimeCtrl增加回车移动焦点功能的CDateTimeCtrl类CBaseListBoxCListBox添加数据源连接功能与回车移动焦点功能ClistBox类CDAbateCDialog过期商品查询模块CDAboutCDialog关于模块CDAdjustCDialog调货治理模块CDCheckCDialog库存治理模块CDCheckDlgCDialog库存盘点模块CDClientCDialog客户信息查询模块CDClient_EditCDialog客户信息治理模块CDClimeCDialog地域信息治理模块CDInputCDialog商品出库模块CDLoginCDialog登录模块CDOutputCDialog商品输出模块CDProviderCDialog供应商查询模块CDStoreCDialog仓库信息治理模块CDunitCDialog计量单位治理模块CDUserCDialog用户治理模块CDWareCDialog商品信息查询模块CExtendEdit_GridCListCtrl增加绑定数据源功能的CListCtrl类CMainDlgCDialog主程序界面对话框CMyAppCWinAppWindows应用程序基类的派生类CRxGridCListCtrl增加联想提示等诸多功能的CListCtrl类
第5章界面及要紧模块设计5.1主程序界面开发步骤5.1.1模块描述主程序界面是应用软件中特不重要的模块,用户需要通过它来实现与其他功能模块的衔接。本程序的主界面由菜单栏、工具栏、状态栏模式组成。主程序界面的运行结果如图所示:图5-1库存治理系统主界面5.1.2菜单资源设计图5-2菜单资源结构图5.1.3关键程序代码声明CToolCtrl类对象实体、CImageList类对象实体、CststusBarCtrl类对象实体。CToolBarCtrlm_ToolBar;CImageListm_ImageList;CStatusBarCtrlm_StatusBar;在OnInitDialog成员函数中添加工具栏和状态栏。BOOLCMainDlg::OnInitDialog(){ CDialog::OnInitDialog(); SetIcon(m_hIcon,TRUE); //Setbigicon SetIcon(m_hIcon,FALSE); //Setsmallicon TBBUTTONbutton[10]; inti=0,nStringLength; CStringstring; TCHAR*pString;m_ImageList.Create(32,32,ILC_COLOR32|ILC_MASK,0,0);m_ToolBar.EnableAutomation();m_ToolBar.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,ID_TOOLBAR); UINTResource[10]={IDI_ICON1,IDI_ICON2,IDI_ICON3,IDI_ICON4,IDI_ICON4,IDI_ICON5,IDI_ICON6,IDI_ICON7,IDI_ICON7,IDI_ICON8}; for(i=0;i<10;i++) { m_ImageList.Add(::LoadIcon(::AfxGetResourceHandle(),MAKEINTRESOURCE(Resource[i]))); } m_ToolBar.SetImageList(&m_ImageList); for(i=0;i<10;i++) { button[i].dwData=0; button[i].fsState=TBSTATE_ENABLED; if(i==4||i==8) button[i].fsStyle=TBSTYLE_SEP; else button[i].fsStyle=TBSTYLE_BUTTON; button[i].iBitmap=i; string.LoadString(i+IDS_STRING1); nStringLength=string.GetLength()+1; pString=string.GetBufferSetLength(nStringLength); //pString[nStringLength]=0; button[i].iString=m_ToolBar.AddStrings(pString); string.ReleaseBuffer(); } button[0].idCommand=ID_MENUITEM32807; button[1].idCommand=ID_MENUITEM32808; button[3].idCommand=ID_MENUITEM32817; button[2].idCommand=ID_MENUITEM32822; button[5].idCommand=ID_MENUITEM32811; button[6].idCommand=ID_MENUITEM32812; button[7].idCommand=ID_MENUITEM32813; button[9].idCommand=ID_MENUITEM32815; m_ToolBar.AddButtons(10,button); m_ToolBar.AutoSize(); m_ToolBar.SetStyle(TBSTYLE_FLAT|CCS_TOP); m_StatusBar.EnableAutomation(); m_StatusBar.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),this,ID_STATUSBAR); CStringTipText; this->GetWindowText(TipText); TipText=TipText+"〖当前用户:"+UserName+"〗"; this->SetWindowText(TipText); intwidth[]={150,800}; m_StatusBar.SetParts(2,&width[0]); m_StatusBar.SetText("GUSONG2009",0,0); returnTRUE;}5.2商品信息治理5.2.1商品信息治理应该包括查询和治理两部分。在查询部分中,以列表形式显示商品信息,且同意用户依照不同字段、不同条件进行查询。当用户在表格中双击某条商品记录时,进入治理部分;治理部分以卡片形式显示某种商品的信息,同意用户对记录进行添加、修改、删除等操作。商品信息治理模块运行结果如图5-3所示。图5-3商品信息治理效果图5.2.2向项目中添加一个新的Dialog资源,资源ID为IDD_WARE。在IDD_WARE对话框资源中单击鼠标右键,执行弹出快捷菜单的“Properties”菜单命令,打开“DialogProperties”对话框。在“DialogProperties”对话框中选择General选项卡,更改其【Caption】文本框内容为“商品信息查询”;单击【Font】按钮,将Dialog资源更改为宋体、9号。从Controls面板上向Dialog资源中添加3个Static、2个ComboBox、1个Edit、1个Button和1个ListControl,更改资源的属性,并为资源设置相对应的变量。如下表所示。表5-1资源设置IDPropertiesMembersVariablesTypeMemberIDC_COMFIELDSortFLASECBaseComboBoxm_ComFieldData编号名称产地计量单位IDC_COMEMBLEMSortFLASECBaseComboBoxm_ComEmblemDataLIKE=<>><>=<=IDC_BUTQUERYCaption查询CButtonm_ButQueryIDC_EDTCONTIDION默认CBaseEditBoxm_EdtConditionIDC_GRID默认CExtendEdit_Gridm_Grid调整控件资源在Dialog中的位置。最终设计结果如下图所示。图5-4商品信息查询使用函数外部的变量。extern_ConnectionPtrcnn;externCMyApptheApp;关键程序步骤和代码。双击【查询】按钮,为查询按钮添加单击消息响应函数OnBUTQuery()。voidCDWare::OnBUTQuery(){………… if(sEmblem!="LIKE") sSQL.Format("SELECT*from商品信息查询WHERE%s%s'%s'",sField,sEmblem,sCondition); else sSQL.Format("SELECT*from商品信息查询WHERE%sLIKE'%s%%'",sField,sCondition);…………}5.2.3商品信息治理模块编辑部份详细设计向项目中添加一个新Dialog资源,资源ID为IDD_WARE_EDIT。在IDD_WARE_EDIT对话框资源中单击鼠标右键,执行弹出快捷菜单的“Properties”菜单命令,打开“DialogProperties”对话框。在“DialogProperties”对话框中选择General选项卡,更改其“Caption”文本框内容为“商品信息治理”;单击【Font】按钮,将Dialog资源字体更改为宋体、9号。从Controls面板上向Dialog资源中添加11个Static、4个ComboBox、4个Edit,6个Button、4个DateTimePicker和一个ListControl,更改资源的属性,并为资源设置相对应的变量。如下表所示。表5-2资源设置IDPropertiesMembersVariablesTypeMemberIDC_BUTADDCaption添加CButtonm_ButAddIDC_BUTCHANGECaption修改CButtonm_ButChangeIDC__BUTDELECaption删除CButtonm_ButDeleteIDC_BUTEXITCaption退出CButtonm_ButExitIDC_BUTSAVECaption保存CButtonm_ButSaveIDC_BUTUNDOCaption撤销CButtonm_ButUndoIDC_COMCITY默认CBaseComboBoxm_ComCityIDC_COMPROVINCE默认CBaseComboBoxm_ComProvinceIDC_COMTOWN默认CBaseComboBoxm_ComTownIDC_COMUNIT默认CBaseComboBoxm_ComUnitIDC_DATKEEPTIME默认CBaseDateTimeCtrlm_DatKeepTimeIDC_DATOUTFACTORYTIME默认CBaseDateTimeCtrlm_DatOutFactoryTimeIDC_EDITID默认CBaseEditm_EdtIDIDC_EDTLETTERNAME默认CBaseEditm_EdtLetterNameIDC_EDTNAME2默认CBaseEditm_EdtNameIDC_EDTSPEC默认CBaseEditm_EdtSpec调整控件资源在Dialog中的位置。结果如下图所示。图5-5商品细细治理模块图使用函数外部的变量。extern_ConnectionPtrcnn;externCMyApptheApp;关键程序代码。程序运行后可分为两种状态:编辑状态和只读状态。用户单击【添加】或【修改】按钮后,系统进入编辑状态,现在,用户能够任意添加或修改文本框等编辑控件的值;当用户单击【保存】按钮后,系统回到初始状态即只读状态,编辑控件失效,无法进行编辑。因此,需要成员函数Enabled,用来完成此功能。voidCDWare_Edit::Enabled(boolbEnabled){ m_ComTown.EnableWindow(bEnabled); m_EdtSpec.EnableWindow(bEnabled); m_EdtName.EnableWindow(bEnabled); m_EdtLetterName.EnableWindow(bEnabled); m_DatOutFactoryTime.EnableWindow(bEnabled); m_DatKeepTime.EnableWindow(bEnabled); m_ComUnit.EnableWindow(bEnabled); m_ComProvince.EnableWindow(bEnabled); m_ComCity.EnableWindow(bEnabled); m_ButUndo.EnableWindow(bEnabled); m_ButSave.EnableWindow(bEnabled); m_ButExit.EnableWindow(!bEnabled); m_ButDele.EnableWindow(!bEnabled); m_ButChange.EnableWindow(!bEnabled); m_ButAdd.EnableWindow(!bEnabled);}每当用户定位一条记录时,系统都需要重新读取一边数据库,以实现数据的统一。在程序中,此功能由Display成员函数完成。voidCDWare_Edit::Display(CStringID){ CStringsID,sName,SLatterName,sSpec,sUnit,sProducing,sOutfactoryTime,sKeepTime; CStringsSQL; sSQL.Format("Select*from商品信息查询Where编号='%s'",ID); try{ rst=cnn->Execute((_bstr_t)sSQL,NULL,adCmdText); } catch(...) {………… } if(theApp.GetRecordCount(rst)>0) { rst->MoveFirst(); CTimeOutfactoryTime,KeepTime; sID=(char*)(_bstr_t)rst->GetCollect("编号"); ………… sKeepTime=(char*)(_bstr_t)rst->GetCollect("保质期"); m_EdtID.SetWindowText(sID); this->m_EdtLetterName.SetWindowText(SLatterName); this->m_EdtName.SetWindowText(sName); this->m_EdtSpec.SetWindowText(sSpec); this->m_ComUnit.SetWindowText(sUnit); OutfactoryTime=theApp.CStringTOCTime(sOutfactoryTime); KeepTime=theApp.CStringTOCTime(sKeepTime); this->m_DatOutFactoryTime.SetTime(&OutfactoryTime); this->m_DatKeepTime.SetTime(&KeepTime); intnProducing=theApp.NumberTOName("地域信息表","名称",sProducing); Clime(nProducing); } rst->Close();}单击【添加】按钮时,在编号文本框中自动生成编号;清空其他编辑控件,系统进入编辑状态。voidCDWare_Edit::OnBUTAdd(){ CStringNewID; Enabled(true); ClearFrom(); NewID=theApp.AutoNumber("商品信息表","SP",1); this->m_EdtID.SetWindowText(NewID); m_EdtName.SetFocus(); AddOrChange=true;}用户单击【修改】按钮,系统进入编辑状态,名称文本框获得焦点。voidCDWare_Edit::OnBUTChange(){ Enabled(true); m_EdtName.SetFocus(); AddOrChange=false;}用户单击【保存】按钮时,推断用户在此前按下的是【添加】依旧【修改】,假如是【添加】就插入一条记录,假如是【修改】,就更新原纪录。voidCDWare_Edit::OnBUTSave(){ inta=MessageBox("确定保存记录吗?","系统提示",MB_ICONQUESTION|MB_OKCANCEL); if(a==1) { CTimetime; CStringsID,sSQL,sName,sLetterName,sUnit,sSpec,sTown,sOutFauctryTime,sKeepTime; intnUnit,nTown; m_EdtID.GetWindowText(sID); m_EdtLetterName.GetWindowText(sLetterName); m_DatOutFactoryTime.GetTime(time); sOutFauctryTime=theApp.CTimeToCString(time); m_DatKeepTime.GetTime(time); sKeepTime=theApp.CTimeToCString(time); m_EdtName.GetWindowText(sName); if(sName.IsEmpty()) { MessageBox("请输入商品名称!","系统提示",MB_OK|MB_ICONSTOP); m_EdtName.SetFocus(); return; } ……………… if(this->AddOrChange==true) sSQL.Format("InsertInto商品信息表values('%s','%s','%s','%s',%d,%d,#%s#,#%s#)",sID,sName,sLetterName,sSpec,nTown,nUnit,sOutFauctryTime,sKeepTime); else sSQL.Format("UPDATE商品信息表SET名称='%s',简称='%s',规格='%s',产地=%d,计量单位=%d,出厂日期=#%s#,保质期=#%s#WHERE编号='%s'",sName,sLetterName,sSpec,nTown,nUnit,sOutFauctryTime,sKeepTime,sID); cnn->Execute((_bstr_t)sSQL,NULL,adCmdText); this->Enabled(false); } }用户单击【撤销】按钮时,程序进入只读状态,同时显示用户在查询模块双击的记录。voidCDWare_Edit::OnBUTUndo(){ this->Display(this->DisplayNumber); this->Enabled(false); }5.4出库治理5.4.出库治理模块要紧完成商品出库的操作,在本系统中,采纳表格式录入数据,如此便能够实现一张出库单据可出库多种商品。细节方面,具备快捷提示功能,只要通过几个字母,系统便能够找到用户所需要的数据,同时支持自动核算功能。运行结果如图5-6所示。图5-6出库治理模块图5.4.2向项目中添加一个新Dialog资源,资源ID为IDD_DIAOUTPUT。在IDD_DIAOUTPUT对话框资源中单击鼠标右键,执行弹出快捷菜单的“Properties”菜单命令,打开“DialogProperties”对话框。在“DialogProperties”对话框中选择General选项卡,更改其“Caption”文本框内容为“出库治理”;单击【Font】按钮,将Dialog资源字体更改为宋体9号。从Controls面板上向Dialog资源中添加7个Static、3个Edit,4个Button、和1个ListControl,更改资源的属性,并为资源设置相对应的变量。如下表所示。表5-3资源设置IDPropertiesMembersVariablesTypeMemberIDC_STAIDCaptionCK040224_000001CStaticm_StaIDIDC_STADATECaption2004-02-24CStaticm_StaDateIDC_EDTCLIENTBorderFALSECExtendEditm_EdtClientIDC_EDTSUM默认CEditm_EdtSumIDC_EDTMONEY默认CEditm_EdtMoneyIDC_BUTENROLCaption登记CButtonm_ButEnrolIDC_BUTSAVECaption保存CButtonm_ButSaveIDC_BUTUNDOCaption撤销CButtonm_ButUndoIDC_BUTEXITCaption退出CButtonm_ButExitIDC_LIST默认CRxGridm_Grid调整控件资源在Dialog中的位置。最终设计结果如下图所示。图5-7出库治理资源设置图使用函数外部的变量。extern_ConnectionPtrcnn;externCMyApptheApp;关键程序步骤和代码。在模块执行时,需要初始化m_EdtClient和m_Grid,使它们拥有联想和输入功能。BOOLCDOutPut::OnInitDialog(){ CDialog::OnInitDialog(); CStringFieldName[]={"商品名称","规格","产地","计量单位","出厂日期","保质期","出货仓库","出货单价","出货数量"};………… for(inti=0;i<9;i++) { m_Grid.InsertColumn(i,FieldName[i]); m_Grid.SetColumnWidth(i,ColWidth[i]); } m_Grid.SetColumnCount(9); CStringsSQL; m_Grid.m_Edit.Changed=false; m_Grid.m_Edit.IsPopShow=true; sSQL.Format("SELECT商品名称,规格,产地,计量单位,出厂日期,保质期FROM库存查询"); rst=cnn->Execute((_bstr_t)sSQL,NULL,adCmdText); m_Grid.SetField("商品名称"); m_Grid.m_Edit.SetPopRecordset(rst); this->IsPopShow=false; m_Grid.AutoInsert=true; returnTRUE;}双击【登记】按钮,为按钮添加单击消息响应函数OnBUTEnrol()。voidCDOutPut::OnBUTEnrol(){ CTimetDate; CStringcID,cDate; cID=theApp.AutoNumber("出库信息表","CK",2); m_StaID.SetWindowText(cID); tDate=tDate.GetCurrentTime(); cDate=theApp.CTimeToCString(tDate);…………}用户使用时,单击【登记】按钮后模块会进入编辑状态。使用如下代码实现此功能。voidCDOutPut::ItemChange(){ CStringsSQL,sWare,sStore,sInput; if(m_Grid.GetCol()==6) { try{ sInput=(char*)(_bstr_t)m_Grid.m_Edit.rst->GetCollect("销售价格"); m_Grid.SetItemText(m_Grid.GetRow(),7,sInput); } catch(...) { gotoResameNext; } m_Grid.m_Edit.IsPopShow=false; } if(m_Grid.GetCol()==0)//自动添充 { CStringsSpec,sArer,sUnit,sOutFactroyDate,sKeepDate; try{ sSpec=(char*)(_bstr_t)m_Grid.m_Edit.rst->GetCollect("规格"); } catch(...) { gotoResameNext; } sArer=(char*)(_bstr_t)m_Grid.m_Edit.rst->GetCollect("产地"); sUnit=(char*)(_bstr_t)m_Grid.m_Edit.rst->GetCollect("计量单位"); sOutFactroyDate=(char*)(_bstr_t)m_Grid.m_Edit.rst->GetCollect("出厂日期"); sKeepDate=(char*)(_bstr_t)m_Grid.m_Edit.rst->GetCollect("保质期"); m_Grid.SetItemText(m_Grid.GetRow(),1,sSpec); m_Grid.SetItemText(m_Grid.GetRow(),2,sArer); m_Grid.SetItemText(m_Grid.GetRow(),3,sUnit); m_Grid.SetItemText(m_Grid.GetRow(),4,sOutFactroyDate); m_Grid.SetItemText(m_Grid.GetRow(),5,sKeepDate); m_Grid.m_Edit.IsPopShow=true; m_Grid.m_Edit.GetWindowText(sWare); m_Grid.SetField("仓库名称"); sSQL.Format("SELECT仓库名称,销售价格FROM库存查询WHERE商品名称='%s'",sWare); rst=cnn->Execute((_bstr_t)sSQL,NULL,adCmdText); m_Grid.m_Edit.SetPopRecordset(rst); IsShow=true; }ResameNext: return;}输入数据完毕后,单击【保存】按钮保存录入的信息。voidCDOutPut::OnBUTSave(){ inta=MessageBox("确定保存此出库单吗?","系统提示",MB_OKCANCEL|MB_ICONQUESTION); if(a==1) { CStringcSQL,cStoreNumber,cID,cStore,cWareID,cTime,cProvider,cSum,cMoney,cNum; intnOP,nStoreNumber,nStoreSum; m_StaID.GetWindowText(cID); m_StaDate.GetWindowText(cTime); m_EdtClient.GetWindowText(cProvider); m_EdtSum.GetWindowText(cSum); m_EdtMoney.GetWindowText(cMoney); nOP=theApp.NumberTOName("用户信息表","用户名",OP); cSQL.Format("InsertInto出库信息表values('%s',#%s#,%s,%s,%d)",cID,cTime,cSum,cMoney,nOP); cnn->Execute((_bstr_t)cSQL,NULL,adCmdText); for(intr=0;r<m_Grid.GetItemCount()-1;r++) { cWareID=theApp.NumberTOName("商品信息表","编号","名称",m_Grid.GetItemText(r,0)); cNum=m_Grid.GetItemText(r,8); cStore=m_Grid.GetItemText(r,6); nStoreNumber=theApp.NumberTOName("仓库信息表","名称",cStore); cSQL.Format("InsertInto出库明细表values('%s','%s',%d,%s)",cID,cWareID,nStoreNumber,cNum); cnn->Execute((_bstr_t)cSQL,NULL,adCmdText); cSQL.Format("SELECT*FROM库存信息表WHERE商品编号='%s'and仓库编号=%d",cWareID,nStoreNumber); rst=cnn->Execute((_bstr_t)cSQL,NULL,adCmdText); if(theApp.GetRecordCount(rst)>0) { rst->MoveFirst(); cStoreNumber=(char*)(_bstr_t)rst->GetCollect("库存数量"); nStoreSum=atoi(cStoreNumber)-atoi(cNum); cSQL.Format("UPDATE库存信息表set库存数量=%dWHERE商品编号='%s'and仓库编号=%d",nStoreSum,cWareID,nStoreNumber); cnn->Execute((_bstr_t)cSQL,NULL,adCmdText); rst->Close(); } } m_ButEnrol.EnableWindow(true); m_ButSave.EnableWindow(false); m_ButUndo.EnableWindow(false); m_ButExit.EnableWindow(true); m_EdtClient.EnableWindow(false); m_EdtClient.IsPopShow=false; m_EdtClient.SetWindowText(""); m_Grid.ClearGrid(); this->m_ButEnrol.SetFocus(); }}5.5调货治理5.5.调货治理是仓库治理业务中重要的组成部分,用它能够记录商品在不同的仓库间调拨操作。调货治理模块运行结果如图所示。图5-8调货治理效果图5.5.2资源设置相对应的变量。如表5-4所示。表5-4资源配置IDPropertiesMembersVariablesTypeMemberIDC_COMFSTORESortFLASECBaseComboBoxm_ComFStoreIDC_COMASTORESortFALSECBaseComboBoxm_ComAStoreIDC_BUTEXIT3Caption退出CButtonm_ButExitIDC_BUTSURECaption确定CButtonm_ButSureIDC_LIST默认CrxGridm_Grid调整控件资源在Dialog中的位置。最终设计如图所示。图5-9调货治理模块设计图使用函数外部的变量。extern_ConnectionPtrcnn;externCMyApptheApp;关键程序代码。首先推断仓库是否是同一仓库,假如不是,将源仓库商品信息显示于表格中,假如是,提示用户无法调货。voidCDAdjust::OnKillfocusCOMAStore(){ CStringsSQL,AStore,FStore,sName,sNumber; m_ComAStore.GetWindowText(AStore); m_ComFStore .GetWindowText(FStore); if(AStore==FStore) {………… } m_Grid.Clear(); sSQL.Format("SELECT商品名称,库存数量FROM库存查询WHERE仓库名称='%s'",FStore); rst=cnn->Execute((_bstr_t)sSQL,NULL,adCmdText); for(inti=0;i<theApp.GetRecordCount(rst);i++) { ………… } m_ComAStore.EnableWindow(false); m_ComFStore.EnableWindow(false); m_Grid.SetFocus(); m_Grid.m_Col=2; m_Grid.m_Row=0; m_Grid.BeginEdit(0,2);}用户确定每种商品的调货数量以后便能够单击【确定】按钮保存调货信息了。关键部分代码如下。voidCDAdjust::OnBUTSure(){inta=MessageBox("保存调货信息?","系统提示",MB_OKCANCEL|MB_ICONQUESTION); if(a==1) { CStringsWare,sWareNumber,sAStoreNum,sAdjust,sSQL,sStore,StoreNum,sPtrce,sSell; intnAdjust,nStore,nStoreNum; m_ComFStore.GetWindowText(sAdjust); m_ComAStore.GetWindowText(sStore); nAdjust=theApp.NumberTOName("仓库信息表","名称",sAdjust); nStore=theApp.NumberTOName("仓库信息表","名称",sStore); for(inti=0;i<m_Grid.GetItemCount();i++) { sWare=m_Grid.GetItemText(i,0); sWareNumber=theApp.NumberTOName("商品信息表","编号","名称",sWare); sAdjust=m_Grid.GetItemText(i,2); if(sAdjust.IsEmpty()) continue; sSQL.Format("SELECT*FROM库存信息表WHERE仓库编号=%dAND商品编号='%s'",nAdjust,sWareNumber); rst=cnn->Execute((_bstr_t)sSQL,NULL,adCmdText); if(theApp.GetRecordCount(rst)>0) { rst->MoveFirst(); sPtrce=(char*)(_bstr_t)rst->GetCollect("单价"); sSell=(char*)(_bstr_t)rst->GetCollect("销售价格"); sAStoreNum=(char*)(_bstr_t)rst->GetCollect("库存数量"); } sSQL.Format("SELECT*FROM库存信息表WHERE仓库编号=%dAND商品编号='%s'",nStore,sWareNumber); rst=cnn->Execute((_bstr_t)sSQL,NULL,adCmdText); //增加调货仓库的商品库存数量 if(theApp.GetRecordCount(rst)>0) { rst->MoveFirst(); StoreNum=(char*)(_bstr_t)rst->GetCollect("库存数量"); nStoreNum=atoi(StoreNum); sSQL.Format("UpDate库存信息表Set库存数量=%dWHERE仓库编号=%dAND商品编号='%s'",nStoreNum+atoi(sAdjust),nAdjust,sWareNumber); } else { sSQL.Format("Insertinto库存信息表values('%s',%d,%s,500,10,%s,%s)",sWareNumber,nStore,sAdjust,sPtrce,sSell); } cnn->Execute((_bstr_t)sSQL,NULL,adCmdText); nStoreNum=atoi(sAStoreNum); sSQL.Format("UpDate库存信息表Set库存数量=%dWHERE仓库编号=%dAND商品编号='%s'",nStoreNum-atoi(sAdjust),nStore,sWareNumber); cnn->Execute((_bstr_t)sSQL,NULL,adCmdText); } ………… }}5.6库存盘点5.6.库存盘点模块包括库存查询及库存盘点两个部分。在进行库存查询中,以列表形式显示商品信息,且同意用户依照不同字段、不同条件进行查询。当用户在表格中双击某条商品记录时,进入盘点模块;盘点模块以卡片形式显示某种商品的信息,同意用户对该商品的库存数量进行盘点。运行结果如图5-10所示。图5-10库存盘点效果图5.6.2向项目中添加一个新Dialog资源,资源ID为IDD_DIACheck。在IDD_DIACheck对话框资源中单击鼠标右键,执行弹出快捷菜单的“Properties”菜单命令,打开“DialogProperties”对话框。在“DialogProperties”对话框中选择General选项卡,更改其“Caption”文本框内容为“库存治理”;单击【Font】按钮,将Dialog资源字体更改为宋体9号。从Controls面板上向Dialog资源中添加3个Static、2个ComboBox、1个Edit、2个Button和1个ListControl,更改资源的属性,并为资源设置相对应的变量。如下表所示。表5-5资源配置IDPropertiesMembersVariablesTypeMemberIDC_COMFIELDSortFLASECBaseComboBoxm_ComFieldData编号名称简称产地计量单位IDC_COMEMBLEMSortFLASECBaseComboBoxm_ComEmblemDataLIKE=<>><>=<=IDC_BUTQUERYCation查询CButtonm_ButQueryIDC_EDTCONTIDION默认CBaseEditBoxm_EdtConditionIDC_GRID默认CExtendEditm_Grid调整控件资源在Dialog中的位置。最终设计结果如图所示。图5-11库存查询界面设计结果使用函数外部的变量。extern_ConnectionPtrcnn;externCMyApptheApp;部分关键程序代码。双击【查询】按钮,为按钮添加单击消息响应函数OnBUTQuery().voidCDCheck::OnBUTQuery(){ intColWidth[]={170,120,80,80,80}; CStringsField,sEmblem,sCondition,sSQL; m_Grid.DeleAllCol(); m_ComField.GetWindowText(sField); m_ComEmblem.GetWindowText(sEmblem); m_EdtCondition.GetWindowText(sCondition); if(sField!="库存数量"&&sField!="库存上限"&&sField!="库存下限") { if(sEmblem!="LIKE") sSQL.Format("SELECT商品名称,仓库名称,库存数量,库存上限,库存下限from库存查询WHERE%s%s'%s'",sField,sEmblem,sCondition); else sSQL.Format("SELECT商品名称,仓库名称,库存数量,库存上限,库存下限from库存查询WHERE%sLIKE'%s%%'",sField,sCondition); } else { if(sEmblem=="!=") sEmblem="<>"; if(sEmblem=="LIKE") sEmblem="="; sSQL.Format("SELECT商品名称,仓库名称,库存数量,库存上限,库存下限from库存查询WHERE%s%s%s",sField,sEmblem,sCondition); } try{ rst=cnn->Execute((_bstr_t)sSQL,NULL,adCmdText); } catch(...) { theApp.ADOError(rst); } if(theApp.GetRecordCount(rst)>0) { this->m_Grid.SetRecordset(rst); } else m_Grid.Clear(); for(inti=0;i<5;i++) m_Grid.SetColumnWidth(i,ColWidth[i]);}5.6.向项目中添加一个新Dialog资源,资源ID为IDD_DIACHECK_DLG。在IDD_DIACHECK_DLG对话框资源中单击鼠标右键,执行弹出快捷菜单的“Properties”菜单命令,打开“DialogProperties”对话框。在“DialogProperties”对话框中选择General选项卡,更改其“Caption”文本框内容为“库存盘点”;单击【Font】按钮,将Dialog资源字体更改为宋体9号。从Controls面板上向Dialog资源中添加5个Static、5个Edit、4个Button,更改资源的属性,并为资源设置相对应的变量。如下表所示。表5-6资源配置图IDPropertiesMembersVariablesTypeMemberIDC_BUTENROLCaption登记CButtonm_ButEnrolIDC_BUTCHECKCaption盘点CButtonm_ButCheckIDC_BUTUNDOCaption撤销CButtonm_ButUndoIDC_BUTEXITCaption退出CButtonm_ButExitIDC_EDTSTORECBaseEditm_EdtStoreIDC_EDTWARECBaseEditm_EdtWareIDC_EDTNUMBERCBaseEditm_EdtNumberIDC_EDTMAXCBaseEditm_EdtMaxIDC_EDTMINCBaseEditm_EdtMin调整控件资源在Dialog中的位置。最终设计结果如图所示。图5-12库存盘点界面设计图使用函数外部的变量extern_ConnectionPtrcnn;externCMyApptheApp;关键程序代码程序运行后能够分为两种状态:编辑状态和只读状态。用户单击【登记】按钮后,系统进入编辑状态,现在,用户乐意任意修改库存数量、库存上限和库存下限;当用户单击盘点按钮后,系统回到初始状态即只读状态,编辑控件失效,无法进行编辑。为了满足这一需求,使用Enabled函数完成此项功能。voidCDCheckDlg::Enabled(boolbEnabled){ m_EdtNumber.EnableWindow(bEnabled); m_EdtMin.EnableWindow(bEnabled); m_EdtMax.EnableWindow(bEnabled); m_ButExit.EnableWindow(!bEnabled); m_ButEnrol.EnableWindow(!bEnabled); m_ButCheck.EnableWindow(bEnabled); m_ButUndo.EnableWindow(bEnabled);}当用户单击【盘点】按钮时,系统将用户输入数据保存到数据库中。voidCDCheckDlg::OnBUTCheck(){ inta=MessageBox("确定保存此次盘点吗?","系统提示",MB_ICONQUESTION|MB_OKCANCEL); if(a!=1) return; CStringsStore,sWareID,sWare,sNumber,sMax,sMin,sSQL; intnStoreID; m_EdtNumber.GetWindowText(sNumber); m_EdtStore.GetWindowText(sStore); m_EdtWare.GetWindowText(sWare); m_EdtMin.GetWindowText(sMin); m_EdtMax.GetWindowText(sMax); sWareID=theApp.NumberTOName("商品信息表","编号","名称",sWare); nStoreID=theApp.NumberTOName("仓库信息表","名称",sStore); sSQL.Format("Update库存信息表Set库存数量=%s,库存上限=%s,库存下限=%sWHERE商品编号='%s'and仓库编号=%d",sNumber,sMax,sMin,sWareID,nStoreID); cnn->Execute((_bstr_t)sSQL,NULL,adCmdText); this->Enabled(false); this->m_ButEnrol.SetFocus();}
第6章系统测试6.1测试打算这次测试的要紧目标是能通过预算治理系统的使用来检查系统的应用效果。我们的测试打算如下:1、登陆模块测试2、商品信息治理模块4、入库治理模块5、出库治理模块6、调货治理模块7、测试总结6.2测试方法一般来讲,对程序测试有两种测试方法:假如差不多明白了软件系统应具有的功能,可通过测试来检测每个功能是否都能正常使用;假如明白程序的内部工作过程,能够通过测试来检测程序内部是否按照规格讲明书的规定正常进行。前一种方法称为黑盒测试,后一种方法称为白盒测试。黑盒测试又称为功能测试,白盒测试又称为结构测试。在具体的测试中,一般应遵循以下原则:由程序设计者之外的人进行测试;测试用例应由两部分组成:输入数据和预期输出结果;应选用不合理的输入数据与非法输入测试;不仅要检验程序是否实现
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流仓储管理员库存准确性与货物周转率KPI考核表
- 设计工程师产品设计创新性考核表
- T/SSM 22-2024阀控热量表
- 直播带货平台用户留存需求挖掘与提升方案指导书
- 独立制片人考核表
- 环保科技公司研发团队产品开发市场适应性及竞争力绩效考核表
- 行星地质学家绩效评定表
- 外研版(2024)英语八年级上册 Unit 6 When disaster strikes 单元测试卷(含参考答案)
- 物流项目经理现代物流业项目管理岗位绩效评定表
- 合同条款变更备案函(5篇)范文
- 苏少版美术四年级上册第三课《精彩的表达》教学课件
- 起重吊装施工方案
- T/CAAMTB 220-2024电动载货汽车车架性能台架试验方法
- 2026年辽宁省中考数学试卷(含答案及解析)
- 聚变装置-氚聚变设施和聚变燃料处理设施的密封和通风系统的设计和操作标准标准立项发展报告
- 水电站大坝安全现场检查技术规程 -DL-T 2204
- 农村自留地转让协议书模板5篇
- 第三章果蔬干制品加工技术课件
- 酒店管理概论(高职)PPT完整全套教学课件
- 山海经的思想认知与其文学价值及神话特色
- gl5600-08p命令行参考手册
评论
0/150
提交评论