答:波特率:单位bps,即每秒所传输的数据位数,是传输速度的表示方法。一般串口可以在给定范围内设置多种波特率,如波特率设为19200bps,则意味着每秒所传输的数据为19200位,约2.34K字节。
4. 若串口参数为“19200,n,7,2”,解释其中各项数据的含义。 答: 波特率19200无检验位,7个数据位,2个停止位。
5. 导入MSComm组件的基本步骤是什么?
答:(1)打开对话框资源,在对话框上打开鼠标右键菜单,在其中选“插入ActiveX控件”,出现一个ActiveX组件选择框,在其中选“Microsoft Communications Control (version6.0)”,并确认。至此导入完成,MSComm组件的图标即出现在对话框上,见图所示。
MSComm组件安装过程
(2)选中对话框上的MSComm组件,在鼠标右键菜单中选“添加变量”,在加成员变量的对话框中填入变量名称。至此,程序中会出现一个新类CMsComm1,导入工作完成。所建立的成员变量就可以看做是MSComm组件对象的名称,可以按一般组件的使用方法在编程中应用MSComm组件。
6. 什么是组件的事件,MSComm组件具有哪些事件?
答:事件的发生意味着MSComm组件的状态发生了变化,系统会通过消息通知该组件。
MSComm组件的事件 事件名 comEvSend comEvReceive comEvCTS comEvDSR comEvCD comEvRing 事件代码 1 2 3 4 5 6 含义 发送事件,当有数据发出时,组件会收到此事件消息 接收事件,当接收到数据时,组件会收到此事件消息 CTS线变化 DSR线变化 CD线变化 振铃检测 7. 简传输时的文本模式和二进制模式有什么区别?
答:用二进制模式打开一个文件的时候,文件本身的内容和你编写程序时用函数读到的内容完全相同。
但是如果用了文本模式,那么操作系统在将文件内容传给上层程序时,或者上层程序通过操作系统向文件写入内容时,操作系统都会预先进行一层预处理(或者说转义),具体过程依赖于操作系统的实现。
8. 说明get_Input()函数的使用方法。 答:读取输入缓冲区中的数据,即接收数据。
例如下面程序段,使用get_Input() if(m_comm.get_CommEvent()==2) {
m_Input1 = m_comm.get_Input();
//读取缓冲区内的数据
//将VARIANT型变量转换为COleSafeArray型变量
//测试接收缓冲区内有字符
m_Input2 = m_Input1;
length = m_Input2.GetOneDimSize(); //确定数据长度
for(i=0;i char a= *(char*)(data+i); str.Format(_T(\m_ReceiveData+=str; } UpdateData(FALSE); } 9. 说明put_Output()函数的使用方法。 答:将数据写入输出缓冲区,即发送数据,待发的数据保存在参数中的variable类型的变量。 例如下面程序段,使用put_Output() void CCommDlg::OnSend() { //测试串口是否已经打开,若未打开,执行打开 if(!m_comm.get_PortOpen()) m_comm.put_PortOpen(true); //打开串口 UpdateData(TRUE); //取得组件中的用户输入数据 //调用函数put_Output将变量m_SendData中的数据发送出去,变量 //m_SendData的类型为CString,COleVariant函数将其转换为Variant类型。 m_comm.put_Output(COleVariant(m_SendData)); //发送数据 } 第12章 数据库编程 1. 对下面的数据库的常用操作,写出对应的SQL语句: (1) 向stu表中插入一条记录,name为?张三?,年龄为20,生日为1990-9-1。 (2) 向stu表中删除记录,条件是年龄小于20。 (3) 将stu表中name为?张三?的生日修改为1990-9-2。 (4) 计算stu表中所有人的平均年龄。 答:Insert into stu(name, age, birth) values(?张三?, 20, 1990-9-1) Delete from stu where age<20 Update stu set birth=1990-9-2 where name=?张三? Select avg(age) as avgage from stu 2. 使用Visual C++ .NET进行数据库访问,有哪些技术?各有什么特点? 答:ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。 一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。 ADO(ActiveX Data Objects)是微软强大的数据访库访问技术之一,是一个便于使用的应用程序层接口。ADO支持编写应用程序以通过OLE DB提供者访问和操作数据库服务器中的数据。ADO最主要的优点是易于使用、速度快和内存支出少。ADO在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。 OLE DB是一组“组件对象模型(COM)”接口,是新的数据库低层接口,它封装了ODBC的功能,并以统一的方式访问存储在不同信息源中的数据。OLE DB是微软 UDA(Universal Data Access)策略的技术基础。 3. 简述使用MFC进行ODBC的编程过程是怎样的? 答:Visual C++ .NET中的MFC应用程序向导可以自动生成一个ODBC应用程序框架。 新建MFC应用程序时,当询问是否包含数据库支持时,选定仅支持头文件;而如果想访问数据库的信息而不想回写所做的改变,那么选定不支持文件的数据视图选项就比较合适。 选择了数据库支持之后“数据源”按钮会激活,选中它去调用选择数据源对话框。在选择数据源对话框中会显示已向ODBC注册的数据库资源,选定所要操作的数据库,单击“确定”后出现登录数据库对话框,登录后会出现选择数据表对话框,其中列举了所选中的数据库中包含的全部表,选择希望操作的表后,单击“确定”。在选定了数据库和数据表之后,数据库支持设计完毕。如果计算机中没有注册ODBC数据源,可以在控制面板中设置或者通过单击选择数据源对话框中的“新建”按钮来注册新的数据源。 在生成的应用程序框架视图类中包含一个指向CTestSet 对象(CRecordSet类派生类的对象)的指针m_pSet,该指针目的是在视图表单和记录集之间建立联系,使得记录集中的查询结果能够很容易地在视表单上显示出来。 4. 在用CRecordSet成员函数进行记录的编辑、添加和删除等操作时,如何使操作有效? 答:查询记录使用CRecordSet::Open()和CRecordSet::Requery()成员函数。 增加记录使用AddNew函数 删除记录直接使用Delete函数,并且在调用Delete函数之后不需调用Update函数 修改记录使用Edit函数 如果用户选择了增加或者修改记录后希望放弃当前操作,可以在调用Update函数之前调用Move函数 5. 如何遍历一个记录集?请描述详细的过程。 答:m_pSet->Open(); if(!m_pSet->IsEOF()) m_pSet->MoveNext(); else m_pSet->MoveLast(); 6. ADO模型有哪些对象?请描述它们的作用。 答:ADO包含三个基本接口:_ConnectionPtr、_CommandPtr和_RecordsetPtr接口。 _ConnectionPtr接口:返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。对于要返回记录的操作通常用_RecordserPtr来实现。而用_ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordserPtr时不需要。 _CommandPtr接口:返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,可以利用全局_ConnectionPtr接口,也可以 在_CommandPtr接口里直接使用连接串。如果只执行一次或几次数据访问操作,后者是比较好的选择。但如果要频繁访问数据库,并返回很多记录集,则应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。 _RecordsetPtr接口:是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自己创建数据连接。如果要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口,然后使用_RecordsetPtr执行存储过程和SQL语句。 7. 描述在Visual C++ .NET中利用ADO进行数据库编程的一般步骤。 答:使用ADO技术开发数据库程序的步骤如下: ? 初始化COM库,引入ADO库定义文件; ? 用Connection对象连接数据库; ? 利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理; ? 使用完毕后关闭连接释放对象。 8. 使用ADO技术进行数据库编程,创建一个SQL Server数据库Test,包含一张学生表stu,自行设计常用的字段。创建一个对话框程序,设计一个具有数据录入、修改、查询、删除功能的简单学生学籍管理系统。 答:略 第十三章习题 参考答案 1. 什么是ActiveX控件? 答:ActiveX控件是一种实现了一系列特定接口,在使用和外观上与一般控件的COM组件类似。ActiveX控件这种技术涉及到了几乎所有的COM和OLE的技术精华,如可链接对象、统一数据传输、OLE文档、属性页、永久存储以及OLE自动化等。 2. ActiveX控件与基本控件有哪些区别? 答:ActiveX控件不像普通控件那样发送以“WM_”打头的通知消息给它的包容器窗口,而是激发事件。事件实际上是由控件调用包容器函数。像普通的控件通知消息一样,事件并没有返回值传给ActiveX控件,如Click,KeyDown事件,但对于客户来说时间与控件的通知消息是一样的。 3. 简述ActiveX控件在程序中的测试方法? 答:选择“ActiveX控件测试容器”菜单项,也就是说,选择ActiveX控件测试容器这个应用程序作为Clock控件的容器,该应用程序位于:C:\\Program Files\\Microsoft Visual Studio\\COMMON\\Tools目录下,程序名称为:TSTCON32.EXE。如果您单击AcitveX测试容器没有出现,那么可以选择“浏览”菜单项,找到TSTCON32.EXE并选中即可。 单击“确定”按钮,会打开ActiveX控件测试容器应用程序,可以通过插入新控件,如加载特定的ActiveX控件,选择“Clock Control”,然后单击对话框上的“确定”按钮,关闭对话框。 4. 什么是属性、方法、事件?。 答:属性是ActiveX控件的数据成员、是可见的、并能被容器应用程序经常修改的。属性一般指控件的颜色、字体、文本和控件中所用的一些其它元素。 ActiveX控件控件的方法是ActiveX控件内的函数,在使用和目的上与C++类成员函数类似,如改变控件外观、行为和属性等。它分为两类:库存方法和自定义方法。库存方法由ColeControl类实现。自定义方法则是由软件开发人员为某种特定目的而定义的一种方法。库存方法可以访问公共属性,如背景颜色等,通过自定义方法可以访问自定义属性。 库存事件和定制事件。库存事件通过ActiveX控件开发工具来实现,可以在控件内以函数调用的方式使用,这些事件一般包括鼠标或键盘事件、错误或状态变化等。自定义事件由控件开发人员为特定目而加入的一种事件。例如,当点击鼠标或发生其它事件时,控件用事件通知容器。 5. 自定义属性、自定义方法、自定义事件? 答:自定义的属性也就是普通的自动化属性,自定义属性与常用属性的区别在于,自定义属性由 COleControl 类实现。自定义属性用于将 ActiveX 控件的某个状态或外观向使用该控件的程序员公开。 自定义方法则是由软件开发人员为某种特定目的而定义的一种方法。 自定义事件是由用户实现的,在实现过程中MFC、ATL类库以及Visual Studio 做了大量的工作。 6. 属性有哪些类型?简要说明各类型。 答:属性为ActiveX控件的应用程序提供了接口,属性包括四种基本的类型,分别是环境(ambient)属性、扩展(extended)属性、库存(stock)属性和自定义(custom)属性。 Ambient属性:是由容器向控件提供的。为了适应需要,控件必须使用这些属性。常用的ambient属性有容器的背景颜色、默认字体以及前景色等。使用控件看上去像是容器应用程序的一部分。 extended属性:是由容器实现的,但看起来是由控件生成的。实际上并不是控件的属性,而是由应用程序提供并实现的属性。例如,容器中各种各样控件的制表顺序便属于extended属性。控件刻意对这些属性做一定的扩展,例如,控件包含两个以上的标准控件,它可以在整个控件中控制选项卡的顺序,并在该控件中完成内部选项卡的顺序后,把选项卡顺序控制权返回给应用程序。 stock属性:是由ActiveX控件开发工具实现的控件属性,也称为公共属性。是系统预先定义好的属性,由COleControl类提供,他的作用主要是提供一些通用、一致的功能接口。这个属性由ActiveX控件和使用该控件的容器一起维护,在实现这属性时,只要与系统中所需的属性建立联系就可以了,不用编写太多的代码。stock属性的例子有控件的字体、标题文本和前景色及背景色等。 custom属性:是由用户实现的控件属性。即由用户或程序开发人员定义,可为ActiveX控件加入特定功能的属性。按带有参数还是不带参数来分自定义属性,通常分为普通属性与参数属性。普通属性常常被声明为单一类型而且不带参数;参数属性不仅具有特定的数据类型,而且可以有若干参数。 7. 如何使用.ocx控件? 答:注册OCX控件: 在“开始->运行...”中输入命令 regsvr32 “路径”/*.ocx //注册控件 regsvr32 /u “路径”/*.ocx //解除控件 注册成功后,系统自动将已注册的ocx文件的快捷方式导入到“..\\Microsoft Visual Studio\\Common\\MSDev98\\Gallery\\Registered ActiveX Controls”中了。 VC中的链接ocx: 菜单---project----Add To Project----Components And Control..弹出对话框。在对话框中找到路径“..\\Microsoft Visual Studio\\Common\\MSDev98\\Gallery\\Registered ActiveX Controls”,在其中选择已注册成功的ocx控件快捷方式。 VC中加载ocx: 此时,在VC控件栏中已经出现了你所用控件的图标,将它拖到你的工作 平台上,记在它ID。 4.程序中创建OCX 8. 使用Animation控件编写一个能控制播放、控制播放速度的动画播放器 答:略。 9. 使用多媒体组件,设计一个多媒体播放机,它能够播放多种多媒体文件的播放程序。例如至少可以播放wav格式文件。 答:略。 10.设计一个CD播放器,能够顺序、随机播放,能够控制循环播放。 答:略。