企业设备管理系统1

上传人:hjk****65 文档编号:179558555 上传时间:2023-01-01 格式:DOCX 页数:43 大小:1.31MB
收藏 版权申诉 举报 下载
企业设备管理系统1_第1页
第1页 / 共43页
企业设备管理系统1_第2页
第2页 / 共43页
企业设备管理系统1_第3页
第3页 / 共43页
资源描述:

《企业设备管理系统1》由会员分享,可在线阅读,更多相关《企业设备管理系统1(43页珍藏版)》请在装配图网上搜索。

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

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

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

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

5、、设备购买人、设备借出状态、设备借出 ID。设备借出信息 134 Visual C+与 Oracle 数据库编程案例包括设备借出 ID、设备编号、借出人、借出时间、归还时间。4.2.1 数据库表的设计通过数据库的需求,可以创建以下数据表:设备信息表(device_info_tab)设备信息表包含了设备的一些基本信息,还包括了设备的借出信息,设备的库存管理和设备的借出归还管理都需要操作这个数据表,表的结构如表 4-1 所示。表 4-1 设备信息表字段名称数据类型可否为空约束条件说明device_codedevice_namedescriptionoper_datebuyerlend_status

6、lend_idVARCHAR2(24)VARCHAR2(24)VARCHAR2(1000)DATEVARCHAR2(24)INTEGERINTEGERNOT NULLNOT NULLNULLNOT NULLNULLNULLNULL主键无无无无无无设备编号,要唯一。设备名称设备描述设备入库时间设备购买人设备借出状态设备借出 ID,借出 ID是唯一的但可以为空设备借出信息表(device_lend_info_tab)设备借出信息表包含了设备的借出和归还信息,设备借出、设备归还,以及统计信息的管理都需要用到这个数据表,表的结构如表 4-2 所示。表 4-2 设备借出信息表字段名称数据类型可否为空约束

7、条件说明lend_idINTEGERNOT NULL主键借出 ID,ID 值从系列中获取)device_codeVARCHAR2(24)NOT NULL外键设备编号(device_info_tab)borrowerborrow_datereturn_dateVARCHAR2(24)DATEDATENOT NULLNULLNULL无无无借出人设备借出时间设备归还时间第 4 章 企业设备管理系统 135 4.2.3 数据库表的创建利用第 3 章中讲述的方法创建表空间 dbdevice 和数据库用户 dbdevice,其中数据库用户的密码为 dbdevice,选择的默认表空间为 dbdevice。创

8、建企业设备管理系统的所有数据表的 SQL 语句如下:-创建设备信息表CREATE TABLE device_info_tab(device_code VARCHAR2(24) NOT NULL,device_namedescriptionVARCHAR(24) NOT NULL,VARCHAR(1000) NULL,oper_date DATE NOT NULL,buyer VARCHAR2(24) NULL,lend_status INTEGER NULLCHECK (lend_status IN (0, 1),lend_idINTEGER NULL);-添加设备编号主键ALTER TABL

9、E device_info_tabADD( 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);-添加借出 ID 主键ALTER TABLE device_lend_info_tabADD( PRIMARY KEY (lend_id) )

10、 ;-添加设备编号外键ALTER TABLE device_lend_info_tabADD( FOREIGN KEY (device_code)REFERENCES device_info_tab ) ;-创建可以递增的系列号供 lend_id 使用CREATE SEQUENCE seq_lend_idINCREMENT BY 1 START WITH 1NOMAXVALUE NOMINVALUE NOCYCLE;利用 Oracle SQLPlus WorkSheet 工具执行上述的 SQL 语句从而创建数据库表。需要说明的是,在打开 Oracle SQLPlus Worksheet 的“O

11、racle Enterprise Manager 登录”页面的时候,需要在“用户名”文本框中输入企业设备管理系统的用户名 dbdevice,在“口令”文本框中输入用户密码 dbdevice,在“服务”文本框中输入数据库的本地服务名 OraDB,选择连接方式 Normal,登录成功之后,再运行上述的 SQL 语句。 136 Visual C+与 Oracle 数据库编程案例4.3 系统的实现完成了系统功能模块的设计和数据库表的创建,就可以创建一个企业设备管理系统了。4.3.1 创建应用程序运行 Visual C+,选择 File|New 命令,弹出 New 对话框,从 Projects 列表中选

12、择MFC AppWizard ( exe) 向 导 , 在 Location 文 本 框 中 选 择 项 目 工 程 的 目 录“D:VCSAMPLE”,在 Project name 文本框中输入工程文件的名称 DeviceDBS,单击 OK 按钮,进入 MFC AppWizard Step 1 页面,从应用程序的类型中选择 Dialog based选项,从语言列表中选择“中文(中国)(APPWZCHS.DLL)”,单击 Finish 按钮,DeviceDBS 对话框的应用程序就创建完毕了。4.3.2 创建主对话框的界面主对话框界面的布局如图 4-2 所示。其中包括了设备库存管理、设备借出归还

13、管理和设备统计信息管理三个部分。图 4-2 系统主页面第 4 章 企业设备管理系统 137 设备库存管理控件类型、ID 及说明如表 4-3 所示。表 4-3设备库存管理控件列表控件类型Group BoxLabelEdit BoxIDIDC_STATICIDC_STATICIDC_EDIT_DEVICECODE属性设备库存管理设备编号无变量或函数无无CString 类型变量m_strDeviceCodeLabelEdit BoxIDC_STATICIDC_EDIT_DEVICENAME设备名称无无CString 类型变量m_strDeviceNameLabelEdit BoxIDC_STATIC

14、IDC_EDIT_BUYER购买人无无CString 类型变量m_strBorrowerLabelDate TimePickerDate TimePickerLabelEdit BoxIDC_STATICIDC_DT_DATEIDC_DT_TIMEIDC_STATICIDC_EDIT_DESCRIPTION入库时间Short DateTime设备说明无无COleDateTime 类型变量m_oleOperDateCOleDateTime 类型变量m_oleOperTime无CString 类型变量m_strDescriptionButtonIDC_BTN_DEVICE_ADD新设备入库函数 O

15、nBtnDeviceAdd ()处理新设备的入库管理。ButtonIDC_BTN_DEVICE_MOD修改设备信息函数 OnBtnDeviceMod ()修改设备信息。ButtonIDC_BTN_DEVICE_DEL库存清理函数 OnBtnDeviceDel ()处理库存设备的清理管理。Group BoxIDC_STATIC设备信息无 138 Visual C+与 Oracle 数据库编程案例List ControlIDC_LIST_DEVICE无列表框控件类型变量m_listDevice设备借出归还管理控件类型、ID 及说明如表 4-4 所示。表 4-4设备借出归还管理控件列表控件类型Gro

16、up BoxIDIDC_STATIC属性设备借出归还管变量或函数无理LabelEdit BoxIDC_STATICIDC_EDIT_BORROWER请输入借书人无无CString 类型变量m_strBorrowerLabelCombo BoxIDC_STATICIDC_COMBO_NAME请选择设备名称无无组合框控件变量m_comboName,CString 类型变量 m_strSelectedNameLabelCombo BoxIDC_STATICIDC_COMBO_CODE请选择设备编号无无组合框控件变量m_comboCode,CString 类型变量 m_strSelectedCodeB

17、uttonIDC_BTN_LEND借出函数 OnBtnLend ()处理设备借出管理。ButtonIDC_BTN_RETURN归还函数 OnBtnReturn ()处理设备归还管理。Group BoxList ControlIDC_STATICIDC_LIST_LEND借出信息无无列表框控件类型变量m_listLend设备统计信息管理控件类型、ID 及说明如表 4-5 所示。表 4-5设备统计信息管理控件列表控件类型ID属性变量或函数第 4 章 企业设备管理系统 139 Group BoxIDC_STATIC设备统计信息管无理ButtonButtonButtonIDC_BTN_LEND_LIS

18、TIDC_BTN_FREQUENCY_LISTIDC_BTN_LENT_DEVICE设备借出历史统计设备使用频率统计未归还设备列表函数 OnBtnLendList ()处理设备借出历史统计。函数 OnBtnFrequencyList ()处理设备使用频率统计。函数 OnBtnLentDevice ()处理未归还设备统计。ButtonIDC_SYS_EXIT退出函数 OnSysExit()处理系统退出代码。主对话框类名称为 CDeviceDBSDlg,资源 ID 为 IDD_DEVICEDBS_DIALOG,对话框名称为“企业设备管理系统”。主界面用到了两个列表框控件分别显示设备信息和借出信息。

19、需要为这两个列表框控件添加显示的列,从而显示相应的数据信息。为了代码设计的清晰,在 CDeviceDBSDlg 类中定义了一个 InitControl 私有函数负责添加控件的显示列,InitControl 函数的代码如下:void CDeviceDBSDlg:InitControl()/设置列表框控件扩展风格DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES |LVS_EX_HEADERDRAGDROP | LVS_EX_ONECLICKACTIVATE |LVS_EX_UNDERLINEHOT;m_listDevice.SetE

20、xtendedStyle(dwExStyle);m_listLend.SetExtendedStyle(dwExStyle);/初始化设备信息列表框控件m_listDevice.InsertColumn(0,设备编号,LVCFMT_CENTER,80);m_listDevice.InsertColumn(1,设备名称,LVCFMT_CENTER,80);m_listDevice.InsertColumn(2,设备入库时间,LVCFMT_CENTER,140);m_listDevice.InsertColumn(3,设备购买人,LVCFMT_CENTER,80);m_listDevice.Ins

21、ertColumn(4,设备描述,LVCFMT_CENTER,200);/初始化议题列表框控件m_listLend.InsertColumn(0,借出 ID,LVCFMT_CENTER,80);m_listLend.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_lis

22、tLend.InsertColumn(5,设备归还时间,LVCFMT_CENTER,140);在 OnInitDialog 函数末尾处添加 InitControl 函数的调用,这样系统在启动的时候, 140 Visual C+与 Oracle 数据库编程案例就可以看到已添加显示列的列表框控件。4.3.3 显示数据到界面上当系统启动之后,可以将数据库中的数据显示到界面上,需要处理数据库的连接和显示数据到界面上的两个过程。数据库的连接数据库的连接需要 3 个参数:ODBC 数据源名称、数据库用户名称、数据库用户密码。其中数据源名称为 OraDB,数据库用户的名称和密码均为 dbdevice。考虑到

23、读者配置的数据源和用户名可能不一样,可以从配置文件中获取这些参数信息,配置文件的格式如下:General数据库数据源=oradb数据库用户=dbdevice数据库密码=dbdevice把这段文字保存为 DeviceDBS.ini 文件,可以根据读者自己配置的数据源、数据用户和密码修改文件中的相应设置,并把 DeviceDBS.ini 文件放在 DeviceDBS.exe 运行程序的同一目录下。在 CDeviceDBSDlg 类中定义了一个私有类型的 ConnectDB 函数,处理数据库的连接,代码如下:void CDeviceDBSDlg:ConnectDB()char szPath255;/

24、获取应用程序完全路径:GetModuleFileName(NULL,szPath,255);CString strFileName = szPath;/获取所在的目录名称strFileName.Delete(strFileName.ReverseFind()+1,strFileName.GetLength()-strFileName.ReverseFind()-1);/构造配置文件的完全路径strFileName += DeviceDBS.ini;TCHAR sz101;memset(sz,0,sizeof(TCHAR)*101);/获取配置文件中数据库数据源的值,如果没有,缺省值为 orad

25、bGetPrivateProfileString(_T(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),_T(数据库密码),_T(dbdevice),sz,100,strFileName);CString strPwd(sz);/创建

26、连接字符串.第 4 章 企业设备管理系统 141 CString strConnect;strConnect.Format(DSN=%s;UID=%s;PWD=%s,strSource,strUser,strPwd);/打开数据库的连接,并且捕获异常TRYm_db.OpenEx(strConnect,CDatabase:noOdbcDialog);CATCH(CDBException,ex)AfxMessageBox (ex-m_strError);AfxMessageBox (ex-m_strStateNativeOrigin);AND_CATCH(CMemoryException,pEx)

27、pEx-ReportError();AfxMessageBox (memory exception);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox (szError);END_CATCHInitCtrlData();函数 ConnectDB 利用系统的 GetPrivateProfileString 函数从文件中获取数据库的配置参数, GetPrivateProfileString 函数的原型如下:DWORD GetPrivateProfileString(LPCTSTR

28、 lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefault,LPTSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName);其中第一个参数是 Section 的名称,对应 DeviceDBS.ini 文件中的 General,即中括号所包含的内容 General;第二个参数是键的名称,如 DeviceDBS.ini 文件中的“数据库数据源”、“数据库用户”和“数据库密码”;第三个参数是缺省值,如果没用成功获的键值,那么就取lpDefault代表的数据;第四个参数是保存键值的缓冲区;第五个参数是缓冲区的大小;第六个

29、参数是文件的完全路径。由于第六个参数需要获取文件 DeviceDBS.ini 的完全路径,因而需要利用系统的GetModuleFileName 函 数 先 获 取 应 用 程 序 DeviceDBS.exe 所 在 的 路 径 ( 因 为DeviceDBS.ini 文件和应用程序 DeviceDBS.exe 在同一目录下),然后构造配置文件 142 Visual C+与 Oracle 数据库编程案例DeviceDBS.ini 的完全路径。当从文件中获取到数据库配置参数之后,就可以创建数据库连接字符串,并利用 CDatabase 的 OpenEx 方法打开数据库的连接,并处理数据库的异常。显示数

30、据到界面上连接数据库之后,需要把数据库中的设备信息显示到设备信息列表框控件中,并刷新借出归还管理中的设备名称和设备编号两个组合框中的显示数据。因而在CDeviceDBSDlg 类中定义了一个 InitCtrlData 私有函数,负责显示这些数据。同时还定义一个 RefreshComboNameData 函数,根据数据库的最新数据刷新借出归还管理中的两个组合框的数据。在对设备信息添加、修改和删除之后都需要调用RefreshComboNameData 函数来更新组合框中的显示数据。同时还需要定义两个分别把 数 据 插 入 到 列 表 框 控 件 中 的 函 数 , 分 别 为 : InsertDe

31、viceInfoItem 和InsertLendInfoItem。在连接数据库成功之后,不需要显示借出信息,因为比较的多,也不是很重要,只需在借出和归还成功之后显示借出信息。在 DeviceDBSDlg.h 文件中添加这 4 个私有函数的定义,代码如下:/从数据库获取设备信息并更新到控件中void InitCtrlData();/更新设备名称和设备编号组合框的信息void RefreshComboNameData();/向设备信息控件中添加信息void InsertDeviceInfoItem(CString code, CString name, CString date, CString

32、buyer, CStringdescription);/向借出信息控件中添加借出信息void InsertLendInfoItem(int id,CString code,CString name,CString borrower,CStringlendDate,CString returnDate);向设备信息列表框控件中添加设备信息的函数是 InsertDeviceInfoItem,代码如下:void CDeviceDBSDlg:InsertDeviceInfoItem(CString code, CString name, CString date,CString buyer, CStr

33、ing 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

34、.SetItemText(nIndex,2,date);m_listDevice.SetItemText(nIndex,3,buyer);m_listDevice.SetItemText(nIndex,4,description);/第一列第 4 章 企业设备管理系统 143 向借出信息列表框控件中添加借出信息的函数是 InsertLendInfoItem,代码如下:void CDeviceDBSDlg:InsertLendInfoItem(int id,CString code,CString name,CStringborrower,CString lendDate,CString ret

35、urnDate)/获取当前的纪录条数.int nIndex = m_listLend.GetItemCount();LV_ITEM lvItem;lvItem.mask = LVIF_TEXT ;lvItem.iItem = nIndex;lvItem.iSubItem = 0;CString temp ;temp.Format(%d,id);/行数lvItem.pszText = (char*)(LPCTSTR)temp;/第一列/在最后一行插入记录值.m_listLend.InsertItem(&lvItem);/设置该行的其他列的值.m_listLend.SetItemText(nInd

36、ex,1,code);m_listLend.SetItemText(nIndex,2,name);m_listLend.SetItemText(nIndex,3,borrower);m_listLend.SetItemText(nIndex,4,lendDate);m_listLend.SetItemText(nIndex,5,returnDate);把数据库中的数据显示到界面上的函数为 InitCtrlData,代码如下:void CDeviceDBSDlg:InitCtrlData()if(!m_db.IsOpen()MessageBox(数据库未打开);return;m_listDevi

37、ce.DeleteAllItems();TRYCRecordset rs(&m_db);/打开所有的设备信息记录.rs.Open(CRecordset:dynaset, select * from device_info_tab);while (!rs.IsEOF() CString strCode,strName,strBuyer,strDate,strDescription;/获取设备编号字段值rs.GetFieldValue(short)0, strCode);/获取设备名称字段值rs.GetFieldValue(1, strName);/获取设备描述字段值rs.GetFieldValu

38、e(2, strDescription);/获取入库时间字段值rs.GetFieldValue(3, strDate); 144 Visual C+与 Oracle 数据库编程案例/获取设备购买人字段值rs.GetFieldValue(4, strBuyer);/向会议列表框控件中加入一条新的记录信息./向界面中插入新的设备信息.InsertDeviceInfoItem(strCode,strName,strDate,strBuyer,strDescription) ;rs.MoveNext();rs.Close();/更新设备名称和设备编号组合框的数据RefreshComboNameData

39、();CATCH(CDBException,ex)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_CATCHInitCtrlData 函数打首

40、先获取设备信息,然后调用 InsertDeviceInfoItem 函数将数据显示在列表框控件中,最后调用 RefreshComboNameData 函数更新设备名称和设备编号的组合框中的数据。为了用户借出设备的方便,可以先选择设备名称,因为相同设备名称的设备可能有多台,然后再从设备编号组合框中选择要借的设备,在进行这些选择之前都需要在设备名称和设备编号组合框中添加可供选择的数据,RefreshComboNameData 函数会根据数据库的最新数据刷新两个组合框的数据,其代码如下:void CDeviceDBSDlg:RefreshComboNameData()m_comboName.Rese

41、tContent();TRYCRecordset rs(&m_db);/打开所有的设备名称记录.第 4 章 企业设备管理系统 145 rs.Open(CRecordset:dynaset, select distinct device_name from device_info_tab);while (!rs.IsEOF() CString strName;/获取设备名称字段值rs.GetFieldValue(short)0, strName);/向设备名称组合框添加所有设备名称.m_comboName.AddString(strName);rs.MoveNext();rs.Close();m

42、_comboName.SetCurSel(0);/更新设备编号组合框的数据CString strSelected;m_comboName.GetLBText(0,strSelected);CString sql;sql.Format(select device_code from device_info_tab where device_name = %s,strSelected);rs.Open(CRecordset:dynaset,sql);m_comboCode.ResetContent();while (!rs.IsEOF() CString strCode;/获取设备编号字段值rs.

43、GetFieldValue(short)0, strCode);/向设备编号组合框添加名称为前面选择的设备名称的所有设备编号.m_comboCode.AddString(strCode);rs.MoveNext();m_comboCode.SetCurSel(0);CATCH(CDBException,ex)AfxMessageBox (ex-m_strError);AfxMessageBox (ex-m_strStateNativeOrigin);AND_CATCH(CMemoryException,pEx)pEx-ReportError();AfxMessageBox (memory ex

44、ception);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox (szError); 146 Visual C+与 Oracle 数据库编程案例END_CATCHRefreshComboNameData 函数首先从设备信息表 device_info_tab 中获取所有的设备名称信息,并添加到设备名称组合框中,然后调用 CComboBox 的 SetCurSel 函数显示组合框中的第一个数据(设备名称),调用 CComboBox 的 GetLBText 函数可以获取组合框选

45、中的数据(设备名称值 strSelected)。根据这个设备名称再从设备信息表device_info_tab 中获取所有的设备名称为 strSelected 的设备编号显示在设备编号组合框控件中。把 InitCtrlData 函数放在 ConnectDB 函数的结尾处。这样,数据库在连接成功之后,可以把数据显示到界面上。在 DeviceDBSDlg.cpp 文件的 OnInitDialog 函数末尾处添加初始化列表框控件列和连接数据库并显示数据的代码,代码如下:/初始化列表框控件InitControl();/连接数据库ConnectDB();系统在启动的时候,会自动连接数据库,数据库连接成功后

46、,就在列表框控件中显示数据库中的信息,如图 4-3 所示。图 4-3 连接数据库之后的页面第 4 章 企业设备管理系统 147 4.3.4 设备库存管理设备库存管理管理包括新设备入库、修改设备信息、陈旧设备库存清理。当用户需要添加和修改设备信息的时候,只需要在设备信息参数中输入和修改参数就可以了。新设备入库新设备入库是对新采购的设备进行入库的操作,函数为 OnBtnDeviceAdd,代码如下:void CDeviceDBSDlg:OnBtnDeviceAdd()/从界面控件中获取信息更新到控件变量中.if(!UpdateData()return;/构造入库时间CString strDate

47、= m_oleOperDate.Format(%Y-%m-%d)+ + m_oleOperTime.Format(%H:%M:%S);TRYCRecordset rs(&m_db);CString sql;/打开数据库,查看数据库里面是否含有相同的设备编号/如果有提示用户,返回界面.sql.Format(Select device_code from device_info_tab where device_code = %s,m_strDeviceCode);rs.Open(CRecordset:snapshot, sql);CString strCode = _T();if(!rs.IsE

48、OF() rs.GetFieldValue(short)0, strCode);if(!strCode.IsEmpty()MessageBox(已有此设备的编号,请重新输入设备的编号);return;/插入新的设备记录.sql.Format(Insert into device_info_tab(device_code,device_name,description,oper_date,buyer,lend_status,lend_id) VALUES(%s,%s,%s,to_date(%s,yyyy-mm-dd hh24:mi:ss),%s,0,0),m_strDeviceCode,m_st

49、rDeviceName,m_strDescription,strDate,m_strBuyer);TRACE(sql);m_db.ExecuteSQL(sql);/向界面中插入新的设备信息.InsertDeviceInfoItem(m_strDeviceCode,m_strDeviceName,strDate,m_strBuyer,m_strDescription) ; 148 Visual C+与 Oracle 数据库编程案例/更新设备名称和设备编号组合框的数据RefreshComboNameData();CATCH(CDBException,ex)AfxMessageBox (ex-m_s

50、trError);AfxMessageBox (ex-m_strStateNativeOrigin);AND_CATCH(CException,e)TCHAR szError100;e-GetErrorMessage(szError,100);AfxMessageBox (szError);END_CATCHOnBtnDeviceAdd 函数首先从界面中获取设备参数信息,并判断新设备的编号是否已经存在,如果已存在,则提示用户重新输入设备编号,然后向数据库添加新的设备信息,并显示到界面上,最后要调用 RefreshComboNameData 函数刷新设备借出管理中的设备名称和设备编号组合框中的数

51、据。如在设备库存管理中的“设备编号”文本框中输入 S0001,在“设备名称”文本框中输入“扫描仪”,在“购买人”文本框中输入“张丽”,在“入库时间”日期时间控件中选择 2004-6-23 12:33:36,在“设备说明”文本框中输入“购于中关村电脑城”,如图 4-4 所示。图 4-4 添加新设备页面单击“新设备入库”按钮,新设备的信息就添加到数据库中,并在设备信息列表框控件中显示,如图 4-5 所示。第 4 章 企业设备管理系统 149 图 4-5 新设备添加之后页面在设备借出归还管理中的两个组合框中也能看到新添加的设备名称和设备编号,在“请选择设备名称”组合框中选择“扫描仪”之后,就会在“请

52、选择设备编号”组合框中列出设备名称为“扫描仪”的所有设备编号,目前只有 S0001,如图 4-6 所示。由于目前还没有添加设备名称组合框的 CBN_CLOSEUP(从组合框中的列表框选择数据,然后关掉列表框)消息映射函数,这个消息映射函数的代码将在设备借出归还管理中介绍,所以目前还不能在设备编号组合框中列出设备名称为“扫描仪”的所有设备编号。图 4-6 设备名称和编号组合框显示信息页面修改设备信息为了用户修改设备信息的方便,可以添加设备信息列表框控件IDC_LIST_DEVICE 的 NM_CLICK 消息映射函数 OnClickListDevice,代码如下:void CDeviceDBSD

53、lg:OnClickListDevice(NMHDR* pNMHDR, LRESULT* pResult)/获取已选择的记录项.int nItem = m_listDevice.GetNextItem(-1, LVNI_SELECTED);if(nItem != -1)/从列表框控件的第 nItem+1 行获取数据,以将这些数据显示到设备参数的控件中.m_strDeviceCode = m_listDevice.GetItemText(nItem,0);m_strDeviceName = m_listDevice.GetItemText(nItem,1);CString strDT = m_l

54、istDevice.GetItemText(nItem,2); 150 Visual C+与 Oracle 数据库编程案例m_strBuyer = m_listDevice.GetItemText(nItem,3);m_strDescription = m_listDevice.GetItemText(nItem,4);m_oleOperDate.ParseDateTime(strDT);m_oleOperTime.ParseDateTime(strDT);/把设备列表框控件中当前已选择行的数据,更新到设备参数的控件中.UpdateData(FALSE);*pResult = 0;OnClic

55、kListDevice 函数首先获取选择的列表项 nItem,如果没有选择(nItem 为-1),则不处理。然后获取选择的设备信息,并显示到设备信息的参数控件中。修改设备信息的函数为 OnBtnDeviceMod,代码如下:void CDeviceDBSDlg:OnBtnDeviceMod()int nItem = m_listDevice.GetNextItem(-1, LVNI_SELECTED);/如果没有选择要修改的纪录,返回.if(nItem = -1)AfxMessageBox(没有选择要修改的设备信息);return;CString strDeviceCode = m_listDevice.GetItemText(nItem,0);if(!UpdateData(

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!