首页 库存管理系统论文681017658

库存管理系统论文681017658

举报
开通vip

库存管理系统论文681017658库存管理系统论文681017658 - 1 - 信息系统 课程设计说明书 设计题目:库存管理系统 : 设 计 者 指导教师: 07信息系统工程 2010年 6 月 6 日 - 2 - 目录: 第一章 可行性分析 1.1开发环境与开发工具 1.2可行性报告 1.2.1 开发必要性 1.2.2技术可行性 1.2.3经济可行性 第二章 系统分析 2.1 系统需求分析 2.2 功能需求分析 2.3 业务流程分析 2.4 数据与数据流程分析 第三章 系统设计 3.1 数据库设计 3....

库存管理系统论文681017658
库存管理系统 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 681017658 - 1 - 信息系统 课程设计说明书 设计 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目:库存管理系统 : 设 计 者 指导教师: 07信息系统工程 2010年 6 月 6 日 - 2 - 目录: 第一章 可行性分析 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 设计展望 参考文献 - 3 - 第一章 可行性分析 1.1开发环境和开发工具 操作系统:Windows XP 开发语言:C++ 数据库: SQL 2000 数据库访问控件:ADO 1.2可行性分析 1.2.1 开发必要性 随着计算机及网络技术的飞速发展,Internet/Intranet应用在全球范围内日益普及,当今社会正快速向信息化社会前进,信息自动化的作用也越来越大,从而可以使我们从繁杂的信息管理中解放出来,提高了我们的工作效率。如今,信息网络技术已经无处不在,无时不在了,各种各样的信息管理系统也就应运而生。 目前,随着企业规模的不断壮大,产品的种类和数量都不断增加,产品的流通越来越多,这就使产品的存储需求不断增加,需要工作人员花费很大力气来统筹管理这项工作,为了保证工作的正确性和可靠性同时提高管理的效率,很有必要建立一个库存管理系统,使货品管理工作 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 化,系统化,程序化。 1.2.2 技术可行性 在技术上,如今成熟的语言有很多,像是PowerBuilder 、VB 、Delphi等都能开发出很好用的系统。而本次设计我采用的是VC,也是很成熟的语言,再加上数据库如今的发展状况,开发出一个库存管理的应 - 4 - 用程序是没有问题的。 鉴于软硬件方面对系统的需求,软件要求易学,界面友好,容易掌握,可以很简单方便的进行图书信息管理。硬件的配置要求不能太高,这样可以很好的适应当前的企业办公管理工作,如今电脑软硬件技术飞速发展,计算机系统开发人员也比比皆是,开发知识密集型的信息系统的技术条件也已经很成熟了。 1.2.3 经济可行性 在经济上,费用的支出和带来的巨大收益相比自是不能相提并论了,至于管理上,工作人员对于这项工程的实施必然是持赞成的态度,因为这样会大大减轻他们的工作量提高工作效率。且成本低,建成后的维护费用也与线性系统运行费用相同,而每年可以促进企业仓库存储的工作优化、库存产品的有效利用率,并可有效降低企业库存的不必要支出,提高企业产品存储资金的有效利用。 第二章 系统分析 2.1 业务范围分析 1.企业库存基础信息设置: 这是企业库存最重要的模块之一,它将对仓库存储中的产品、雇员、客户和仓库的基本信息进行管理操作,所有的产品、仓库等原始数据输入都是在这里实现的,有了这里的数据输入,才能开始以后的诸如产品入库、产品出库等操作。 (1)产品信息设置:该功能允许用户添加、修改和删除产品信息,在输入过程中,程序自动生成产品编号以方便产品的管理和入库时选 - 5 - 择产品,同时程序也检查输入的合法性。 (2)雇员信息设置:该功能允许用户添加、修改和删除雇员信息,在信息录入过程中,程序自动生成雇员编号以方便对员工信息的管理,同时程序也检查输入的合法性。 (3)客户信息设置:企业库存产品出库,必然要登记货物发给的客户,该功能允许用户对客户的名称、联系方式、地址等基本信息进行添加、修改和删除,在信息录入过程中,程序自动生成客户编号以方便对客户信息的管理,同时程序也检查输入的合法性。 (4)仓库信息设置:产品的入库,出库,调拨和报损都需要仓库的基本信息。该功能允许用户添加、修改和删除仓库信息,在信息录入过程中,程序自动生成仓库编号以方便对仓库信息的管理,同时程序也检查输入的合法性。 2.库存信息的录入与修改 (1)产品入库单信息录入与修改:该功能允许用户输入入库单信息,在输入过程中,程序自动生成产品入库单编号以方便对入库产品的信息管理和单据的查询,同时程序也检查输入的合法性。 (2)产品出库单信息录入与修改:该功能允许用户输入出库单信息,在输入过程中,程序自动生成产品出库单编号以方便对出库产品的信息管理和单据的查询,同时程序也检查输入的合法性。 (3)产品调拨单信息录入与修改:因为仓库所处地区的不同,以及库存量的差异,所以企业内部仓库之间货品的调拨时必然的。该功能允许用户输入调拨单信息,在输入过程中,程序自动生成产品调拨单 - 6 - 编号以方便对调拨产品的信息管理和单据的查询,同时程序也检查输入的合法性。 (4)产品报损单信息录入与修改:因为在产品的运输过程或是存储过程中,会有产品的损坏,所以系统也应该具备产品报损信息的管理功能。该功能允许用户输入产品报损单信息,在输入过程中,程序自动生成产品报损单编号以方便对报损产品的信息管理和单据的查询,同时程序也检查输入的合法性。 3.库存信息的查询 (1)产品入库单信息的查询:该功能不仅要对产品入库单据的信息(如:入库仓库、生产部门、产品名称、经办人等)进行查询,而且要对该单据所包括的产品的信息(产品名称、型号、单价等)进行查询。 (2)产品出库单信息的查询:该功能不仅要对产品出库单据的信息(仓库名称、经办人、客户等)进行查询,而且要对该单据所包括的产品的信息(产品名称、型号、单价等)进行查询。 (3)产品调拨单信息的查询:该功能不仅要对产品调拨单据的信息(入库仓库、出库仓库、经办人等)进行查询,而且要对该单据所包括的产品的信息(产品名称、型号、单价等)进行查询。 (4)产品报损单信息的查询:该功能不仅要对产品报损单据的信息(报损仓库、经办人等)进行查询,而且要对该单据所包括的产品的信息(产品名称、型号、单价等)进行查询。 4.库存信息的统计分析 - 7 - (1)入库产品信息汇总统计:该功能对各种入库产品的存储仓库、存储数量、存储金额进行了汇总统计。 (2)出库产品信息汇总统计:该功能对各种出库产品的出库仓库、出库数量、出库金额进行了汇总统计。 该库存管理系统的功能图如下: 库存管理 基本设置 信息查询 统计汇总 信息录入 产雇客仓产产产产产产产产入出 品员户库品品品品品品品品库库 基基基基入出调报入出调报产产 本本本本库库拨损库库拨损品品 信信信信单单单单统统单 单 单 单 息息息息查查查查计计 设设设设汇汇询 询 询 询 置 置 置 总 置 总 图2.1库存信息管理系统功能图 2.2 业务流程分析 库存管理数据流图 - 8 - 企业主管 产 品产品产品 报调拨 损 产 品 单 报 损 报损信息 产品 生产部门 仓库部门 客户 产产 品品产出入品 库库 单 单 产品 产品产品入库 出库 订单信息 产品信息 订购 图2.2 系统数据流图 2.3 数据字典 - 9 - 名字:产品编号 名字:产品入库单号 别名: 别名: 描述: 此产品在产品中的惟描述: 此入库单在单据中的一的标识. 惟一的标识. 定义:1{数字}10 定义:1{数字}10 位置: 产品信息 位置: 产品入库单 产品入库单 产品入库单产品信息 产品出库单 入库产品汇总统计 产品调拨单 产品报损单 名字:产品出库单号 名字:产品报损单号 别名: 别名: 描述: 此出库单在单据中的描述: 此报损单在单据中的惟一的标识. 惟一的标识. 定义:1{数字}10 定义:1{数字}10 位置: 产品处库单 位置: 产品报损单 产品出库单产品信息 产品报损单产品信息 出库产品汇总统计 名字:产品调拨单号 别名: 描述: 此调拨单在单据中的 惟一的标识. 定义:1{数字}10 位置: 产品调拨单 产品调拨单产品信息 图2.3 数据字典 - 10 - 2.4 数据与数据流程分析 第三章 系统设计 3.1 系统总体结构设计 登陆库存管理系统 错误 验证用户信息 系统主窗体 系仓入出综盘附理历打 统库库库合存项印史 管管管管管分、数 理理理理理类查 据询 管 货货经 品品办 入出人 库库员 库存汇总 单单报 表 数据备份 备份输出 库存管理系统结构图 3.2 E-R图 - 11 - 规格 产品型号 名称 产品信息 单价 产品编号 计量单位上颜色类别 限 库存下限 库存上限 图3.1 产品信息实体E-R图 职务 姓名工作部门 名称 雇员信息 性别 员工编号 电话号码 出生年月 婚姻状况 家庭住址 图3.2 雇员信息实体E-R图 - 12 - 联系人 单位名称客户级别 名称 客户信息 地址 客户编号 邮编 邮箱 传真 电话号码 图3.3 客户信息实体E-R图 仓库名称名仓库地址 称 仓库信息 仓库编号 计价法 图3.4 仓库信息实体E-R图 - 13 - 产品生产日期 制单日期 生产部门 入库仓库 产品入库单信息 入库单号 经办人 备注 入库类别 图3.5 入库单信息实体E-R图 产品编号 入库数量 产品入库单产品信息 入库单号 产品单价 图3.6 入库单产品信息实体E-R图 - 14 - 出库仓库 制单日期 销售部门 出库单号 销售人员 产品出库单信息 备注 客户名称 发货单号 出库类别 图3.7 出库单信息实体E-R图 产品编号 出库数量 产品出库单产品信息 出库单号 产品单价 图3.8 出库单产品信息实体E-R图 - 15 - 入库仓库 制单日期 出库仓库 调拨单号 产品调拨单信息 经办人 备注 出库类别 图3.9 调拨单信息实体E-R图 产品编号 调拨数量 产品调拨单产品信息 调拨单号 产品单价 图3.10 调拨单产品信息实体E-R图 - 16 - 报损仓库 制单日期 报损单号 产品报损单信息 经办人 备注 出库类别 图3.11 报损单信息实体E-R图 产品编号 报损数量 产品报损单产品信息 报损单号 产品单价 图3.12 报损单产品信息实体E-R图 - 17 - 工作人员 M M 办理 办理 N N N 报损单 调拨单 1 1 报损出库 调拨出库 N N 调拨单产品 报损单产品 N N 选择 选择 M M 产品 N N 选择 选择 M M 入库单产品 出库单产品 M M 生产入库 销售出库 1 1 入库单 出库单 N N 办理 办理 M M 图3.13整个系统的ER图 - 18 - 3.3数据库设计 数据库有以下十三个表组成: 表3.1 产品基本信息表字段说明 字段名称 数据类型 数据长度 说明 主键 ProductID Char 10 产品编号 是 ProductName Char 20 产品名称 否 Standard Char 10 规格 否 model Char 10 型号 否 Price Float 8 单价 否 qualityGuarantee Int 4 保存期限 否 maintance Int 4 维护期 否 Unit Char 10 计量单位 否 colorType Char 10 颜色类别 否 qualityLevel Char 10 质量等级 否 finishRate Float 4 成品率 否 storeHouse Char 20 存放仓库 否 taxRate Float 8 税率 否 Remark Char 100 备注 否 numMin Int 4 存储下限 否 NumMax Int 4 存储上限 否 - 19 - 表3.2 雇员基本信息表字段说明 字段名称 数据类型 数据长度 说明 主键 staffID Char 20 员工编号 是 staffName Char 30 员工姓名 否 Duty Char 20 员工职务 否 Department Char 20 所在部门 否 Sex Char 2 性别 否 Address Char 30 员工住址 否 Birthday Datetime 8 出生日期 否 Postcode Char 10 邮政编码 否 marriageCondition Char 10 婚姻状况 否 Telephone Char 20 员工电话 否 Nationality Char 20 国籍 否 eMail Char 20 电子邮件 否 educationLevel Char 20 学历 否 QQ Char 10 QQ号码 否 guaduateSchool Char 20 毕业院校 否 Major Char 20 专业 否 IdentityNO Char 20 身份证号否 码 Mobile Char 20 手机号码 否 workType Char 20 员工工种 否 - 20 - Remark Char 100 备注 否 表3.3客户基本信息表字段说明 字段名称 数据类型 数据长度 说明 主键 CilentID Char 20 客户编号 是 bookinDate Datetime 8 登记日期 否 clientLevel Char 20 客户级别 否 clientType Char 20 客户类型 否 Company Char 20 客户公司 否 contactPerson Char 20 联系人 否 AreaID Char 20 地区 否 Address Char 20 地址 否 Postcode Char 20 邮政编码 否 Telephone Char 20 联系电话 否 Fax Char 20 传真 否 eMail Char 20 电子邮件 否 Remark Char 100 备注 否 manageRange Char 20 经营范围 否 manageProduct Char 20 经营产品 否 Accountbank Char 20 开户银行 否 Account Char 20 银行账号 否 TaxNO Char 20 税号 否 - 21 - RegisterDate Datetime 8 注册日期 否 registerFund Float 8 注册资金 否 Scale Char 20 规模 否 Industrycharacter Char 20 行业性质 否 Allfunds Float 8 总资产 否 Clientcharacter Char 20 客户性质 否 表3.4仓库表字段说明 字段名称 数据类型 数据长度 说明 主键 StorehouseID Char 20 仓库编号 是 storehouseName Char 30 仓库名称 否 storehousePostion Char 30 仓库地址 否 priceMethod Char 20 仓库计价否 法 表3.5产品入库单基本信息表字段说明 字段名称 数据类型 数据长度 说明 主键 ProductInputFormID Char 10 产品入库是 单号 ProduceDate Datetime 8 生产日期 否 storeHouse Char 20 仓库名称 否 produceDepartment Char 20 生产部门 否 - 22 - Dealer Char 20 经办人 否 houseInType Char 20 入库类别 否 Remark Char 100 备注 否 Formdate Datetime 8 制单日期 否 表3.6入库产品信息表字段说明 字段名称 数据类型 数据长度 说明 主键 productInputFormID Char 10 入库单号 是 productID Char 10 产品编号 是 Num Int 4 数量 否 Price Float 8 单价 否 表3.7产品出库单基本信息表字段说明 字段名称 数据类型 数据长度 说明 主键 ProductOutputFormID Char 10 产品出库是 单号 ConsignmentFormID Char 10 发货单号 否 storeHouse Char 20 仓库名称 否 sellDepartment Char 20 销售部门 否 Seller Char 20 销售人员 否 clientName Char 20 客户名称 否 HouseOutType Char 20 出库类别 否 - 23 - Remark Char 20 备注 否 Formdate Datetime 8 制单日期 否 Dealer Char 20 经办人 否 表3.8出库产品信息表字段说明 字段名称 数据类型 数据长度 说明 主键 ProductOutputFormID Char 10 出库单号 是 ProductID Char 10 产品编号 是 Num Int 4 数量 否 Price Float 8 单价 否 表3.9产品调拨单基本信息表字段说明 字段名称 数据类型 数据长度 说明 主键 productMoveFormID Char 10 产品调拨是 单号 storeHouseIn Char 20 入库仓库 否 storeHouseOut Char 20 出库仓库 否 Dealer Char 20 经办人 否 houseOutType Char 20 出库类别 否 Remark Char 100 备注 否 Formdate Datetime 8 制单日期 否 - 24 - 表3.10调拨产品信息表字段说明 字段名称 数据类型 数据长度 说明 主键 ProductMoveFormID Char 10 产品调拨是 单号 ProductID Char 10 产品编号 是 Num Int 4 数量 否 Price Float 8 单价 否 表3.11产品报损单基本信息表字段说明 字段名称 数据类型 数据长度 说明 主键 ProductLoseFormID Char 10 产品报损是 单号 storeHouse char 20 报损仓库 否 Dealer Char 20 经办人 否 houseOutType Char 20 出库类别 否 Remark Char 100 备注 否 Formdate Datetime 8 制单日期 否 表3.12报损产品信息表字段说明 字段名称 数据类型 数据长度 说明 主键 ProductLoseFormID Char 10 报损单号 是 ProductID Char 10 产品编号 是 - 25 - Num Int 4 数量 否 Price Float 8 单价 否 3.2代码设计 我在应用程序类StoreApp的InitInstance方法中进行初始化。各模块在连接数据库的时候都需要声明所需的指针,声明如下: _RecordsetPtr m_pIDRecordset; // 记录集指针的个数可根据实际的需要来确定声明几个 _ConnectionPtr m_pConn; 在StoreApp的构造 函数 excel方差函数excelsd函数已知函数     2 f x m x mx m      2 1 4 2拉格朗日函数pdf函数公式下载 中定义数据库的连接字符串:TreeConnString=_T("Data Source=SaleData;UID=Sa;PWD=;") 数据库的初始化,连接代码如下: HRESULT hRes; try {hRes=m_pConn.CreateInstance(_T("ADODB.Connection"));//创建connection对象 m_pConn->ConnectionTimeout = 8; //超时八秒 hRes=m_pConn->Open(_bstr_t((LPCTSTR) TreeConnString),_T(""),_T(""),adModeUnknown); //TreeConnString 为连接字符串 } catch(_com_error e) //捕捉异常 { - 26 - CString errormessage; errormessage.Format(_T("连接SaleData数据库失败!\r\n错误信息:%s"),e.ErrorMessage()); AfxMessageBox(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")); } 在要用记录集指针的时候可以用CreateInstance方法创建ADO连接对象。 在程序中使用完数据库时,还需关闭连接,代码如下: m_pIDRecordset->Close(); - 27 - 3.2.1 基本信息模块的实现 图3.2.1单击条目后产品信息对话框 1. 建立产品基本信息的CProductInfo对话框类 使用Visual C++6.0的“Insert\Type”为“MFC Class”,“Name”为“CProductInfo”,“Base class”为“CDialog”,“Dialog ID”为“IDD_PRODUCTINFO_FORM”。然后单击“OK”按钮即可完成CProductInfo类的创建。 2.为模块“基本信息设置”创建菜单项,如表3.2.1所示 表3.2.1基本信息设置菜单说明 资源ID 标题 ID_set_productInfo 产品信息设置 ID_input_staffInfor 雇员信息设置 ID_input_clientInfor 客户信息设置 - 28 - ID_set_storehouse 仓库信息设置 3.主要代码 (1)重载对话框的OnInitDialog函数 在OnInitDialog函数中主要完成列表框控件的样式设定、列标题添加、数据库中已经存在的数据显示和编辑框及按钮控件可用性设置、为存放仓库组合框控件添加可选项。步骤如下: 调用列表框控件的InsertColumm()方法插入列,并设定列标题;分别查询storeHouse、product表,并构造相应的查询结果记录集;打开storeHouse的查询结果记录集,将记录集中的数据插入到相应的组合框中;打开product的查询结果记录集,调用列表框控件的InsertItem() 和SetItemText()方法将记录集中的数据插入到列表框控件中;调用控件的GetDlgItem()方法,为控件可用性控制变量赋值;调用控件的EnableWindow()方法,设定控件的可用性。部分代码如下: style=m_list.GetExStyle(); style=(style|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT) &(~LVS_EX_CHECKBOXES) ;//设定列表框风格 网格\行选择 取消复选框 m_list.SetExtendedStyle(style); //为列表框控件添加列,并设定列标题 m_list.InsertColumn(0,"商品编号",LVCFMT_LEFT,100);//左对齐 宽度100 m_list.InsertColumn(1,"商品名称",LVCFMT_LEFT,100); //左对齐 - 29 - 宽度100 //此处省略部分代码 _RecordsetPtr m_pListRecordset; //用于创建一个查询记录集 CString strSQL; HRESULT hTRes; strSQL="select * from storeHouse"; //构造查询语句为存放仓库组 合框添加可选项 _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(SUCCEEDED(hTRes)) { TRACE(_T("连接成功!\n")); while(!(m_pStoreHouseRecordset->adoEOF)) { - 30 - m_storeHouseCombo.AddString(((CStoreApp*)AfxGetApp())->GetStringFromVariant(m_pStoreHouseRecordset->GetCollect("storeHouseName")));//插入组合框 m_pStoreHouseRecordset->MoveNext();//记录集指针向 后移动 } } } m_pStoreHouseRecordset->Close(); //关闭记录集 //将目前数据库中已经存在的产品信息添加到产品列表框中 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(), - 31 - adOpenDynamic,adLockPessimistic,adCmdText);//打开查询结果记录集 if(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())->GetStringFrom Variant(m_pListRecordset->GetCollect("productName"))); //产品名称 //此处省略部分代码 if (!(m_pListRecordset->adoEOF)) { m_pListRecordset->MoveNext(); //记录集指针向后移动 i++; } } } } - 32 - } } catch(_com_error e)///捕捉异常 {CString errormessage; MessageBox("创建记录集失败!","错误"); } flag=0; //为对话框控件可用性控制变量赋值 tx_productID=GetDlgItem(IDC_productID); tx_productName=GetDlgItem(IDC_productName); //此处省略部分代码 bt_modify=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消息函数 - 33 - 当列表框中的条目被单击(如列表框的条目被选中)时该函数自动被调用。作用是当列表框中的一个条目被选中时,将该条目对应的信息显示到相应的编辑框控件中,使按钮“增加”、“修改”、“删除”变为可用,“存盘”按钮不可用;当没有条目被选中时,“修改”、“删除”、“保存”按钮不可用,只有“增加”按钮可用,同时将编辑框控件内容清空并使其不可用。步骤如下: 调用m_list的GetFirstSelectedItemPosition()方法,获得单击的位置。调用m_list的GetNextSelectedItem()方法,获得单击的条目。调用m_list的GetItemText()方法,获得条目中对应列的字符串,并将其转换成预定的类型。具体代码如下: void CProductInfo::OnClickList1(NMHDR* 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);//产品编号 //省略部分代码 - 34 - } bt_modify->EnableWindow(true); //修改按钮可用 bt_delete->EnableWindow(true); //删除按钮可用 UpdateData(false); //将数据更新到对话框 *pResult = 0; } (3)为“增加”按钮提供实现函数 “增加”按钮只是完成添加的准备工作,使得除了“产品编号”以外的所有编辑控件可用,并且为他们设定默认值。通过查询数据库,查询可用的产品入库单号,并更新下一个可用的产品入库单号。当所有内容添加完毕后,单击“存盘”按钮才能实现实际的保存工作。代码如下: void CProductInfo::OnAdd() { UpdateData(true);//对话框数据更新到变量 //获取新增加的产品的编号 int productID=((CStoreApp*)AfxGetApp())->m_pIDRecordset->GetCollect ("productID").intVal; if(productID<10) //为产品编号设定格式 m_productID.Format("product0000%d",productID); else if(productID<100&&productID>9) - 35 - m_productID.Format("product000%d",productID); else if(productID<1000&&productID>99) m_productID.Format("product00%d",productID); CString str; str.Format("%d",productID+1); //更新下一个可用的产品编号 ((CStoreApp*)AfxGetApp())->m_pIDRecordset->PutCollect("produc tID",_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); //修改按钮不可用 - 36 - bt_delete->EnableWindow(false); //删除按钮不可用 UpdateData(false);//将数据更新到对话框 } (4)为修改按钮提供实现函数 “修改”按钮只是完成修改的准备工作,除了“产品入库单号”外的其他编辑控件均可用。当所有的内容修改完毕后,单击“存盘”按钮才能实现实际的保存工作。代码如下: void CProductInfo::OnModify() { //设定除产品编号以外的其他编辑控件均可用 tx_productID->EnableWindow(false); tx_productName->EnableWindow(true); //此处省略部分代码 tx_numMin->EnableWindow(true); flag=2;//修改 bt_save->EnableWindow(true);//保存按钮可用 } (5)为存盘按钮提供实现函数 “存盘”按钮用于将新添加的条目或修改后的条目存储到数据库中,并将列表框控件中的内容刷新,同时使新增加的条目或修改的条目在列表框控件中可见并处于选中状态。实现时如果是新增,查询所有的记录,在该记录集中增加记录并更新数据库;如果是修改记录,则查 - 37 - 询产品编号等于目前编辑的产品编号的记录,修改该记录,最后将记录更新到数据库。代码如下: void CProductInfo::OnSave() { UpdateData(true);//将控件中的值更新到变量 _RecordsetPtr m_pRecordset; CString strSQL; if(flag==1) //添加 {strSQL="SELECT * FROM product" ;//构造sql语句 try { HRESULT hTRes; hTRes = m_pRecordset.CreateInstance(_T("ADODB.Recordset")); if (SUCCEEDED(hTRes)) { hTRes = m_pRecordset->Open((LPTSTR)strSQL.GetBuffer(130), ((CStoreApp*)AfxGetApp())->m_pConn.GetInterfacePtr(), adOpenDynamic,adLockPessimistic,adCmdText);//打开查询结果记录集 if(SUCCEEDED(hTRes)) { TRACE(_T("连接成功!\n")); CString str; m_pRecordset->AddNew();//添加新的记录 - 38 - m_pRecordset->PutCollect("productID",_variant_t(m_productID));//产品编号 //此处省略部分代码 m_pRecordset->Update(); //更新数据库 int j; j=m_list.GetItemCount(); //获取要插入的条目的位置 m_list.InsertItem(j,m_productID); //产品编号 m_list.SetItemText(j,1,m_productName); //产品名称 //此处省略部分代码 AfxMessageBox("插入成功~"); // 提示 春节期间物业温馨提示小区春节期间温馨提示物业小区春节温馨提示春节物业温馨提示物业春节期间温馨提示 信息 } } } catch(_com_error e)///捕捉异常 { CString errormessage; MessageBox("创建记录集失败!","错误"); } } else if(flag==2) //修改 { strSQL="SELECT * FROM product where productID='" ; - 39 - strSQL=strSQL+m_productID+"'";//构造查询指定产品编号的产品的 信息的sql语句 try {HRESULT hTRes; hTRes = m_pRecordset.CreateInstance(_T("ADODB.Recordset")); if (SUCCEEDED(hTRes)) {hTRes = m_pRecordset->Open((LPTSTR)strSQL.GetBuffer(130), ((CStoreApp*)AfxGetApp())->m_pConn.GetInterfacePtr(), adOpenDynamic,adLockPessimistic,adCmdText);//打开查询结果 记录集 if(SUCCEEDED(hTRes)) { TRACE(_T("连接成功!\n")); CString str; m_pRecordset->PutCollect("productName",_variant_t(m_productName)) ;//产品名称 //此处省略部分代码 AfxMessageBox("修改成功~");//提示信息 } - 40 - } } catch(_com_error e)///捕捉异常 { CString errormessage; MessageBox("创建记录集失败!","错误"); } } Refresh(); //设定按钮的可用性 bt_add->EnableWindow(true);//添加按钮可用 bt_delete->EnableWindow(true);//删除按钮可用 bt_modify->EnableWindow(true);//修改按钮可用 bt_save->EnableWindow(false);//保存按钮不可用 //所有的编辑控件均不可用 tx_productID->EnableWindow(false); //此处省略部分代码 UpdateData(false);//将数据更新到对话框 } (6)为“删除”按钮提供实现函数 删除选定的记录或者是当前记录,先生成删除指定产品编号的产品信 息的SQL语句,调用数据库连接对象Execute方法执行该SQL语句 - 41 - 将满足条件的记录从数据库中删除。最后将删除的记录从列表框控件中清除并为编辑框控件变量赋默认值。代码如下: void CProductInfo::OnDelete() { CAffirm dlg; if(dlg.DoModal()!=IDOK)//显示确认删除对话框 { return; } _variant_t RecordsAffected; CString strSQL; //构造删除记录的sql语句 strSQL="delete from product where productID='"; strSQL=strSQL+m_productID+"'"; (((CStoreApp*)AfxGetApp())->m_pConn)->Execute((_bstr_t)strSQL ,&RecordsAffected,adCmdText); //执行sql语句,删除记录 POSITION pos = m_list.GetFirstSelectedItemPosition();//获取删除的记录的位置 if(pos) { int nFirstSelItem = m_list.GetNextSelectedItem(pos);//获取删除的记录对应的条目 m_list.DeleteItem(nFirstSelItem);//将该条目删除 } - 42 - bt_delete->EnableWindow(false); //删除按钮不可用 //为控件关联变量赋默认值 m_productID = _T(""); //此处省略部分代码 Refresh(); UpdateData(false); //更新对话框数据 } 3.2.2 信息录入模块的实现 本模块主要完成库存管理的基本处理,包括产品入库、产品出库、产品调拨、产品报损。下面以产品入库单为例说明操作流程。其实现界面如图3.2.2所示。 - 43 - 图3.2.2 产品入库单选择产品界面 1.建立各对话框类 2.创建菜单 为模块“信息录入”创建菜单 表3.2.3信息录入菜单说明 资源ID 标题 ID_input_productInputForm 产品入库单 ID_input_productOutputForm 产品出库单 ID_inputProductMoveForm 产品调拨单 - 44 - ID_input_productLoseForm 产品报损单 3.主要实现代码 产品入库单对话框: )产品入库单对话框的OnInitDialog函数: (1 重载对话框的OnInitDialog函数,在该函数中主要完成如下几项工作: 设定列表框控件属性为可整行选择,画网格线,添加列并设定列标题。 CDialog::OnInitDialog(); DWORD style; style=m_list.GetExStyle();//获取当前列表框样式 style=(style|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT)&(~L VS_EX_CHECKBOXES); m_list.SetExtendedStyle(style); //设定新的列表框样式 m_list.InsertColumn(0,"产品编号",LVCFMT_LEFT,100);//添加并设定列标题 //此处省略部分代码 m_list.InsertColumn(6,"金额",LVCFMT_LEFT,100); 为对话框中的组合框添加可选项,包括采购员、仓库名称。具体步骤如下: 第一步:构造查询的sql语句。 第二步:调用Open()方法打开查询结果记录集。 第三步:调用组合框控件的AddString()方法,依次将查询结果记录集中的数据插入到组合框控件中。 - 45 - 具体代码如下: CString strSQL; HRESULT hTRes; _RecordsetPtr m_pRecordset; strSQL="select distinct staffName from staff"; //选择员工信息 hTRes = m_pRecordset.CreateInstance(_T("ADODB.Recordset"));//Recordset对 象 if (SUCCEEDED(hTRes)) {hTRes = m_pRecordset->Open((LPTSTR)strSQL.GetBuffer(130), ((CStoreApp*)AfxGetApp())->m_pConn.GetInterfacePtr(), adOpenDynamic,adLockPessimistic,adCmdText);//打开记 录集 if(SUCCEEDED(hTRes)) {while(!(m_pRecordset->adoEOF)) { m_dealerCombo.AddString(((CStoreApp*)AfxGetApp())->GetString FromVariant(m_pRecordset->GetCollect("staffName"))); m_pRecordset->MoveNext(); } } } - 46 - m_pRecordset->Close(); //省略插入仓库数据的部分代码 根据调用对话框的对象,确定对话框的显示内容,如果是被菜单调用,测初始状态处于录入新单的状态;如果被查询对话框调用,测查询并显示被双击条目的产品入库单的详细信息。 如果search=1则是被查询对话框调用,如果search=0则是被菜单调用。代码如下: if(is_search==1) //被查询对话框调用 { bt_add->EnableWindow(true);//添加按钮可用 //此处省略部分代码 else//被系统菜单调用 {bt_add->EnableWindow(false); //此处省略部分代码 ((CStoreApp*)AfxGetApp())->m_pIDRecordset->Update(); } UpdateData(false); return TRUE; (2)为“新单”按钮提供实现函数 “新单”按钮完成添加新的产品入库单前的准备工作,将除了“产品入库单号”以外的所有编辑控件处于可用状态,并为这些编辑控件变量赋默认值。生成新产品入库单号,更新下一个可用的报价单号。待录入采购入库单信息之后,单击“存盘”按钮完成信息的存储。代码 - 47 - 如下: int formID=((CStoreApp*)AfxGetApp())->m_pIDRecordset->GetCollect("p roductInputFormID").intVal;//获取新的产品入库单号 if(formID<10)//为产品入库单号设定格式 m_productInputFormID.Format("CPRK0000%d",formID); else if(formID<100&&formID>9) m_productInputFormID.Format("CPRK000%d",formID); else if(formID<1000&&formID>99) m_productInputFormID.Format("CPRK00%d",formID); CString str;//更新下一个可用单号 str.Format("%d",formID+1); ((CStoreApp*)AfxGetApp())->m_pIDRecordset->PutCollect("produc tInputFormID",_variant_t(str)); ((CStoreApp*)AfxGetApp())->m_pIDRecordset->Update();//更新数 据库 m_list.DeleteAllItems();//删除所有条目 m_formDate = COleDateTime::GetCurrentTime();//为控件变量赋初 值 m_produceDate = COleDateTime::GetCurrentTime(); m_storeHouse = _T(""); is_search=0; - 48 - flag=1; UpdateData(false);//更新对话框数据 (3)为修改按钮提供实现函数 “修改”按钮完成修改当前产品入库但前的准备工作,将除了“产品入库单号”以外的所有编辑控件处于可用状态。待修改完产品入库单信息之后,单击“保存”按钮完成信息的存储。代码如下: void CProductInputForm::OnModify2() { flag=2; //设定按钮的可用性 bt_add->EnableWindow(false); //此处省略部分代码 tx_remark->EnableWindow(true); } (4)为删除按钮提供实现函数: “删除”按钮用于删除当前的产品入库单,删除信息之前系统会提示用户是否要删除,如果选择“是”则删除该条记录;否则,不进行任何操作,直接返回。其实现方式和5.3.1节中,基础信息设置的“删除”基本一致,这里不再作赘述。 (5)为“选择产品”按钮提供实现的函数 “选择产品”按钮用于在修改或者新建产品入库单时,为产品入库单增加新的产品。该函数调用产品选择对话框。代码如下: - 49 - CSelectProduct dlg;//构造产品选择对话框 if(dlg.DoModal()==IDOK) float total=dlg.m_num*dlg.m_price;//计算金额 int i=m_list.GetItemCount();//获得插入列表框的位置 CString str; m_list.InsertItem(i,dlg.m_productID);//产品编号 m_list.SetItemText(i,1,dlg.m_productName);//产品名称 //此处省略部分代码 (6)为“取消选取”按钮提供实现函数 “取消选取”按钮用于在修改或者新建产品入库单时,删除产品入库单的产品列表框中的选中的产品。删除时要经过用户的确认,如果选择“是”,则删除该条信息,否则不进行任何操作。步骤如下: 第一步:显示确认是否删除对话框; 第二步:获取单击的位置,通过单击的位置获取单击的条目; 第三步:具体从数据库中删除要等保存是删除。 具体代码如下: CAffirm dlg;//构造删除对话框 if(dlg.DoModal()!=IDOK) { return; } POSITION pos = m_list.GetFirstSelectedItemPosition();//确定删除条目的位置 - 50 - if(pos) { int nFirstSelItem = m_list.GetNextSelectedItem(pos);//确定删除的条目 m_list.DeleteItem(nFirstSelItem);//删除条目 } (7)为“存盘”按钮提供实现函数 修改或者新增加记录编辑完毕,单击“存盘”按钮时调用该函数。如果是新增加的单据,则调用记录集的AddNew()方法添加新的记录。如果是修改已经存在的记录,则先查询指定单据号的记录,打开查询结果记录集,修改记录集的信息。保存产品信息时先删除数据库中该单据已经存在的产品信息,然后再将列表框中的产品信息存入数据库。最后,给出保存成功的提示信息。代码如下: UpdateData(true); //将对话框数据更新到变量 CString strSQL; _RecordsetPtr m_pRecordset; //用于创建一个查询记录集 _RecordsetPtr m_pProductInputFormRecordset; strSQL="select * from productInputForm";//构建SQL语句对productInputForm进行查询 HRESULT hTRes; hTRes=m_pProductInputFormRecordset.CreateInstance(_T("ADODB.Re cordset")); hTRes = - 51 - m_pProductInputFormRecordset->Open((LPTSTR)strSQL.GetBuffer(130), ((CStoreApp*)AfxGetApp())->m_pConn.GetInterfacePtr(), adOpenDynamic,adLockPessimistic,adCmdText);//打开查询记录集 if(flag==1) //添加 { m_pProductInputFormRecordset->AddNew();//添加一条记录 m_pProductInputFormRecordset->PutCollect("productInputFormID",_variant_t(m_productInputFormID.Left(25)));//添加各个字段值 m_pProductInputFormRecordset->PutCollect("formDate",_variant_t(m_formDate)); //省略部分代码 strSQL="SELECT * FROM productInputFormCommidity" ;//构建查询 语句 try {hTRes = m_pRecordset.CreateInstance(_T("ADODB.Recordset"));//建立记录对象 if (SUCCEEDED(hTRes)) { hTRes = m_pRecordset->Open((LPTSTR)strSQL.GetBuffer(130), ((CStoreApp*)AfxGetApp())->m_pConn.GetInterfacePtr(), adOpenDynamic,adLockPessimistic,adCmdText); - 52 - if(SUCCEEDED(hTRes)) {TRACE(_T("连接成功!\n")); for(int i=0;iAddNew(); m_pRecordset->PutCollect("productInputFormID",_variant_t(m_product InputFormID.Left(25)));//将“入库单号”数据添加到产品入库单数据 库中 //省略部分代码 m_pRecordset->Update(); //省略部分代码 } else if(flag==2) //修改 {_variant_t RecordsAffected; CString strSQL; strSQL="delete from productInputFormCommidity where productInputFormID='"; strSQL=strSQL+m_productInputFormID+"'"; (((CStoreApp*)AfxGetApp())->m_pConn)->Execute((_bstr_t)strSQL ,&RecordsAffected,adCmdText); m_pProductInputFormRecordset->Update();//更新数据库 strSQL="SELECT * FROM productInputFormCommidity" ;//构造查 询语句 - 53 - //省略部分代码 m_pRecordset->PutCollect("productInputFormID",_variant_t(m_product InputFormID.Left(25))); //省略部分代码 m_pRecordset->Update();//更新数据库 MessageBox("创建记录集失败!","错误"); 产品选择对话框: (1)重载选择对话框OnInitDialog函数 该函数完成列表框控件的样式,为列表框增加列并设定列标题。最后将数据库中存在的产品的信息显示在列表框中。实现方式和产品入库单对话框的的OnInitDialog函数类似,这里就不在赘述。 (2)实现列表框控件的NM_CLICK消息函数 该函数当列表框中的条目被单击时自动被调用。作用是当列表框中的一个条目被选中时,将该条目对应的产品的编号、名称、型号、单价、计量单位赋给对话框类的成员变量。代码如下: void CSelectProduct::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) { UpdateData(true); POSITION pos = m_list.GetFirstSelectedItemPosition();//获取单击的位置 if(pos) { int nFirstSelItem = m_list.GetNextSelectedItem(pos); //获取单 - 54 - 击条目 m_productID=m_list.GetItemText(nFirstSelItem,0);//产品编号 m_productName=m_list.GetItemText(nFirstSelItem,1);//产品名称 m_unit=m_list.GetItemText(nFirstSelItem,7);//计量单位 m_model=m_list.GetItemText(nFirstSelItem,3);//型号 m_price=atof(m_list.GetItemText(nFirstSelItem,4));//单价 } *pResult = 0; } 3.2.3 信息查询模块的实现 本模块主要库存相关单据的查询,包括库存的“产品入库单查询”、“产品出库单查询”、“产品调拨单查询”、“产品报损单查询”。以产品入库单查询为例,实现的模块界面如图3.2.3所示。 - 55 - 图3.2.3入库单查询界面 1.建立对话框类 2.创建菜单 为查询模块创建菜单项 表3.2.4查询菜单说明 资源ID 标题 ID_search_productInputForm 产品入库单查询 ID_search_productOutputForm 产品出库单查询 ID_search_productMoveForm 产品调拨单查询 ID_search_productLoseForm 产品报损单查询 3.主要代码(以产品入库单查询为例) - 56 - (1)为“查询”按钮提供实现函数。 执行查询前要判断用户选择了那些可选项,通过对这些可选项的判断 完成相应的的数据库查询语句的编写,进而将查询到的结构显示在列 表框控件中,供用户使用。这里需要注意的是各个条件间连接词的使 用一定要符合SQL语句的语法,即第一个条件前用Where,从第二 个条件开始每个条件前用and进行连接。代码如下: m_formList.DeleteAllItems();//删除所有条目 strSQL="select * from productInputForm";//构造查询语句 if(((CStoreApp*)AfxGetApp())->ToStringCTime(m_formDateBegin)!="" )//开始日期 {strSQL=strSQL+"where formDate>='"+((CStoreApp*)AfxGetApp())-> ToStringCTime(m_formDateBegin)+"'"; flag=1; } if(((CStoreApp*)AfxGetApp())->ToStringCTime(m_formDateEnd)!= "")//结束日期 {strSQL=strSQL+" and formDate<'"+((CStoreApp*)AfxGetApp())-> ToStringCTime(m_formDateEnd)+"'"; } //此处省略部分代码 _RecordsetPtr m_pRecordset; - 57 - hTRes = m_pRecordset.CreateInstance(_T("ADODB.Recordset"));// 建立连接对象 if (SUCCEEDED(hTRes)) { hTRes = m_pRecordset->Open((LPTSTR)strSQL.GetBuffer(130), ((CStoreApp*)AfxGetApp())->m_pConn.GetInterfacePtr(), adOpenDynamic,adLockPessimistic,adCmdText);//打开记录集 if(SUCCEEDED(hTRes)) { int i=0; m_formList.DeleteAllItems();//清空单据列表 while(!(m_pRecordset->adoEOF))//将查询结果插入列表框 控件中 { m_formList.SetItemText(i,6,((CStoreApp*)AfxGetApp())->GetString FromVarian t(m_pRecordset->GetCollect("remark"))); //备注 //此处省略部分代码 m_pRecordset->MoveNext();//记录集指针向后移动 i++; } (2)为单据列表控件的“NM_CLICK”消息实现函数 产品入库单查询需要查询“产品入库单”和“入库产品信息表”两个 表。为了同时实现查找两个表盒两个表的关联,需要建立视图 - 58 - productInputFormView。当单击查询结果中的一行时,通过查询 productInputFormView视图,将产品入库单对应的的产品信息显示在 产品信息列表框中。具体实现代码如下: POSITION pos = m_formList.GetFirstSelectedItemPosition();//获取 单击的位置 if(pos) { int nFirstSelItem = m_formList.GetNextSelectedItem(pos);//获 取单击条目 str=m_formList.GetItemText(nFirstSelItem,0);//单击的条目的编 号 } //构造查询指定编号的产品入库单信息的查询语句 strSQL="select * from productInputFormView where productInputFormID='"; strSQL=strSQL+str+"'"; _RecordsetPtr m_pRecordset; hTRes = m_pRecordset.CreateInstance(_T("ADODB.Recordset"));// 建立连接对象 if (SUCCEEDED(hTRes)) { hTRes = m_pRecordset->Open((LPTSTR)strSQL.GetBuffer(130), ((CStoreApp*)AfxGetApp())->m_pConn.GetInterfacePtr(), - 59 - adOpenDynamic,adLockPessimistic,adCmdText);//打开查询结果 记录集 if(SUCCEEDED(hTRes)) { int i=0; m_productList.DeleteAllItems();//清空产品列表框 while(!(m_pRecordset->adoEOF))//将查询结果插入到产品 列表框中 { m_productList.InsertItem(i,((CStoreApp*)AfxGetApp())->GetStringF romVariant(m_pRecordset->GetCollect("productID"))); //此处省略部分代码 m_productList.SetItemText(i,1,((CStoreApp*)AfxGetApp())->GetStri ngFromVariant(m_pRecordset->GetCollect("productName"))); m_pRecordset->MoveNext();//记录集指针向后移动 i++; 3.2.4 统计汇总模块的实现 本模块主要完成库存相关单据信息的统计分析,包括库存的“入库产 品统计汇总”和“出库产品统计汇总”。以入库产品统计汇总为例, 实现的界面如图3.2.4所示 - 60 - 图3.2.4入库产品统计汇总界面 1.建立各对话框类 2.创建菜单 为模块“汇总统计”创建菜单 表3.2.5汇总统计模块菜单说明 资源ID 标题 ID_analysis_productInput 入库产品汇总 ID_analysis_productOutputForm 出库产品汇总 3.主要代码(以入库产品统计汇总为例) 入库产品汇总表查询需要查询视图productInputFormView视图。具体操作步骤如下: 第一步:构造查询的SQL语句,如果某个条件为空,则该条件不参加查询。查询得指定仓库入库产品的总数和入库产品的总金额。 第二步:将查询结果显示在列表框控件中。下面是部分代码: - 61 - strSQL="select storeHouse,sum(num) as num,sum(total) as total from productInputFormView";//构造查询产品入库汇总的sql语句 strSQL=strSQL+" where formDate>='"+((CStoreApp*)AfxGetApp())-> ToStringCTime(m_formDateBegin)+"'";//开始日期 strSQL=strSQL+" and formDate<='"+((CStoreApp*)AfxGetApp())-> ToStringCTime(m_formDateEnd)+"'";//结束日期 if(m_department!="")//部门 { strSQL=strSQL+" and produceDepartment='"+m_department+"'"; flag=1; } if(m_formID!="")//单据号 {strSQL=strSQL+" and productInputFormID='"+m_formID+"'"; } if(m_houseInType!="")//入库类别 {strSQL=strSQL+" and houseInType='"+m_houseInType+"'"; } //此处省略部分代码 strSQL=strSQL+" group by storeHouse";//按照仓库分组 hTRes = m_pRecordset.CreateInstance(_T("ADODB.Recordset")); hTRes = m_pRecordset->Open((LPTSTR)strSQL.GetBuffer(130), ((CStoreApp*)AfxGetApp())->m_pConn.GetInterfacePtr(), - 62 - adOpenDynamic,adLockPessimistic,adCmdText);//打开查询结果记录集 int i=0; //将查询结果添加到列表框控件中 while(!(m_pRecordset->adoEOF)) { m_list.InsertItem(i,((CStoreApp*)AfxGetApp())->GetStringFromVari ant(m_pRecordset->GetCollect("storeHouse")));//仓库名称 m_list.SetItemText(i,1,((CStoreApp*)AfxGetApp())->GetStringFrom Variant(m_pRecordset->GetCollect("num")));//数量 m_list.SetItemText(i,2,((CStoreApp*)AfxGetApp())->GetStringFrom Variant(m_pRecordset->GetCollect("total")));//金额 m_pRecordset->MoveNext();//记录集指针向后移动 i++; } 出库产品汇总表查询需要查询视图productOutFormView,具体的过程和入库产品汇总查询基本相同 第四章 设计总结 这次设计的主要目的是通过利用当今最流行且功能强大的可视化编程工具Visual C++ 6.0设计应用程序,用来管理由SQL Server2000创建的数据库。利用Visual C++6.0的ADO编写程序来实 - 63 - 现产品的库存管理。让用户方便地处理产品入库出库等一些企业存储货物过程中最重要的事情。同时也让用户可以方便的知道自己的查询信息。利用ADO编程来实现信息的输入、编辑(删除、增加、修改)等功能,继而完成对产品信息数据库、员工信息数据库、客户信息数据库等的必要操作。 通过这次的设计,我不仅拓宽了自己的知识面,增长了自己的见识,还在实践过程中巩固和加深了自己所学的理论知识,使自己的技术素质和实践能力有了进一步的提高,同时我的专业水平也有了很大的进步。而且,在软件开发方面也累积了不少经验,特别是在对软件开发工具不很熟悉的情况下,通过自己的学习和导师的指导完成了设计任务。并在设计过程中,自己分析问题和解决问题的能力都得到了锻炼和提高,完善了自己的知识结构,加深了对知识的理解。 这次设计选了VC++来编写系统程序,但是接触了之后,才发现VC++确实是很难,没有掌握好C++语言和Windows编程基础学起来就更难了,只有通过图书馆和老师的帮助不断学习。数据库已经普遍应用在各个领域。在这次的设计中我学习到不少的数据库知识,但由于自己的理论知识水平有限,实践知识和设计经验不足,在设计过程中难免存在一些问题,甚至错误。恳请各位老师批评指正。 参考文献 [1]求是科技.Visual C++数据库开发技术与工程实践.人民邮电出版社.2004.1 [2]萨师煊.数据库系统概论.高等教育出版社.1990.5 [3]黄梯云,李一军.管理信息系统.高等教育出版社.2000.7 - 64 - 倪洪飞的个人设计总结模板 一、作业背景 课程作业要求如下: 1.总体结构设计首先要在需求分析的基础上确定应用系统的模块结构,并根据模块的设计原则进行分析和综合。 2.模块划分时应尽可能使每一个模块的功能简单、明确。 3.界面设计风格要求统一、布局合理;程序设计中要有适当的注释,便于阅读。 4.软件需要提供完整的源程序,并附源程序清单;数据库文件结构进行详细说明。 5(课程设计结束,每个小组出一份课程设计说明书,小组成员各自完成个人设计总结。 二、选题说明 1、基本思路 库存管理的内容 库存管理包含了两个部分:一是对物资的管理主要物资的保管、物资的出入库等基本业务的处理,另一部分是库存控制,即控制库存的数量保证满足需要有不浪费资源。 2、作业目标 库存管理系统功能要求 1(用户及权限管理。该系统可以实现对不同用户的使用权限进行管理。从而达到库存管理的级别控制。 - 65 - 2(实现物资的出库、入库登记。 3(实现查询功能,通过该系统可以对仓库物品的库存状态进行查询;查询出库、入库情况;报表查询等。 4(报表功能,统计打印各种报表。 5(按物料的盘点周期经行盘点和清查工作,编著盘点表申报并修改库存实际量 三、工作业绩 1、个人主要工作 本人主要进行了程序的录入,界面编辑及数据库的连接 2、主要收获 通过这次的设计,我不仅拓宽了自己的知识面,增长了自己的见识,还在实践过程中巩固和加深了自己所学的理论知识,使自己的技术素质和实践能力有了进一步的提高,同时我的专业水平也有了很大的进步。而且,在软件开发方面也累积了不少经验,特别是在对软件开发工具不很熟悉的情况下,通过自己的学习和导师的指导完成了设计任务。并在设计过程中,自己分析问题和解决问题的能力都得到了锻炼和提高,完善了自己的知识结构,加深了对知识的理解。 这次设计选了VC++来编写系统程序,但是接触了之后,才发现VC++确实是很难,没有掌握好C++语言和Windows编程基础学起来就更难了,只有通过图书馆和老师的帮助不断学习。数据库已经普遍应用在各个领域。在这次的设计中我学习到不少的数据库知识,但由于自己的理论知识水平有限,实践知识和设计经验不足,在设计过程 - 66 - 中难免存在一些问题,甚至错误,还需要进一步的进行学习。 3、小组自我评定:优 良 中 及格 不及格 - 67 - 徐锴的个人设计总结模板 一、作业背景 课程作业要求如下: 1.总体结构设计首先要在需求分析的基础上确定应用系统的模块结构,并根据模块的设计原则进行分析和综合。 2.模块划分时应尽可能使每一个模块的功能简单、明确。 3.界面设计风格要求统一、布局合理;程序设计中要有适当的注释,便于阅读。 4.软件需要提供完整的源程序,并附源程序清单;数据库文件结构进行详细说明。 5(课程设计结束,每个小组出一份课程设计说明书,小组成员各自完成个人设计总结。 二、选题说明 1、基本思路 库存管理的内容 库存管理包含了两个部分:一是对物资的管理主要物资的保管、物资的出入库等基本业务的处理,另一部分是库存控制,即控制库存的数量保证满足需要有不浪费资源。 2、作业目标 库存管理系统功能要求 1(用户及权限管理。该系统可以实现对不同用户的使用权限进行管理。从而达到库存管理的级别控制。 - 68 - 2(实现物资的出库、入库登记。 3(实现查询功能,通过该系统可以对仓库物品的库存状态进行查询;查询出库、入库情况;报表查询等。 4(报表功能,统计打印各种报表。 5(按物料的盘点周期经行盘点和清查工作,编著盘点表申报并修改库存实际量 三、工作业绩 1、个人主要工作 本人主要在设计中负责课程的层次分析与设计,文字录入,程序的监督工作。 2、主要收获 通过该课程设计,全面系统的理解了编译原理程序构造的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。以前对与计算机操作系统的认识是模糊的,概念上的,现在通过自己动手做实验,从实践上认识了操作系统是如何处理命令的,对计算机编译原理的认识更加深刻。课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。在这次课程设计中,我就是按照实验指导的思想来完成。加深了理解文件系统的内部功能及内部实现,培养实践动手能力和程序开发能力的目的。 感谢张中秋老师的指导,使我很多滞涩的地方豁然开朗,受益 - 69 - 匪浅。 3、小组自我评定:优 良 中 及格 不及格 备注:该内容附在小组设计说明书的最后进行装订。 - 70 - 黄晓伟设计总结模板 一、作业背景 课程作业要求如下: 1.总体结构设计首先要在需求分析的基础上确定应用系统的模块结构,并根据模块的设计原则进行分析和综合。 2.模块划分时应尽可能使每一个模块的功能简单、明确。 3.界面设计风格要求统一、布局合理;程序设计中要有适当的注释,便于阅读。 4.软件需要提供完整的源程序,并附源程序清单;数据库文件结构进行详细说明。 5(课程设计结束,每个小组出一份课程设计说明书,小组成员各自完成个人设计总结。 二、选题说明 1、基本思路 库存管理的内容 库存管理包含了两个部分:一是对物资的管理主要物资的保管、物资的出入库等基本业务的处理,另一部分是库存控制,即控制库存的数量保证满足需要有不浪费资源。 2、作业目标 库存管理系统功能要求 1(用户及权限管理。该系统可以实现对不同用户的使用权限进行管理。从而达到库存管理的级别控制。 - 71 - 2(实现物资的出库、入库登记。 3(实现查询功能,通过该系统可以对仓库物品的库存状态进行查询;查询出库、入库情况;报表查询等。 4(报表功能,统计打印各种报表。 5(按物料的盘点周期经行盘点和清查工作,编著盘点表申报并修改库存实际量 三、工作业绩 1、个人主要工作 我主要负责绘画该系统的功能图,数据流程图,实体E-R图,数据字典,数据表,并协助组长进行系统设计。 2、主要收获 这次课程设计给我留下了很深的印象,我们因为之前很少接触到一些做系统的软件,因此,在张中秋老师安排了任务后,我们选定了库存管理系统任务的课题后,我们整个小组5个人去图书馆借了一些资料回来研究自学了做该系统的软件。刚开始时觉得以前有点基础,我们能够靠自己的能力完成。可是真正接触后,觉得并不是想象的那么简单,我们花了1个多礼拜的时间去真正弄懂了改系统。这中间的过程虽然很累,很苦,但是经过我们自己的努力,和张中秋老师的指导下,我们看到我们完成的系统,觉得很值得。 这是一个自主学习的过程,在这期间,我真的学到了很多,以前似懂非懂的数据库,ADO,现在了解的很深了。这次课程设计,把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。以前对与计算机操 作系统的认识是模糊的,概念上的,现在通过自己动手做实验,课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。 在这次课程设计中,我 - 72 - 就是按照实验指导的思想来完成。加深了理解文件系统的内部功能及内部实现,培养实践动手能力和程序开发能力的目的。 除了学到了课本方面的知识外,我也学会了人与人之间是需要通过通力合作的,光靠自己一个人的能力是远远不够的,大家一起合作才能把任务完成。 至此之外,我也要感谢张中秋老师,是他给了我们这次锻炼的机会,是他带领着我们一步步地完成课程设计,帮助我们解决了很多问题,张中秋老师,谢谢~ 小组自我评定: 优 良 中 及格 不及格 - 73 - 秦佳滨的个人设计总结模板 一、 作业背景 课程作业要求如下: 1.总体结构设计首先要在需求分析的基础上确定应用系统的模块结构,并根据模块的设计原则进行分析和综合。 2.模块划分时应尽可能使每一个模块的功能简单、明确。 3.界面设计风格要求统一、布局合理;程序设计中要有适当的注释,便于阅读。 4.软件需要提供完整的源程序,并附源程序清单;数据库文件结构进行详细说明。 5(课程设计结束,每个小组出一份课程设计说明书,小组成员各自完成个人设计总结。 二、选题说明 具体内容: 1、基本思路 库存管理包含了两个部分:一是对物资的管理主要物资的保管、物资的出入库等基本业务的处理,另一部分是库存控制,即控制库存的数量保证满足需要有不浪费资源。 2、作业目标 库存管理系统功能要求 1(用户及权限管理。该系统可以实现对不同用户的使用权限进 - 74 - 行管理。从而达到库存管理的级别控制。 2(实现物资的出库、入库登记。 3(实现查询功能,通过该系统可以对仓库物品的库存状态进行查询;查询出库、入库情况;报表查询等。 4(报表功能,统计打印各种报表。 5(按物料的盘点周期经行盘点和清查工作,编著盘点表申报并修改库存实际量 三、工作业绩 1、个人主要工作 我主要负责上网和去图书馆寻找和整理资料,编译数据字典,编译修改部分程序 2、主要收获 这次的信息系统课程设计给我留下了深刻的印象。在张中秋老师的带领下,经过我们组5个人的讨论,我们选用了库存管理系统。经过一个多星期的实验,过程曲折可谓一语难尽。从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。我们的努力没有白费,汗水预示着结果也见证着收获。通过实验,我才真正领略到“艰苦奋斗”这一词的真正含义。实验确实很辛苦,但苦中也有乐。我们是一个团队,一起的工作可以让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的实验,我感觉我和同学们之间的距离更加近了。在这次实验中,我们互相学习,互相帮助,同时增进了我们的理论知识和动手能力。我们还巩固加强了对以前所学知识的理解。通过该课程设计,我们更深刻系统的理解了信息系统工程一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。以前对与计算机操 作系统的认 - 75 - 识是模糊的,概念上的,现在通过自己动手做实验,从实践上认识了操作系统是如何处理命令的,如何协调计算机内部各个部件运行,对计算机编译原理的认识更加深刻。课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。 在这次课程设计中,我就是按照实验指导的思想来完成。加深了理解文件系统的内部功能及内部实现,培养实践动手能力和程序开发能力的目的。 最后,我要感谢张中秋老师给我们这次机会,带领我们一步步的完成课程设计,帮我们解决了一系列的问题,让我们对信息系统工程有了更彻透的理解。 3、小组自我评定 优 良 中 及格 不及格 - 76 - 张佳伟个人小结 一、作业背景 库存管理系统功能要求 1.总体结构设计首先要在需求分析的基础上确定应用系统的模块结构,并根据模块的设计原则进行分析和综合。 模块划分时应尽可能使每一个模块的功能简单、明确。 2. 3.界面设计风格要求统一、布局合理;程序设计中要有适当的注释,便于阅读。 4.软件需要提供完整的源程序,并附源程序清单;数据库文件结构进行详细说明。 5(课程设计结束,每个小组出一份课程设计说明书,小组成员各自完成个人设计总结。 二、选题说明 具体内容: 1、基本思路 库存管理包含了两个部分:一是对物资的管理主要物资的保管、物资的出入库等基本业务的处理,另一部分是库存控制,即控制库存的数量保证满足需要有不浪费资源。 2、作业目标: 1(用户及权限管理。该系统可以实现对不同用户的使用权限进行管理。从而达到库存管理的级别控制。 2(实现物资的出库、入库登记。 3(实现查询功能,通过该系统可以对仓库物品的库存状态进行查询;查询出库、入库情况;报表查询等。 4(报表功能,统计打印各种报表。 5(按物料的盘点周期经行盘点和清查工作,编著盘点表申报并修改库存实际量。 三、工作业绩 1、个人主要工作 参与讨论了库存管理系统的可行性研究报告的制定以及系统分析的策划。其中我的主要工作是进行数据结构的设计,此外我也进行了 - 77 - 系统实现方面的制作。最终与小组成员共同努力实现了库存管理系统。 2、主要收获 通过为期此次的课程设计,我拓宽了知识面,锻炼了实际动手操作能力,综合素质得到了较大提高。使得课本的理论知识与实际工作相结合,进一步理解了库存管理管理系统开发的基本方法和工作步骤。 实践能力的培养对我们来说至关重要,此次课程设计正是从课堂走向实践的一个过程。不仅丰富了理论知识,还提高了我们的实践动手能力,以及沟通能力,进一步提高思想觉悟,尤其是观察能力和分析能力的提高对我们今后的学习和工作有着很大的帮助。 但是,所设计的系统软件中仍然存在着众多的问题和缺陷。主要是数据库开发的过程中存在不少问题,人机界面设计不够全面,软件程序运行中出现运行错误,模块功能不健全,导致库房信息管理系统设计的不足。希望在今后的学习中,能够提高对信息系统开发的认识,以完善此次设计中的缺陷。通过课程设计,我们感到实际动手能力普遍提高,能够熟练运用Visio软件绘制组织结构图、业务流程图和数据流图。而且对Visual Studio软件有了进一步的理解,能够更加熟练地操作。更重要的是通过对库房信息管理系统开发流程的了解,进一步激发了我们对这门课程的兴趣,现在能够结合实际存在的问题进行更深入地学习,受到了同学们广泛的欢迎。 3、小组自我评定?优?良?中?及格?不及格
本文档为【库存管理系统论文681017658】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_447713
暂无简介~
格式:doc
大小:235KB
软件:Word
页数:61
分类:
上传时间:2017-09-26
浏览量:32