版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
年5月29日数据库仓库设备管理课程设计文档仅供参考铜陵学院数学与计算机系<数据库课程设计>设计题目:设计题目:仓库设备管理学生姓名:学号:专业班级:指导教师:时间:6月7日至6月10日
指导教师对课程设计(论文)的评语(工作态度、任务完成情况、能力水平、设计说明书(论文)的撰写和图纸质量等):成绩指导教师签字年月日
TOC\o"1-3"\h\u13939一、系统设计 38481、系统设计目标 399162、开发设计思想 3292203、系统功能分析 3132704、系统功能模块设计 329743二、数据库设计 439081、数据库需求分析 493052、数据库概念结构设计 55273、数据库逻辑结构设计 625145三、数据库结构的实现 895401.创立设备基本信息代码device_code 88272.创立企业部门基本信息代码class_node 8161333.创立供应商设备信息代码provider_node 9270844.创立设备入库表device_in 9290455.创立设备出库表device_out 969596.创立现有库存表device 1045627.创立部门需求表device_need 10288368.创立设备还库表device_return 10290389.创立操作日志表howdo 109984四、系统实现 11285244.1创立应用程序 11266114.2操作日志模块的设计 1185541、写日志模块 116522、读日志模块 1347404.3登录窗口的设计和程序初始化 15298764.4主对话框界面的设计 16213244.5设备代码管理窗口的建立 17137574.6库存信息管理窗口的创立 20109264.7设备入库信息管理 22292444.8设备入库窗口 25304324.9帮助模块设计 2711195五、调试过程中的问题 2717315.1问题和解决方案 277865.2系统改进方面 2814180六、课程设计总结 28一、系统设计1、系统设计目标由于计算机应用的日益普及,仓库设备管理的自动化是提高工作效率的有效途径,随着企业对仓库设备实行计算机管理,实现仓库设备管理系统势在必行。系统开发的总统任务是实现企业物资设备管理的系统化、规范化和自动化,从而达到仓库管理效率的目的。2、开发设计思想在本系统的设计过程中,为了克服仓库管理信息处理量大的困难,满足计算机管理的需要,采取了下面的一些原则:统一各种原始单据的格式,统一帐目和报表的格式。删除不必要的管理冗余,实现管理规范化、科学化。程序代码标准化,软件统一化,确保软件的可维护性和实用性。界面尽量简单化,做到实用、方便,尽量满足企业不同层次员工的需要。建立操作日志,系统自动记录所进行的各种操作。3、系统功能分析本例中的仓库管理系统需要完成的功能主要有以下几点:新的设备信息的录入;借出、归还、维修时对设备信息的修改;对报废设备信息的删除;按照一定的条件查询、统计符合条件的设备信息;查询功能至少应该包括设备基本信息的查询、按时间段(如在1月1日到10月10日购买、借出、维修的设备等)查询、按时间点(借入时间,借出时间,归还时间)查询等,统计功能至少包括按时间段(如在1月1日到10月10日购买、借出、维修的设备等)统计、按设备基本信息的统计等;对查询、统计的结果打印输出。4、系统功能模块设计在系统功能分析的基础上,结合VisualC++程序编制的特点,得到如图所示的系统功能模块图。仓库管理系统仓库管理系统系统模块输入模块维护模块查看模块报表模块帮助模块日志管理需求模块还库模块出库模块入库模块数据库设计1、数据库需求分析在仔细调查企业仓库物资设备管理过程的基础上,得到本系统所处理的数据流程如图设备入库设备入库设备采购设备还库设备出库仓库现有库存各部门需求企业生产计划汇总本实例设计的数据项和数据结构如下:设备代码信息,包括的数据项有设备号、设备名称。
现有库存信息,包括的数据项有设备、现有数目、总数目、最大库存和最小库存。设备使用信息,包括的数据项有使用的设备、使用部门、数目、使用时间和出库时状态等。
设备采购信息,包括的数据项有采购的设备、采购员、供应商、采购数目和采购时间等。设备归还信息,包括的数据项有归还设备、归还部门、归还数目、归还时间和经手人等。设备需求信息,包括的数据项有需求的部门、需求设备、需求数目和需求时间等。2、数据库概念结构设计本实例根据上面的设计规划出的实体有库存实体、入库实体、出库实体、采购实体、还库实体和需求实体,各实体的E-R图及其关系描述如下:库存实体E-R图现有库存现有库存入库出库还库设备号入库实体E-R图入库入库供应商信息采购价格数量采购员设备号出库实体E-R图出库使用部门出库使用部门数量、时间经手人设备号企业部门需求实体E-R图部门需求部门需求需求部门需求数量需求时间设备号还库实体E-R图设备还库设备还库还库时间人还库数量经手人设备号计划采购实体E-R图计划采购计划采购库存信息 供应信息时间设备号实体和实体之间的关系E-R图入库入库现有库存出库还库部门需求设备采购3、数据库逻辑结构设计在上面的实体以及实体之间的关系的基础上,形成数据库中的表格和各个表格之间的关系。仓库管理系统数据库中各个表格的设计结果如下面的几个表格所示。每个表格表示在数据库中的一个表。表1-1设备基本信息代码表device_code列名数据类型可否为空说明codeVARCHAR2(6)NOTNULL设备号(主键)nameVARCHAR2(20)NULL设备名称表1-2企业部门基本信息表class_node列名数据类型可否为空说明nodeVARCHAR2(6)NOTNULL部门编号(主键)departmentVARCHAR2(20)NOTNULL部门名称表1-3供应商设备信息表provider_node列名数据类型可否为空说明nodeVARCHAR2(6)NOTNULL供应商编号(主键)providerVARCHAR2(20)NOTNULL供应商名称telenodeVARCHAR2(10)NULL供应商电话nameVARCHAR2(20)NULL设备名称表1-4设备入库表device_in列名数据类型可否为空说明codeVARCHAR2(6)NOTNULL设备号in_dateDATENOTNULL入库时间(主键)providerVARCHAR2(20)NULL供应商in_numberNUMBER(6)NULL入库数量priceNUMBER(6)NULL价格buyerVARCHAR2(10)NULL采购员表1-5设备出库表device_out列名数据类型可否为空说明codeVARCHAR2(6)NOTNULL设备号departmentVARCHAR2(20)NULL使用部门out_dateDATENULL出库时间(主键)out_stateNUMBER(1)NULL出库状态out_personVARCHAR2(10)NULL经手人out_numberNUMBER(6)NOTNULL出库数量takerVARCHAR2(10)NULL领取人usageVARCHAR2(20)NULL用途表1-6现有库存表device列名数据类型可否为空说明codeVARCHAR2(6)NOTNULL设备号(主键)now_numberNUMBER(6)NULL现有库存high_numberNUMBER(6)NULL最大库存low_numberNUMBER(6)NULL最少库存total_numberNUMBER(6)NULL总数表1-7部门需求表device_need列名数据类型可否为空说明codeVARCHAR2(6)NOTNULL设备号departmentVARCHAR2(20)NOTNULL部门名称need_numberNUMBER(6)NULL需求数量begin_dateDATENULL需求开始时间end_dateDATENULL需求结束时间表1-8设备还库表device_return列名数据类型可否为空说明codeVARCHAR2(6)NOTNULL设备号return_dateDATENULL还库时间(主键)keeperVARCHAR2(20)NULL仓库管理员return_numberNUMBER(6)NULL归还数量return_dateVARCHAR2(10)NULL归还人表1-9操作日志表howdo列名数据类型可否为空说明do_userVARCHAR2(10)NOTNULL操作员do_whatVARCHAR2(40)NOTNULL操作内容do_dateDATENOTNULL操作时间数据库结构的实现1.创立设备基本信息代码device_codeCREATETABLE”DMS”.device_code(codeVARCHAR2(6)NOTNULL,nameVARCHAR2(20)NOTNULL,CONSTRANTcode_code_pkPRIMARYKEY(code))TABLESPACE”USER_DATA”;2.创立企业部门基本信息代码class_nodeCREATETABLE”DMS”.class_node(nodeVARCHAR2(6)NOTNULL,DepartmentVARCHAR2(20)NOTNULL,CONSTRANTnode_node_pkPRIMARYKEY(node))TABLESPACE”USER_DATA”;3.创立供应商设备信息代码provider_nodeCREATETABLE”DMS”.provider_node(nodeVARCHAR2(6)NOTNULL,providerVARCHAR2(20)NOTNULL,telenoVARCHAR2(10)NULL,CodeVARCHAR2(6)NOTNULL,CONSTRANTnode_node_pkPRIMARYKEY(node))TABLESPACE”USER_DATA”;4.创立设备入库表device_inCREATETABLE”DMS”.device_in(codeVARCHAR2(6)NOTNULL,in_dateDATENOTNULL,providerVARCHAR2(20)NULL,in_numberNUMBER(6)NULL,priceNUMBER(6)NULL,buyerVARCHAR2(10)NULL,CONSTRAINTin_date_pkPRIMARYKEY(in_date))TABLESPACE”USER_DATA”;5.创立设备出库表device_outCREATETABLE”DMS”.device_out(codeVARCHAR2(6)NOTNULL,departmentVARCHAR2(20)NULL,out_dateDATENULL,out_stateNUMBER(1)NULL,out_pensonVARCHAR2(20)NULL,out_numberNUMBER(6)NOTNULL,takerVARCHAR2(10)NULL,usageVARCHAR2(20)NULL,CONSTRAINTout_date_pkPRIMARYKEY(out_date))TABLESPACE”USER_DATA”;6.创立现有库存表deviceCREATETABLE”DMS”.device(codeVARCHAR2(6)NULL,now_numberNUMBER(6)NULL,high_numberNUMBER(6)NULL,low_numberNUMBER(6)NULL,total_numberNUMBER(6)NULL,CONSTRAINTdevice_code_pkPRIMARYKEY(code))TABLESPACE”USER_DATA”;7.创立部门需求表device_needCREATETABLE”DMS”,device_need(codeVARCHAR2(10)NOTNULL,departmentVARCHAR2(10)NOTNULL,need_numberNUMBER(6)NULL,begin_dateDATENULL,end_dateDATENULL,)TABLESPACE”USER_DATA”;8.创立设备还库表device_returnCREATETABLE”DMS”,device_return(codeVARHAR2(6)NOTNULL,departmentVARCHAR2(20)NULL,return_dateDATENULL,keeperVARCHAR2(10)NULL,return_numberNUMBER(6)NULL,return_personVARCHAR2(10)NULL,CONSTRAINTreturn_date_pkPRIMARYKEY(return_date))TABLESPACE”USER_DATA”;9.创立操作日志表howdoCREATETABLE”DMS”,howdo(do_userVARCHAR2(10)NOTNULL,do_whatVARCHAR2(40)NOTNULL,do_dateDATENOTNULL,)TABLESPACE”USER_DATA”;四、系统实现4.1创立应用程序(1)选择”FileNew”中的”新建项目”选项卡中”MFCAppWizard(exe)”,设置合适的目录和项目名,比如”E:\Project”目录下的”DMS”项目。(2)创立一个对话框应用程序(”DialogBased”),单击”Next”按钮。(3)由于在这个项目中将要使用ADO,因此在MFCAppWizard的第二步,需要选中”Automation”选项,使应用程序能够支持自动化对象。如图1-10所示(4)单击”Finish”按钮结束项目的创立。主对话框名为CDMSDlg。(5)项目创立完毕后,在头文件stdafx.h中加入下面4行:#import”c:\programfiles\commonfiles\system\ado\msado15.dll”no_namespace(”EOF”,”adoEOF”)#include”icrsint.h”inlinevoidTESTHR(HRESULTx){ifFAILED(x)_com_issue_error(x);};#defineDATEFMTCstring(”’%s”’)4.2操作日志模块的设计1、写日志模块图1-10使应用程序支持自动化先定义一个名为ClogMngr的类//LogMngr.h//定义一个Log管理器classCLogMngr{public: CLogMngr(); virtual~CLogMngr();public: boolAddLog(LPCSTRop); voidSetup(_ConnectionPtrcnnt,CString&user) { m_DBCnt=cnnt; m_user=user; }protected: _ConnectionPtrm_DBCnt; CStringm_user;};下面是ClogMngr::AddLog内部实现详细过程。//LogMngr.cpp//向数据库中添加Log记录的代码。boolCLogMngr::AddLog(LPCSTRop){ CTimetm=CTime::GetCurrentTime(); CStringsql_;
sql_.Format("INSERTINTOHOWDO(do_user,do_what,do_date)VALUES('%s','%s','%d-%d-%d%d:%d:%d')", m_user,op, tm.GetYear(),tm.GetMonth(),tm.GetDay(), tm.GetHour(),tm.GetMinute(),tm.GetSecond()); _bstr_tsql=sql_;
try { m_DBCnt->Execute(sql,NULL,adCmdText); } catch(_com_error&e){CStringError=e.ErrorMessage();AfxMessageBox(e.ErrorMessage()); returnfalse;}
returntrue;}2、读日志模块图1-11查看日志窗口初始化界面代码如下:BOOLCDlgViewLog::OnInitDialog(){ CDialog::OnInitDialog(); m_list.InsertColumn(0,"操作员"); m_list.InsertColumn(1,"操作日期"); m_list.InsertColumn(2,"操作内容"); RECTrect; m_list.GetWindowRect(&rect); intwid=rect.right-rect.left; m_list.SetColumnWidth(0,wid/3); m_list.SetColumnWidth(1,wid/3); m_list.SetColumnWidth(2,wid/3); m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT); RefreshData();
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}
voidCDlgViewLog::RefreshData(){ m_list.DeleteAllItems(); m_list.SetRedraw(FALSE);
_bstr_tstrSQL("SELECT*FROMHOWDO"); _RecordsetPtrMySet;
inti=0; try { MySet.CreateInstance(__uuidof(Recordset)); MySet=m_DBCnt->Execute(strSQL,NULL,adCmdText); _variant_tHolder; while(!MySet->adoEOF) { Holder=MySet->GetCollect("do_user"); if(Holder.vt!=VT_NULL) m_list.InsertItem(i,(char*)(_bstr_t)Holder);
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.ErrorMessage()); m_list.SetRedraw(TRUE); return;} m_list.SetRedraw(TRUE); }voidCDlgViewLog::OnClickListVllog(NMHDR*pNMHDR,LRESULT*pResult){ inti=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;}//DlgViewLog.cpp//删除所有日志记录的函数。voidCDlgViewLog::OnBtnVlrmall(){ _bstr_tstrSQL("TRUNCATETABLEHOWDO");
try { m_DBCnt->Execute(strSQL,NULL,adCmdText); } catch(_com_error&e){AfxMessageBox(e.ErrorMessage()); EndDialog(0);} RefreshData();}4.3登录窗口的设计和程序初始化在CDMSDlg::OnInitDialog()中加入这样一段代码://DMSDlg.cpp//弹出登录界面CDlgLogIndlg; do { if(!dlg.DoModal()) EndDialog(0); }while(dlg.m_UsrName.GetLength()==0);它的目的是弹出图1-12所示的登录对话框,并从中获得一个有效的用户名。图1-12登录界面得到有效用户名后,程序用如下代码://DMSDlg.cpp//建立数据库连接,初始化成员变量//登录数据库,若失败,则关闭程序。{ m_DBCnt.CreateInstance(__uuidof(Connection)); CStringsql_; sql_.Format("DSN=DMS;UID=%s;PWD=%s",dlg.m_UsrName,dlg.m_UsrPwd); _bstr_tsql=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//关闭数据库连接voidCDMSDlg::OnDestroy(){ CDialog::OnDestroy(); m_DBCnt->Close(); }4.4主对话框界面的设计登录完成后,显示出主对话框。它的界面设计如图1-13所示,单击某个按钮就能弹出某个功能的界面。图1-13主对话框界面以其中”设备代码”按钮为例,说明它的事件处理函数。代码如下://DMSDlg.cpp//显示设备代码管理界面voidCDMSDlg::OnBtnDevcode(){ CDlgDevcodedlg; dlg.Setup(m_DBCnt,&m_logMngr); this->ShowWindow(SW_HIDE); dlg.DoModal(); this->ShowWindow(SW_SHOW);}其它按钮的事件处理函数,代码与”设备代码”按钮的事件处理函数相同。4.5设备代码管理窗口的建立对话框类名为CdlgDevcode设计如图1-14所示设备代码管理窗口//DlgDevcode.cpp//对话框的初始化BOOLCDlgDevcode::OnInitDialog(){ CDialog::OnInitDialog();//切分列表控件 m_list.InsertColumn(0,"设备号"); m_list.InsertColumn(1,"设备名"); RECTrect; m_list.GetWindowRect(&rect); intwid=rect.right-rect.left; m_list.SetColumnWidth(0,wid/2); m_list.SetColumnWidth(1,wid/2); m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);//读取已有数据
RefreshData(); returnTRUE;}//DlgDevcode.cpp//消息映射部分BEGIN_MESSAGE_MAP(CDlgDevcode,CDialog)//{{AFX_MSG_MAP(CDlgDevcode) ON_NOTIFY(NM_CLICK,IDC_LIST_DEVCODE,OnClickListDevcode) //}}AFX_MSG_MAPEND_MESSAGE_MAP()//事件处理部分voidCDlgDevcode::OnClickListDevcode(NMHDR*pNMHDR,LRESULT*pResult){ inti=m_list.GetSelectionMark();
m_code=m_list.GetItemText(i,0); m_name=m_list.GetItemText(i,1);
UpdateData(FALSE); *pResult=0;}其余程序的清单如下://DlgDevcode.cpp:implementationfile//
#include"stdafx.h"#include"DMS.h"#include"DlgDevcode.h"
#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif//////////////////////////////////////////////////////////////////////////////CDlgDevcodedialogCDlgDevcode::CDlgDevcode(CWnd*pParent/*=NULL*/) :CDialog(CDlgDevcode::IDD,pParent){ //{{AFX_DATA_INIT(CDlgDevcode) m_code=_T(""); m_name=_T(""); //}}AFX_DATA_INIT m_DBCnt=NULL; m_log=NULL;}
voidCDlgDevcode::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDlgDevcode) DDX_Control(pDX,IDC_LIST_DEVCODE,m_list); DDX_Text(pDX,IDC_EDIT_DCCODE,m_code); DDX_Text(pDX,IDC_EDIT_DCNAME,m_name); //}}AFX_DATA_MAP}
BEGIN_MESSAGE_MAP(CDlgDevcode,CDialog) //{{AFX_MSG_MAP(CDlgDevcode) ON_NOTIFY(NM_CLICK,IDC_LIST_DEVCODE,OnClickListDevcode) ON_BN_CLICKED(IDC_BTN_DCADD,OnBtnDcadd) ON_BN_CLICKED(IDC_BTN_DCDEL,OnBtnDcdel) ON_BN_CLICKED(IDC_BTN_DCUPD,OnBtnDcupd) //}}AFX_MSG_MAPEND_MESSAGE_MAP()//////////////////////////////////////////////////////////////////////////////CDlgDevcodemessagehandlers//负责读取已有数据的函数voidCDlgDevcode::RefreshData(){ m_list.DeleteAllItems(); m_list.SetRedraw(FALSE);
_bstr_tstrSQL("SELECT*FROMDEVICE_CODE"); _RecordsetPtrMySet;
inti=0; try { MySet.CreateInstance(__uuidof(Recordset));//执行SOL语句读取记录 MySet=m_DBCnt->Execute(strSQL,NULL,adCmdText); _variant_tHolder; while(!MySet->adoEOF) {//取出code字段的数据 Holder=MySet->GetCollect("code"); if(Holder.vt!=VT_NULL) m_list.InsertItem(i,(char*)(_bstr_t)Holder);//取出name字段的数据 Holder=MySet->GetCollect("name"); if(Holder.vt!=VT_NULL) m_list.SetItemText(i,1,(char*)(_bstr_t)Holder); MySet->MoveNext(); } } catch(_com_error&e){AfxMessageBox(e.ErrorMessage()); m_list.SetRedraw(TRUE); return;} m_list.SetRedraw(TRUE); }//负责添加记录的函数voidCDlgDevcode::OnBtnDcadd(){ UpdateData();
CStringsql_; sql_.Format("INSERTINTODEVICE_CODE(code,name)VALUES('%s','%s')",m_code,m_name); _bstr_tsql=sql_;
try { m_DBCnt->Execute(sql,NULL,adCmdText); } catch(_com_error&e){AfxMessageBox(e.ErrorMessage()); return;} m_log->AddLog("添加设备记录。"); RefreshData();}//负责删除记录的函数voidCDlgDevcode::OnBtnDcdel(){ UpdateData();
CStringsql_; sql_.Format("DELETEFROMDEVICE_CODEWHERECODE='%s'",m_code); _bstr_tsql=sql_; try { m_DBCnt->Execute(sql,NULL,adCmdText); } catch(_com_error&e){AfxMessageBox(e.ErrorMessage()); return;} m_log->AddLog("删除设备记录。"); RefreshData();}//负责更新数据的函数voidCDlgDevcode::OnBtnDcupd(){ UpdateData();
CStringsql_; sql_.Format("UPDATEDEVICE_CODESETNAME='%s'WHERECODE='%s'",m_name,m_code); _bstr_tsql=sql_;
try { m_DBCnt->Execute(sql,NULL,adCmdText); } catch(_com_error&e){AfxMessageBox(e.ErrorMessage()); return;} m_log->AddLog("更新设备记录。"); RefreshData();}4.6库存信息管理窗口的创立用户能够在此新增、修改、删除某种设备的记录。单击主对话框中的”库存信息”按钮,将出现图1-15所示的界面。新增记录时,用户在”设备号”组合框中选择一个设备号,在下面填入各种数量,之后单击”新增”按钮即可向表中增加记录。修改记录时,用户单击列表中某一行,程序利用1、8提到的方法,在窗口下面把这一行记录的详细信息显示出来,用户即可对之修改。”设备号”这个子窗口初始化的时候有如下代码://DlgDev.cpp//对话框的初始化BOOLCDlgDev::OnInitDialog(){ CDialog::OnInitDialog(); //切分列表控件 m_list.InsertColumn(0,"设备号"); m_list.InsertColumn(1,"现存数量"); m_list.InsertColumn(2,"最大数量"); m_list.InsertColumn(3,"最小数量"); m_list.InsertColumn(4,"总数"); RECTrect; m_list.GetWindowRect(&rect); intwid=rect.right-rect.left; m_list.SetColumnWidth(0,wid/5); m_list.SetColumnWidth(1,wid/5); m_list.SetColumnWidth(2,wid/5); m_list.SetColumnWidth(3,wid/5); m_list.SetColumnWidth(4,wid/5);
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
_RecordsetPtrpRst=NULL; IADORecordBinding*picRs=NULL;//InterfacePointerdeclared.(VC++Extensions) CDevCodeRsrs;
try { _bstr_tstrSQL("SELECT*FROMDEVICE_CODE");
TESTHR(pRst.CreateInstance(__uuidof(Recordset)));//读取所有的设备编号 pRst=m_DBCnt->Execute(strSQL,NULL,adCmdText); //数据绑定 TESTHR(pRst->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&picRs)); TESTHR(picRs->BindToRecordset(&rs));
inti=0; while(!pRst->adoEOF) {//向组合框控件中添加所有的设备编号 m_devs.AddString(rs.m_sz_code); pRst->MoveNext(); } picRs->Release(); pRst->Close(); } catch(_com_error&e) {AfxMessageBox(e.ErrorMessage()); EndDialog(0); returnTRUE;}
RefreshData();
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}图1-15库存信息管理4.7设备入库信息管理在主对话框中单击”入库信息”按钮就进入如图所示的界面。设备入库信息管理界面下面是修改和删除记录的代码:voidCDlgViewDevIn::OnBtnViupdate(){ if(!UpdateData()) return;
CStringsql_; sql_.Format(CString("SELECT*FROMDEVICE_INWHEREin_date=")+DATEFMT,m_date); _bstr_tsql=sql_;
_RecordsetPtrpRst=NULL; IADORecordBinding*picRs=NULL;//InterfacePointerdeclared.(VC++Extensions) CDevInRsrs;
try { TESTHR(pRst.CreateInstance(__uuidof(Recordset))); pRst->Open(sql,_variant_t((IDispatch*)m_DBCnt,true),adOpenKeyset,adLockOptimistic,adCmdText); //数据绑定 TESTHR(pRst->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&picRs)); TESTHR(picRs->BindToRecordset(&rs));//填写需要修改的数据 strcpy(rs.m_sz_code,m_code); strcpy(rs.m_sz_date,m_date); strcpy(rs.m_sz_provider,m_provider); strcpy(rs.m_sz_tel,m_tel); rs.m_f_number=m_number; rs.m_f_price=m_price; strcpy(rs.m_sz_buyer,m_buyer);//开始更新数据 TESTHR(picRs->Update(&rs));//释放ADO对象 picRs->Release(); pRst->Close(); } catch(_com_error&e) {AfxMessageBox(e.ErrorMessage()); return;}
MessageBox("完成操作!"); m_log->AddLog("修改入库信息");
RefreshData();}
voidCDlgViewDevIn::OnBtnVidel(){ if(!UpdateData()) return;
CStringsql_; sql_.Format(CString("DELETEFROMDEVICE_INWHEREin_date=")+DATEFMT,m_date); _bstr_tsql=sql_;
try {//执行删除数据的SOL语句 m_DBCnt->Execute(sql,NULL,adCmdText); } catch(_com_error&e) {AfxMessageBox(e.ErrorMessage()); return;} MessageBox("完成操作!"); m_log->AddLog("删除入库信息");
RefreshData();}4.8设备入库窗口在主对话框中单击”设备入库”按钮就进入如图1-17所示的界面。设备入库登记界面下面就是单击”确定”按钮之后,更新数据库操作的代码://DlgDevIn.cpp//添加入库记录voidCDlgDevIn::OnBtnDiadd(){ if(m_devs.GetCurSel()==CB_ERR) { MessageBox("请选择一个设备"); return; }
if(!UpdateData()) return;
_RecordsetPtrpRst=NULL; CDevInRsrs;
try { TESTHR(pRst.CreateInstance(__uuidof(Recordset)));//打开数据库表格到Recordest对象 pRst->Open("device_in",_variant_t((IDispatch*)m_DBCnt,true),adOpenKeyset,adLockOptimistic,adCmdTable); //填写新数据 m_devs.GetWindowText(rs.m_sz_code,11); sprintf(rs.m_sz_date,"%d-%d-%d%d:%d:%d", m_date.GetYear(),m_date.GetMonth(),m_date.GetDay(), m_time.GetHour(),m_time.GetMinute(),m_time.GetSecond()); strcpy(rs.m_sz_provider,m_provider); strcpy(rs.m_sz_tel,m_tel); rs.m_f_number=m_number; rs.m_f_price=m_price; strcpy(rs.m_sz_buyer,m_buyer);
COleSafeArrayvaFieldlist,vaValuelist; rs.FillFieldsArray(vaFieldlist,vaValuelist);//开始一个事务 m_DBCnt->BeginTrans();//添加新数据到device_in表 TESTHR(pRst->AddNew(vaFieldlist,vaValuelist)); pRst->Close();//打开device表 CStringsql_; sql_.Format("SELECT*FROMdeviceWHEREcode='%s'",rs.m_sz_code); _bstr_tsql=sql_; pRst->Open(sql,_variant_t((IDispatch*)m_DBCnt,true),adOpenKeyset,adLockOptimistic,adCmdText); //若没有此设备的库存记录 if(pRst->GetRecordCount()==0) { CDevRsrsDev; strcpy(rsDev.m_sz_code,rs.m_sz_code);
rsDev.m_f_cur=rs.m_f_number; rsDev.m_f_total=rs.m_f_number; rsDev.m_f_max=1; rsDev.m_f_m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论