基于C的库存管理系统的开发.docx
《基于C的库存管理系统的开发.docx》由会员分享,可在线阅读,更多相关《基于C的库存管理系统的开发.docx(47页珍藏版)》请在冰豆网上搜索。
基于C的库存管理系统的开发
第1章序言
随着计算机技术的不断发展,公司、企业和机关的计算机自动化管理已经十分普及,计算机技术已经深入到企业管理的各个方面。
一般小型企业的库存管理大部分还是手工操作,工作起来效率很低,并且不能及时了解库存的具体情况。
同时,由于不可避免的人为因素,造成库存商品数量及价格的错报和漏报等情况。
本文设计的库存管理系统实现了仓库的计算机量化管理,利用它可以安全、可靠的管理仓库物品来往业务,不仅可以保障仓库安全和商品数量的透明,更可以提高公司的管理水平和对外形象。
库存管理是企业各项工作的重点,市场经济的高速发展给企业带来了很多变革的契机,我们必须在进行机构改革的同时,尽快使用现代化管理设备、管理手段、管理方法。
计算机在企业管理中应用的普及,利用计算机实现库存管理势在必行。
将计算机技术应用到库存管理中对于提高工作效率,有很大的帮助,特别是库存管理系统的应用,对于大中型企业来说,利用计算机支持企业高效率完成货物来往的复杂性,是适应现代企业制度要求、推动库存管理走向科学化、规X化的必要条件;计算机管理所无法比拟的优点检索迅速、查找方便、可靠性高、存储量大、XX性好、寿命长、成本低等。
这些优点能够极大地提高库存管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
因此,企业非常需要一套既有先进管理思想又适合国内企业的库存管理系统,作为实现目标和提高现有水平的一种重要手段,库存管理系统是一个公司不可缺少的部分,它的内容对于公司的管理者来说至关重要,随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
第2章系统分析
2.1库存管理系统需求分析
2.1.1.用例分析
通过库存管理系统实际需求,进行详细的用例分析。
库存管理系统用例分析如图2-1所示。
图2-1库存管理用例图
用例图建立完成,就需要编写用例描述,用例描述也就是对系统各个功能进行描述,这一部是进行系统设计前最重要的一个过程。
准确地描述出系统的功能有助于清理自己的思路,更是和用户进行有效沟通的保障。
(1)基础信息管理
在基础信息管理中应包括供应商信息、客户信息管理、仓库信息管理、地域信息管理、计量单位管理。
供应商信息管理、客户信息管理、仓库信息管理、商品信息管理都应该具备添加、修改、删除、浏览功能;地域信息管理应以树状视图形式显示。
(2)日常业务管理
在日常业务管理模块中应包括入库管理、出库管理、调货管理、库存盘点。
各模块允许一次对多种商品进行操作,并可自动核算合计数量及合计金额,最好可以提供联想输入提示功能。
(3)查询统计管理
在查询统计管理中包含过期商品查询,它的功能是实现自动筛选过期商品。
(4)系统管理
系统管理模块包括用户信息管理模块。
2.2业务流程
商品库存管理系统的业务流程如图2-2所示。
图2-2业务流程图
2.3系统目标
1)完成入库、出库业务,且允许一X单据涉及多种商品。
2)跟踪仓库中每种商品的库存数量,且可以对其进行盘点。
3)提供过期商品查询功能。
4)可以满足多仓库需要。
5)支持联想输入设计。
2.4.系统总体设计
系统总体设计工作应该由上而下的进行。
首先设计总体结构,然后逐层深入,直到进入每一个模块的设计。
总体设计主要是指在系统分析的基础上,对整个系统的划分、软硬件配置、数据存储以及整个系统实现等方面的合理安排。
2.4.1系统功能结构设计
通过前面的系统分析工作,下面将库存管理系统划分为4部分,它们是基础信息管理、日常业务管理、查询统计管理、系统信息管理。
结构图如图2-3所示。
图2-3系统结构图
2.4.2编码设计
编码设计是管理信息系统过程中的一个重要内容。
设计一个好的编码,可以使信息统计和查询变得更方便。
编码一般由数字和字符组成,用来代表事物的实体类别和属性的特定符号或记号。
在库存管理系统中,需要对出、入库单进行编码,以入库单为例,入库单据号用来标记入库单的单号,具有唯一性。
通过该编码,可以判断某一X入库单是哪年、哪月、哪日第几X单据。
程序模块设计如下:
首先,判断入库信息表中是否有记录,如果无记录,则说明要录入的入库单是本天的第一X入库单据。
该单据编码由字母“RK”、当前日期的“年”“月”“日”,再加“000001”组成;如果有记录,那么该单据编码由字母“RK”、当前日期,和当天上一X单据编码后6位加1组成。
第3章数据库设计
数据库是应用程序的核心。
数据库设计师开发应用程序的重要组成部分。
一个好的数据库结构可以使系统处理速度快、占用空间少、操作处理过程简单、查找容易等。
数据商品库存管理系统的实际需要和数据流量的大小,数据库使用了MicrosoftAccess。
下面介绍数据库的创建过程。
3.1创建数据库
库存管理系统采用了MicrosoftAccess作为后端数据库,创建数据库名称为“spkc.mdb”
3.2创建数据表及数据库逻辑结构设计
库存管理系统共使用13X数据表,分别为仓库信息表、出库明细表、出库信息表、入库信息表、入库明细表、入库信息表、地域信息表、供应商信息表、客户信息表、计量单位表、库存信息表、商品调拨表、商品信息表、用户信息表。
表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\monFiles\SYSTEM\ADO\MSADO15.dll”rename(”EOF”,”_EOF”)
usingnamespaceADODB;
声明全局变量
_ConnectionPtrn;
在boolCmyApp:
:
InitInstance()中初始化数据库连接
:
:
CoInitialize(NULL);
n=NULL;
n.CreateInstance(__uuidof(Connection));
n->ConnectionString="uid=admin;pwd=111;DRIVER={MicrosoftAccessDriver(*.mdb)};DBQ=spkc.mdb;";
n->Open(L"",L"",L"",adCmdUnspecified);
4.2类模型分析
本程序涉及27个类,主要类的说明如下表所示:
表4-1库存管理系统中的类及说明
类名派生自说明
CBaseboBoxCboBox添加数据源连接功能与回车移动功能的CboBox类
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].idmand=ID_MENUITEM32807;
button[1].idmand=ID_MENUITEM32808;
button[3].idmand=ID_MENUITEM32817;
button[2].idmand=ID_MENUITEM32822;
button[5].idmand=ID_MENUITEM32811;
button[6].idmand=ID_MENUITEM32812;
button[7].idmand=ID_MENUITEM32813;
button[9].idmand=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个boBox、1个Edit、1个Button和1个ListControl,更改资源的属性,并为资源设置相对应的变量。
如下表所示。
表5-1资源设置
IDPropertiesMembersVariables
TypeMember
IDC_FIELDSortFLASECBaseboBoxm_Field
Data编号名称产地计量单位
IDC_EMBLEMSortFLASECBaseboBoxm_Emblem
DataLIKE=<>><>=<=
IDC_BUTQUERYCaption查询CButtonm_ButQuery
IDC_EDTCONTIDION默认CBaseEditBoxm_EdtCondition
IDC_GRID默认CExtendEdit_Gridm_Grid
调整控件资源在Dialog中的位置。
最终设计结果如下图所示。
图5-4商品信息查询
使用函数外部的变量。
extern_ConnectionPtrn;
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个boBox、4个Edit,6个Button、4个DateTimePicker和一个ListControl,更改资源的属性,并为资源设置相对应的变量。
如下表所示。
表5-2资源设置
IDPropertiesMembersVariables
TypeMember
IDC_BUTADDCaption添加CButtonm_ButAdd
IDC_BUTCHANGECaption修改CButtonm_ButChange
IDC__BUTDELECaption删除CButtonm_ButDelete
IDC_BUTEXITCaption退出CButtonm_ButExit
IDC_BUTSAVECaption保存CButtonm_ButSave
IDC_BUTUNDOCaption撤销CButtonm_ButUndo
IDC_CITY默认CBaseboBoxm_City
IDC_PROVINCE默认CBaseboBoxm_Province
IDC_TOWN默认CBaseboBoxm_Town
IDC_UNIT默认CBaseboBoxm_Unit
IDC_DATKEEPTIME默认CBaseDateTimeCtrlm_DatKeepTime
IDC_DATOUTFACTORYTIME默认CBaseDateTimeCtrlm_DatOutFactoryTime
IDC_EDITID默认CBaseEditm_EdtID
IDC_EDTLETTERNAME默认CBaseEditm_EdtLetterName
IDC_EDTNAME2默认CBaseEditm_EdtName
IDC_EDTSPEC默认CBaseEditm_EdtSpec
调整控件资源在Dialog中的位置。
结果如下图所示。
图5-5商品细细管理模块图
使用函数外部的变量。
extern_ConnectionPtrn;
externCMyApptheApp;
关键程序代码。
程序运行后可分为两种状态:
编辑状态和只读状态。
用户单击【添加】或【修改】按钮后,系统进入编辑状态,此时,用户可以任意添加或修改文本框等编辑控件的值;当用户单击【保存】按钮后,系统回到初始状态即只读状态,编辑控件失效,无法进行编辑。
因此,需要成员函数Enabled,用来完成此功能。
voidCDWare_Edit:
:
Enabled(boolbEnabled)
{
m_Town.EnableWindow(bEnabled);
m_EdtSpec.EnableWindow(bEnabled);
m_EdtName.EnableWindow(bEnabled);
m_EdtLetterName.EnableWindow(bEnabled);
m_DatOutFactoryTime.EnableWindow(bEnabled);
m_DatKeepTime.EnableWindow(bEnabled);
m_Unit.EnableWindow(bEnabled);
m_Province.EnableWindow(bEnabled);
m_City.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=n->Execute((_bstr_