2022年Visual-C++程序设计大作业_第1页
2022年Visual-C++程序设计大作业_第2页
2022年Visual-C++程序设计大作业_第3页
2022年Visual-C++程序设计大作业_第4页
2022年Visual-C++程序设计大作业_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

VisualC++程序设计大作业

1.请阅读下面代码段回答下列问题:(20分) if(!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED); returnFALSE; } if(!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); returnFALSE; } AfxEnableControlContainer();………… CSingleDocTemplate*pDocTemplate; pDocTemplate=newCSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CTest13Doc), RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CTest13View)); pDocTemplate->SetContainerInfo(IDR_MAINFRAME); AddDocTemplate(pDocTemplate);AfxSocketInit()作用是什么?(3分)作用:初始化网络环境AfxOleInit()作用是什么?(3分)作用:初始化链接与嵌入环境AfxEnableControlContainer()作用是什么?(3分)作用:容许应用程序作为控件容器来使用(4)pDocTemplate=newCSingleDocTemplate( IDR_MAINFRAME,作用:菜单资源显示 RUNTIME_CLASS(CTest13Doc),作用:建立一种文档 RUNTIME_CLASS(CMainFrame),作用:运营主框架 RUNTIME_CLASS(CTest13View));作用:运营视图类作用是什么

?(8分)(5)pDocTemplate->SetContainerInfo(IDR_MAINFRAME)作用是什么

?(3分)作用:设立主窗口即主框架2.本期教学将COM(组件对象模型)技术融合到动态链库技术中,较为详实地简介了动态链接库工程创立与调试办法,针对如下界面,请回答如下问题:(20分)函数BOOLExcelIsExist()格式阐明什么?extern"C"__declspec(dllexport)void是可导出函数函数功能是什么?(2分)功能:检查与否存在excelextern"C"__declspec(dllexport)BOOLExcelIsExist(){ CExcelAppExcelObj; returnExcelObj.GetExcelAppObj();}ImportToCListCtrl函数格式阐明了什么?该函数是是一种可导出函数形式参数规定调用者必要指定哪些实参?(2分)CtrlTabNameextern"C"__declspec(dllexport)voidImportToCListCtrl(CListCtrl&Ctrl,CStringTabName){ CExcelAppExcelObj; //获取系统中Excel应用程序对象 if(ExcelObj.GetExcelAppObj()) ExcelObj.ImportListCtrlData(Ctrl,TabName);}本实例动态链接库工程名称是什么?ExcelDll工程编译后创立可执行代码文献名是什么?(2分)ExcelDll.dll本实例测试工程名是什么(2分)?Test13阅读OnToExcel()函数回答下列问题:voidCInfoEditListView::OnToExcel(){ HINSTANCEhDll=NULL; //加载动态链接库 hDll=::LoadLibrary("ExcelDll.dll"); if(hDll==NULL) { ::MessageBox(NULL,"Excel接口动态链接库不引入!","严重警告",MB_OK); return; } typedefvoid(*fpToExcel)(CListCtrl&Ctrl,CStringTableName); //获取动态链接库中设立端口 fpToExcelpTo=(fpToExcel)::GetProcAddress(hDll,"ImportToCListCtrl"); if(pTo==NULL) { AfxMessageBox("在动态链接库中没有发现ImportToCListCtrl()函数!"); ::FreeLibrary(hDll); return; } CListCtrl&Ctrl=GetListCtrl(); (*pTo)(Ctrl,"学生信息"); ::FreeLibrary(hDll); }分别说出:hDll=::LoadLibrary("ExcelDll.dll")作用:加载动态链接库、GetProcAddress(hDll,"ImportToCListCtrl")、作用:得到解决函数地址(*pTo)(Ctrl,"学生信息")、作用:设立表名::FreeLibrary(hDll)作用。(每问3分)作用:释放动态链接库3.简述下面CBallThread类是什么类(2分)作用:线程类,它基类是什么?(3分)作用:CwinThread请在找出创立此类对象办法?(15分)voidCMulThreadView::OnThreadCreate(){ CBallThread*pNewThread=(CBallThread*)::AfxBeginThread(RUNTIME_CLASS(CBallThread),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED); if(pNewThread) { m_ThreadSet.AddTail(pNewThread); intns=m_ThreadSet.GetCount(); intr=ns%3==0?255:0; intg=ns%3==1?255:0; intb=ns%3==2?255:0; intxw=120; pNewThread->m_xOffset=(ns-1)%4*120; pNewThread->m_PenColor=RGB(r,g,b); pNewThread->m_pWnd=this; pNewThread->ResumeThread(); }}classCBallThread:publicCWinThread{ DECLARE_DYNCREATE(CBallThread)protected: CBallThread();//Attributespublic://Operationspublic: UINTm_nTimerID;//计时器标记 intm_x; //当前x坐标 intm_xOffset; //偏移量 intm_redarws; //重复次数 COLORREFm_PenColor;//当前颜色 CWnd*m_pWnd; //线程作用窗口 voidDraw(); staticVOIDCALLBACKTimerProc(HWNDhwnd,UINTuMsg,UINTuIDEvent,DWORDdwTime); //{{AFX_VIRTUAL(CBallThread) public: virtualBOOLInitInstance(); virtualintExitInstance(); //}}AFX_VIRTUAL//Implementationprotected: virtual~CBallThread(); DECLARE_MESSAGE_MAP()};4.使用TCP/IP合同CSocket流式套接字为什么要启动一种端口?这个端口表达客户端与操作系统中谁通讯?(4分)=1\*GB3①提供一种唯一地址,使本机可以被找到=2\*GB3②与操作系统中应用程序通讯(2)找出“启动诊听”按钮点击事件解决函数。(4分)voidCSocketOperatorView::OnButtonListen(){ UpdateData(); if(m_Listen_Port<=1024) return; //如果m_ListenSocket对象已创立,则返回 if(m_ListenSocket.m_hSocket!=INVALID_SOCKET) return; //创m_ListenSocket对象资源,指定端口 if(m_ListenSocket.Create(m_Listen_Port)) { //告诉套接对象列表控件 m_ListenSocket.m_pListCtrl=&m_pInfoListView->GetListCtrl(); //启动诊听 if(!m_ListenSocket.Listen()) { m_ListenSocket.Close(); AfxMessageBox("不能启动诊听连接祈求!"); } else { //禁用启动诊听按钮 CWnd*pWnd=GetDlgItem(IDC_BUTTON_LISTEN); pWnd->EnableWindow(FALSE); } } else AfxMessageBox("端口已占用,请另定端口.");}(3)当有客户提交连接祈求时,采用响应方略是什么?(4分)voidCStudentSocket::OnAccept(intnErrorCode){ CSocketsocket; if(Accept(socket)) { if(m_pListCtrl) { //动态申请一种新套接字对象 CStudentSocket*pNewSocket=newCStudentSocket; pNewSocket->m_pListCtrl=m_pListCtrl;//赋给CListCtrl控件 intns=m_pListCtrl->GetItemCount(); CStringtxt; txt.Format("%d",ns+1); m_pListCtrl->InsertItem(ns,txt); CStringstrClientIP; UINTPort; //对客户IP地址和端口 socket.GetPeerName(strClientIP,Port); txt.Format("%d",Port); m_pListCtrl->SetItemText(ns,1,strClientIP); m_pListCtrl->SetItemText(ns,2,txt); //将这个套接字对象绑定在项目上,以便操作 m_pListCtrl->SetItemData(ns,(DWORD)pNewSocket); //相应项号 pNewSocket->m_nItem=ns; pNewSocket->Attach(socket.Detach()); //发出信息 CStringwelcome="欢迎你!"; intlen=welcome.GetLength(); pNewSocket->Send(welcome.GetBuffer(len),len); } } CSocket::OnAccept(nErrorCode);}(4)当有数据到达时应采用什么方略?(4分)接受分析解决数据voidCStudentSocket::OnReceive(intnErrorCode){ charbuf[256]={0}; intlen=Receive(buf,256); if(len!=SOCKET_ERROR) { buf[len]=0; CStringInfo=buf; CStringName; intidx=Info.Find("!!!");//姓名结束标记 if(idx>0) { Name=Info.Left(idx); Info=Info.Mid(idx+3); } if(m_nItem>-1&&m_pListCtrl) { if(Name.GetLength()>0) m_pListCtrl->SetItemText(m_nItem,3,Name); m_pListCtrl->SetItemText(m_nItem,4,Info); } } CSocket::OnReceive(nErrorCode);}(5)依照原代码,请说出顾客姓名与普通信息区别办法?(4分)它们区别在于顾客名后用!!!作标记。已知SQLServer数据库StudentInfo.mdf文献及其日记文献StudentInfo_log.ldf,请简述此数据库附加到SQLServer数据库系统操作办法(4分)及其使用Windows身份和SQLServer身份混合模式操作数据库配备办法(6分)。(本题共10分)打开SQL

server

Management

studio,选取服务器名称,选取浏览更多,选取数据库引擎,输入i308—**,以windows身份连接。

右键i308-**——属性——安全性——选取SQLserver和windows身份验证模式。

右键数据库——附加——添加——学生库信息——拟定。

安全性——右键登录名——新建登录名——SQL

server身份验证——服务器角色——选取“sysadmin”

——顾客映射——选取studentinfo.mdf并添加dbo构架——拟定。

5.重新连接:选取SQL

server身份验证——输入登录名和密码并连接(若失败)——SQL

server配备管理器——

SQL

server网络配备——MSSQLSERVER合同——TCP/IP——属性——Ip地址—>将IP2改为本机IP后启用并将IP4地址改为后启用——拟定并启用TCP/IP,SQL

server服务——SQL

server(MSSQLSERVER)

——属性——内置账户——network——应用后拟定—>按环节4重新连接6.下面是CDatabaseEditView类消息映射表:BEGIN_MESSAGE_MAP(CDatabaseEditView,CInfoEditListView) //{{AFX_MSG_MAP(CDatabaseEditView) ON_COMMAND(IDM_DATABASE_CONNECT,OnDatabaseConnect) ON_COMMAND(ID_LIST_ADD,OnListAdd) ON_COMMAND(IDM_DATABASE_SAVE,OnDatabaseSave) ON_COMMAND(IDM_DATABASE_LOAD,OnDatabaseLoad) ON_COMMAND(ID_LIST_DEL,OnListDel) //}}AFX_MSG_MAPEND_MESSAGE_MAP()请依照此映射表找出它们消息响应函数及其功能实当代码,并用文字阐明其功能。(15分,每条命令3分)。(1)if(m_ADO.m_pCon!=NULL) return; if(m_ADO.SQL_Server_Connect()) AfxMessageBox("连接成功!");//功能:连接指定数据库(2) CListCtrl&Ctrl=GetListCtrl(); intns=Ctrl.GetItemCount(); CStringtxt; for(inti=0;i<ns;i++) { txt.Format("%d",i+1); Ctrl.SetItemText(i,0,txt); } txt.Format("%d",ns+1); Ctrl.InsertItem(ns,txt); CStringguidID=GetGuidIDS(8); Ctrl.SetItemText(ns,1,guidID);//功能:添加数据在当前表中。(3) if(m_ADO.m_pCon==NULL) { AfxMessageBox("请连接数据库!"); return; } CListCtrl&Ctrl=GetListCtrl(); if(Ctrl.GetSelectedCount()<=0) { AfxMessageBox("未选中行!"); return; } CStringstrSQL; POSITIONpos=Ctrl.GetFirstSelectedItemPosition(); while(pos) { intnSel=Ctrl.GetNextSelectedItem(pos); CStringguidID=Ctrl.GetItemText(nSel,1); strSQL.Format("Select*From学生信息表WhereGuidID='%s'",guidID); m_ADO.AdoOpenTab(strSQL); if(!m_ADO.IsRecorderExist()) { m_ADO.m_pRs->AddNew(); m_ADO.Ado_Write_FieldValue("GuidID",guidID); } //将数据写入记录集缓充区 CStringtxt; txt=Ctrl.GetItemText(nSel,2);//学号列 m_ADO.Ado_Write_FieldValue("学号",txt); txt=Ctrl.GetItemText(nSel,3);//姓名列 m_ADO.Ado_Write_FieldValue("姓名",txt); txt=Ctrl.GetItemText(nSel,4);//性别列 m_ADO.Ado_Write_FieldValue("性别",txt); txt=Ctrl.GetItemText(nSel,5);//专业班级列 m_ADO.Ado_Write_FieldValue("专业班级名",txt); txt=Ctrl.GetItemText(nSel,6);//骨龄列 doublegn=0.0; gn=atof(txt); m_ADO.Ado_Write_FieldValue("骨龄",gn); txt=Ctrl.GetItemText(nSel,7);//存款列 intck=0; ck=atoi(txt); //AfxMessageBox(txt); m_ADO.Ado_Write_FieldValue("存款",ck); //将数据写入数据表 m_ADO.m_pRs->Update(); }//功能:将当前表中数据读回到数据库中数据表中(4) if(m_ADO.m_pCon==NULL) { AfxMessageBox("请连接数据库!"); return; } CListCtrl&Ctrl=GetListCtrl(); Ctrl.DeleteAllItems(); CStringstrSQL; strSQL="Select*From学生信息表WhereGuidIDISNOTNULLOrderBy学号"; POSITIONpos=Ctrl.GetFirstSelectedItemPosition(); m_ADO.AdoOpenTab(strSQL); intr=0; while(m_ADO.IsRecorderExist()) { //将数据写入记录集缓充区 CStringtxt; txt.Format("%d",r+1); Ctrl.InsertItem(r,txt); m_ADO.AdoGetFieldValue("GuidID",txt); Ctrl.SetItemText(r,1,txt); m_ADO.AdoGetFieldValue("学号",txt); Ctrl.SetItemText(r,2,txt);//学号列 m_ADO.AdoGetFieldValue("姓名",txt); Ctrl.SetItemText(r,3,txt);//姓名列 m_ADO.AdoGetFieldValue("性别",txt); txt=Ctrl.SetItemText(r,4,txt);//性别列 m_A

温馨提示

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

最新文档

评论

0/150

提交评论