实验三VC+Access物流信息系统初步开发.doc_第1页
实验三VC+Access物流信息系统初步开发.doc_第2页
实验三VC+Access物流信息系统初步开发.doc_第3页
实验三VC+Access物流信息系统初步开发.doc_第4页
实验三VC+Access物流信息系统初步开发.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

_实验三 VC+Access物流信息系统初步开发实验目的:初步掌握综合运用Visual C+ 6.0和Access2003进行数据库编程和物流信息系统初步开发的基本技术和思想。实验内容:1、在Visual C+ 6.0中通过ODBC(开发数据库互联)方式访问并显示Access2003数据库内容;2、在Visual C+ 6.0中通过ADO(ActiveX Data Objects)方式访问并控制Access2003数据库内容;3、实现订单管理系统实训项目的部分代码,如产品管理(包括产品查询、添加、删除和修改等)、系统登录等。实验课时安排:共6课时,其中:2课时用于通过ODBC方式访问并显示数据库;2课时用于通过ADO方式访问并控制数据库;2课时用于订单管理系统部分代码的操作。3.1 在Visual C+ 6.0中使用ODBC方式访问并显示数据库3.1.1 设置后台数据源本节采用ODBC(开发数据库互联)接口同Access 2003数据源相连,并将数据库中的记录数据通过网格的形式显示给用户。在开始编制程序之前首先要通过控制面板-管理工具的ODBC数据源设置我们待操作的后台Access数据源,建立名称为OrderMIS的用户DSN,并将其指向db1.mdb。 图3-1 启动ODBC数据源管理器 图3-2 设置名为OrderMIS的ODBC数据源3.1.2 添加网格控件DBGrid用于显示数据库内容由于默认情况下VC+6.0控件工具箱中没有DBGrid网格控件,故需要手动添加ActiveX Control,方法如下:(1)选择菜单-Project-Add to Project-Components and Controls Gallery;(2)在部件选择对话框中进入Registered ActiveX Controls;(3)选择DBGrid Control,单击Insert按钮,确认后对类进行配置(可以按默认),我们不做任何修改单击OK按钮,插入完成。添加完成后,在控件工具箱中出现了DBGrid控件(最后一个控件)。 图3-3 在VC中添加DBGrid Control3.1.3 添加远程数据访问控件Microsoft RemoteData Control 我们还要继续添加一些辅助的控件来完成同数据库源的绑定。用同插入DBGird控件一样的步骤,插入Microsoft RemoteData Control控件,完成后该控件出现在控件工具箱中(最后一个控件)。图3-4 添加远程数据访问RDC控件3.1.4 通过DBGrid控件和RDC控件显示数据库内容1、添加“产品查询”菜单项的处理函数:在VC+的ResourceView面板中,双击Menu资源中的IDR_MENU1,在右边设计窗口中通过类向导添加“产品查询”的处理函数(如图3-5)。图3-5 添加产品查询菜单项的处理函数2、添加用于“产品查询”菜单项的对话框处理界面:在VC+的菜单栏中选择“Insert”-“Resource”,在弹出的插入资源对话框中选择Dialog,并单击New按钮后,在资源面板中可以看到新插入的对话框IDD_DIALOG1,用于产品查询的处理界面(如图3-6)。图3-6 添加用于产品查询的对话框IDD_DIALOG13、编辑对话框IDD_DIALOG1:通过控件工具箱添加DBGrid控件、Remote Data控件、Combo Box控件、查询按钮等(如图3-7)。图3-7对话框IDD_DIALOG1内容设计4、编辑对话框IDD_DIALOG1中各控件的属性:如图3-8所示。 图3-8 设置各控件的属性5、添加对话框中“查询”按钮的处理函数:左键双击查询按钮,在弹出的对话框中选择“Creating a new class”,点击OK,如图3-9所示: 图3-9 添加对话框中查询按钮的处理函数6、添加代码:(1)在类视图面板中,展开COrder_MISDlg类,首先在文件头添加包含CDialog1类头文件的一行代码,然后添加“产品查询”菜单项OnProduct1的处理函数。#include Dialog1.h void COrder_MISDlg:OnProduct1() / TODO: Add your command handler code here CDialog1 dialog1;dialog1.DoModal(); /启动产品查询对话框(2)在类视图面板中,展开CDialog1类,添加“查询”按钮OnButton1的处理函数。这里,还需要通过启动ClassWizard,添加Combo Box控件的成员变量和RemoteData控件的成员变量,进行控件与变量之间的数据绑定。图3-10 添加对话框中相关控件的成员变量在CDialog1类视图中添加“查询”按钮OnButton1的处理函数:void CDialog1:OnButton1() UpdateData(1); /读取控件值CString sql=select * from 产品;if(m_combo1!=) /当选择了复选按钮的下拉项时sql=sql+ where 产品单价 ;sql=sql+m_combo1; /SQL语句定义 sql=sql+ order by 产品单价; /按产品单价排序m_rdc1.SetSql(sql); /设置产品查询的SQL语句 m_rdc1.Refresh(); /刷新远程数据访问控件7、编译运行:图3-11 点击“产品查询”菜单项后的对话框运行界面及查询结果3.2 在Visual C+ 6.0中使用ADO方式控制和更新数据库ADO(ActiveX Data Objects)是微软开发的基于对象的数据库访问中间件,它将数据库操作抽象成为一个个对象,通过对这些对象的操作来完成数据库应用程序设计。ADO对象模型包括以下关键对象:(1)Connection对象(连接对象)该对象成为连接对象,就是负责数据库连接和断开的对象,该对象在使用Open()函数打开数据库连接开始,直到调用Close()关闭数据库连接为止,它负责维护应用程序和数据库管理系统的一个会话,保证在此之间的数据库操作持续性。(2)Command对象(命令对象)使用SQL语句来操作数据库是数据库管理系统常用的手段,而在应用程序中往往需要借助该手段来简化应用程序设计,因此也需要传递SQL语句来进行数据库操作。命令对象就是负责对一个数据源进行SQL命令传递和执行等操作进行管理,如传递SQL语句字符串、执行的次数和参数等。(3)Parameter对象(参数对象)参数对象是命令对象的辅助对象,主要用于命令对象的参数传递,这些参数本身就是一个对象,叫做参数对象。参数对象将一些操作定义好,然后直接以参数的形式被命令对象调用,以更简单高效的方式对数据库进行操作。(4)Recordset对象(记录集对象)记录集对象顾名思义就是表示记录的集合的对象,它将数据库中的记录的全部或部分读取到内存中,然后将内存中的对象经命令对象处理后,写回到硬盘的数据库中。该对象在数据库记录非常多的时候起到了提高数据库操作效率的作用,使得应用程序不必每个操作都读取硬盘数据库,而是将全部操作在内存中完成后再写回硬盘。本节将基于ADO方式进行数据库操作,包括记录添加、记录删除、记录更新等。以下,以订单管理系统为例,通过ADO数据库操作,实现产品添加、产品删除、产品更新等功能。3.2.1 添加订单管理系统二级菜单项的对话框和消息处理函数(1)启动MFC Class Wizard在COrder_MISDlg类中为产品管理的二级菜单项“产品添加”、“产品删除”和“产品修改”添加消息处理函数(如图3-12所示)。图3-12 添加产品管理二级菜单项的消息处理函数(2)在VC+6.0的主菜单中选择“Insert”-“Resource”-“Dialog”-“New”分别插入3个对话框IDD_DIALOG2、IDD_DIALOG3、IDD_DIALOG4,然后分别对这个三个对话框的界面进行设计(如图3-13所示)。(3)启动MFC Class Wizard分别为三个对话框中的编辑框(Edit Box)控件在各自对话框类中添加相应成员变量,将编辑框与变量绑定(如图3-14所示)。 图3-13 产品添加、删除和修改对话框界面设计 图3-14为产品添加、删除和修改对话框添加新类和成员变量(4)打开ClassView面板,展开COrder_MISDlg类视图(如图3-15),为“产品添加”、“产品删除”和“产品修改”的消息处理函数OnProduct2()、OnProduct3()、OnProduct4()添加启动对话框的代码(蓝色部分)。图3-15为产品添加、删除和修改对话框添加消息处理函数的代码void COrder_MISDlg:OnProduct2() / TODO: Add your command handler code here CDialog2 dialog2; dialog2.DoModal(); void COrder_MISDlg:OnProduct3() / TODO: Add your command handler code here CDialog3 dialog3; dialog3.DoModal(); void COrder_MISDlg:OnProduct4() / TODO: Add your command handler code here CDialog4 dialog4; dialog4.DoModal(); 文件前面添加如下包含对话框类头文件的代码:/ Order_MISDlg.cpp : implementation file#include stdafx.h#include Order_MIS.h#include Order_MISDlg.h#include Dialog1.h#include Dialog2.h#include Dialog3.h#include Dialog4.h完成以上代码后,点击产品管理二级菜单项就可以启动相应的对话框处理界面。3.2.2 订单管理系统产品添加功能实现(1)打开“产品添加”对话框,双击“添加”按钮添加处理函数OnButton1()。图3-16为添加按钮加入消息处理函数(2)展开ClassView类视图,在Dialog2类的文件Dialog2.cpp中头部引入数据库接口文件,添加如下代码(蓝色部分):#include stdafx.h#include Order_MIS.h#include Dialog2.h#import c:Program FilesCommon FilesSystemADOmsado15.dll rename_namespace(ADOCG) rename(EOF,EndOfFile)该行代码是ADO数据库连接必不可少的语句,它包含了msado15.dll文件,该文件实际上封装了连接数据库及其操作的底层,并将其接口函数提供给开发者使用。(3)展开ClassView类视图中,在Dialog2类的CDialog2:OnButton1()函数中添加如下代码(蓝色部分):void CDialog2:OnButton1() / TODO: Add your control notification handler code hereUpdateData(1); /读取控件值 ADOCG:_ConnectionPtr m_pConnection; CoInitialize(NULL);m_pConnection.CreateInstance(_uuidof(ADOCG:Connection);/创建数据库连接对象ADOCG:_RecordsetPtr m_pRecordset;m_pRecordset.CreateInstance(_uuidof(ADOCG:Recordset);/创建数据库记录对象CString pathName(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=);pathName += db1.mdb;try /数据库连接到当前目录下指定的数据库文件m_pConnection-Open(pathName.AllocSysString(),ADOCG:adModeUnknown); catch(_com_error e)MessageBox(该路径下没有这个数据库); _variant_t vRecords;CString temp,temp2,sql= select max(产品ID)+1 as max_id from 产品; m_pRecordset-Open(sql.AllocSysString(),_variant_t(IDispatch*)m_pConnection,true),ADOCG:adOpenStatic,ADOCG:adLockOptimistic,ADOCG:adCmdText);/打开数据集vRecords = m_pRecordset-GetCollect(max_id); temp= (LPCSTR)(_bstr_t)vRecords; /SQL查询得到下一条记录的产品ID temp2=; sql= insert into 产品 values(; sql+=temp+,; sql+=temp2+m_edit1+temp2+,;sql+=m_edit2+); /SQL插入新记录m_pConnection-Execute(sql.AllocSysString(),&vRecords,ADOCG:adCmdText); /执行SQL语句m_pRecordset-Update();if(m_pConnection-State)m_pConnection-Close(); /关闭数据库连接 m_pConnection= NULL;MessageBox(成功添加新产品信息!,提示);CDialog:OnOK();注意:db1.mdb数据库文件需要放在当前程序文件目录下。完成以上代码后,按Ctrl+F5执行后,点击“产品添加”二级菜单项,即可在对话框处理界面中通过输入新产品名称和单价,添加新产品。3.2.3 订单管理系统产品删除功能实现(1)打开“产品删除”对话框,双击“删除”按钮添加处理函数OnButton1()。图3-17为删除按钮加入消息处理函数(2)展开ClassView类视图,在Dialog3类的文件Dialog3.cpp中头部引入数据库接口文件,添加如下代码(蓝色部分):#include stdafx.h#include Order_MIS.h#include Dialog3.h#import c:Program FilesCommon FilesSystemADOmsado15.dll rename_namespace(ADOCG) rename(EOF,EndOfFile)(3)展开ClassView类视图中,在Dialog3类的CDialog3:OnButton1()函数中添加如下代码(蓝色部分):void CDialog3:OnButton1() / TODO: Add your control notification handler code here UpdateData(1); ADOCG:_ConnectionPtr m_pConnection; CoInitialize(NULL);m_pConnection.CreateInstance(_uuidof(ADOCG:Connection);/创建数据库连接对象ADOCG:_RecordsetPtr m_pRecordset;m_pRecordset.CreateInstance(_uuidof(ADOCG:Recordset);/创建数据库记录对象CString pathName(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=);pathName += db1.mdb;try /数据库连接到当前目录下指定的数据库文件m_pConnection-Open(pathName.AllocSysString(),ADOCG:adModeUnknown); catch(_com_error e)MessageBox(该路径下没有这个数据库); _variant_t vRecords; m_pRecordset-Open(select * from 产品,_variant_t(IDispatch*)m_pConnection,true),ADOCG:adOpenStatic,ADOCG:adLockOptimistic,ADOCG:adCmdText);/打开数据集 CString temp=; CString sql= delete from 产品 where 产品名称=; sql+=temp+m_edit1+temp; /定义SQL命令字串MessageBox(确定删除该产品信息?,确认);m_pConnection-Execute(sql.AllocSysString(),&vRecords,ADOCG:adCmdText); /执行SQL删除语句 m_pRecordset-Update();if(m_pConnection-State)m_pConnection-Close(); /关闭数据库连接 m_pConnection= NULL;CDialog:OnOK();完成以上代码后,按Ctrl+F5执行后,点击“产品删除”二级菜单项,即可在对话框处理界面中删除所输入的产品。3.2.4 订单管理系统产品修改功能实现(1)打开“产品修改”对话框,双击“查看”按钮添加处理函数OnButton1(),双击“修改”按钮添加处理函数OnButton2()。(2)展开ClassView类视图,在Dialog4类的文件Dialog4cpp中头部引入数据库接口文件,添加如下代码(蓝色部分):#include stdafx.h#include Order_MIS.h#include Dialog4.h#import c:Program FilesCommon FilesSystemADOmsado15.dll rename_namespace(ADOCG) rename(EOF,EndOfFile)(3)展开ClassView类视图,在Dialog4类的CDialog4:OnButton1()函数中添加如下代码(蓝色部分):void CDialog4:OnButton1() / TODO: Add your control notification handler code hereUpdateData(1); ADOCG:_ConnectionPtr m_pConnection; CoInitialize(NULL);m_pConnection.CreateInstance(_uuidof(ADOCG:Connection);/创建数据库连接对象ADOCG:_RecordsetPtr m_pRecordset;m_pRecordset.CreateInstance(_uuidof(ADOCG:Recordset);/创建数据库记录对象CString pathName(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=);pathName += db1.mdb;try /数据库连接到当前目录下指定的数据库文件m_pConnection-Open(pathName.AllocSysString(),ADOCG:adModeUnknown); catch(_com_error e)MessageBox(该路径下没有这个数据库); _variant_t vRecords; CString temp=; CString sql= select * from 产品 where 产品名称=; sql+=temp+m_edit1+temp; /定义SQL命令字串 m_pRecordset-Open(sql.AllocSysString(),_variant_t(IDispatch*)m_pConnection,true),ADOCG:adOpenStatic,ADOCG:adLockOptimistic,ADOCG:adCmdText);/打开数据集 vRecords = m_pRecordset-GetCollect(产品ID); m_edit2= (LPCSTR)(_bstr_t)vRecords; vRecords = m_pRecordset-GetCollect(产品名称); m_edit3= (LPCSTR)(_bstr_t)vRecords; vRecords = m_pRecordset-GetCollect(产品单价); m_edit4= (LPCSTR)(_bstr_t)vRecords; if(m_pConnection-State)m_pConnection-Close(); /关闭数据库连接 m_pConnection= NULL;UpdateData(0);(4)展开ClassView类视图中,在Dialog4类的CDialog4:OnButton2()函数中添加如下代码(蓝色部分):void CDialog4:OnButton2() / TODO: Add your control notification handler code hereUpdateData(1); ADOCG:_ConnectionPtr m_pConnection; CoInitialize(NULL);m_pConnection.CreateInstance(_uuidof(ADOCG:Connection);/创建数据库连接对象ADOCG:_RecordsetPtr m_pRecordset;m_pRecordset.CreateInstance(_uuidof(ADOCG:Recordset);/创建数据库记录对象CString pathName(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=);pathName += db1.mdb;try /数据库连接到当前目录下指定的数据库文件m_pConnection-Open(pathName.AllocSysString(),ADOCG:adModeUnknown); catch(_com_error e)MessageBox(该路径下没有这个数据库); _variant_t vRecords;m_pRecordset-Open(select * from 产品,_variant_t(IDispatch*)m_pConnection,true),ADOCG:adOpenStatic,ADOCG:adLockOptimistic,ADOCG:adCmdText);/打开数据集 CString temp=; CString sql= update 产品 set 产品ID=; sql+=m_edit2;sql+=,产品单价=+m_edit4; sql+= where 产品名称=+temp+m_edit3+temp;/定义SQL命令字符串MessageBox(确定修改该产品信息?,确认);m_pConnection-Execute(sql.AllocSysString(),&vRecords,ADOCG:adCmdText); /执行SQL删除语句 m_pRecordset-Update();if(m_pConnection-State)m_pConnection-Close(); /关闭数据库连接 m_pConnection= NULL;CDialog:OnOK();完成以上代码后,按Ctrl+F5执行后,点击“产品修改”二级菜单项,输入要修改的产品名称,点击“查看”可以浏览该产品信息,修改相应内容后,点击“修改”按钮,可以修改数据库中该产品的信息。 图3-18产品修改对话框运行界面3.3 订单管理系统的实现3.3.1订单管理系统的系统登录功能实现(1)在db1.mdb数据库中增加一个用于系统管理的表“管理”,并加入一行记录;图3-19增加“管理”表(2)添加“系统登录”对话框(如图3-20所示),在密码编辑框的Styles属性中选择Password;图3-20增加系统登录对话框(3)启动MFC Class Wizard为该对话框中的两个编辑框(Edit Box)控件添加相应成员变量,这里需要创建新类CDialog5,将编辑框与变量绑定(如图3-21所示)。图3-21将编辑框控件与变量绑定(4)分别双击“登录”和“取消”按钮,添加CDialog5:OnOK()函数和CDialog5:OnOk2()函数。(5)展开FileView文件视图,在stdafx.cpp源文件中,添加如下代码(蓝色部分):#include stdafx.hbool flag; /定义全局变量(6)展开ClassView类视图,在Dialog5类的文件Dialog5.cpp中头部引入数据库接口文件,添加如下代码(蓝色部分):#include stdafx.h#include Order_MIS.h#include Dialog5.h#import c:Program FilesCommon FilesSystemADOmsado15.dll rename_namespace(ADOCG) rename(EOF,EndOfFile)#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifextern bool flag; /声明外部定义的全局变量(7)展开ClassView类视图中,在Dialog5类的CDialog5:OnOK()函数中添加如下代码(蓝色部分):void CDialog5:OnOK() / TODO: Add extra validation hereUpdateData(1);flag=true; /设置启动主对话框标志 ADOCG:_ConnectionPtr m_pConnection; CoInitialize(NULL);m_pConnection.CreateInstance(_uuidof(ADOCG:Connection);/创建数据库连接对象ADOCG:_RecordsetPtr m_pRecordset;m_pRecordset.CreateInstance(_uuidof(ADOCG:Recordset);/创建数据库记录对象CString pathName(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=);pathName += db1.mdb;try /数据库连接到当前目录下指定的数据库文件m_pConnection-Open(pathName.AllocSysString(),ADOCG:adModeUnknown); catch(_com_error e)MessageBox(该路径下没有这个数据库); _variant_t vRecords;CString temp=;CString sql=select * from 管理 where user=;sql+=temp+m_edit1+temp; m_pRecordset-Open(sql.AllocSysString(),_variant_t(IDispatch*)m_pConnection,true),ADOCG:adOpenStatic,ADOCG:adLockOptimistic,ADOCG:adCmdText);/打开数据集 vRecords = m_pRecordset-GetCollect(password); if(m_pConnection-State)m_pConnection-Close(); /关闭数据库连接 m_pConnection= NULL;if(m_edit2=(LPCSTR)(_bstr_t)vRecords)CDialog:OnOK();elseMessageBox(密码错误,请重新输入!,提示!);(8)展开ClassView类视图中,在Dialog5类的CDialog5:OnOk2()函数中添加如下代码(蓝色部分):void CDialog5:OnOk2() / TODO: Add your control notification handler code here flag=false; /设置退出主对话框标志 CDialog:OnCancel();(9)展开ClassView类视图中,在COrder_MISDlg类的主文件Order_MISDlg.cpp头部添加包含Dialog5类头文件的代码(蓝色部分):#include stdafx.h#include Order_MIS.h#include Order_MISDlg.h#include Dialog1.h#include Dialog2.h#include Dialog3.h#include Dialog4.h#include Dialog5.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifextern bool flag; /声明外部定义的全局变量(10)展开ClassView类视图中,在COrder_MISDlg类的COrder_MISDlg函数中添加自动启动登录对话框的如下代码(蓝色部分):COrder_MISDlg:COrder_MISDlg(CWnd* p

温馨提示

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

评论

0/150

提交评论