VC++排队系统的仿真与应用-读书报告_第1页
VC++排队系统的仿真与应用-读书报告_第2页
VC++排队系统的仿真与应用-读书报告_第3页
VC++排队系统的仿真与应用-读书报告_第4页
VC++排队系统的仿真与应用-读书报告_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1读书报告基于 Visual C+ 6.0 的数据库的连接与操作计算机 0101 班 12 号须明烽为按时保质保量地完成本次毕业设计,我进行了充分的准备。因为用Visual C+ 6.0 开发系统相对较难,具有挑战性,所以选择 VC 作为本次毕业设计的开发环境。在选定开发环境为 VC 以后,我到图书馆借阅了相关技术书籍,主要有设计模式 、 MFC 深入浅出 、 MFC 开发人员指南 、 Visual C+图形用户界面开发指南 、 VC+编程技术与难点剖析 、 Visual C+实效编程百例 、 Visual C+ 6.0 高级编程范例 、 Visual C+技术内幕 、 Visual C+数据库开发基础及实例解析 、 Visual C+ 6.0 数据库开发实例 、 Visual C+6.0 数据库系统开发实例导航 等。此外,我还借阅了有关排队系统的书籍,像建模与仿真 、 预测与决策技术等。在此之前我已经进行了 VC 在API 编程方面的研究,为 MFC 编程打下了基础。根据毕业设计的具体要求,我着重在 VC 数据库开发谈一下我的所学所想看法及其感受。信息管理系统(Management Information System, MIS)通常是自有任何计算机设备或其它信息处理技术组成并用于管理信息的系统。所有的信息管理系统中待处理的信息均是来自第一手的原始资料,通常来源分散、数据量庞大、而且多有时间局限性。信息管理系统的重要作用之一,是对信息进行管理并在此基础上为使用者提供各种形式的帮助。对信息的管理通常由信息的采集、信息的传输、信息的存储、信息的加工、信息的维护和使用五个方面组成。管理信息的各个组成部分如果按一定的规则相互联系、相互作用并形成具有一定功能的整体,就构成了信息管理系统。一个数据库应用程序在逻辑上通常由数据访问链路和用户界面两部分组成。在设计数据库应用程序的时候,通常要把数据访问链路构件和用户界面构件分开,数据访问构件均放置在数据模块上。数据模块主要用来实现数据访问链路,也就是引入数据集。其体系结构模型如图所示:窗体 数据模块数据库引擎客户数据集数据源用户界面数据库常用的数据库开发技术有 ODBC(Open Database Connectivity, 开放数据库互连)、DAO(Data Access Object,数据访问对象)、OLE DB(Object Link and Embedding Database,对象连接与嵌入数据库 )和 ADO(ActiveX Data Object,ActiveX 数据对象) 等几种。 (1)ODBC 是一种使用 SQL 的程序设计接口。使用 ODBC 让应用程序的编写者避免了与数据源相联的复杂性。这项技术目前已经得到了大多数 DBMS 厂商们的广泛支持。MicrosoftDeveloperStudio 为大多数标准的数据库格式提供了 32 位 ODBC 驱动器。这些标准数据格式包括有:SQLServer、Access 、Paradox 、dBase、FoxPro、Excel 、Oracle 以及 2MicrosoftText。如果用户希望使用其他数据格式,用户需要相应的 ODBC 驱动器及 DBMS。用户使用自己的 DBMS 数据库管理功能生成新的数据库模式后,就可以使用 ODBC 来登录数据源。对用户的应用程序来说,只要安装有驱动程序,就能注册很多不同的数据库。登录数据库的具体操作参见有关 ODBC 的联机帮助。 ( 2) ADO 是 Microsoft 为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE.DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。之所以称为 ADO,是用了一个比较熟悉的暗喻,OLE 自动化接口。 (3)OLE DB 是一组”组件对象模型”(COM) 接口,是新的数据库低层接口,它封装了 ODBC 的功能,并以统一的方式访问存储在不同信息源中的数据。OLE DB 是 Microsoft UDA(Universal Data Access)策略的技术基础。OLE DB 为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。也就是说,OLE DB 并不局限于 ISAM、Jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在 Excel 电子数据表、文本文件、电子邮件/ 目录服务甚至邮件服务器,诸如 Microsoft Exchange 中的数据。但是,OLE DB 应用程序编程接口的目的是为各种应用程序提供最佳的功能,它并不符合简单化的要求。您需要的 API 应该是一座连接应用程序和 OLE DB 的桥梁,这就是 ActiveX Data Objects (ADO)。 (4)DAO 是基于 Microsoft Jet 数据库引擎的一种重要的数据库访问技术。DAO 是一种面向对象的界面接口,但非可视化的对象要通过编码来完成。DAO 是设计关系型数据库系统结构的对象类的集合,提供了完成管理这样一个系统所需的全部操作的属性与方法,包括创建数据库、定仪表、字段和索引、简历表之间的关系、定位和查询数据库等工具。MFC 提供的 DAO 类可以通过Microsoft Jet 数据库引擎访问数据库中的数据及数据库的结构定义。DAO 类具备 ODBC 类的大部分功能并增加了许多自己的功能。与 ODBC 类的CDatabase、 CRecordset、CRecordView 类似,MFC 为 DAO 也提供了相应的CDaoDatabase、CDaoRecordset 和 CDaoRecordView 类,分别封装了 DAO 数据库对象、DAO 记录集对象和 DAO 记录视对象。此外,DAO 还提供有封装DAO 工作区对象、表定义对象和查询定义对象的CDaoWorkspace、CDaoTableDef 和 CDaoQueryDef 等 DAO 类。下面以 MFC ODBC 类来讲述如何实现 VC+与数据库的连接:应用 Visual C+的 AppWizard 可以自动生成一个 ODBC 应用程序框架。方法是:打开 File 菜单的 New 选项,选取 Projects,填入工程名,选择MFCAppWizard(exe),然后按 AppWizard 的提示进行操作。当 AppWizard 询问是否包含数据库支持时,如果你想读写数据库,那么选定Databaseviewwithfilesupport;而如果你想访问数据库的信息而不想回写所做的改变,那么选定 Databaseviewwithoutfilesupport 选项就比较合适了。选择了数据库支持之后 DatabaseSource 按钮会激活,选中它去调用 DataOptions 对话框。在 DatabaseOptions 对话框中会显示已向 ODBC 注册的数据库资源,选定你所要操作的数据库,如:Super_ES,单击 OK 后会出现SelectDatabaseTables 对话框,其中列举了你所选中的数据库中包含的全部表, 3选择你希望操作的表后,单击 OK。在选定了数据库和数据表之后,你可以按照惯例继续进行 AppWizard 操作。-特别需要指出的是:在生成的应用程序框架 View 类(如:CSuper_ESView)中包含一个指向 CSuper_ESSet 对象的指针 m_pSet,该指针由 AppWizard 建立,目的是在视表单和记录集之间建立联系,使得记录集中的查询结果能够很容易地在视表单上显示出来。有关 m_pSet 的详细用法可以参见 VisualC+OnlineBook。-程序与数据语言建立联系,使用 CDatebase:OpenEx()或CDatabase:Open()函数来进行初始化。数据库对象必须在你使用它构造一个记录集对象之前被初始化。-下面举例说明在 VisualC+环境中 ODBC 的编程技巧:-1查询记录-查询记录使用 CRecordSet:Open()和 CRecordSet:Requery()成员函数。在使用 CRecordSet 类对象之前,必须使用 CRecordSet:Open()函数来获得有效的记录集。一旦已经使用过 CRecordSet:Open()函数,再次查询时就可以应用CRecordSet:Requery()函数。在调用 CRecordSet:Open()函数时,如果已经将一个已经打开的 CDatabase 对象指针传给 CRecordSet 类对象的 m_pDatabase成员变量,则使用该数据库对象建立 ODBC 连接;否则如果 m_pDatabase 为空指针,就新建一个 CDatabase 类对象并使其与缺省的数据源相连,然后进行CRecordSet 类对象的初始化。缺省数据源由 GetDefaultConnect()函数获得。你也可以提供你所需要的 SQL 语句,并以它来调用 CRecordSet:Open()函数,例如:Super_ESSet.Open(AFX_DATABASE_USE_DEFAULT,strSQL);-如果没有指定参数,程序则使用缺省的 SQL 语句,即对在 GetDefaultSQL()函数中指定的 SQL 语句进行操作:CStringCSuper_ESSet:GetDefaultSQL()return_T(BasicData,MainSize);-对于 GetDefaultSQL()函数返回的表名,对应的缺省操作是 SELECT 语句,即:SELECT*FROMBasicData,MainSize-查询过程中也可以利用 CRecordSet 的成员变量 m_strFilter 和 m_strSort 来执行条件查询和结果排序。m_strFilter 为过滤字符串,存放着 SQL 语句中WHERE 后的条件串;m_strSort 为排序字符串,存放着 SQL 语句中 ORDERBY后的字符串。如:Super_ESSet.m_strFilter=TYPE=电动机;Super_ESSet.m_strSort=VOLTAGE;Super_ESSet.Requery();对应的 SQL 语句为:SELECT*FROMBasicData,MainSizeWHERETYPE=电动机ORDERBYVOLTAGE-除了直接赋值给 m_strFilter 以外,还可以使用参数化。利用参数化可以更直观,更方便地完成条件查询任务。使用参数化的步骤如下: 4-(1)声明参变量:CStringp1;floatp2;-(2)在构造函数中初始化参变量p1=_T();p2=0.0f;m_nParams=2;-(3)将参变量与对应列绑定pFX-SetFieldType(CFieldExchange:param)RFX_Text(pFX,_T(P1),p1);RFX_Single(pFX,_T(P2),p2);-完成以上步骤之后就可以利用参变量进行条件查询了:m_pSet-m_strFilter=TYPE=?ANDVOLTAGE=?;m_pSet-p1=电动机 ;m_pSet-p2=60.0;m_pSet-Requery();-参变量的值按绑定的顺序替换查询字串中的?适配符。-如果查询的结果是多条记录的话,可以用 CRecordSet 类的函数 Move(),MoveNext(), MovePrev(),MoveFirst()和 MoveLast()来移动光标。-2增加记录-增加记录使用 AddNew()函数,要求数据库必须是以允许增加的方式打开:m_pSet-AddNew(); /在表的末尾增加新记录m_pSet-SetFieldNull(m_pSet-m_type=电动机;. /输入新的字段值m_pSet- Update(); /将新记录存入数据库m_pSet-Requery(); /重建记录集-3删除记录-直接使用 Delete()函数,并且在调用 Delete()函数之后不需调用 Update()函数:m_pSet-Delete();if(!m_pSet-IsEOF()m_pSet-MoveNext();elsem_pSet-MoveLast();-4修改记录-修改记录使用 Edit()函数:m_pSet-Edit(); /修改当前记录m_pSet-m_type=发电机;/修改当前记录字段值.m_pSet-Update();/将修改结果存入数据库m_pSet-Requery();-5撤消操作 5-如果用户选择了增加或者修改记录后希望放弃当前操作,可以在调用Update()函数之前调用:CRecordSet:Move(AFX_MOVE_REFRESH);-来撤消增加或修改模式,并恢复在增加或修改模式之前的当前记录。其中的参数 AFX_MOVE_REFRESH 的值为零。-6数据库连接的复用-在 CRecordSet 类中定义了一个成员变量 m_pDatabase:CDatabase*m_pDatabase;-它是指向对象数据库类的指针。如果在 CRecordSet 类对象调用 Open()函数之前,将一个已经打开的 CDatabase 类对象指针传给 m_pDatabase,就能共享相同的 CDatabase 类对象。如:CDatabasem_db;CRecordSetm_set1,m_set2;m_db.Open(_T(Super_ES);/建立 ODBC 连接m_set1.m_pDatabase=/m_set1 复用 m_db 对象m_set2.m_pDatabse=/m_set2 复用 m_db 对象-7SQL 语句的直接执行-虽然通过 CRecordSet 类,我们可以完成大多数的查询操作,而且在CRecordSet:Open()函数中也可以提供 SQL 语句,但是有的时候我们还想进行一些其他操作,例如建立新表,删除表,建立新的字段等等,这时就需要使用到 CDatabase 类的直接执行 SQL 语句的机制。通过调用CDatabase:ExecuteSQL()函数来完成 SQL 语句的直接执行:BOOLCDB:ExecuteSQLAndReportFailure(constCString&strSQL)TRYm_pdb-ExecuteSQL(strSQL);/直接执行 SQL 语句CATCH(CDBException,e)CStringstrMsg;strMsg.LoadString(IDS_EXECUTE_SQL_FAILED);strMsg+=strSQL;returnFALSE;END_CATCHreturnTRUE;-应当指出的是,由于不同 DBMS 提供的数据操作语句不尽相同,直接执行SQL 语句可能会破坏软件的 DBMS 无关性,因此在应用中应当慎用此类操作。-8动态连接表 6-表的动态连接可以利用在调用 CRecordSet:Open()函数时指定 SQL 语句来实现。同一个记录集对象只能访问具有相同结构的表,否则查询结果将无法与变量相对应。voidCDB:ChangeTable()if(m_pSet-IsOpen() m_pSet-Close();switch(m_id)case0:m_pSet-Open(AFX_DB_USE_DEFAULT_TYPE,SELECT*FROMSLOT0); /连接表 SLOT0m_id=1;break;case1:m_pSet-Open(AFX_DB_USE_DEFAULT_TYPE,SELE

温馨提示

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

评论

0/150

提交评论