企业设备管理系统_第1页
企业设备管理系统_第2页
企业设备管理系统_第3页
企业设备管理系统_第4页
企业设备管理系统_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 4 章 企业设备管理系统公司经常需要采购一些设备,用以满足公司正常运营的需要,采购回来的设备不能堆放在库房里就不管了,谁想用的时候就去拿,谁想换的时候就去换。这样,公司的设备恐怕会越来越少,公司正常的运营就会受到影响。因此,需要对公司的设备进行库存管理,保证设备借出和归还有序,还要能查到设备的借出情况。企业设备管理系统正好能满足这个需求,它提供了对设备库存、设备借出、设备归还和设备统计信息的管理。 4.1 系统设计 系统设计是系统开发最为关键的一环,良好的系统设计需要把握系统的需求,并合理地划分功能模块。企业设备管理系统的系统设计还需要把握一个关键点,就是明确设备的惟一性,尽管设备可能一模

2、一样,但是也应该区别开来,因为我们的借出、归还以及借出历史的统计都是要具体到某一个设备的,需要对每一个设备赋予不同的设备编号,通常会制作标签贴在设备上,这恐怕是库房管理员常做的工作,设备编号的方式可以根据公司具体决定。 4.1.1 功能描述 企业设备管理系统包括设备库存管理、设备借出归还管理和设备统计信息管理,详细的功能描述如下。 1. 设备库存管理 设备库存管理包括新设备入库、修改设备信息和陈旧设备的库存清理。新设备入库是对新采购的设备进行入库的操作。修改设备信息是对入库设备的名称、购买人、入库时间、设备说明等信息的修改。库存清理,是清理库存中不能再用的设备。 2. 设备借出归还管理 设备借

3、出归还管理包括设备借出管理和设备归还管理。对于设备借出管理,如果设备已经借出,要提示用户谁借走了设备。当借出成功的时候,需要在列表中显示借出人、借出时间和借出设备信息,如果归还成功,还需要显示设备归还时间。 3. 设备统计信息管理 设备统计信息管理包括对设备借出历史信息、设备使用频率信息和未归还设备列表信息的管理。设备借出历史统计显示了一个设备所有的借出历史,便于跟踪设备的使用情况如果设备出现问题,还可以顺藤摸瓜,查到谁有可能把设备弄坏了,从而找到设备损坏的原因,便于及时修理。设备使用频率统计提供了设备借出次数的统计信息,如果一个设备借出的非常频繁,那么企业可以考虑多购买这种设备,从而提高公司

4、的效率。未归还设备列表提供了尚未归还的设备信息,企业可以知道借出设备的使用情况。4.1.2 功能模块设计 从上面的功能描述中,可以把企业设备管理系统分为 3 个模块:设备库存管理、设备借出归还管理和设备统计信息管理。在每一个模块下又提供了更为具体的功能。详细的企业设备管理系统的功能模块图,如图 4-1 所示。 图 4-1 系统功能模块图4.2 数据库设计与实现 数据库设计的一个巧妙之处就是表的数量不能太多,逻辑层次也不能太多;否则统的升级和维护将会非常困难。 4.2.1 数据库需求设计 通过对系统功能的分析,企业设备管理系统需要包含以下数据库信息。 1. 设备信息 包括设备编号、设备名称、设备

5、描述、设备入库时间、设备购买人、设备借出状设备借出 ID。 2. 设备借出信息 包括设备借出 ID、设备编号、借出人、借出时间和归还时间。 4.2.2 数据库表的设计 通过数据库的需求,可以创建以下数据表。1. 设备信息表(device_info_tab) 设备信息表包含了设备的一些基本信息,还包括设备的借出信息,设备的库存管理和设备的借出归还管理都需要操作这个数据表,表的结构见表 4-1。 表 4-1 设备信息表 字段名称 数据类型 可否为空 约束条件 说 明 device_code VARCHAR2(24) NOT NULL 主键 设备编号,要惟一 device_name VARCHAR2

6、(24) NOT NULL 无 设备名称 description VARCHAR2(1000) NULL 无 设备描述 oper_date DATE NOT NULL 无 设备入库时间 buyer VARCHAR2(24) NULL 无 设备购买人 Lend_status INTEGER NULL 无 设备借出状态 lend_id INTEGER NULL 无 设备借出 ID,借出 ID 是惟一的但可以为空 2. 设备借出信息表(device_lend_info_tab) 设备借出信息表包含了设备的借出和归还信息,设备借出、设备归还,以及统计信息的管理都需要用到这个数据表,表的结构见表 4-2

7、。 表 4-2 设备借出信息表 字段名称 数据类型 可否为空 约束条件 说 明 lend_id INTEGER NOT NULL 主键 借出 ID,ID 值从系列中获取) device_code VARCHAR2(24) NOT NULL 外键(device_info_tab) 设备编号 borrower VARCHAR2(24) NOT NULL 无 借出人 borrow_date DATE NULL 无 设备借出时间 return_date DATE NULL 无 设备归还时间 4.2.3 数据库表的创建 利用第 3 章中讲述的方法创建表空间 dbdevice 和数据库用户 dbdevic

8、e,其中数据库用户的密码为 dbdevice,选择的默认表空间为 dbdevice。 创建企业设备管理系统的所有数据表的 SQL 语句如下: -创建设备信息表 CREATE TABLE device_info_tab( device_code VARCHAR2(24) NOT NULL, device_name VARCHAR(24) NOT NULL, description VARCHAR(1000) NULL,oper_date DATE NOT NULL, buyer VARCHAR2(24) NULL, lend_status INTEGER NULL CHECK (lend_sta

9、tus IN (0, 1), lend_id INTEGER NULL ); -添加设备编号主键 ALTER TABLE device_info_tab ADD ( PRIMARY KEY (device_code) ) ;-创建设备借出信息表 CREATE TABLE device_lend_info_tab( lend_id INTEGER NOT NULL, device_code VARCHAR2(24) NOT NULL, borrower VARCHAR(24) NOT NULL, borrow_date DATE NULL, return_date DATE NULL ); -添

10、加借出 ID 主键 ALTER TABLE device_lend_info_tab ADD ( PRIMARY KEY (lend_id) ) ; -添加设备编号外键 ALTER TABLE device_lend_info_tab ADD ( FOREIGN KEY (device_code) REFERENCES device_info_tab ) ; -创建可以递增的系列号供 lend_id 使用 CREATE SEQUENCE seq_lend_id INCREMENT BY 1 START WITH 1 NOMAXVALUE NOMINVALUE NOCYCLE; 利用 Oracl

11、e SQLPlus WorkSheet 工具执行上述的 SQL 语句从而创建数据库表。需要说明的是,在打开 Oracle SQLPlus Worksheet 的“Oracle Enterprise Manager 登录”窗口的时候,需要在“用户名”文本框中输入企业设备管理系统的用户名 dbdevice,在“口令”文本框中输入用户密码 dbdevice,在“服务”文本框中输入数据库的本地服务名 ORADB,选择连接方式 Normal,登录成功后,再运行上述的 SQL 语句。 4.3 系统的实现 完成了系统功能模块的设计和数据库表的创建后,就可以创建一个企业设备管理系统。 4.3.1 创建应用程序

12、 运行 Visual C+,选择 File|New 命令,弹出 New 对话框。从 Projects 列表中选择 MFC AppWizard(exe)向导,在 Location 文本框中选择项目工程的目录“D:VCSAMPLE”,在Project name 文本框中输入工程文件的名称 DeviceDBS,单击 OK 按钮,进入 MFC AppWizard Step 1 页面,从应用程序的类型中选择 Dialog based 选项,从语言列表中选择“中文(中国)(APPWZCHS.DLL)”,单击 Finish 按钮,DeviceDBS 对话框的应用程序创建完毕。4.3.2 创建主对话框的界面

13、主对话框的布局如图 4-2 所示。其中包括设备库存管理、设备借出归还管理和设备统计信息管理 3 个部分。3. 设备库存管理 控件类型、ID 及说明见表 4-3。 表 4-3 设备库存管理控件列表 控件类型 ID 属 性 变量或函数 Group Box IDC_STATIC 设备库存管理 无 Label IDC_STATIC 设备编号 无 Edit Box IDC_EDIT_DEVICECODE 无 CString 类型变量 m_strDeviceCode Label IDC_STATIC 设备名称 无 Edit Box IDC_EDIT_DEVICENAME 无 CString 类型变量 m_

14、strDeviceName Label IDC_STATIC 购买人 无 Edit Box IDC_EDIT_BUYER 无 CString 类型变量 m_strBorrower Label IDC_STATIC 入库时间 无 Date Time Picker IDC_DT_DATE Short Date COleDateTime 类型变量 m_oleOperDate Date Time Picker IDC_DT_TIME Time COleDateTime 类型变量 m_oleOperTime Label IDC_STATIC 设备说明 无 Edit Box IDC_EDIT_DESCRI

15、PTION 无 CString 类型变量 m_strDescription Button IDC_BTN_DEVICE_ADD 新设备入库 函数 OnBtnDeviceAdd ()处理新设备的入库管理 Button IDC_BTN_DEVICE_MOD 修改设备信息 函数 OnBtnDeviceMod ()修改设备信息 Button IDC_BTN_DEVICE_DEL 库存清理 函数 OnBtnDeviceDel ()处理库存设备的清理管理 Group Box IDC_STATIC 设备信息 无 List Control IDC_LIST_DEVICE 无 列表框控件类型变量 m_listD

16、evice4. 设备借出归还管理 控件类型、ID 及说明见表 4-4。 表 4-4 设备借出归还管理控件列表 控件类型 ID 属 性 变量或函数 Group Box IDC_STATIC 设备借出归还管理 无 Label IDC_STATIC 请输入借书人 无 Edit Box IDC_EDIT_BORROWER 无 CString 类型变量 m_strBorrower Label IDC_STATIC 请选择设备名称 无 Combo Box IDC_COMBO_NAME 无 列表框控件变量 m_comboName,CString 类型变量m_strSelectedName Label IDC

17、_STATIC 请选择设备编号 无 Combo Box IDC_COMBO_CODE 无 列表框控件变量 m_comboCode,CString 类型变量m_strSelectedCode Button IDC_BTN_LEND 借出 函数 OnBtnLend ()处理设备借出管理 Button IDC_BTN_RETURN 归还 函数 OnBtnReturn ()处理设备归还管理 Group Box IDC_STATIC 借出信息 无 List Control IDC_LIST_LEND 无 列表框控件类型变量 m_listLend 5. 设备统计信息管理 控件类型、ID 及说明见表 4-5

18、。 表 4-5 设备统计信息管理控件列表 控件类型 ID 属 性 变量或函数 Group Box IDC_STATIC 设备统计信息管理 无 Button IDC_BTN_LEND_LIST 设备借出历史统计 函数 OnBtnLendList ()处理设备借出历史统计 Button IDC_BTN_FREQUENCY_LIST 设备使用频率统计 函数 OnBtnFrequencyList ()处理设备使用频率统计 Button IDC_BTN_LENT_DEVICE 未归还设备列表 函数 OnBtnLentDevice ()处理未归还设备统计 Button IDC_SYS_EXIT 退出 函数

19、 OnSysExit()处理系统退出代码 主对话框类名称为 CDeviceDBSDlg,资源 ID 为 IDD_DEVICEDBS_DIALOG,对话框名称为“企业设备管理系统”。主界面用到了两个列表框控件分别显示设备信息和借出信息。需要为这两个列表框控件添加显示的列,从而显示相应的数据信息。为了代码设计的清晰,在CDeviceDBSDlg类中定义了一个InitControl私有函数负责添加控件的显示列, InitControl函数的代码如下: void CDeviceDBSDlg:InitControl() /设置列表框控件扩展风格 DWORD dwExStyle = LVS_EX_FULL

20、ROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE | LVS_EX_UNDERLINEHOT; m_listDevice.SetExtendedStyle(dwExStyle); m_listLend.SetExtendedStyle(dwExStyle); /初始化设备信息列表框控件 m_listDevice.InsertColumn(0,"设备编号",LVCFMT_CENTER,80); m_listDevice.InsertColumn(1,"设备名称

21、",LVCFMT_CENTER,80); m_listDevice.InsertColumn(2,"设备入库时间",LVCFMT_CENTER,140); m_listDevice.InsertColumn(3,"设备购买人",LVCFMT_CENTER,80);m_listDevice.InsertColumn(4,"设备描述",LVCFMT_CENTER,200); /初始化议题列表框控件 m_listLend.InsertColumn(0,"借出 ID",LVCFMT_CENTER,80); m_l

22、istLend.InsertColumn(1,"设备编号",LVCFMT_CENTER,80); m_listLend.InsertColumn(2,"设备名称",LVCFMT_CENTER,80); m_listLend.InsertColumn(3,"借出人",LVCFMT_CENTER,80); m_listLend.InsertColumn(4,"设备借出时间",LVCFMT_CENTER,140); m_listLend.InsertColumn(5,"设备归还时间",LVCFMT_C

23、ENTER,140); 在 OnInitDialog 函数末尾处添加 InitControl 函数的调用,这样系统在启动的时候,就可以看到已添加显示列的列表框控件。 4.3.3 显示数据到界面上 当系统启动之后,可以将数据库中的数据显示到界面上,需要处理数据库的连接和显示数据到界面上的两个过程。 1. 数据库的连接 数据库的连接需要 3 个参数: ODBC 数据源名称、数据库用户名称和数据库用户密码。其中数据源名称为 ORADB,数据库用户的名称和密码均为 dbdevice。考虑到读者配置的数据源和用户名可能不一样,可以从配置文件中获取这些参数信息,配置文件的格式如下: General 数据库

24、数据源=oradb 数据库用户=dbdevice 数据库密码=dbdevice 把这段文字保存为 DeviceDBS.ini 文件,可以根据读者自己配置的数据源、数据用户和密码修改文件中的相应设置,并把 DeviceDBS.ini 文件放在 DeviceDBS.exe 运行程序的同一目录下。 在 CDeviceDBSDlg 类中定义了一个私有类型的 ConnectDB 函数,处理数据库的连接,代码如下: void CDeviceDBSDlg:ConnectDB() char szPath255; /获取应用程序完全路径 :GetModuleFileName(NULL,szPath,255);

25、CString strFileName = szPath;/获取所在的目录名称 strFileName.Delete(strFileName.ReverseFind()+1,strFileName.GetLength ()-strFileName.ReverseFind()-1); /构造配置文件的完全路径 strFileName += "DeviceDBS.ini" TCHAR sz101; memset(sz,0,sizeof(TCHAR)*101); /获取配置文件中数据库数据源的值,如果没有,默认值为 oradb GetPrivateProfileString(_T

26、("General"),_T(" 数 据 库 数 据 源"),_T("oradb"),sz,100,strFileName); CString strSource(sz); GetPrivateProfileString(_T("General"),_T(" 数 据 库 用 户"),_T("dbdevice"),sz,100,strFileName); CString strUser(sz); GetPrivateProfileString(_T("General&

27、quot;),_T(" 数 据 库 密 码"),_T("dbdevice"),sz,100,strFileName); CString strPwd(sz); /创建连接字符串. CString strConnect; strConnect.Format("DSN=%s;UID=%s;PWD=%s",strSource,strUser,strPwd); /打开数据库的连接,并且捕获异常 TRY m_db.OpenEx(strConnect,CDatabase:noOdbcDialog); CATCH(CDBException,ex)

28、AfxMessageBox (ex->m_strError); AfxMessageBox (ex->m_strStateNativeOrigin); AND_CATCH(CMemoryException,pEx) pEx->ReportError(); AfxMessageBox ("memory exception"); AND_CATCH(CException,e) TCHAR szError100; e->GetErrorMessage(szError,100); AfxMessageBox (szError); END_CATCH Init

29、CtrlData(); 函数ConnectDB利用系统的GetPrivateProfileString函数从文件中获取数据库的配置参数, GetPrivateProfileString 函数的原型如下: DWORD GetPrivateProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName ); 其中第 1 个参数是 Section 的名称,对应 DeviceDBS.ini 文件中的 Gener

30、al,即中括号所包含的内容 General;第 2 个参数是键的名称,如 DeviceDBS.ini 文件中的“数据库数据源”、“数据库用户”和“数据库密码”;第 3 个参数是默认值,如果没用成功获得键值,那么就取lpDefault代表的数据;第 4 个参数是保存键值的缓冲区;第 5 个参数是缓冲区的大小;第 6 个参数是文件的完全路径。 由于第 6 个参数需要获取文件 DeviceDBS.ini 的完全路径,因而需要利用系统的GetModuleFileName 函数先获取应用程序 DeviceDBS.exe 所在的路径(因为 DeviceDBS.ini文件和应用程序 DeviceDBS.ex

31、e 在同一目录下),然后构造配置文件 DeviceDBS.ini 的完全路径。当从文件中获取到数据库配置参数之后,就可以创建数据库连接字符串,利用CDatabase 的 OpenEx 方法打开数据库的连接,并处理数据库的异常。 2. 显示数据到界面上 连接数据库之后,需要把数据库中的设备信息显示到设备信息列表框控件中,并刷新借出归还管理中的设备名称和设备编号两个列表框中的显示数据。因而在 CDeviceDBSDlg类中定义了一个 InitCtrlData 私有函数,负责显示这些数据。同时还定义一个RefreshComboNameData 函数,根据数据库的最新数据刷新借出归还管理中的两个列表框

32、的数据。在对设备信息添加、修改和删除之后都需要调用 RefreshComboNameData 函数来更新列表框中的显示数据。同时还需要定义两个分别把数据插入到列表框控件中的函数,分别为:InsertDeviceInfoItem 和 InsertLendInfoItem。在连接数据库成功之后,不需要显示借出信息,因为比较多,也不是很重要,只需在借出和归还成功之后显示借出信息。在DeviceDBSDlg.h 文件中添加这 4 个私有函数的定义,代码如下: /从数据库获取设备信息并更新到控件中 void InitCtrlData(); /更新设备名称和设备编号列表框的信息 void RefreshC

33、omboNameData(); /向设备信息控件中添加信息 void InsertDeviceInfoItem(CString code, CString name, CString date, CString buyer, CString description); /向借出信息控件中添加借出信息 void InsertLendInfoItem(int id,CString code,CString name,CString borrower,CString lendDate,CString returnDate); 向设备信息列表框控件中添加设备信息的函数是 InsertDeviceInf

34、oItem,代码如下: void CDeviceDBSDlg:InsertDeviceInfoItem(CString code, CString name, CString date, CString buyer, CString description) /获取当前的记录条数. int nIndex = m_listDevice.GetItemCount(); LV_ITEM lvItem; lvItem.mask = LVIF_TEXT ; lvItem.iItem = nIndex; /行数 lvItem.iSubItem = 0; lvItem.pszText = (char*)(LPCTSTR)code; /第一列 /在最后一行插入记录值. m_listDevice.InsertItem(&lvItem); /设置该行的其他列的值. m_listDevice.SetItemText(nIndex,1,name); m_listDevice.SetItemText(nIndex,2,date); m_listDevice.SetItemText(nIndex,3,buyer); m_listDevice.SetItemText(nIndex,4,description); 向借出信息列表框控件中添加借出信息的函数是 InsertLendI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论