您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 2014220902010-赵天豪-实验5
电子科技大学信息与软件工程学院标准实验报告(实验)课程名称:面向对象程序设计C++电子科技大学教务处制表学生姓名:赵天豪学号:2014220902010指导教师:李巧勤实验地点:信软学院实验室实验时间:15/12/21一、实验室名称:信软学院软件实验室二、实验项目名称:基于MFC的C++桌面应用开发三、实验学时:16学时四、实验原理:本次实验基于MFC开发C++桌面应用程序,实现可视化操作。五、实验目的:充分运用所学的C++的数据封装、继承与派生、多态等全部核心内容,补充完整一个基于MFC的应用,使学生能够基本掌握OOA、OOD方法;熟练掌握OOP方法;初步了解基于Windows平台的桌面图形化应用的开发过程,掌握编程工具的使用;初步掌握建模工具的使用;基本掌握阅读、调试程序的能力。六、实验内容:一位小学教师Ken希望完成这样的任务:针对于小学生正在学习四边形(quadrangle)的特性,编写一个小软件,能够随机在屏幕上显示矩形(rectangle)、正方形(square)、平行四边形(parallelogram)、梯形(trapezoid)和菱形(diamond)五种形体之一,同时显示该形体的特性和关键数据(随机产生),学生复习形体的特性,然后根据给出的关键数据计算形体的面积,软件判断其结果的正确性。在学习过程中,软件记录产生的每一个形体,在学生选择不再继续后,将其学习的过程重放一遍,用以重温,加深印象。根据上述描述,需要完成:1)必做内容根据Ken老师的要求,需要至少编写六个类:Rect//注意:类名不要使用RectangleSquareParallelogramTrapezoidDiamondList(注:这六个类必须以上述名字命名)其中,前五个类用于描述五种形体。五种形体不用顶点坐标的表示形式,而只是简单地用它们的特征值表示。例如:矩形、平行四边形用长和高表示;正方形用边长表示;梯形用两条平行边长和高表示;菱形用两条对象线长表示。要求为这五种形体编写相应的类,每个类的设计要求如下:(1)Quadrangle类必须成为抽象类,是其它形体类的祖先。它拥有如下成员:成员类型是否纯虚name数据/area函数是draw函数是what函数可选(2)其它形体类之间的继承关系请自行拟定。其中,Parallelogram类必须拥有如下虚成员:Width();//返回宽Height();//返回高(3)每个形体类必须完成如下操作:[1]设置标志名属性name。五种形体的标志名必须是Parallelogram、Rectangle、Diamond、Trapezoid和Square之一(第一个字母大写,其余小写);[2]重载area()成员;[3]重载draw()成员;[4]重载Width()成员以返回宽;[5]重载Height()成员以返回高;[6]提供Width2()成员以返回第二条平行边长(仅对梯形)(4)List类必须拥有如下成员函数:size();//返回列表中的节点数push_back();//将数据添加到列表末尾operator[];//返回指定下标的数据traverse();//遍历,需要一个访问函数作为参数pop_back()//用来删除列表的最后一个节点,其原型为:voidpop_back();(5)重温过程实际上就是遍历List类对象的过程。2)选作内容List类实际上是一种称为“容器”的类。除了容纳形体指针,其实它还可以容纳任何类型的对象。在本选作内容中,(1)请将List类改为模板类,使其能容纳任何类型的对象;(2)请为List类编写迭代器。要求如下:该迭代器的类名为Iterator;该迭代器必须重载如下运算符:++:迭代器后移!=:两个迭代器比较*:返回迭代器指向节点的数据域中的值,即quad指针。=:两个迭代器的复制+。该运算符函数的原型为:Iteratoroperator+(inti);其功能为:假设当前迭代器(的内部指针)指向了第k个节点(从0开始计数),那么+运算符返回一个迭代器,该迭代器是在当前迭代器的基础上向后移动i个位置得到的,即该迭代器指向了第k+i个节点。例如:Iteratoritr=list.begin()+5;那么迭代器itr就指向了从列表的头节点往后数第5个结点。为Iterator类编写begin()和end()成员。七、实验器材(设备、元器件):PC计算机、Windows系列操作系统、VisualStudio2013软件八、实验步骤:1)完成类的设计;2)根据设计结果编写各种形体类的代码;完成学习模式的编程与测试3)完成List类的编码与测试;4)完善程序流程,实现复习模式;5)对前面完成的所有文件进行整合,生成一个解决方案,并进行调试;6)程序优化。九、实验程序及结果分析:Canvas.h:#pragmaonce#includequad.hclassQuadrangle;//Canvas视图classCanvas:publicCScrollView{DECLARE_DYNCREATE(Canvas)//protected:public:Canvas();//动态创建所使用的受保护的构造函数virtual~Canvas();public:#ifdef_DEBUGvirtualvoidAssertValid()const;#ifndef_WIN32_WCEvirtualvoidDump(CDumpContext&dc)const;#endif#endifprotected:virtualvoidOnDraw(CDC*pDC);//重写以绘制该视图virtualvoidOnInitialUpdate();//构造后的第一次DECLARE_MESSAGE_MAP()public:staticCanvas*pCanvas;staticvoiddrawQuad(constQuadrangle*quad);staticboolisLearning;booltoggleMode(void);doublearea;private:enum_QUAD_{para=0,rect,sqr,diam,trap};typedefpairstring,_QUAD_KV;mapstring,_QUAD_quadMap;};Diam:#pragmaonce#includestring#includeiostream#includeCanvas.h#includepara.husingnamespacestd;classDiamond:publicPara{public:Diamond(intd1=4,intd2=8,stringnm=Diamond):Para(d1,d2,nm){};~Diamond(){};voiddraw()const{Para::draw();};doublearea()const{return(double)width*height/2;};stringwhat()const{returnname;};int&Width1(){returnd1;};int&Width2(){returnd2;};friendostream&operator(ostream&os,constDiamond&c2);Diamond&operator=(constDiamond&di){name=di.name;d1=di.d2;d2=di.d2;return*this;}protected:intd1,d2;};Experiment://experiment.h:PROJECT_NAME应用程序的主头文件//#pragmaonce#ifndef__AFXWIN_H__#error在包含此文件之前包含“stdafx.h”以生成PCH文件#endif#includeresource.h//主符号//CexperimentApp://有关此类的实现,请参阅experiment.cpp//classCexperimentApp:publicCWinApp{public:CexperimentApp();//重写public:virtualBOOLInitInstance();//实现DECLARE_MESSAGE_MAP()};externCexperimentApptheApp;Experimentdlg.h://experimentDlg.h:头文件//#pragmaonce#includecanvas.h//CexperimentDlg对话框classCexperimentDlg:publicCDialogEx{//构造public:CexperimentDlg(CWnd*pParent=NULL);//标准构造函数//对话框数据enum{IDD=IDD_EXPERIMENT_DIALOG};protected:virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持//实现protected:HICONm_hIcon;//生成的消息映射函数virtualBOOLOnInitDialog();afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();DECLARE_MESSAGE_MAP()public:Canvas*pCanvas;afx_msgvoidOnBnClickedOk();doubleanswer;CStringresult;afx_msgvoidOnClickedButtonNext();afx_msgvoidOnClickedButtonStop();afx_msgvoidOnClickedButtonSubmit();public:QUADPTRcreateAquad(void);private:boollastDone;virtualBOOLOnCommand(WPARAMwParam,LPARAMlParam);};List.h:#pragmaonce#includequad.h#includeiostream#includestring//typedefvoid(*ACCESSFUN)(QUADPTR);//定义遍历时节点处理函数类型classList{protected:structNode{QUADPTRdata;Node*next;Node(QUADPTRd):data(d){}}*head,*tail;//链表的头尾指针//typedefNode*_range;size_tlen;//链表中节点的数目,即链表的长度public:List():head(NULL),tail(NULL){len=0;}//平凡构造函数List(Listconst&l){head=tail=NULL;Node*p=l.head;while(p!=NULL){this-push_back(p-data);p=p-next;}len=0;}//复制构造函数~List(){Node*p=head,*q;while(p!=NULL){q=p;p=p-next;deleteq;}};Node*Tail(){returntail;}//size_tsize(){returnlen;};//获取链表的长度size_tList::size(){Node*p=head;size_ti=0;while(p!=NULL){p=p-next;++i;}returni;}voidpush_back(constQUADPTRquad)//尾部添加{Node*p=newNode(quad);p-next=NULL;if(tail==NULL)head=tail=p;else{tail-next=p;tail=p;}len++;}intpop_
本文标题:2014220902010-赵天豪-实验5
链接地址:https://www.777doc.com/doc-1836488 .html