《(仓库管理)计算机毕业设计仓库管理系统.docx》由会员分享,可在线阅读,更多相关《(仓库管理)计算机毕业设计仓库管理系统.docx(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、(仓库管理)计算机毕业设计仓库管理系统 仓库管理系统 仓库管理是整个物资供应管理系统的核心。本实例着重讲解仓库管理模块,给出数据库设计和程序实现过程。 1、系统设计 1、1系统设计目标 系统开发的总统任务是实现企业物资设备管理的系统化、规范化和自动化,从而达到仓库管理效率的目的。 1、2开发设计思想 在本系统的设计过程中,为了克服仓库管理信息处理量大的困难,满足计算机管理的需要,采取了下面的一些原则: 统一各种原始单据的格式,统一帐目和报表的格式。 删除不必要的管理冗余,实现管理规范化、科学化。 程序代码标准化,软件统一化,确保软件的可维护性和实用性。 界面尽量简单化,做到实用、方便,尽量满足
2、企业不同层次员工的需要。 建立操作日志,系统自动记录所进行的各种操作。 1、3系统功能分析 本例中的仓库管理系统需要完成的功能主要有以下几点: 仓库管理各种信息的输入,包括入库、出库、还库、需求信息的输入等。 仓库管理各种信息的查询、修改和维护。 设备采购报表的生成。 在库存管理中加入最高储备和最低储备字段,对仓库中的物资设备实现监 控和报警。 企业各部门的物资需求的管理。 操作日志的管理。 仓库管理系统的使用帮助。 1、4系统功能模块设计 在系统功能分析的基础上,结合Visual C+程序编制的特点,得到如图1-1所示的系统功能模块图。 图1-1 系统功能模块图 2、数据库设计 2、1数据库
3、需求分析 在仔细调查企业仓库物资设备管理过程的基础上,得到本系统所处理的数据流程如图1-2所示: 现有库存信息,包括的数据项有设备、现有数目、总数目、最大库存和最 小库存。 设备使用信息,包括的数据项有使用的设备、使用部门、数目、使用时间 和出库时状态等。 设备采购信息,包括的数据项有采购的设备、采购员、供应商、采购数目 和采购时间等。 设备归还信息,包括的数据项有归还设备、归还部门、归还数目、归还时 间和经手人等。 设备需求信息,包括的数据项有需求的部门、需求设备、需求数目和需求 时间等。 2、2数据库概念结构设计 本实例根据上面的设计规划出的实体有库存实体、入库实体、出库实体、采购实体、还
4、库实体和需求实体,各实体的E-R 图及其关系描述如下: 图1-4 入库实体E-R图 图1-5 出库实体E-R图 图1-6 部门需求实体E-R图 图1-9实体和实体之间的关系E-R图 2、3数据库逻辑结构设计 在上面的实体以及实体之间的关系的基础上,形成数据库中的表格和各个表格之间的关系。仓库管理系统数据库中各个表格的设计结果如下面的几个表格所示。每个表格表示在数据库中的一个表。 4、创建应用程序 (1)(1)选择“FileNew”中的“新建项目”选项卡中“MFC AppWizard (exe)”,设置合适的目录和项目名,比如“E:Project”目录下的“DMS” 项目。 (2)(2)创建一个
5、对话框应用程序(“Dialog Based”),单击“Next”按钮。 (3)(3)由于在这个项目中将要使用ADO,所以在MFC AppWizard的第二步,需要选中“Automation”选项,使应用程序能够支持自动化对象。如 图1-10所示 (4)(4)单击“Finish”按钮结束项目的创建。主对话框名为CDMSDlg。 (5)(5)项目创建完毕后,在头文件stdafx.h中加入下面4行: #import“c:programfilescommonfilessystemadomsado15.dll”no_namespace(”EOF”,”adoEOF”) #include”icrsint.h
6、” inline void TESTHR(HRESULT x)if FAILED(x)_com_issue_error(x); #define DATEFMT Cstring(“%s”) 5、操作日志模块的设计 (1)写日志模块 图1-10 使应用程序支持自动化先定义一个名为ClogMngr的类 /LogMngr.h /定义一个Log管理器 class CLogMngr public: CLogMngr(); virtual CLogMngr(); public: bool AddLog(LPCSTR op); void Setup(_ConnectionPtr cnnt, CString&
7、user) m_DBCnt = cnnt; m_user = user; protected: _ConnectionPtr m_DBCnt; CString m_user; ; 下面是ClogMngr:AddLog内部实现详细过程。 /LogMngr.cpp /向数据库中添加Log记录的代码。 bool CLogMngr:AddLog(LPCSTR op) CTime tm = CTime:GetCurrentTime(); CString sql_; sql_.Format(INSERT INTO HOWDO (do_user,do_what,do_date) V ALUES(%s,%s,
8、%d-%d-%d %d:%d:%d), m_user, op, tm.GetYear(), tm.GetMonth(), tm.GetDay(), tm.GetHour(), tm.GetMinute(), tm.GetSecond(); _bstr_t sql = sql_; try m_DBCnt-Execute(sql,NULL,adCmdText); catch(_com_error& e) CString Error = e.ErrorMessage(); AfxMessageBox(e.ErrorMessage(); return false; return true; (2)读日
9、志模块 图1-11 查看日志窗口 初始化界面代码如下: BOOL CDlgViewLog:OnInitDialog() CDialog:OnInitDialog(); m_list.InsertColumn(0,操作员); m_list.InsertColumn(1,操作日期); m_list.InsertColumn(2,操作内容); RECT rect; m_list.GetWindowRect(&rect); int wid = rect.right - rect.left; m_list.SetColumnWidth(0,wid/3); m_list.SetColumnWidth(1,
10、wid/3); m_list.SetColumnWidth(2,wid/3); m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT); RefreshData(); return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE void CDlgViewLog:RefreshData() m_list.DeleteAllItems(); m_list.SetRedraw(FALSE);
11、_bstr_t strSQL(SELECT * FROM HOWDO); _RecordsetPtr MySet; int i = 0; try MySet.CreateInstance(_uuidof(Recordset); MySet = m_DBCnt-Execute(strSQL,NULL,adCmdText); _variant_t Holder; while(!MySet-adoEOF) Holder = MySet-GetCollect(do_user); if(Holder.vt!=VT_NULL) m_list.InsertItem(i, (char*)(_bstr_t)Ho
12、lder); Holder = MySet-GetCollect(do_date); if (Holder.vt!=VT_NULL) m_list.SetItemText(i, 1, (char*)(_bstr_t)Holder); Holder = MySet-GetCollect(do_what); if(Holder.vt!=VT_NULL) m_list.SetItemText(i, 2, (char*)(_bstr_t)Holder); MySet-MoveNext(); MySet-Close(); catch(_com_error& e) AfxMessageBox(e.Erro
13、rMessage(); m_list.SetRedraw(TRUE); return; m_list.SetRedraw(TRUE); void CDlgViewLog:OnClickListVllog(NMHDR* pNMHDR, LRESULT* pResult) int i = m_list.GetSelectionMark(); m_opr = m_list.GetItemText(i,0); m_date = m_list.GetItemText(i,1); m_op = m_list.GetItemText(i,2); UpdateData(FALSE); *pResult = 0
14、; /DlgViewLog.cpp /删除所有日志记录的函数。 void CDlgViewLog:OnBtnVlrmall() _bstr_t strSQL(TRUNCATE TABLE HOWDO); try m_DBCnt-Execute(strSQL,NULL,adCmdText); catch(_com_error& e) AfxMessageBox(e.ErrorMessage(); EndDialog(0); RefreshData(); 6、登录窗口的设计和程序初始化 在CDMSDlg:OnInitDialog()中加入这样一段代码: /DMSDlg.cpp /弹出登录界面 CD
15、lgLogIn dlg; do if (!dlg.DoModal() EndDialog(0); while (dlg.m_UsrName.GetLength()=0); 它的目的是弹出图1-12所示的登录对话框,并从中获得一个有效的用户名。 图1-12 登录界面 得到有效用户名后,程序用如下代码: / DMSDlg.cpp /建立数据库连接,初始化成员变量 /登录数据库,若失败,则关闭程序。 m_DBCnt.CreateInstance(_uuidof(Connection); CString sql_; sql_.Format(DSN=DMS;UID=%s;PWD=%s,dlg.m_Usr
16、Name,dlg.m_UsrPwd); _bstr_t sql=sql_;/建立连接 m_DBCnt-Open(sql,-1);/初始化日志管理器 m_logMngr.Setup(m_DBCnt,dlg.m_UsrName);/记录此次登录 m_logMngr.AddLog(登录数据库); catch(_com_error& e) AfxMessageBox(e.ErrorMessage(); this-EndDialog(0); 在程序结束时关闭数据库连接。 / DMSDlg.cpp /关闭数据库连接 void CDMSDlg:OnDestroy() CDialog:OnDestroy();
17、 m_DBCnt-Close(); 7、主对话框界面的设计 登录完成后,显示出主对话框。它的界面设计如图1-13所示,单击某个按钮就能弹出某个功能的界面。 图1-13 主对话框界面 以其中“设备代码”按钮为例,说明它的事件处理函数。代码如下: / DMSDlg.cpp /显示设备代码管理界面 void CDMSDlg:OnBtnDevcode() CDlgDevcode dlg; dlg.Setup(m_DBCnt,&m_logMngr); this-ShowWindow(SW_HIDE); dlg.DoModal(); this-ShowWindow(SW_SHOW); 其他按钮的事件处理函
18、数,代码与“设备代码”按钮的事件处理函数相同。 8、设备代码管理窗口的建立 对话框类名为CdlgDevcode设计如图1-14所示 图1-14 设备代码管理窗口 /DlgDevcode.cpp /对话框的初始化 BOOL CDlgDevcode:OnInitDialog() CDialog:OnInitDialog();/切分列表控件 m_list.InsertColumn(0,设备号); m_list.InsertColumn(1,设备名); RECT rect; m_list.GetWindowRect(&rect); int wid = rect.right - rect.left; m
19、_list.SetColumnWidth(0,wid/2); m_list.SetColumnWidth(1,wid/2); m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);/读取已有数据 RefreshData(); return TRUE; / DlgDevcode.cpp /消息映射部分 BEGIN_MESSAGE_MAP(CDlgDevcode, CDialog) /AFX_MSG_MAP(CDlgDevcode) ON_NOTIFY(NM_CLICK, IDC_LIST_DEVCODE, OnClickListDevcode) /AFX_MSG_MAP END_MESSAGE_MAP() /事件处理部分 void CDlgDevcode:OnClickListDevcode(NMHDR* pNMHDR, LRESULT* pResult) int i = m_list.GetSelectionMark(); m_code = m_list.GetItemText(i,0); m_name = m_list.GetItemText(i,1); UpdateData(FALSE); *pResult = 0; 其余程序的清单如下: / DlgDevcode.cpp : implementation file
限制150内