实验内容创建一个基于ClistView试图的单文档应用程序Ex_ADO,主要完成下列任务或实现下列功能。(1)用Access创建一个数据库student.mdb,添加数据表student,如表T16.1所示。表上部分是数据表的记录内容,下部分是数据的结构内容。(2)表T16.1学生基本信息表(student)及其表结构姓名studentname学号sudentno性别xb出生年月birthday专业special李明21010101True1985-1-1电气工程及其自动化王玲21010102False1985-1-1电气工程及其自动化张芳21010501False1985-1-1机械工程及其自动化陈涛21010502True1985-1-1机械工程及其自动化序号字段名称数据类型字段大小小数位字段含义1Studentname文本20姓名2Studentno文本10学号3Xb是/否性别4Birthday日期/时间出生年月5special文本50专业(2)在主菜单中添加“学生信息(&S)”顶层菜单,在该菜单添加“添加学生(&U)”子菜单。当选择“添加学生(&U)”子菜单后,出现“学生信息”对话框,单击“添加”按钮后,记录添加到student表中,并自动更新列表视图的列表项。(3)在列表视图的列表项中,单击鼠标右键,弹出“学生信息”对话框,如图T16.1所示。单击“修改”按钮,student表中相关记录被修改,同时更新列表视图的列表项。(4)若单击列表视图的列表头(标题头)时,使得列表视图按该列的内容对列表项进行从小到大的排序。实验准备和说明(1)在教程第8章全部讲授后进行本次实验。(2)用ADO实现数据库表的添加和修改功能,构思本机上机所需要的程序。实验步骤1创建工作文件夹打开计算机,在“D:\VisualC++程序\LiMing”文件夹中创建一个新子文件夹“实验16”。2创建数据库和数据表创建数据库和数据表的具体步骤如下。(1)启动MicrosoftAccess2003.(2)选择“文件”→“新建”菜单,在右边任务窗格中单击“空数据库”,弹出一个对话框,将文件路径指定到“D:\VisualC++程序、LiMing\实验16”。指定数据库名student.mdb。(3)按表T16.1所示,创建并添加数据表student。(4)关闭MicrosoftAccess2003。3添加用于学生信息添加和修改的对话框添加用于学生信息添加和修改的对话框的具体步骤如下。(1)启动VisualC++6.0。(2)用MFCAppWizard创建一个默认的单文档应用程序Ex_Student。在“新建”对话框中将项目文件夹定位到“D:\VisualC++程序\LiMing\实验16。在创建的第6步将试图的基类选择为ClistView。(3)添加一个对话框资源,打开“属性”对话框将其字体设置为“宋体9号”,标题设置为“学生信息”,ID号设置为IDD_STUINFO。(4)打开对话框网格,按如图T16.1所示的控件布局,用编辑器为对话框添加如表T16.2所示的控件。表T16.2添加的控件添加的空件ID号标题其他属性编辑框(姓名)IDC_EDIT_NAME默认编辑框(学号)IDC_EDIT_NO默认单选按钮(男)IDC_RADIO_M男默认单选按钮(女)IDC_RADIO_W女默认日期时间空件(出生年月IDC_DATETIMEPICKER1默认编辑框(专业)IDC__EDIT_SPEC默认(5)打开MFCClassWizard的MemberVariables页面,在Classname中选择CstuinfoDlg,选中所需的控件ID号,双击鼠标或单击AddVariables按钮。依次为下列控件添加成员变量,如表T16.3所示。表T16.3为控件添加成员变量控件ID号变量类别变量类型变量名范围和大小IDC_EDIT_NAMEValueCstringm_strName20IDC_EDIT_NOValueCstringm_strNO20IDC_DATETIMEPICKER1ValueCtimem_tBirthIDC_EDIT_SPECValueCStringm_strSpec80(6)为CStuInfoDlg类添加一个公有型CString类型成员变量m_strSex,用于保存学生的性别,再添加一个公有型CString类型成员变量m_strOKText,用于设置“确定”按钮的标题。(7)在CStuInfoDlg类构造函数中将m_strSex的初值设为“男”,将m_strOKText的初值设为“添加”。(8)用MFCCIassWizard分别为CStuInfoDlg类添加单选按钮IDC_RADIO_M和IDC_RADIO_W的BN_CLICKED消息映射,并在映射函数中添加下列代码:VoidCstuInfoDlg::OnRadioM90{m-strSex=“男”;}VoidCstuInfoDlg::OnRadioW(){m-strSex=“女”;}(9)用MFCClassWizard为CstuInfoDlg类添加WM-INTDALOG消息射影,并添加下列初始化代码:BOOLCstuInfoDlg::OnInitDialog(){Cdiaiog::OnInitDialog();if(m-strSex==“女”)CheckRadioButton(IDC-RADIO-M,IDC-RADIO-W.IDC-RADIO-W);elseCheckRadioGutton(IDC-RADIO-M,IDC-RADIO-W,IDC-RADIO-M);m-strOKText.TrimLeft();GetDlgItem(IDOK)-SetWindowText(m-strOKText);if(m-strOKText==“修改”{GetDigItem(IDC-EDIT-NAME)-EnableWindow(FALSE);//不许修改姓名GetDigItem(IDC-EDIT-NO)EnableWindow(FALSE);//不许修改姓名}ReturnTRUE;//returnTRUEunlessyousetthefocustoaxontro1//EXCEPTION:OCXPropertyPagesshouldreturnFALSE}(10)用MFCClassWizard为CstuInfoDlg类添加IDOK按钮的BN-CLICKED消息映射,并添加下列代码:VoidCstuInfoDlg::onOK(){UpdateData();m-strName.TrimLeft();m-trNO.TrimLeft();if(m-strName.IsEmpty())MessageBox(“须有姓名!”elseif(m-strNO.IsEmpty())MessageBox(“须有学号!”)elseCdialog::OnOK();}4.添加对ADO的支持及其他代码添加对ADO的支持及其他代码的具体步骤如下。(1)在CEX-ADOVIEW::preCerateWindow函数添加下列代码,用于设置列表视图内嵌列表控件的风格:BOOLCex_ADOView::preCreatWindow(CREATESTRUCT&cs){Cs.style|=LVS_REPORT;∥报表风格ReturnClistVieW::PreCreCreateWindow(cs);}(2)在stdafx.h文件添加对ADO支持的代码:#endif∥_AFX_NO_AFXCMN_SUPPORT#includeafxcmn.h∥MFCsupportforWindowsCommonControls#import”C:\ProgamFiles\CommonFiles\System\ADO\msado15.dll”\No_namespacerename(“EOF”,”adoEOF”)#includeicrsint.h∥{{AFX_INSERT_LOCATION}}(3)在Cex_ADOApp::INitInstance函数添加下列代码,用于对ADO的COM环境进行初始化:BOOLCex_ADOApp::InitInstance(){::CoInitialize(NULL);AfxEnableControlContainter();…}(4)在EX_ADOView.h文件中为Cex_ADOView定义ADO连接对象指针变量:Public:_ConnectionPtrm_pConnection;(5)为CEX_ADOView类添加一个成员函数DispAllRec,用于显示指定数据表的所有记录,并按指定字段进行排序,strField默认参数值为“”,其代码如下:VoidCEx_ADOView::DispAllRec(Cstringtablename,CstringstrField){ClistCtrl&m_ListCtrl=GetListCtrl();∥删除列表中所有行和列表头M_ListCtrl.DeleteAllItems();IntnColumnCount=m_ListCtrl.GetHeaderCtrl()-GetItemCount();for(inti=0;inColumnCount;i++)m_ListCtrl.DeleteColumn(0);_CommandPtrpCmd;pCmd.CreateInstance(__uuidof(Command));//初始化Command指针pCnd-ActiveConnection=m_pConnection;//指向已有的连接CstringstreText;strField.TrimLeft();if(strField.IsEmpty())strText.Fomrmat(“SELLECT*FROM%s”,tablename);elsestrText.Fomrmat(“SELLECT*FROM%sORDERBY%s”,tablename,strField);pCmd-CommamstrText=_bstr_t(strText);_RecordsetPutrpSet;pSet.CreateInstance(__uuidof(Recordset));//初始化Recordest指针pSet=pCmd-Execute(NULL,NULL,adCmdText);//建立列表控件的列表头FieldsPtrflds=pSet-GetFields()//获取当前表的字表指针_variant_tIndex;Index.vt=VT_I2;m_ListCtrl.InsertColumn(0,“序号”,LVCFNT_LEFT,40);for(i=0;i(int)flds-GetCount();i++{Index.iVal=;IntnWidth=flds-GetItem(Index)-GetDefinedSize()*9;If(nWidth40)nWidth=40;m_ListCtrl,InsertColumnb(i+1,(LPSTR)flds-GetItem(Index)-GetName90,LVCFMT_LEFT,nWidth);}//显示记录_bstr_tstr,value;IntnItem=0;While(!pSet-adoEOF){strItem.Fornat(“%d”,nItem+1);m_ListCtrl.InsertItem(nItem,strItem);for(i=0;i(int)flds-GetCount();i++){Index.iVal=I;str=flds-GetItem(Index)-GetName();value=pSet-GetName(str);m_ListCtrl.SetItemTex(nItem,i+1,(LPCSTR)value);}pSet-MoveNext();ntem++;}pSet-Close();}(6)在CEx_ADO