2021大学慕课答案 程序设计基础与VC++应用(暨南大学) 最新大学MOOC满分章节测试答案
- 【作业】1. C++-CLI编程基础 第一章作业
- 【作业】2. C++-CLI编程进阶 第二章 作业
- 【作业】2. C++-CLI编程进阶 小组协作项目一
- 【作业】3. 类与对象 第三章 作业
- 【作业】4. 继承与多态 第四章 作业
- 5. 窗体和对话框设计 第五章测试
- 【作业】5. 窗体和对话框设计 第五章作业
- 【作业】6. 常用控件设计 第六章作业
- 【作业】8. 容器控件 第八章作业
- 【作业】6. 常用控件设计 小组协作项目二
- 【作业】7. 框条控件 第七章作业
- 【作业】9. 基本界面设计 小组协作项目三
- 【作业】9. 基本界面设计 第九章作业
- 【作业】11. 文件与文件夹操作 第十一章作业
- 【作业】12. 数据库应用编程 第十二章作业
- 【作业】10. 文档界面设计 第十章作业
- 【作业】12. 数据库应用编程 小组协作项目四
本答案对应课程为:点我自动跳转查看
本课程起止时间为:2021-11-01到2022-01-22
本篇答案更新状态:已完结
【作业】1. C++-CLI编程基础 第一章作业
1、 问题:课程成绩计算:参考“圆面积计算”题,试设计一个计算课程总评成绩的程序,通过输入平时成绩和考试成绩,能够输出总评成绩来。总评成绩的计算公式为:课程总评成绩=平时成绩a%+考试成绩b%通常a=30,n=70,或a=40,b=60;“圆面积计算”例题代码:// Ex_Area.cpp: 主项目文件。#include"stdafx.h"using namespace System;int main(array<System::String ^> ^args){ double r, area; // 声明变量 String^ strRadius; // 声明一个字符串变量 Console::Write( "输入圆的半径:"); // 显示提示信息 strRadius = Console::ReadLine(); // 获取从键入的字符串 r = Double::Parse( strRadius ); // 转换成double数值 area = Math::PIrr; // 计算面积 Console::WriteLine(“圆的周长为:{0}圆的面积为:{1}”, ( 2.0 * Math::PI * r ).ToString(), area.ToString() ); // 输出圆的周长和面积 return 0;}
评分规则: 【 上传的代码正确且适当添加了注释。
有输入数据和输出结果截图。
对运行结果的简单分析
】
2、 问题:参考“圆、圆球和圆柱”题,试设计一个可提供计划列表项并可循环选择的程序,通过不同的列表项,输出其所产生的总价值。列表项可参考下列表项,各项所产生的价值可自定义:1—预习课程2—做作业3—锻炼身体4—项目研发0—退出“圆、圆球和圆柱”例题中单次计算过程的参考程序: double r = 2.5, h = 4.0, dResult; int nID; Console::WriteLine( "1–计算圆周长"); Console::WriteLine( "2–计算圆面积"); Console::WriteLine( "3–计算圆球体积"); Console::WriteLine( "4–计算圆柱体积"); Console::Write( "请选择<1..4>:"); nID = Int32::Parse( Console::ReadLine() ); switch ( nID ) { case 1: dResult = Math::PI * r * 2.0; Console::WriteLine( "圆周长为: {0}", dResult.ToString() ); break; case 2: dResult = Math::PI * r * r; Console::WriteLine( "圆面积为: {0}", dResult.ToString() ); break; case 3: dResult = Math::PI * r * r * r * 4.0 / 3.0; Console::WriteLine( "圆球体积为: {0}", dResult.ToString() ); break; case 4: dResult = Math::PI * r * r * h; Console::WriteLine( "圆柱体积为: {0}", dResult.ToString() ); break; }
评分规则: 【 上传的代码正确且适当添加了注释。
有多组输入数据和输出结果截图。
对运行结果的简单分析
】
3、 问题:最大数Andy想用C++编写一个求最大数的通用函数max(a,b,c),既可以是两个,也可以是三个实参a、b、c来调用这个函数,其中(-10000<=a,b,c<= 10000),即在程序中使用默认参数的方法只编写一个函数就能实现二个或三个参数的调用,以适应如下所给的主函数。int max(…){ …}int main(array<System::String ^> ^args){ int m,a,b,c; Console::WriteLine(L"请输入三个整数"); Console::WriteLine(L"第一个整数a"); a= Int32::Parse( Console::ReadLine() ); Console::WriteLine(L"第二个整数b"); b= Int32::Parse( Console::ReadLine() ); Console::WriteLine(L"第三个整数c"); c= Int32::Parse( Console::ReadLine() ); m=max(a,b,c); Console::WriteLine("({1},{2},{3}) 三个数中最大数为{0}",m,a,b,c); m=max(a,b); Console::WriteLine("({0},{1}) 二个数中最大数为{2}",a,b,m); m=max(b,c); Console::WriteLine("({1},{2}) 二个数中最大数为{0}",m,b,c); Console::Read();//暂停 return 0;}
评分规则: 【 上传的代码正确且适当添加了注释。
有多组输入数据和输出结果截图。特别是要有特殊的边界数据测试结果。
对运行结果的简单分析。
】
4、 问题:圆球和圆柱的体积创建并设计应用程序项目volume:当输入圆的半径和圆柱高后,通过调用不同的重载函数volume()可以求出圆球和圆柱的体积。圆球的体积计算: volume= PI * r * r * r * 4.0 / 3.0;圆柱的体积计算: volume= PI * r * r * h;参考程序:double volume(…){ //计算出圆球的体积。 …}double volume(…){ //计算出圆柱的体积。 …}int main(array<System::String ^> ^args){ double r, h, dResult; Console::WriteLine("请输入圆的半径r:"); r =Int32::Parse( Console::ReadLine() ); Console::WriteLine("再输入圆柱的高度h:"); h =Int32::Parse( Console::ReadLine() ); dResult= volume(r); Console::WriteLine("圆球的体积为: {0}",dResult.ToString() ); dResult= volume(r,h); Console::WriteLine("圆柱的体积为: {0}",dResult.ToString() ); Console::Read();//暂停 return 0;}
评分规则: 【 上传的代码正确且适当添加了注释。
有多组输入数据和输出结果截图。
对运行结果的简单分析。
】
【作业】2. C++-CLI编程进阶 第二章 作业
1、 问题:1. 放大器与交换器Andy送给Mary一个特殊的放大器,这个放大器可以将输入给它的两个东东分别进行加法放大和乘法放大。Mary拿到后又加以改进,增加了一个装置,可以将两个东东进行交换后再输出。这个放大器用函数alter(x,y)来表示,这里x和y的值是double型,放大器的功能就是把x的值变为x+y,y的值变为xy之后再返回。再通过调用交换器函数Swap(x,y)交换两个变量的值。现请你使用引用的方法编写出这个放大器的函数alter(x,y)和交换器的函数Swap(x,y),并在主程序里检查这两个函数的功能。样例输入样例输出2.36.53.06.0-2.08.0x=14.95 ,y=8.8x=18 ,y=9x=-16 ,y=6void alter(…) //放大器的函数,参数使用引用的方法{ … //按规则进行放大}void Swap(…) //交换器的函数,参数使用引用的方法{ … //交换两个数}int main(array<System::String ^> ^args){ double x,y; x=…;//读入x数据 y=…;//读入y数据 while(x!=0.0&& y!=0.0) //当两个数同时为0时就退出 { alter(x,y); //使用放大器 Swap(x,y); //使用交换器 … //输出经交换器后的数值 x=…;//读入下一个x数据 y=…;//读入下一个y数据 } system("pause"); return 0;}扩展编程:分别将放大器函数的参数改为使用本地引用%和跟踪句柄^的方式实现,分析输出结果。void alter(double ^a,double ^b) //使用跟踪句柄的方式实现放大器的函数{ double ^z=a; //按规则进行放大 a=a+b; b=z**b;}
评分规则: 【 上传的代码正确且适当添加了注释。
有多组输入数据和输出结果截图。
对运行结果进行了分析。
完成了扩展编程,并上传了代码和运行结果截图
】
2、 问题:2. 新学员排队Andy想用C++编写一个程序来对一组新学员进行排队操作,学员的信息有姓名和身高,操作的功能是分别用不同功能的函数来实现学员数据的输入、按身高数据进行升序排序及输出排序后学员的数据,请你帮他实现这个想法。参考程序为:void inputdata(…){ …}void outdata(…){ …}int main(array<System::String ^> ^args){ array<String^>^ Names… array<int>^ Heighs… inputdata(Heighs, Names); //学员数据的输入 Array::Sort(Heighs, Names); //按第一个参数对数组进行排序 outdata(Heighs, Names); //排序后输出结果 return 0;} 扩展编程:增加程序代码,实现查找并输出身高居中位那个同学的姓名。
评分规则: 【 上传的代码正确且适当添加了注释。
有多组输入数据和输出结果截图。
对运行结果进行了分析。
完成了扩展编程,并上传了代码和运行结果截图
】
3、 问题:3. 分解器Andy想用C++编写一个分解器,可以将读入的一组用符号分隔的num个数值字符串分解成单个的数值(num<10),以便在程序中进行计算和输出。请你帮她在下面所给的主函数基础上完成扩展编程:在输入的数值字符串增加一个可以使用冒号的分隔符,再增加能对输入的这一组数据进行求和,最后输出这个和的值的功能。 样例输入样例输出42.3,6.5 3.0,6.02.3 6.53.06.0参考程序:#include "stdafx.h"#include "stdlib.h" using namespace System;intmain(array<System::String ^> ^args){ String^ delimStr =",";//以空格或逗号分隔 array<Char>^delimiter= delimStr->ToCharArray();//转换为单个字符 String^words;// 一组用符号分隔num个数值 array<String^>^split = nullptr; array <int>^ data =gcnew array<int>(10); int num,i,sum; while (1) { Console::WriteLine(L"请输入数据的个数:"); num=int::Parse(Console::ReadLine()); if (num==0) break; Console::WriteLine(L"请输入{0}个数,中间用逗号或空格分隔:",num); words=Console::ReadLine(); split=words->Split(delimiter,num);//拆分为num个子串 i=0; for each(String ^s in split) { Console::WriteLine("[{0}]",s); data[i++]=Convert::ToInt32(s); } for(i=0;i<num;i++) Console::Write("-{0}-",data[i]); } system("pause"); return 0;}
评分规则: 【 完成了扩展编程,上传的代码正确且适当添加了注释。
有多组输入数据和输出结果截图。
对运行结果进行了分析。
】
【作业】2. C++-CLI编程进阶 小组协作项目一
1、 问题:小组协作项目一:逃课的成本大学环境比初中、高中宽松了许多,学生有了更多的自主权去安排自己的生活,是否去上课也成为一道“选择题”。尽管逃课在学校管理者的眼中是违规行为,但还是有学生调侃:“大学的课只分为两种,选逃课与必逃课。”现在任何一所大学都不会只关注学生的专业知识,学生的组织协调能力、对社会的适应能力被看得同样重要。同时,大学也在教育学生们如何规划自己的人生,而是否按时上课,就是规划的一部分。“有质量的大学生活,更有利于个人成长。”并不是所有学生都有能力做出合理规划,因此,如果你没有比上课更理性的选择,那么,最好别轻易选择逃课。通过小组成员一起来构建一个“读大学成本计算模型”,分析一下:“如果大学的学费是按天缴纳的,按节计算的…",结果会怎样? 问题:设计一个程序,可以计算出一个大学生的每节课的成本,从而分析逃课一次的成本。参考计算公式:每节课的成本=一年所有费用/一年的课时一年所有费用=学费+住宿费+伙食费+交通费+通信费+教材费+打印费+…(据个人情况添加)一年的课时=2个学期ⅹ每个学期的学分数ⅹ每分的学时数1 理论学分对应1学时,1实验学分对应2学时。你的逃课成本应包含:01,金钱成本02,时间成本03,机会成本 分析:根据小组讨论结果,建立符合自己实际情况的计算模型,编制程序,结合运行结果进行扩展分析(希望能看到你对自己的实际情况有较深入的分析):1.平均每节课的成本,分析它的高低及对学习的影响?2.查出你父母所在地的人均收入数据,结合家庭情况,分析你的费用占家庭开支的比例。3.可以测算小组中的多位同学的情况,作横向对比分析。4.引出对待课堂学习的态度,分析大学生的责任和担当。
评分规则: 【 上传的项目设计报告内容全面,模型建立正确、考虑较全面。
有多组输入数据和输出结果截图。
结合小组成员实际情况对运行结果的进行了分析。
说明了小组分工及贡献评价
】
【作业】3. 类与对象 第三章 作业
1、 问题:1.立方体类 下面所给的程序是立方体类的简单定义与实现,代码中定义一个立方体类Cube,有长,高,宽和体积三个数据成员,成员函数有三个:显式默认无参的构造函数,三个参数的构造函数和显示立方体的体积的成员函数。 #include "stdafx.h"#include "stdlib.h"using namespace System;ref class Cube{private: double Length,Heigt, Width, Volume;// 长,高,宽和体积public: Cube( ):Length( 0 ), Width( 0 ), Heigt( 0)// 显式默认构造函数 { Volume = Length * Width * Heigt; Console::WriteLine(L"默认构造函数,体积为:{0}", Volume ); } Cube(double l, double w, double h ): Length( l ), Width( w ), Heigt( h ) { Volume = Length * Width * Heigt; Console::WriteLine(L"有参构造函数,体积为:{0}", Volume ); } Void ShowRes( void ) { Console::WriteLine( "这个立方体的体积为:{0}", Volume ); }};int main(array<System::String ^> ^args){ Cube^ cube1 = gcnew Cube; // A:调用无参构造函数 Cube^ cube2 = gcnew Cube( 4, 5, 6 );// B:调用有参构造函数 cuble2->ShowRes(); system("pause"); return 0;}请你在此基础上,按下面要求修改程序进行调试,将最终的程序上传并对以下各点给出相应的分析和解答。具体操作为:1).在主函数中增加Cube类的对象(不是跟踪句柄,如Cube a,b(2,3,4);),观察运行结果。2).在Cube类中增加一个两个参数的构造函数(长,宽),在函数中可以计算和输出它的面积。在主函数中增加定义两个参数的对象和跟踪句柄,观察运行结果。3). 在Cube类中定义一个复制构造函数,在主函数中依据某个对象定义新的对象和跟踪句柄,并输出它的体积。如:Cube ^cube3=gcnew Cube(cube2);Cube ^cube4=gcnew Cube(*cube2);Cube cube5(cube2);Cube ^cube6=gcnew Cube(b);Cube cube7(b);4).在Cube类中增加相应的析构函数和终结器函数,观察这些函数(构造函数、拷贝构造函数、析构函数和终结器函数)分别是在什么时候被调用的?(在命令提示符下运行)5)在主函数的结尾增加delete cube2;后,运行结果有何变化?6).如果定义立方体的密度为p=0.9,请用字面值字段literal定义这个参数,然后再增加一个计算和输出质量的ShowQua()函数,在主函数中增加调用这个函数输出某个立方体的质量。7).修改类中的数据成员Height为只读字段(initonly double Height;)运行结果有何变化?为什么?
评分规则: 【 完成各小点的操作,上传的最终完整的代码正确且适当添加了注释。
结合结果截图并对各个运行结果进行了分析和解答。
】
2、 问题:标题属性 下面的程序定义一个学生档案类Stud,包括有学号、姓名、成绩数据,要求能输出这些学生数据并计算平均分。给出参考程序如下:#include"stdafx.h"using namespace System; ref class Stud{ int no,deg; System::String^name;public: static int sum; //静态属性 static int num; //静态属性public: Stud(int n,System::String ^na, int d) { no = n;deg = d; name = na; sum += d; num++; } ~Stud() { sum -= deg; num–; } static double avg() { return sum / num; } void disp() { Console::WriteLine(L"{0,-5} {1,-8} {2,3}",no,name,deg); } property double Score { double get() { return deg; } void set(double d) { deg = d; if (d<0)deg= 0; if (d>100)deg = 100; } } // property int height; //身高 // property double weight; //体重};int main(array<System::String ^> ^args){ Stud s1(1, "李四", 89), s2(2, "陈可", 78), s3(3, "张半", 96); Stud ^s4 = gcnew Stud(4, "王五", 90); Console::WriteLine(L"学号 姓名 成绩"); s1.disp(); s2.disp(); s3.disp(); s4->disp(); Console::WriteLine(L"总分 = {0}, 人数 = {1} ,平均分 = {2}", Stud::sum,s1.num,s4->avg()); return 0;}问题:按以下要求对上面的程序进行修改和调试,将最终的程序上传并对以下各点给出相应的分析和解答。1).阅读程序,理解类的定义、添加注释;2).理解类的静态数据成员,静态属性的定义与使用。3).在主函数中增加语句:s2.Score=80; //AConsole::Write(L"学生{0}的分数为{1}: ",s2.Score);//B试分析A、B这两行语句分别调用什么函数。4).在主函数中增加语句:s4->Score=88; //CConsole::Write(L"学生{0}的分数为{1}: ",s4->Score);//Ddelete s4;Console::WriteLine(L"总分 = {0}, 人数 ={1} ,平均分 = {2}", Stud::sum, s1.num, s4->avg()); 试分析这些语句的作用和运行结果,特别是对静态数据成员和静态成员函数的影响。5).在类中增加两个简单属性(平凡标题属性)身高height和体重weight,则他们会使用默认的set和get函数。在主函数中增加语句: s2.height = 170;s2.weight = 60.5;Console::WriteLine(L"身高 ={0},体重 = {1}", s2.height,s2.weight);测试运行,分析运行结果,他们在什么地方调用默认的set和get函数?6).在main()函数中能否可输出学生的姓名(s1->name)和分数(s1->deg),为什么?
评分规则: 【 完成各小点的操作,上传的最终完整的代码正确且适当添加了注释。
结合结果截图并对各个运行结果进行了分析和解答。
】
3、 问题:索引属性 下面的引用类使用了索引属性,课程名称(KCMC)使用的是默认索引属性,而KCCJ使用的是名称索引属性(有名索引属性)。在主函数中通过下标运算设置和获取对应的值。#include"stdafx.h"using namespace System; ref class Stud{ int no; //学号 System::String^name;//姓名 array<String^>^ KCMC;//课程名称 array<int>^ KCCJ;//课程成绩public: Stud(int n, String^na,int cj1,in tcj2,int cj3,int cj4,int cj5) { no = n; name = na; KCMC = gcnew array<String^>{"语文", "数学", "物理", "化学", "英语"}; KCCJ = gcnew array<int>(5); KCCJ[0] = cj1;KCCJ[1] = cj2; KCCJ[2] = cj3; KCCJ[3] = cj4;KCCJ[4] = cj5; } public: property String ^ default [int] { String^get(int index) { 。。。 } } property int CJ[int] { int get(int index) { 。。。 } void set(int index,int deg) { 。。。 } } void disp() { Console::WriteLine(L"{0,-4},{1,-6},{2,5},{3,5},{4,5},{5,5},{6,5}", no, name, CJ[0], CJ[1], CJ[2],CJ[3], CJ[4]); }};int main(array<System::String ^> ^args){ Stud s1(1,"张三",60,70,80,90,87); Stud s2(2, "李四",65,75,85,95,96); Stud ^s3 = gcnew Stud(3, "王五",63,73,83,93,83); //修改属性值 s1.CJ[0] = 76; s3->CJ[0] = 80; Console::WriteLine(L"学号 姓名 {0,-4},{1,-4},{2,-4},{3,-4},{4,-4}", s1[0], s1[1], s2[2], s3[3], s3[4]); s1.disp(); s2.disp(); s3->disp(); return 0;} 问题:按以下要求对上面的程序进行修改和调试,将最终的程序上传并对以下各点给出相应的分析和解答。1).理解程序,比较两种索引属性的异同点。2).在main()函数中只是对KCCJ的属性进行了修改,如果增加对KCMC对象的设置操作:s1[1] = "算术";会出现什么错误,为什么?3).请增加KCMC类的set函数,并在主函数中增加下列代码,并再次测试运行。Console::WriteLine(L" {0,-4},{1,-4},{2,-4},{3,-4},{4,-4}",s1[0],s1[1], s2[2], s3[3], s3[4]);//默认索引Console::WriteLine(L"{0,5},{1,5},{2,5},{3,5},{4,5}", s1.CJ[0], s1.CJ[1], s1.CJ[2], s1.CJ[3],s1.CJ[4]);//名称索引
评分规则: 【 完成各小点的操作,上传的最终完整的代码正确且适当添加了注释。
结合结果截图并对各个运行结果进行了分析和解答。
】
【作业】4. 继承与多态 第四章 作业
1、 问题:1. 派生的圆桌下面所给的程序是用本地C++类实现的,其功能是设计一个圆类circle,圆类circle含有私有数据成员半径double radius;再设计一个桌子类table, 桌子类table含有私有数据成员高度double height;以这两个类作为基类,在此基础上再设计一个派生的圆桌类roundtable,并增加了私有数据成员颜色COLORS color, 其中颜色Color采用枚举来定义enum class COLORS { Green, Red, Blue, Yellow, White};在主程序中定义多个圆桌类的对象,要求通过这个对象调用它所具有的Show()函数,输出每一个圆桌的高度、面积和颜色等数据。实验操作:(1)根据设计要求完善程序,使其运行能得到正确的结果。(2)将上述的类改为数值类来测试,分析所出现的问题。(3)将上述的类改为引用类来测试,再分析所出现的问题。附件"作业41.txt"为本题的参考代码。
评分规则: 【 根据设计要求完善程序,使其运行能得到正确的结果。上传的代码正确且适当添加了注释。
将上述的类改为数值类来测试,分析所出现的问题。
将上述的类改为引用类来测试,再分析所出现的问题。
】
2、 问题:几何面积定义一个基类Shape,包含成员函数ShowArea (用来显示面积)和ShowVolume (用来显示体积)。然后派生出圆Circle和Cylinder类,各有成员函数ShowArea和ShowVolume函数,各自完成不同的功能,在主函数中使用基类的指针分别指向不同的派生类对象来调用这两个函数,会是什么结果,实现的是哪种多态性?附件“作业4_2.txt”为本题程序。根据设计要求,对所给附件的程序进行调试运行。1. 粘贴以上代码,运行程序,分析运行结果和多态的特性。2. 修改程序,将成员函数ShowArea和ShowVolume这两个函数改为虚函数,再分析运行结果和多态的特性。
评分规则: 【 根据要求分析程序运行结果和多态的特性进行分析。
根据修改要求完善程序,将成员函数ShowArea和ShowVolume这两个函数改为虚函数,上传的代码正确且适当添加了注释。对多态的特性进行了分析。
】
3、 问题:英雄无敌参照游戏《魔法门之英雄无敌》的编程。游戏中有很多种怪物,每种怪物都有一个类与之对应,每个怪物就是一个对象。抽象定义一个基类 CCreature(生物、动物、人),并且使怪物CDragon,CWolf等其他类都从CCreature派生而来。游戏中怪物能够互相攻击,攻击敌人Attack和被攻击FightBack时都有相应的动作,动作是通过对象的成员函数实现的。基本思路都是:为每个怪物类编写Attack、FightBack和 Hurted成员函数。Attact函数表现攻击动作,攻击某个怪物,并调用被攻击怪物的Hurted函数,以减少被攻击怪物的生命值,同时也调用被攻击怪物的FightBack成员函数,表现为遭受被攻击怪物反击。Hurted函数减少自身生命值,并表现受伤动作,FightBack成员函数表现反击动作,并调用被反击对象的Hurted成员函数,使被反击对象受伤。参考程序见附件。按以下要求完成游戏类的编程调试。操作1:增加2 个游戏角色CWolf和CGhost的定义,再在主函数中具体使用这些类的代码来测试: CDragon^Dragon=gcnew CDragon(30,400,"drag"); CWolf ^Wolf=gcnew CWolf(20,300,"wolf"); CGhost^Ghost=gcnew CGhost(30,500,"ghost"); Dragon->Attack(Wolf);//(1) Dragon->Attack(Ghost);//(2) 操作2:如果游戏版本升级,增加了新的怪物——雷鸟CThunderBird,就要新增类:CThunderBird。如何编程才能使升级时的代码改动和增加量较小?再在主函数中使用这些类的代码来测试:CThunderBird Bird=gcnew CThunderBird(10,200,"bird");。。。Dragon.Attack( & Bird); //(3)
评分规则: 【 1.根据要求增加2 个游戏角色CWolf和CGhost的定义,在主函数中具体使用这些类的代码,上传的代码正确且适当添加了注释。对程序运行结果进行了分析。
2.根据修改要求增加了新的怪物雷鸟CThunderBird后的程序,上传的代码正确且适当添加了注释。对程序运行结果进行了分析,并分析使用该方法编程的优点。
】
4、 问题:吃水果的接口多态性就像日常生活中吃水果一样,同样是吃水果但是吃的方式各不相同,吃香蕉和吃橘子要剥皮,吃苹果可以不剥皮直接吃。在C++/CLI中,多态性的定义是:同一种操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。在C++/CLI中不允许多继承,但通过接口可以实现多继承的功能。通过接口实现多态性,即首先定义一个接口,然后用不同的类去实现这个接口,完成接口中的方法。本例定义一个IFruit接口并定义一个吃水果的方法Eat,定义一个DFruit接口并定义一个水果食性的方法Diets,定义一个水果基类Fruit,产生水果的派生类Banana类和Apple类,再分别用Banana类和Apple类来实现这个接口,用不同的方式吃水果,最后定义一个吃水果的食客类或游戏客类来调用Eat方法。附件是本例接口类的编程代码。按以下要求完成吃水果接口类的编程调试。操作1:运行程序,观察运行结果,理解程序中使用到的:接口、多重继承、抽象类、抽象函数、虚函数,在程序代码中进行标识。操作2:增加一种温性的水果“荔枝”(litchi),增加多一个食客,提供更多的水果让他们吃,测试执行的结果。
评分规则: 【 增加一种温性的水果“荔枝”(litchi),增加多一个食客,提供更多的水果让他们吃,测试执行的结果。上传程序代码,理解使用到的概念:接口、多重继承、抽象类、抽象函数、虚函数。
】
5、 问题:委托与代理委托的作用与生活中的业务代理功能接近,下面就以仿一个代理公司的方式进行委托的定义与使用编程。其过程类似于:1) 开设一家代理公司;2) 定义各个业务过程;3) 为代理公司添加或取消代理业务;4) 建立办理业务的某个人;5) 某个人找代理公司代理业务。下面所给附件的代码展示了委托的定义与使用编程:定义一个全局函数全局的网络代理业务Nets,定义一个客户Person引用类用于提供委托的函数指针,然后定义一个CorDelegate委托,并在main函数中通过该委托来调用其对应的函数。实验操作内容:增加一个“电费托收”业务办理,并加入委托中,测试执行委托的结果。
评分规则: 【 增加一个“电费托收”业务办理,并加入委托中,上传代码,并对执行委托的运行结果进行分析。
】
6、 问题:按钮事件事件处理主要的步骤有以下几个步骤: (1) 定义事件 (2) 订阅事件 (3) 触发事件 下面以对话框上的常用的按钮来实现事件处理的功能。首先定义一个DelegateButton按钮委托类型,以及定义一个Buttons引用类按钮类型,按钮类有两个私有数据成员:按钮的名字和按钮显示的文本,相应地定义了两个可存取的属性,再定义三个可触发事件的成员函数Click,DBClick,Move,再声明按钮的单击事件EventBtnClick、双击事件EventBtnDBClick和移动事件EventBtnMove,通过成员函数触发三个事件,并定义事件的处理函数,其中移动事件触发调用的是静态函数。然后在main函数中创建Buttons类型的对象button1和button2,分别对应“确定”和“取消”按钮,并通过该对象分别触发这三个事件。实验操作内容:1. 理解程序代码,运行程序,观察和分析运行结果。2.增加一个按钮的右击事件和相应函数,并测试运行情况。
评分规则: 【 增加一个按钮的右击事件和相应函数,上传代码并对运行结果进行分析。
】
5. 窗体和对话框设计 第五章测试
1、 问题:当用户单击窗体上的命令按钮时,会引发命令按钮控件的____事件。
选项:
A:Click
B:Leave
C:Move
D:Enter
答案: 【Click】
2、 问题:在C++中,Application::Exit()和Form->Close()的区别是______。
选项:
A:Application::Exit()只能关闭其中一个窗体。
B:Form->Close()能关闭所有窗体。
C:Application::Exit()退出整个应用程序,若Form不是启动窗体,则Form->Close()只关闭当前窗体。
D:以上都不对。
答案: 【Application::Exit()退出整个应用程序,若Form不是启动窗体,则Form->Close()只关闭当前窗体。】
3、 问题:运行程序时,系统自动执行启动窗体的____事件。
选项:
A:DoubleClick
B:Click
C:Enter
D:Load
答案: 【Load】
4、 问题:若要使命令按钮不可操作,要对_____属性进行设置。
选项:
A:Visible
B:Enabled
C:BackColor
D:Text
答案: 【Enabled 】
【作业】5. 窗体和对话框设计 第五章作业
1、 问题:关于窗体创建一个Windows窗体应用程序,窗体的标题改为“关于窗体”,在窗体中显示一行文字和一幅图片,在窗体中有两个按钮,如图所示。单击“关于我”按钮显示“欢迎使用窗体控件,我是XXX”,单击“确定”按钮退出窗体应用程序。实验内容:(1)首先启动Visual Studio 2013集成开发环境,然后选择“文件”→“新建”→“项目”菜单命令,弹出“新建项目”对话框。(2)在对话框的左边窗格中,选择“Visual C++”→“CLR”节点,并在右侧窗格中选择“Windows窗体应用程序”。然后在“名称”栏中输入项目的名称AboutForm,并指定该项目保存的位置。单击“确定”按钮后将新建AboutForm项目,并自动弹出窗体设计器窗口以设计窗体的外观界面。(3)适当调整窗体的大小。然后在“工具箱”窗口中选择按钮Button控件,并拖动到窗体中用于添加一个按钮控件,同样方法再添加一个按钮Button控件、一个标签Lable控件和一个图片Picture控件。(4)用鼠标点击窗体,在属性窗口中找到Text属性,将窗体的Text的属性修改成“关于窗体”。点击label控件,修改它的TEXT属性为“欢迎进入Windows Form世界”。点击第一个按钮,修改它的TEXT属性为“关于我”,点击另一个按钮,把它的text属性改为“确定”。点击Picture控件,选择Image属性,按右边的按钮,选择一幅图片,这样就将图片添加进来了,再选择SizeMode属性,选择StretchImage。(5)在窗体中选中“button1”按钮,然后单击“属性”窗口中的事件按钮,并在“操作”分组中为Click事件添加处理方法“button1_Click”。(6)为按钮添加Click事件的处理方法后,集成开发环境将自动弹出代码编辑器并定位到该方法的实现位置。在处理方法中添加如下代码:private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { MessageBox::Show(L"你好,我是XXX!");//XXX为你的信息}(7)同样方法,再选中“button2”按钮,(双击“button2”按钮)为其Click事件添加处理方法“button2_Click”,在处理方法中添加如下代码:private: System::Void button2_Click(System::Object^ sender,System::EventArgs^ e) { Application::Exit(); }(8)最后选择“生成”→“生成解决方案”菜单命令用于编译、生成解决方案,并选择“调试”→“开始执行(不调试)”菜单命令运行程序。扩展修改操作:1.修改标签lable1的字体为更大些。2. 点击Picture控件,选择SizeMode属性,选择不同的显示方式。观察其显示效果。3.点击窗体,修改属性MaximizeBox,MinimizeBox为False,Opacity为70%,观察其显示效果。
评分规则: 【 1.上传你所添加的程序代码2.上传运行结果截图(多个)
】
2、 问题:键盘与鼠标事件处理创建一个Windows窗体应用程序,在窗体中处理的键盘与鼠标事件,按下键盘的方向键,可使窗体进行相应移动,按下其他键则显示键的代码;按下鼠标左右键,则显示相应的按键消息和对窗体进行缩放,在窗体中滚动鼠标滚轮,窗体就会上下滚动。实验内容:1.创建一个Windows窗体应用程序Ex52,在打开的窗体设计器中,单击Form1窗体,在属性窗口中,单击事件图标按钮,切换到事件页面中,从中可以看出该窗体可以处理的所有事件。2.选定要处理的KeyDown事件,在该事件的右侧框中健入事件处理的方法名称Form1_KeyDown,然后按【Enter】键。3.在On_KeyDown方法中添加下列代码。private: System::Void Form1_KeyDown(System::Object^ sender,System::Windows::Forms::KeyEventArgs^ e){int nXStep = 0, nYStep = 0;System::Drawing::Point pt =this->Location;String ^str, ^strShift, ^strCtrl,^strAlt;switch (e->KeyData) { case System::Windows::Forms::Keys::Up: //向上 nYStep = -1; break; case System::Windows::Forms::Keys::Down: //向下 nYStep = 1; break; case System::Windows::Forms::Keys::Left: //向左 nXStep = -1; break; case System::Windows::Forms::Keys::Right: // 向右 nXStep = 1; break;default: if (e->Shift) strShift= L"Shift + "; else strShift = L""; if (e->Control) strCtrl= L"Ctrl + "; else strCtrl =L""; if (e->Alt) strAlt =L"Alt + "; else strAlt = L""; str = String::Concat(L"KeyDown: ", strShift, strCtrl, strAlt, e->KeyCode ); this->Text = str; break;}if ((nXStep!=0) || (nYStep!=0)) { pt.X += nXStep; pt.Y += nYStep; this->StartPosition =FormStartPosition::Manual; this->Location = pt;}}编译运行。4.类似的,为窗体添加KeyPress事件处理方法Form1_KeyPress,输入下列代码:private:System::Void Form1_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e){ if (e->KeyChar == (wchar_t)(System::Windows::Forms::Keys::Escape)) this->Close(); else { String^ str =String::Concat( L"KeyPress: ",e->KeyChar.ToString() ); //this->Text = str; //测试使用和注释这条语句所产生的效果 MessageBox::Show(str); }}编译运行。 5.在Form1_MouseDown方法中添加下列代码,该代码用来根据按下的鼠标按钮来决定窗体的缩放:private: System::Void Form1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e){ double scale = 1.0; if (e->Button ==System::Windows::Forms::MouseButtons::Left ) scale = 0.9; if (e->Button ==System::Windows::Forms::MouseButtons::Right) scale = 1.1; System::Drawing::Size size = this->Size; if (scale != 1.0) { int w = (int)(size.Width * scale); int h = (int)(size.Height * scale); this->Size = System::Drawing::Size( w, h ); }}6.编译运行后,在窗体中单击鼠标左键后窗口缩小,而右击鼠标则使窗口放大,这就是上述处理MouseDown事件处理的结果。7.再添加的处理,但对于MouseWheel事件却无法在窗体属性窗口的事件页面直接添加,因而必须手动添加。在Form1窗体的属性窗口中,先在MouseMove事件右侧框中输入处理方法Form1_MouseWheel,然后按【Enter】键。在Form1_MouseWheel方法中添加下列代码:private: System::Void Form1_MouseWheel(System::Object^ sender,System::Windows::Forms::MouseEventArgs^ e){ this->StartPosition = FormStartPosition::Manual; System::Drawing::Point pt = this->Location; pt.Y -= e->Delta / 10; this->Location = pt;}编译运行。8.再在代码行中,找到InitializeComponent函数体将被处理的MouseMove事件,并将名称改成MouseWheel:this->MouseWheel += gcnewSystem::Windows::Forms::MouseEventHandler(this, &Form1::On_MouseWheel);9.编译运行并测试,在窗体中滚动鼠标滚轮,窗口会上下滚动。这就是上述处理MouseWheel事件处理的结果。10.在Form1窗体中添加Load事件处理Form1_Load,通过添加代码来设置窗体Form类的属性。private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { this->Text = L"设置窗体属性"; // 重置标题 this->CenterToScreen(); // 居中 this->Opacity = 0.8; //80%}编译运行并测试。扩展实验:(1)对MouseDown事件处理进行改进,可以分别输出“鼠标左键按下,坐标为{…}”和“鼠标右键按下,坐标为{…}”。再修改MouseDown事件处理方法Form1_MouseDown,修改代码为: private:System::Void Form1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {//增加一个字符串变量句柄 str String ^str="鼠标";…//在判断左右键时,同时修改str的内容// 左键时 str+="左键按下,坐标为";// 右键时 str+="右键按下,坐标为";//再添加鼠标的X,Y坐标,最后用显示字符串内容。 str+=Point(e->X, e->Y); MessageBox::Show(str);… }(2)修改滚动鼠标滚轮事件为窗口水平移动,应如何修改? 沿斜角运动又如何修改?
本文章不含期末不含主观题!!
本文章不含期末不含主观题!!
支付后可长期查看
有疑问请添加客服QQ 2356025045反馈
如遇卡顿看不了请换个浏览器即可打开
请看清楚了再购买哦,电子资源购买后不支持退款哦