1、信息系统课程设计阐明书 设计题目:库存管理系统 设 计 者: 指引教师: 07信息系统工程 6 月 6 日目录:第一章 可行性分析1.1开发环境与开发工具1.2可行性报告1.2.1 开发必要性1.2.2技术可行性1.2.3经济可行性第二章 系统分析 2.1 系统需求分析2.2 功能需求分析2.3 业务流程分析2.4 数据与数据流程分析第三章 系统设计3.1 数据库设计3.2 代码设计第四章 设计总结4.1 工作总结4.2 设计过程总结4.3 设计展望参照文献第一章 可行性分析1.1开发环境和开发工具操作系统:Windows XP 开发语言:C+数据库: SQL 数据库访问控件:ADO1.2可行
2、性分析 1.2.1 开发必要性随着计算机及网络技术飞速发展,Internet/Intranet应用在全球范畴内日益普及,当今社会正迅速向信息化社会迈进,信息自动化作用也越来越大,从而可以使咱们从繁杂信息管理中解放出来,提高了咱们工作效率。如今,信息网络技术已经无处不在,无时不在了,各种各样信息管理系统也就应运而生。当前,随着公司规模不断壮大,产品种类和数量都不断增长,产品流通越来越多,这就使产品存储需求不断增长,需要工作人员耗费很大力气来统筹管理这项工作,为了保证工作对的性和可靠性同步提高管理效率,很有必要建立一种库存管理系统,使货品管理工作规范化,系统化,程序化。1.2.2 技术可行性在技术
3、上,如今成熟语言有诸多,像是PowerBuilder 、VB 、Delphi等都能开发出较好用系统。而本次设计我采用是VC,也是很成熟语言,再加上数据库如今发展状况,开发出一种库存管理应用程序是没有问题。鉴于软硬件方面对系统需求,软件规定易学,界面和谐,容易掌握,可以很简朴以便进行图书信息管理。硬件配备规定不能太高,这样可以较好适应当前公司办公管理工作,如今电脑软硬件技术飞速发展,计算机系统开发人员也比比皆是,开发知识密集型信息系统技术条件也已经很成熟了。 1.2.3 经济可行性在经济上,费用支出和带来巨大收益相比自是不能相提并论了,至于管理上,工作人员对于这项工程实行必然是持赞成态度,由于这
4、样会大大减轻她们工作量提高工作效率。且成本低,建成后维护费用也与线性系统运营费用相似,而每年可以增进公司仓库存储工作优化、库存产品有效运用率,并可有效减少公司库存不必要支出,提高公司产品存储资金有效运用。第二章 系统分析2.1 业务范畴分析1.公司库存基本信息设立:这是公司库存最重要模块之一,它将对仓库存储中产品、雇员、客户和仓库基本信息进行管理操作,所有产品、仓库等原始数据输入都是在这里实现,有了这里数据输入,才干开始后来诸如产品入库、产品出库等操作。(1)产品信息设立:该功能容许顾客添加、修改和删除产品信息,在输入过程中,程序自动生成产品编号以以便产品管理和入库时选取产品,同步程序也检查输
5、入合法性。(2)雇员信息设立:该功能容许顾客添加、修改和删除雇员信息,在信息录入过程中,程序自动生成雇员编号以以便对员工信息管理,同步程序也检查输入合法性。(3)客户信息设立:公司库存产品出库,必然要登记货品发给客户,该功能容许顾客对客户名称、联系方式、地址等基本信息进行添加、修改和删除,在信息录入过程中,程序自动生成客户编号以以便对客户信息管理,同步程序也检查输入合法性。(4)仓库信息设立:产品入库,出库,调拨和报损都需要仓库基本信息。该功能容许顾客添加、修改和删除仓库信息,在信息录入过程中,程序自动生成仓库编号以以便对仓库信息管理,同步程序也检查输入合法性。2.库存信息录入与修改(1)产品
6、入库单信息录入与修改:该功能容许顾客输入入库单信息,在输入过程中,程序自动生成产品入库单编号以以便对入库产品信息管理和单据查询,同步程序也检查输入合法性。(2)产品出库单信息录入与修改:该功能容许顾客输入出库单信息,在输入过程中,程序自动生成产品出库单编号以以便对出库产品信息管理和单据查询,同步程序也检查输入合法性。(3)产品调拨单信息录入与修改:由于仓库所处地区不同,以及库存量差别,因此公司内部仓库之间货品调拨时必然。该功能容许顾客输入调拨单信息,在输入过程中,程序自动生成产品调拨单编号以以便对调拨产品信息管理和单据查询,同步程序也检查输入合法性。(4)产品报损单信息录入与修改:由于在产品运
7、送过程或是存储过程中,会有产品损坏,因此系统也应当具备产品报损信息管理功能。该功能容许顾客输入产品报损单信息,在输入过程中,程序自动生成产品报损单编号以以便对报损产品信息管理和单据查询,同步程序也检查输入合法性。3.库存信息查询(1)产品入库单信息查询:该功能不但要对产品入库单据信息(如:入库仓库、生产部门、产品名称、经办人等)进行查询,并且要对该单据所涉及产品信息(产品名称、型号、单价等)进行查询。(2)产品出库单信息查询:该功能不但要对产品出库单据信息(仓库名称、经办人、客户等)进行查询,并且要对该单据所涉及产品信息(产品名称、型号、单价等)进行查询。(3)产品调拨单信息查询:该功能不但要
8、对产品调拨单据信息(入库仓库、出库仓库、经办人等)进行查询,并且要对该单据所涉及产品信息(产品名称、型号、单价等)进行查询。(4)产品报损单信息查询:该功能不但要对产品报损单据信息(报损仓库、经办人等)进行查询,并且要对该单据所涉及产品信息(产品名称、型号、单价等)进行查询。4.库存信息记录分析(1)入库产品信息汇总记录:该功能对各种入库产品存储仓库、存储数量、存储金额进行了汇总记录。(2)出库产品信息汇总记录:该功能对各种出库产品出库仓库、出库数量、出库金额进行了汇总记录。该库存管理系统功能图如下:库存管理基本设立产品基本信息设立雇员基本信息设立客户基本信息设立仓库基本信息设立信息录入产品入
9、库单产品出库单产品调拨单产品报损单记录汇总信息查询产品入库单查询产品出库单查询产品调拨单查询产品报损单查询入库产品记录汇总出库产品记录汇总图2.1库存信息管理系统功能图2.2 业务流程分析库存管理数据流图生产部门产品入库产品仓库部门客户产品出库产品公司主管产品入库单产品出库单产 品报 损报损信息订购订单信息产品信息产品调拨产品产品产品报损单图2.2 系统数据流图2.3 数据字典名字:产品编号别名:描述:此产品在产品中惟一标记.定义:1数字10位置:产品信息 产品入库单 产品出库单产品调拨单产品报损单名字:产品入库单号别名:描述:此入库单在单据中惟一标记.定义:1数字10位置:产品入库单 产品入
10、库单产品信息 入库产品汇总记录名字:产品出库单号别名:描述:此出库单在单据中惟一标记.定义:1数字10位置:产品处库单 产品出库单产品信息 出库产品汇总记录名字:产品报损单号别名:描述:此报损单在单据中惟一标记.定义:1数字10位置:产品报损单 产品报损单产品信息名字:产品调拨单号别名:描述:此调拨单在单据中惟一标记.定义:1数字10位置:产品调拨单 产品调拨单产品信息图2.3 数据字典2.4 数据与数据流程分析第三章 系统设计3.1 系统总体构造设计登陆库存管理系统验证顾客信息系统主窗体仓库管理入库管理出库管理盘存管理综合管理附项分类历史数据管理打印、查询系统货品入库单经办人员报表货品出库单
11、数据备份备份输出库存汇总库存管理系统构造图错误3.2 E-R图产品信息产品编号产品名称规格型号库存上限单价颜色类别库存下限计量单位上限图3.1 产品信息实体E-R图员工编号雇员信息姓名名称职务工作部门家庭住址性别电话号码婚姻状况出生年月图3.2 雇员信息实体E-R图客户信息客户编号单位名称名称联系人客户级别电话号码地址邮箱传真邮编图3.3 客户信息实体E-R图仓库名称名称仓库地址仓库信息仓库编号计价法图3.4 仓库信息实体E-R图入库单号产品入库单信息制单日期产品生产日期生产部门入库类别入库仓库备注经办人图3.5 入库单信息实体E-R图产品单价产品入库单产品信息入库单号产品编号入库数量图3.6
12、 入库单产品信息实体E-R图出库单号产品出库单信息制单日期出库仓库销售部门出库类别销售人员发货单号客户名称备注图3.7 出库单信息实体E-R图产品出库单产品信息出库单号产品编号出库数量产品单价图3.8 出库单产品信息实体E-R图 产品调拨单信息调拨单号制单日期入库仓库出库仓库出库类别经办人备注图3.9 调拨单信息实体E-R图产品调拨单产品信息调拨单号产品编号调拨数量产品单价图3.10 调拨单产品信息实体E-R图产品报损单信息报损单号制单日期报损仓库出库类别经办人备注图3.11 报损单信息实体E-R图产品编号产品报损单产品信息报损单号报损数量产品单价图3.12 报损单产品信息实体E-R图产品报损
13、单产品出库单入库单出库单产品入库单产品调拨单报损单选取报损出库工作人员办理调拨单产品选取调拨出库办理选取生产入库办理销售出库办理NMNNM1NNN选取NNMMNM1MMM1NNM1M图3.13整个系统ER图3.3数据库设计 数据库有如下十三个表构成:表3.1 产品基本信息表字段阐明字段名称数据类型数据长度阐明主键ProductIDChar10产品编号是ProductNameChar20产品名称否StandardChar10规格否modelChar10型号否PriceFloat8单价否qualityGuaranteeInt4保存期限否maintanceInt4维护期否UnitChar10计量单位
14、否colorTypeChar10颜色类别否qualityLevelChar10质量级别否finishRateFloat4成品率否storeHouseChar20存储仓库否taxRateFloat8税率否RemarkChar100备注否numMinInt4存储下限否NumMaxInt4存储上限否表3.2 雇员基本信息表字段阐明字段名称数据类型数据长度阐明主键staffIDChar20员工编号是staffNameChar30员工姓名否DutyChar20员工职务否DepartmentChar20所在部门否SexChar2性别否AddressChar30员工住址否BirthdayDatetime8出
15、生日期否PostcodeChar10邮政编码否marriageConditionChar10婚姻状况否TelephoneChar20员工电话否NationalityChar20国籍否eMailChar20电子邮件否educationLevelChar20学历否QQChar10QQ号码否guaduateSchoolChar20毕业院校否MajorChar20专业否IdentityNOChar20身份证号码否MobileChar20手机号码否workTypeChar20员工工种否RemarkChar100备注否表3.3客户基本信息表字段阐明字段名称数据类型数据长度阐明主键CilentIDChar2
16、0客户编号是bookinDateDatetime8登记日期否clientLevelChar20客户级别否clientTypeChar20客户类型否CompanyChar20客户公司否contactPersonChar20联系人否AreaIDChar20地区否AddressChar20地址否PostcodeChar20邮政编码否TelephoneChar20联系电话否FaxChar20传真否eMailChar20电子邮件否RemarkChar100备注否manageRangeChar20经营范畴否manageProductChar20经营产品否AccountbankChar20开户银行否Acco
17、untChar20银行账号否TaxNOChar20税号否RegisterDateDatetime8注册日期否registerFundFloat8注册资金否ScaleChar20规模否IndustrycharacterChar20行业性质否AllfundsFloat8总资产否ClientcharacterChar20客户性质否表3.4仓库表字段阐明字段名称数据类型数据长度阐明主键StorehouseIDChar20仓库编号是storehouseNameChar30仓库名称否storehousePostionChar30仓库地址否priceMethodChar20仓库计价法否表3.5产品入库单基本
18、信息表字段阐明字段名称数据类型数据长度阐明主键ProductInputFormIDChar10产品入库单号是ProduceDateDatetime8生产日期否storeHouseChar20仓库名称否produceDepartmentChar20生产部门否DealerChar20经办人否houseInTypeChar20入库类别否RemarkChar100备注否FormdateDatetime8制单日期否表3.6入库产品信息表字段阐明字段名称数据类型数据长度阐明主键productInputFormIDChar10入库单号是productIDChar10产品编号是NumInt4数量否PriceF
19、loat8单价否表3.7产品出库单基本信息表字段阐明字段名称数据类型数据长度阐明主键ProductOutputFormIDChar10产品出库单号是ConsignmentFormIDChar10发货单号否storeHouseChar20仓库名称否sellDepartmentChar20销售部门否SellerChar20销售人员否clientNameChar20客户名称否HouseOutTypeChar20出库类别否RemarkChar20备注否FormdateDatetime8制单日期否DealerChar20经办人否表3.8出库产品信息表字段阐明字段名称数据类型数据长度阐明主键Product
20、OutputFormIDChar10出库单号是ProductIDChar10产品编号是NumInt4数量否PriceFloat8单价否表3.9产品调拨单基本信息表字段阐明字段名称数据类型数据长度阐明主键productMoveFormIDChar10产品调拨单号是storeHouseInChar20入库仓库否storeHouseOutChar20出库仓库否DealerChar20经办人否houseOutTypeChar20出库类别否RemarkChar100备注否FormdateDatetime8制单日期否表3.10调拨产品信息表字段阐明字段名称数据类型数据长度阐明主键ProductMoveFo
21、rmIDChar10产品调拨单号是ProductIDChar10产品编号是NumInt4数量否PriceFloat8单价否表3.11产品报损单基本信息表字段阐明字段名称数据类型数据长度阐明主键ProductLoseFormIDChar10产品报损单号是storeHousechar20报损仓库否DealerChar20经办人否houseOutTypeChar20出库类别否RemarkChar100备注否FormdateDatetime8制单日期否表3.12报损产品信息表字段阐明字段名称数据类型数据长度阐明主键ProductLoseFormIDChar10报损单号是ProductIDChar10产
22、品编号是NumInt4数量否PriceFloat8单价否3.2代码设计我在应用程序类StoreAppInitInstance办法中进行初始化。各模块在连接数据库时候都需要声明所需指针,声明如下:_RecordsetPtr m_pIDRecordset;/ 记录集指针个数可依照实际需要来拟定声明几种_ConnectionPtr m_pConn;在StoreApp构造函数中定义数据库连接字符串:TreeConnString=_T(Data Source=SaleData;UID=Sa;PWD=;)数据库初始化,连接代码如下:HRESULT hRes;tryhRes=m_pConn.CreateIn
23、stance(_T(ADODB.Connection);/创立connection对象m_pConn-ConnectionTimeout = 8; /超时八秒hRes=m_pConn-Open(_bstr_t(LPCTSTR) TreeConnString),_T(),_T(),adModeUnknown); /TreeConnString为连接字符串catch(_com_error e) /捕获异常 CString errormessage; errormessage.Format(_T(连接SaleData数据库失败!rn错误信息:%s),e.ErrorMessage(); AfxMess
24、ageBox(errormessage); /显示错误信息 return FALSE;hRes = m_pIDRecordset.CreateInstance(_T(ADODB.Recordset);/创立Recordset对象if (SUCCEEDED(hRes)hRes = m_pIDRecordset-Open(LPTSTR)strSQL.GetBuffer(130),m_pConn.GetInterfacePtr(),adOpenDynamic,adLockPessimistic,adCmdText);if(SUCCEEDED(hRes)TRACE(_T(连接成功!n);在要用记录集指
25、针时候可以用CreateInstance办法创立ADO连接对象。在程序中使用完数据库时,还需关闭连接,代码如下:m_pIDRecordset-Close();3.2.1 基本信息模块实现图3.2.1单击条目后产品信息对话框1. 建立产品基本信息CProductInfo对话框类使用Visual C+6.0“InsertType”为“MFC Class”,“Name”为“CProductInfo”,“Base class”为“CDialog”,“Dialog ID”为“IDD_PRODUCTINFO_FORM”。然后单击“OK”按钮即可完毕CProductInfo类创立。2.为模块“基本信息设立”
26、创立菜单项,如表3.2.1所示表3.2.1基本信息设立菜单阐明资源ID标题ID_set_productInfo产品信息设立ID_input_staffInfor雇员信息设立ID_input_clientInfor客户信息设立ID_set_storehouse仓库信息设立3.重要代码(1)重载对话框OnInitDialog函数在OnInitDialog函数中重要完毕列表框控件样式设定、列标题添加、数据库中已经存在数据显示和编辑框及按钮控件可用性设立、为存储仓库组合框控件添加可选项。环节如下:调用列表框控件InsertColumm()办法插入列,并设定列标题;分别查询storeHouse、prod
27、uct表,并构造相应查询成果记录集;打开storeHouse查询成果记录集,将记录集中数据插入到相应组合框中;打开product查询成果记录集,调用列表框控件InsertItem()和SetItemText()办法将记录集中数据插入到列表框控件中;调用控件GetDlgItem()办法,为控件可用性控制变量赋值;调用控件EnableWindow()办法,设定控件可用性。某些代码如下:style=m_list.GetExStyle();style=(style|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT)&(LVS_EX_CHECKBOXES) ;/设定列表框风格
28、网格行选取 取消复选框m_list.SetExtendedStyle(style);/为列表框控件添加列,并设定列标题m_list.InsertColumn(0,商品编号,LVCFMT_LEFT,100);/左对齐 宽度100m_list.InsertColumn(1,商品名称,LVCFMT_LEFT,100);/左对齐 宽度100/此处省略某些代码_RecordsetPtr m_pListRecordset; /用于创立一种查询记录集CString strSQL;HRESULT hTRes;strSQL=select * from storeHouse;/构造查询语句为存储仓库组合框添加可选
29、项_RecordsetPtr m_pStoreHouseRecordset;hTRes = m_pStoreHouseRecordset.CreateInstance(_T(ADODB.Recordset);if (SUCCEEDED(hTRes) hTRes = m_pStoreHouseRecordset-Open(LPTSTR)strSQL.GetBuffer(130),(CStoreApp*)AfxGetApp()-m_pConn.GetInterfacePtr(),adOpenDynamic,adLockPessimistic,adCmdText);/打开查询成果记录集if(SUCC
30、EEDED(hTRes)TRACE(_T(连接成功!n);while(!(m_pStoreHouseRecordset-adoEOF)m_storeHouseCombo.AddString(CStoreApp*)AfxGetApp()-GetStringFromVariant(m_pStoreHouseRecordset-GetCollect(storeHouseName);/插入组合框m_pStoreHouseRecordset-MoveNext();/记录集指针向后移动m_pStoreHouseRecordset-Close(); /关闭记录集/将当前数据库中已经存在产品信息添加到产品列表
31、框中strSQL=SELECT * FROM product;/构造查询语句try HRESULT hTRes;hTRes = m_pListRecordset.CreateInstance(_T(ADODB.Recordset);if (SUCCEEDED(hTRes)hTRes = m_pListRecordset-Open(LPTSTR)strSQL.GetBuffer(130),(CStoreApp*)AfxGetApp()-m_pConn.GetInterfacePtr(),adOpenDynamic,adLockPessimistic,adCmdText);/打开查询成果记录集if
32、(SUCCEEDED(hTRes)TRACE(_T(连接成功!n);if (!(m_pListRecordset-adoEOF)int i=0;while(!(m_pListRecordset-adoEOF)m_list.InsertItem(i,(CStoreApp*)AfxGetApp()-GetStringFromVariant(m_pListRecordset-GetCollect(productID);/产品编号m_list.SetItemText(i,1,(CStoreApp*)AfxGetApp()-GetStringFromVariant(m_pListRecordset-Ge
33、tCollect(productName);/产品名称 /此处省略某些代码if (!(m_pListRecordset-adoEOF) m_pListRecordset-MoveNext();/记录集指针向后移动i+;catch(_com_error e)/捕获异常CString errormessage;MessageBox(创立记录集失败!,错误);flag=0;/为对话框控件可用性控制变量赋值tx_productID=GetDlgItem(IDC_productID);tx_productName=GetDlgItem(IDC_productName);/此处省略某些代码bt_modif
34、y=GetDlgItem(IDC_modify);/设定按钮可用性bt_save-EnableWindow(false);/保存按钮可用bt_modify-EnableWindow(false);/修改按钮可用bt_delete-EnableWindow(false);/删除按钮可用/初始状况下,所有编辑框不可用tx_productID-EnableWindow(false);/此处省略某些代码UpdateData(false);/更新对话框数据return TRUE; (2)实现列表框控件NM_CLICK消息函数当列表框中条目被单击(如列表框条目被选中)时该函数自动被调用。作用是当列表框中一
35、种条目被选中时,将该条目相应信息显示到相应编辑框控件中,使按钮“增长”、“修改”、“删除”变为可用,“存盘”按钮不可用;当没有条目被选中时,“修改”、“删除”、“保存”按钮不可用,只有“增长”按钮可用,同步将编辑框控件内容清空并使其不可用。环节如下:调用m_listGetFirstSelectedItemPosition()办法,获得单击位置。调用m_listGetNextSelectedItem()办法,获得单击条目。调用m_listGetItemText()办法,获得条目中相应列字符串,并将其转换成预定类型。详细代码如下:void CProductInfo:OnClickList1(NMH
36、DR* pNMHDR,LRESULT* pResult) UpdateData(true);/将对话框中数据更新到变量POSITION pos = m_list.GetFirstSelectedItemPosition();/获取单击位置if(pos)int nFirstSelItem = m_list.GetNextSelectedItem(pos);/获取单击条目m_productID=m_list.GetItemText(nFirstSelItem,0);/产品编号/省略某些代码bt_modify-EnableWindow(true);/修改按钮可用bt_delete-EnableWin
37、dow(true);/删除按钮可用UpdateData(false);/将数据更新到对话框*pResult = 0;(3)为“增长”按钮提供实现函数“增长”按钮只是完毕添加准备工作,使得除了“产品编号”以外所有编辑控件可用,并且为她们设定默认值。通过查询数据库,查询可用产品入库单号,并更新下一种可用产品入库单号。当所有内容添加完毕后,单击“存盘”按钮才干实现实际保存工作。代码如下:void CProductInfo:OnAdd() UpdateData(true);/对话框数据更新到变量/获取新增长产品编号int productID=(CStoreApp*)AfxGetApp()-m_pIDR
38、ecordset-GetCollect(productID).intVal;if(productID10) /为产品编号设定格式m_productID.Format(product0000%d,productID);else if(productID9)m_productID.Format(product000%d,productID);else if(productID99)m_productID.Format(product00%d,productID);CString str;str.Format(%d,productID+1);/更新下一种可用产品编号(CStoreApp*)AfxGe
39、tApp()-m_pIDRecordset-PutCollect(productID,_variant_t(str);(CStoreApp*)AfxGetApp()-m_pIDRecordset-Update();/更新数据库/为对话框控件变量设定默认值m_productName = _T();m_standard = _T();/此处省略某些代码flag=1; /添加 /设定除产品编号以外其她编辑控件均可用tx_productID-EnableWindow(false);/此处省略某些代码tx_numMin-EnableWindow(true); /设定按钮可用性bt_save-EnableWindow(true);/保存按钮可用bt_add-EnableWindow(false);/添加按钮不可用bt_modify-EnableWindow(false);/修改按钮不可用bt_delete-EnableWindow(false);/删除按钮不可用Updat