面向对象的程序设计课程设计报告姓名:学号:班级:院系:日期:一、设计目的课程设计是课程教学中的一项重要内容,是完成教学计划达到教学目标的重要环节,是教学计划中综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。本次课程设计通过设计和实现几个应用程序,达到以下目标:1.使学生能够比较熟练地掌握C++语言的基本语法规则;2.熟练掌握基本的面向对象的程序设计方法,如类的实现、创建类的实例—对象、实现类的继承等;3.掌握各种面向对象的程序设计技术,如继承和派生,虚继承、虚函数、抽象类、多态的实现、运算符重载、使用C++标准库等。4.掌握在VC++平台上进行程序设计和调试的方法。题目1:通过组合和派生构成新的类本设计题目的任务是使用Point类产生Line类。分别通过组合类及派生类两种方法实现,并要求分别给出使用类模板实现的程序。本设计题的目的是使学生掌握在不同的实现方法中,如何设计相应的构造函数和拷贝构造函数,进一步理解程序调用它们及析构函数的执行顺序,掌握组合类和派生类。另外本设计题目要让学生进一步掌握和理解类模板的技术及其实现方法。题目3:成绩管理系统输入一个班级的学生基本信息(包括学号,姓名,性别,科目),对N门考试的成绩进行管理(例N=5)要求:用户录入每个学生每门课程的分数;能够计算每个学生的各门功课总分和平均分,并按总分将成绩排序,显示每个学生的总分和排名;计算全班各门功课的平均分,显示每门课程中低于平均分的每一个学生的学号,姓名,性别,科目,成绩等信息;显示每门科目中,成绩在90分以上的学生信息。另外还输出每门科目中不及格的学生信息;能按姓名或者学号查找,增加,删除和保存各个学生的信息。题目1:通过组合和派生构成新的类组合类:#includeiostreamusingnamespacestd;classPoint{public:Point(){coutPoint的默认构造函数被调用!endl;}Point(intx,inty){coutPoint的构造函数被调用!endl;}Point(Point&p){coutPoint的拷贝构造函数被调用!endl;}~Point(){coutPoint的析构函数被调用!endl;}voidset(intx1,inty1){x=x1;y=y1;}intgetx(){returnx;}intgety(){returny;}voiddisplay(){cout(x,y)endl;}private:intx,y;};classLine{public:Line(){coutLine的默认构造函数被调用!endl;}Line(Point&a,Point&b){BeginPoint=a;EndPoint=b;coutLine的构造函数被调用!endl;}Line(Line&l){coutLine的拷贝构造函数被调用!endl;}~Line(){coutLine的析构函数被调用!endl;}voidsetBeginPoint(Point&p){x1=p.getx();y1=p.gety();}voidsetEndPoint(Point&p1){x2=p1.getx();y2=p1.gety();}PointgetBeginPoint(){returnBeginPoint;}PointgetEndPoint(){returnEndPoint;}voiddisplay(){cout直线的起点坐标为:;BeginPoint.display();cout直线的终点坐标为:;EndPoint.display();coutendl;}private:intx1,x2,y1,y2;PointBeginPoint;PointEndPoint;};voidmain(){Pointp,p1;p.set(1,2);p.display();p1.set(3,4);p1.display();Lineline(p,p1);line.setBeginPoint(p);line.setEndPoint(p1);line.display();}用组合类实现时运行结果:本实验小结:开始写完之后运行结果输出的数据是随机数,不是自己想要得到的结果,经检查发现,在了Line类的构造函数中设置的参数不起作用,随后修改了它的参数,从而使它其中的函数set()能够运用Point类中的对象,然后,修改main()函数中调用的对象,从而得到了正确的结果。模板组合类:#includeiostreamusingnamespacestd;templateclassTclassPoint{public:Point(){coutPoint的默认构造函数被调用!endl;}Point(Tm,Tn){x=m;y=n;coutPoint的构造函数被调用!endl;}Point(Point&p){coutPoint的拷贝构造函数被调用!endl;}~Point(){coutPoint的析构函数被调用!endl;}voiddisplay(){cout(x,y)endl;}private:Tx;Ty;};templateclassTclassLine{public:Line(){coutLine的默认构造函数被调用!endl;}Line(PointT&m,PointT&n){a=m;b=n;coutLine的构造函数被调用!endl;}Line(Line&l){coutLine的拷贝构造函数被调用!endl;}~Line(){coutLine的析构函数被调用!endl;}voiddisplay(){cout直线的起点坐标为:;a.display();cout直线的终点坐标为:;b.display();coutendl;}private:PointTa;PointTb;};voidmain(){Pointinta1(1,2);Pointintb1(3,4);Lineintc1(a1,b1);c1.display();Pointdoublea2(1.1,2.1);Pointdoubleb2(3.1,4.1);Linedoublec2(a2,b2);c2.display();}用组合类模板实现时运行结果:本实验小结:由于老师给了一个模板,从而帮助了我在这个试验中的编写,在第一个程序修改正确之后,再写组合类模板时没有多大困难。派生类:#includeiostreamusingnamespacestd;classPoint{public:Point(){x=0;y=0;coutPoint的默认构造函数被调用!endl;}Point(intx1,inty1,intx2,inty2){x=x1;y=y1;a=x2;b=y2;coutPoint的构造函数被调用!endl;}Point(Point&p){x=p.x;y=p.y;coutPoint的拷贝构造函数被调用!endl;}~Point(){coutPoint的析构函数被调用!endl;}voidset1(intx1,inty1){x=x1;y=y1;}voidset2(intx2,inty2){a=x2;b=y2;}intgetx(){returnx;returna;}intgety(){returny;returnb;}voidBegindisplay(){cout(x,y)endl;}voidEnddisplay(){cout(a,b)endl;}private:intx,y,a,b;};classLine:publicPoint{public:Line(){coutLine的默认构造函数被调用!endl;}Line(intx1,inty1,intx2,inty2):Point(x1,y1,x2,y2){coutLine的构造函数被调用!endl;}Line(Line&l){coutLine的拷贝构造函数被调用!endl;}~Line(){coutLine的析构函数被调用!endl;}voiddisplay1(){cout直线的起点坐标为:;Begindisplay();cout直线的终点坐标为:;Enddisplay();coutendl;}};voidmain(){Lineline1(1,2,3,4);line1.display1();Lineline2=line1;}用派生类实现时运行结果:本实验小结:本实验是运用派生类实现功能,写的时候遇到了同样的问题,就是运行过后,输出的是随机数,经过查资料和向同学请教,知道,如果我想在Point类中实现全部功能,在Line类中调用,必须在Point类中定义四个参数,在Line类中调用这四个参数,从而得到预期的结果模板派生类:#includeiostreamusingnamespacestd;templateclassTclassPoint{public:Point(){coutPoint的默认构造函数被调用!endl;}Point(Tx1,Ty1,Tx2,Ty2){x=x1;y=y1;a=x2;b=y2;coutPoint的构造函数被调用!endl;}Point(Point&p){x=p.x;y=p.y;coutPoint的拷贝构造函数被调用!endl;}~Point(){coutPoint的析构函数被调用!endl;}voidset1(Tx1,Ty1){x=x1;y=y1;}voidset2(Tx2,Ty2){a=x2;b=y2;}Tgetx(){returnx;returna;}Tgety(){returny;returnb;}voidBegindisplay(){cout(x,y)endl;}voidEnddisplay(){cout(a,b)endl;}private:Tx;Ty;Ta;Tb;};templateclassTclassLine:publicPointT{public:Line(){coutLine的默认构造函数被调用!endl;}Line(Tx1,Ty1,Tx2,Ty2):PointT(x1,y1,x2,y2){coutLine的构造函数被调用!endl;}Line(Line&l){coutLine的拷贝构造函数被调用!endl;}~Line(){coutLine的析构函数被调用!endl;}voiddisplay1(){cout直线的起点坐标为:;Begindisplay();cout直线的终点坐标为:;Enddisplay();coutendl;}};voidmain(){Lineintline1(1,2,3,4);line1.display1();Lineintline3=line1;Linedoubleline2(1.1,2.1,3.1,4.1);line2.display1();}用派生类模板实现时运行结果:本实验小结:在本实验编写时,还想参照所给模板,结果运行后在继承时,把所继承的类去掉和添加对实验结果没有影响,从而知道,组合类模板和继承类模板是不同的,然后根据继承类实现时的程序写出用继承类模板实现功能,从而得到实验结果。实验一总结:在第一个实验中四个小程序的编写中,出现很多错误和不明白的地方,经检查和调试,改了一些不合理的地方和由于写的时候的不细心造成的错误,然后不会的地方查资料和请教别人,懂了很多,包括一些以