专升本VC程序设计实验指导书_第1页
专升本VC程序设计实验指导书_第2页
专升本VC程序设计实验指导书_第3页
专升本VC程序设计实验指导书_第4页
专升本VC程序设计实验指导书_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

VC程序设计实验指导书授课教师:祁文青适用专业:计算机科学与技术使用班级:11专升本授课时间:2012年春季授课学时:54/36/18学时使用教材:VisualC++程序设计陈志泊张海燕、王春玲编著中国铁道出版社,2005实验指导书:VisualC++程序设计陈志泊张海燕、王春玲编著中国铁道出版社,2005实验1面向对象程序设计实验目的熟悉VC++上机环境,编程实现类的定义,掌握C++面向对象基本特性,如抽象、继承、重载、多态,理解虚函数、构造函数、析构、模板等基本概念与基本语法。体会面向对象语言提高代码重用性的思路。实验内容熟悉VisualC++6.0的安装、启动和关闭方法,了解VisualC++6.0的集成开发环境窗口,掌握主要菜单、菜单项、图标、工具栏及各种编辑器的使用。熟悉VisualC++6.0的向导类型,掌握利用控制台类型进行C++程序设计的步骤;定义点类Point,给出类的成员属性及构造函数、析构函数及普通方法的定义,利用定义的类定义对象,并对对象的属性进行访问。从Point类派生出圆类Circle,并增加一个方法求圆的面积。设计一个实现数组功能的类模版Array,并用这个类模版产生两个模版类对象IntAry和StuAry,用这两个对象保存5个整数和5名学生的信息。实验步骤安装VisualC++6.0;多种方式启动VisualC++6.0;创建控制台项目,进入C++代码编辑器窗口熟悉各工具栏中相关图标的名称、功能、快捷键等以及对应的菜单项目;熟悉VisualC++6.0的集成开发环境窗口,了解各窗口的作用;定义点类Point,实现Point类中的成员函数。代码如下:classPoint{public: Point(intpx=0,intpy=0);//构造函数 ~Point(); //析构函数 Point(Point&p); //拷贝构造函数 voidSetPoint(intpx,intpy); //设置点的坐标值 intGetX(); //获得该点的X坐标 intGetY(); //获得改点的Y坐标private: intx; inty;};Point::Point(intpx,intpy){ x=px; y=py;}Point::~Point(){ }Point::Point(Point&p){ x=p.x; y=p.y;}voidPoint::SetPoint(intpx,intpy){ x=px; y=py;}intPoint::GetX(){ returnx;}intPoint::GetY(){ returny;}测试Point类:intmain(intargc,char*argv[]){ Pointp1; p1.SetPoint(5,10); Pointp2(p1); Pointp3(5,10); cout<<"p1的值是:"<<p1.GetX()<<""<<p1.GetY()<<endl; cout<<"p2的值是:"<<p2.GetX()<<""<<p2.GetY()<<endl; cout<<"p3的值是:"<<p3.GetX()<<""<<p3.GetY()<<endl; return0;}声明派生类Circle,增加一个数据成员:半径R,一个成员函数:求面积GetArea()。代码如下:#defineG_PI3.classCircle:publicPoint{public: Circle(intpx,intpy,intpr):Point(px,py),PI(G_PI){r=pr;} Circle(Point&p,intpr):Point(p),PI(G_PI){r=pr;} doubleGetArea() { returnPI*(double)r*(double)r; }private: intr;protected: constdoublePI;};测试Circle类:intmain(intargc,char*argv[]){ Pointp(5,10); Circlec1(5,10,3); cout<<"c1的圆心是:"<<c1.GetX()<<""<<c1.GetY()<<",c1的面积是:"<<c1.GetArea()<<endl; Circlec2(p,3); cout<<"c2的圆心是:"<<c2.GetX()<<""<<c2.GetY()<<",c1的面积是:"<<c1.GetArea()<<endl; return0;}定义一个类模版Array,代码如下:#include<iostream.h>#include<string.h>template<typenameT>//声明T为一种抽象的类型classArray{public:Array(ints);virtual~Array();virtualconstT&Entry(intindex)const;//取出元素virtualvoidEnter(intindex,constT&value);//插入元素protected:intsize;T*element;};实现Array的功能:template<typenameT>Array<T>::Array(ints){if(s>1)size=s;elsesize=1;element=newT[size];}template<typenameT>Array<T>::~Array(){delete[]element;}template<typenameT>constT&Array<T>::Entry(intindex)const{returnelement[index];}template<typenameT>voidArray<T>::Enter(intindex,constT&value){element[index]=value;}测试类模版Array:structStudent{ charname[10]; intage;};intmain(intargc,char*argv[]){ Array<int>IntAry(5); inti; for(i=0;i<5;i++) { IntAry.Enter(i,i); } cout<<"IntegerArray:\n"; for(i=0;i<5;i++)cout<<IntAry.Entry(i)<<'\t'; cout<<endl; Array<Student>StuAry(5); Studentstu; strcpy(,"张三"); stu.age=20; StuAry.Enter(0,stu); strcpy(,"李四"); stu.age=21; cout<<"StudentArray:\n"; for(i=0;i<5;i++) cout<<StuAry.Entry(i).name<<'\t'<<StuAry.Entry(i).age<<'\t';cout<<endl; return0;}分析与思考怎么样利用VC++集成开发环境进行C++程序的书写?C++程序对C程序进行了哪些扩充与修改?为什么在Circle类中数据成员PI是一个常量?它在哪里被初始化?在Circle类中数据成员PI的访问权限设置为protected的好处是什么?使用const类型数据和使用预编译命令#define相比有什么优点?类模版和函数模版有什么联系?(提示:类模版的成员函数是函数模版)

实验2WindowsGUI编程实验目的编程实现WindowsGUI程序,理解VC++产生窗口的过程和步骤,理解消息循环和响应的机制,实现GUI绘图功能。理解GUI应用程序和控制台应用程序的区别。实验内容使用VC++6.0创建一个Win32应用程序,编写程序在屏幕上显示一个Windows窗口。尝试改变CreateWindow()函数中的参数,观察窗口样式发生的变化。在上述程序的基础上,利用画刷和绘图函数在窗口中绘制一个红色的小球。在上述程序的基础上,实现点击鼠标左键,小球开始水平向右移动。在上述程序的基础上,实现一个简单的弹球游戏。实验步骤启动VisualC++6.0,在“工程”选项卡中选择“Win32Application”,选择“一个简单的Win32程序”,点击“完成”新建一个Win32应用程序。在工作区中编辑代码:#include<windows.h>LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数说明intAPIENTRYWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){ HWNDhwnd;//定义窗口句柄 MSGMsg;//定义消息结构体 WNDCLASSwndclass;//定义窗口类 charlpszClassName[]="MyWindow"; //窗口类名 charlpszTitle[]="窗口"; //窗口标题名 //窗口类的定义 wndclass.style=0; //窗口类型为缺省类型 wndclass.lpfnWndProc=WndProc; //定义窗口处理函数 wndclass.cbClsExtra=0; //窗口类无扩展 wndclass.cbWndExtra=0; //窗口实例无扩展 wndclass.hInstance=hInstance; //当前实例句柄 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化图标为缺省图标 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); //窗口采用箭头光标 wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景为白色 wndclass.lpszMenuName=NULL; //窗口中无菜单 wndclass.lpszClassName=lpszClassName; //窗口类名为"MyWindow" //以下进行窗口类的注册 if(!RegisterClass(&wndclass))//如果注册失败则发出警告 {MessageBeep(0); returnFALSE; } hwnd=CreateWindow ( lpszClassName, //窗口类名 lpszTitle, //窗口实例的标题名 WS_OVERLAPPEDWINDOW, //窗口的风格 CW_USEDEFAULT, CW_USEDEFAULT, //窗口左上角坐标为缺省值 CW_USEDEFAULT, CW_USEDEFAULT,, //窗口的高和宽为缺省值 NULL, //此窗口无父窗口 NULL, //此窗口无主菜单 hInstance, //创建此窗口的应用程序的当前句柄 NULL //不使用该值 ); //显示窗口 ShowWindow(hwnd,nCmdShow); //绘制用户区 UpdateWindow(hwnd); //消息循环 while(GetMessage(&Msg,NULL,0,0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } returnMsg.wParam; //消息循环结束即程序终止时将信息返回系统}LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam){ switch(message) { caseWM_DESTROY: PostQuitMessage(0);break; default: //缺省时采用系统消息缺省处理函数 returnDefWindowProc(hwnd,message,wParam,lParam); } return(0);}运行并观察程序运行结果。参考MSDN中CreateWindow()函数的说明,将CreateWindow()函数中的参数改为:CreateWindow ( lpszClassName, "我的窗口", WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL, 0, 0, 800, 600, NULL, NULL, hInstance, NULL );运行并观察窗口发生那些变化。在WndProc()函数中的switch语句中处理WM_PAINT消息,代码如下:LRESULTCALLBACKWndProc(...){ PAINTSTRUCTps; HDChdc; switch(message) { caseWM_PAINT: { hdc=BeginPaint(hwnd,&ps); RECTrt;//获得当前用户区的矩形区域GetClientRect(hwnd,&rt);//获得当前窗口的矩形区域//创建一个红色的画 HBRUSHbrush=CreateSolidBrush(RGB(255,0,0)); SelectObject(hdc,brush);//将画刷选入设备环境 //画一个圆Ellipse(hdc,100,100,200,200); EndPaint(hwnd,&ps); DeleteObject(brush);//删除画刷 break; } default: //缺省时采用系统消息缺省处理函数 returnDefWindowProc(hwnd,message,wParam,lParam); } return(0);}编译并执行,观察结果.附:Ellipse函数的说明:BOOLEllipse(HDChdc,//handletodevicecontextintnLeftRect,//x-coordofboundingrectangle'supper-leftcornerintnTopRect,//y-coordofboundingrectangle'supper-leftcornerintnRightRect,//x-coordofboundingrectangle'slower-rightcornerintnBottomRect//y-coordofboundingrectangle'slower-rightcorner);ParametershdcHandletothedevicecontext.nLeftRectSpecifiesthex-coordinateoftheupper-leftcorneroftheboundingrectangle.nTopRectSpecifiesthey-coordinateoftheupper-leftcorneroftheboundingrectangle.nRightRectSpecifiesthex-coordinateofthelower-rightcorneroftheboundingrectangle.nBottomRectSpecifiesthey-coordinateofthelower-rightcorneroftheboundingrectangle.实现小球移动:给WndProc函数添加两个静态变量: staticintx=100; staticinty=100;修改WM_PAINT中的代码: caseWM_PAINT: { hdc=BeginPaint(hwnd,&ps); HBRUSHbrush=CreateSolidBrush(RGB(255,0,0));//创建一个红色的画刷 SelectObject(hdc,brush); Ellipse(hdc,x,y,x+100,y+100); EndPaint(hwnd,&ps); DeleteObject(brush); Sleep(100); //停0.1秒 InvalidateRect(hWnd,NULL,1);//刷新用户区x++; break;}实现点击鼠标左键,小球开始移动,再次点击,小球停在移动。在程序开始处增加一个全局布尔变量来控制小球是否运动,并初始化为false:boolMove=false;在WndProc()函数中的switch语句中处理WM_LBUTTONDOWN消息,代码如下:caseWM_LBUTTONDOWN:{ Move=!Move;//将Move取反。 InvalidateRect(hwnd,NULL,1);//刷新窗口 break;} 在WndProc()函数中将switch语句中处理WM_PAINT消息的分支修改为:caseWM_PAINT:{ if(Move) { Sleep(100); //停0.1秒 InvalidateRect(hwnd,NULL,1); x++; } break;}在上述程序的基础上,修改代码,使得小球碰撞墙壁(窗口边缘)后能够弹回。分析与思考窗口产生的消息在哪里进行处理?窗口类中lpfnWndProc字段接受的是一个什么类型的值?WM_PAINT消息什么时候会产生?在实验第三步中如何改变小球的颜色?通过MSDN,思考InvalidateRect()函数刷新窗口的原理是什么?在运行弹球程序的时候,拖动窗口会有明显的不流畅感,为什么会出现这种现象,如何解决?

实验3MFC对话框和控件实验目的熟练掌握对话框,按钮控件、编辑框和列表框和其他控件,掌握创建和使用菜单的方法,理解控件的消息响应方法,理解控件,对象和对象指针之间的关系。掌握CString的使用方法,掌握标准STL容器Vector的使用方法。实验内容(1)设计一个包含若干种控件的对话框应用程序,并使程序在操作控件时发生响应。(2)使用MFC和Vector容器完成一个管理学生信息的程序。实验步骤利用MFC向导建立一个基于对话框的应用程序;切换工程到Resources视图,从工具栏分别拖动一个按钮,编辑框和一个列表框到主对话框中。使用底部工具栏中的布局按钮将控件排列整齐;选择按钮控件,在鼠标右键菜单的属性中修改按钮控件的ID为“IDC_BUTTON_ADD”,标题为“添加”;利用ClassWizard为按钮控件添加消息处理函数OnButtonAdd,响应其BN_CLICKED消息。在成员变量选项卡中给编辑框和列表控件关联控件类型的变量m_edit和m_list;在主对话框的OnButtonAdd()函数中编辑代码: CStringtext;//定义一个CString对象,表示一个字符串 m_edit.GetWindowText(text);//获取编辑框中的内容 if(!text.IsEmpty())//如果编辑框内容不为空 { m_list.AddString(text);//将字符串添加到列表框中 }利用ClassWizard为列表视控件添加消息处理函数,实现程序要求当双击一个项目时,该项目内容能够在编辑框中显示;消息:ON_LBN_DBLCLK函数:OnDblclkList1() intindex;//保存索引的整形变量 CStringtext;//字符串对象 index=m_list.GetCurSel();//获得当前选中项的索引 m_list.GetText(index,text);//获得指定索引项的文本内容 MessageBox(text,"当前选择项",MB_OK);//用消息框将字符串弹出参考MSDN中的CList类说明,使用RemoveAll()RemoveAt()Find()GetCount()等成员函数并说明其功能。在资源选项卡中插入一个菜单,ID为默认值IDR_MENU1,使用资源编辑器给菜单添加项目。在主对话框的定义中增加一个私有成员:private: CMenum_menu;在主对话框的OnInitDialog()函数实现中增加代码: m_menu.LoadMenu(IDR_MENU1); this->SetMenu(&m_menu);在ClassWizard为菜单增加消息响应函数,处理菜单产生的ON_COMMAND消息。菜单的消息处理函数中使用MessageBox函数弹出对话框测试,在菜单项“退出”中编辑代码:OnOK();运行程序观察运行结果。编辑一个学生信息管理的MFC对话框应用程序.参考程序如下:分析与思考编辑框和列表控件有哪些重要属性和事件?OnInitDialog()函数何时被执行。CString类中有那些常用的成员函数?控件关联控件对象和关联值各

温馨提示

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

最新文档

评论

0/150

提交评论