面向对象的程序设计课程设计报告-通过组合和派生构成新的类.doc_第1页
面向对象的程序设计课程设计报告-通过组合和派生构成新的类.doc_第2页
面向对象的程序设计课程设计报告-通过组合和派生构成新的类.doc_第3页
面向对象的程序设计课程设计报告-通过组合和派生构成新的类.doc_第4页
面向对象的程序设计课程设计报告-通过组合和派生构成新的类.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、.面向对象的程序设计课程设计报告姓 名: 学 号: 班 级: 院 系: 数学与计算机学院 日 期: 2015.1.3 1. 课程题目 题目1:通过组合和派生构成新的类本设计题目的任务是使用Point类产生Line类。分别通过组合类及派生类两种方法实现,并要求分别给出使用类模板实现的程序。本设计题的目的是使学生掌握在不同的实现方法中,如何设计相应的构造函数和拷贝构造函数,进一步理解程序调用它们及析构函数的执行顺序,掌握组合类和派生类。另外本设计题目要让学生进一步掌握和理解类模板的技术及其实现方法。题目2:成绩管理系统 输入一个班级的学生基本信息(包括学号,姓名,性别,科目),对N门考试的成绩进行

2、管理(例N=5) 要求 l 用户录入每个学生每门课程的分数; l 能够计算每个学生的各门功课总分和平均分,并按总分将成绩排序,显示每个学生的总分和排名; l 计算全班各门功课的平均分,显示每门课程中低于平均分的每一个学生的学号,姓名,性别,科目,成绩等信息; l 显示每门科目中,成绩在90分以上的学生信息。另外还输出每门科目中不及格的学生信息; l 能按姓名或者学号查找,增加,删除和保存各个学生的信息。2. 设计分析题目1:point1,point2 作为point类的对象,两个点确定一条直线。题目2:3. 代码设计题目一:A:组合类#include<iostream>

3、#include<math.h> using namespace std; template <class T> class Point protected: T x; T y; public : Point(); Point(T,T); Point(Point<T> &); Point(); void setX(T); T getX(); void setY(T); T getY(); void displayPoint(); ; template <class T> Point<T>:Point() x=0; y=0; c

4、out<<"Point 类默认构造函数!"<<endl; template <class T> Point<T>:Point(T x,T y) this->x=x; this->y=y; cout<<"Point 类带参构造函数!"<<endl; template <class T> Point<T>:Point(Point<T> &newPoint) this->x=newPoint.x; this->y=newP

5、oint.y; cout<<"Point 类拷贝构造函数!"<<endl; template <class T> Point<T>:Point() cout<<"Point 类析构函数!"<<endl; template <class T> void Point<T>:setX(T x) this->x=x; template <class T> T Point<T>:getX() return this->x; templ

6、ate <class T> void Point<T>:setY(T y) this->y=y; template <class T> T Point<T>:getY() return this->y; template <class T> void Point<T>:displayPoint() cout<<" ("<<x<<","<<y<<")"<<endl; template

7、 <class T> class Line private: Point<T> point1; Point<T> point2; public: Line(); Line(Point<T>,Point<T>); Line(T,T,T,T); Line(Line<T> &); Line(); void setPoint1(Point<T>); Point<T> getPoint1(); void setPoint2(Point<T>); Point<T> getPoin

8、t2(); void displayLine(); T length(); ; template <class T> Line<T>:Line() cout<<"Line类默认构造函数!"<<endl; template <class T> Line<T>:Line(Point<T> p1,Point<T> p2) this->point1=p1; this->point2=p2; cout<<"Line类带参构造函数!"<<

9、;endl; template <class T> Line<T>:Line(T x1,T y1,T x2,T y2):point1(x1,y1),point2(x2,y2) cout<<"Line类构造函数!"<<endl; template <class T> Line<T>:Line(Line<T> &line):point1(line.point1),point2(line.point2) cout<<"Line类拷贝构造函数!"<<

10、;endl; template <class T> Line<T>:Line() cout<<"Line类析构函数!"<<endl; template <class T> void Line<T>:setPoint1(Point<T> point1) this->point1=point1; template <class T> Point<T> Line<T>:getPoint1() return this->point1; template

11、 <class T> void Line<T>:setPoint2(Point<T> point2) this->point2=point2; template <class T> Point<T> Line<T>:getPoint2() return this->point2; template <class T> T Line<T>:length() return sqrt(fabs(point1.getX()-point2.getX()*(point1.getX()-point2.

12、getX()+fabs(point1.getY()-point2.getY()*(point1.getY()-point2.getY(); template <class T> void Line<T>:displayLine() cout<<"!"<<endl; cout<<"Line直线上两点是:"<<endl; point1.displayPoint(); point2.displayPoint(); cout<<"Line两点之间的距离是:"&

13、lt;<length()<<endl; cout<<"!"<<endl; ;void main() Line<double> line(2,3,7,7); line.displayLine();B:派生类:#include<iostream> #include<math.h> using namespace std; template <class T> class Point protected: T x; T y; public : Point(); Point(T,T); Poi

14、nt(Point<T> &); Point(); void setX(T); T getX(); void setY(T); T getY(); void displayPoint(); ; template <class T> Point<T>:Point() x=0; y=0; cout<<"Point 类默认构造函数!"<<endl; template <class T> Point<T>:Point(T x,T y) this->x=x; this->y=y; c

15、out<<"Point 类带参构造函数!"<<endl; template <class T> Point<T>:Point(Point<T> &newPoint) this->x=newPoint.x; this->y=newPoint.y; cout<<"Point 类拷贝构造函数!"<<endl; template <class T> Point<T>:Point() cout<<"Point 类析构

16、函数!"<<endl; template <class T> void Point<T>:setX(T x) this->x=x; template <class T> T Point<T>:getX() return this->x; template <class T> void Point<T>:setY(T y) this->y=y; template <class T> T Point<T>:getY() return this->y; tem

17、plate <class T> void Point<T>:displayPoint() cout<<" ("<<x<<","<<y<<")"<<endl; template <class T> class Line:public Point<T> private: T x1; T y1; public : Line(); Line(T,T); Line(T,T,T,T); Line(Line<T> &a

18、mp;); Line(); void setX1(T); T getX1(); void setY1(T); T getY1(); void displayLine(); T length(); ; template <class T> Line<T>:Line() cout<<"Line 类的默认构造函数!"<<endl; template <class T> Line<T>:Line(T x1,T y1) this->x1=x1; this->y1=y1; cout<<&qu

19、ot;Line类的带参构造函数!"<<endl; template <class T> Line<T>:Line(T x1,T y1,T x ,T y):Point<T>(x,y) this->x1=x1; this->y1=y1; cout<<"Line类的带参构造函数!"<<endl; template <class T> Line<T>:Line(Line<T> &newLine):Point<T>(newLine) t

20、his->x1=newLine.x1; this->y1=newLine.y1; cout<<"Line类的拷贝构造函数!"<<endl; template <class T> Line<T>:Line() cout<<"Line 类的析构函数!"<<endl; template <class T> void Line<T>:setX1(T x1) this->x1=x1; template <class T> T Line<

21、;T>:getX1() return this->x1; template <class T> void Line<T>:setY1(T y1) this->y1=y1; template <class T> T Line<T>:getY1() return this->y1; template <class T> T Line<T>:length() return sqrt(fabs(x-x1)*(x-x1)+fabs(y-y1)*(y-y1); template <class T>

22、void Line<T>:displayLine() cout<<"!"<<endl; cout<<"Line直线上两点是:"<<endl; cout<<" ("<<x1<<","<<y1<<")"<<endl; displayPoint(); cout<<"Line两点之间的距离是:"<<length()<<

23、endl; cout<<"!"<<endl; void main() Line<double> line(2,3,7,7); line.displayLine();题目2:#include<string>#include<iostream>#include<fstream>using namespace std;class studentpublic:char name20;double maths,Chinese,English,physics,chemistry,average,sum;studen

24、t()cout<<"student的默认构造函数被调用!"<<endl;student(char n20,double m,double C,double e,double p,double c)strcpy(name,n);maths=m;Chinese=C;English=e;physics=p;chemistry=c;cout<<"student带参数的构造函数被调用!"<<endl;double getsum()sum=maths+Chinese+English+physics+chemistry;

25、return sum;double getaverage()average=getsum()/5;return average;friend main();main(void)cout<<"请选择您需要的操作:"<<endl; cout<<"操作数据:"<<endl; cout<<"(0)数据录入"<<endl;cout<<"(1)增加人员"<<endl; cout<<"(2)删除人员"&

26、lt;<endl; cout<<"(3)修改数据"<<endl; cout<<"查询数据:"<<endl; cout<<"(4)按总成绩查询"<<endl;cout<<"(5)按姓名查询"<<endl; cout<<"(6)输出所有学生的数据"<<endl; cout<<"成绩排名:"<<endl; cout<<&q

27、uot;(7)按总分查询排名"<<endl; cout<<"(8)按数学查询排名"<<endl;cout<<"(9)按语文查询排名"<<endl; cout<<"(10)按英语查询排名"<<endl; cout<<"(11)按物理查询排名"<<endl;cout<<"(12)按化学查询排名"<<endl;cout<<"选择相关操作请输

28、入相对的括号里的阿拉伯数字:" char p;char w; student *s50; ofstream *file50; int i=0; int j=0; bool flag2=0; do cin>>p; if(p>='0'&&p<='12') flag2=1; else cout<<"指令错误!请重新输入:"<<endl; while(flag2=0);doswitch(p)case '0':char c; char name20;double

29、Chinese,maths,English,physics,chemistry; do cout<<"请输入姓名:" cin>>name; cout<<"请输入语文成绩:" cin>>Chinese; cout<<"请输入数学成绩:" cin>>maths; cout<<"请输入英语成绩:" cin>>English; cout<<"请输入物理成绩:"cin>>physics;

30、cout<<"请输入化学成绩:"cin>>chemistry;filej=new ofstream("d:document",ios:ate); *filej<<"姓名:"<<name<<"数学成绩"<<maths<<"语文成绩"<<Chinese<<"英语成绩"<<English<<"物理成绩"<<physics

31、<<"化学成绩"<<chemistry<<endl;j+;si=new student(name, maths, Chinese, English,physics,chemistry); i+; cout<<"数据录入成功,想继续录入吗(y/n)"<<endl; cin>>c; flag2=0;do if(c!='y'&&c!='n') cout<<"指令错误!请重新输入!"<<endl; c

32、in>>c; else flag2=1; while(flag2=0); while(c='y'); break; case '1': char name20;double Chinese,maths,English,physics,chemistry; char c; do cout<<"请输入您要增加的学生的姓名:" cin>>name; cout<<"请输入语文成绩:" cin>>Chinese; cout<<"请输入数学成绩:&quo

33、t; cin>>maths; cout<<"请输入英语成绩:" cin>>English; cout<<"请输入物理成绩:"cin>>physics;cout<<"请输入化学成绩:"cin>>chemistry;filej=new ofstream("d:document",ios:ate); *filej<<"姓名:"<<name<<"语文成绩"<&

34、lt;Chinese<<"数学成绩"<<maths<<"外语成绩"<<English<<"物理成绩"<<physics<<"化学成绩"<<chemistry<<endl; j+; si=new student(name, maths, Chinese, English,physics,chemistry); i+;cout<<"数据录入成功,想继续录入吗?(y/n)"<&

35、lt;endl; cin>>c; if(c!='y'&&c!='n') cout<<"指令错误!请重新输入!"<<endl; cin>>c; while(c='y'); break; case '2': char name20;bool flag3=0;char c; do cout<<"请输入您要删除的学生姓名:"<<endl; cin>>name; for(int h=0;h<i;h

36、+) if(strcmp(name,sh->name)=0) flag3=1;i-; do sh=sh+1; h+; while(h<=i); if(flag3=0) cout<<"您要求删除的对象本来就不存在!请检查输入的正确性!" cout<<"要继续删除吗?(y/n)"<<endl; cin>>c; if(c!='y'&&c!='n') cout<<"指令错误!请重新输入!"<<endl; cin&

37、gt;>c; while(c='y');break; case '3': char name20;double mat,Chin,Eng,phy,che;flag2=0; char c;do cout<<"请输入您要修改的学生的姓名:" cin>>name;for(int h=0;h<i;h+) if(strcmp(name,sh->name)=0) flag2=1; cout<<"请输入新的语文成绩:" cin>>Chin; cout<<&qu

38、ot;请输入新的数学成绩:" cin>>mat; cout<<"请输入新的英语成绩:" cin>>Eng; cout<<"请输入新的物理成绩:" cin>>phy; cout<<"请输入新的化学成绩:" cin>>che;sh->maths=mat; sh->Chinese=Chin;sh->English=Eng; sh->physics=phy;sh->chemistry=phy;cout<<&q

39、uot;数据修改成功!" if(flag2=0) cout<<"您要修改的学生本来就不存在!请检查重新输入!"<<endl; cout<<"想继续修改吗?(y/n)"<<endl; cin>>c; if(c!='y'&&c!='n') cout<<"指令错误!请重新输入!"<<endl; cin>>c; while(c='y'); break; case '4

40、': double t;char c; do int flag1=0; cout<<"请输入你要查询学生的总成绩:"<<endl; cin>>t;for(int q=0;q<i;q+) if(sq->getsum()=t) flag1=1; cout<”要查询的学生是:"<<(*sq).name<<endl; if(flag1=0) cout<<"对不起,您要查询的学生不存在!"<<endl; cout<<"您想继

41、续查询吗?(y/n)"<<endl; cin>>c;if(c!='y'&&c!='n') cout<<"指令错误!请重新输入!"<<endl; cin>>c; while(c='y'); break; case '5': char n20;int j=0;char c; do int flag=0; cout<<"请输入你要查询的学生姓名:" cin>>n; for(int j=0;

42、j<i;j+) if(strcmp(n,(*sj).name)=0) flag=1; cout<<"您要查询的学生是:"<<(*sj).name<<endl; cout<<(*sj).name<<" "<<"语文:"<<(*sj).Chinese<<" "<<"数学:"<<(*sj).maths<<" "<<"英语:&

43、quot;<<(*sj).English<<" "<<"物理:"<<(*sj).physics<<" "<<"化学:"<<(*sj).chemistry<<endl<<"的总成绩成绩是"<<(*sj).getsum()<<" "<<"平均成绩是:"<<(*sj).getaverage()<<

44、endl; if(flag=0) cout<<"对不起!您要查询的学生不存在!"<<endl; cout<<"您想继续查询吗?(y/n)"<<endl; cin>>c; if(c!='y'&&c!='n') cout<<"指令错误!请重新输入!"<<endl; cin>>c; while(c='y'); break; case '6': cout<<

45、"本系统所有学生数据如下:"<<endl; if(i=0) cout<<"管理系统中没有录入数据或者数据已经被删除!"<<endl;for(int k=0;k<i;k+) cout<<k+1<<"姓名:"<<sk->name<<" "<<"语文:"<<sk->Chinese<<" "<<"数学:"<&l

46、t;sk->maths<<" "<<"英语:"<<sk->English<<" "<<"物理:"<<sk->physics<<" "<<"化学:"<<sk->chemistry<<" "<<"总分:"<<(*sk).getsum()<<" "

47、;<<"平均分:"<<(*sk).getaverage()<<endl; break; case '7': int t;student b; cout<<"本系统所以学生排名如下:"<<endl; for(int x=0;x<i-1;x+) t=x; for(int y=x+1;y<i;y+) if(st->getsum()<(sy->getsum() t=y; if(t!=x) b=*sx; *sx=*st; *st=b; if(i=0) cout

48、<<"管理系统中没有录入数据或者数据已经被删除!"for(int k=0;k<i;k+) cout<<k+1<<" "<<"姓名:"<<" "<<sk->name<<"语文:"<<" "<<sk->Chinese<<"数学:"<<" "<<sk->maths <&l

49、t;"英语:"<<" "<<sk->English<<"物理:"<<" "<<sk->physics<<"化学:"<<" "<<sk->chemistry<<"总分:"<<" "<<(*sk).getsum() <<"平均分:"<<"

50、"<<(*sk).getaverage()<<endl; break; case '8': int t;student b; cout<<"本系统所以学生数学排名如下:"<<endl; for(int x=0;x<i-1;x+) t=x; for(int y=x+1;y<i;y+)if(st->maths)<(sy->maths) t=y; if(t!=x) b=*st; *st=*sx; *sx=b; if(i=0) cout<<"管理系统中没有录

51、入数据或者数据已经被删除!"for(int k=0;k<i;k+) cout<<k+1<<" "<<"姓名:"<<" "<<sk->name<<"语文:"<<" "<<sk->Chinese<<"数学:"<<" "<<sk->maths <<"英语:"<&

52、lt;" "<<sk->English<<"物理:"<<" "<<sk->physics<<"化学:"<<" "<<sk->chemistry<<"总分:"<<" "<<(*sk).getsum() <<"平均分:"<<" "<<(*sk).ge

53、taverage()<<endl;break;case '9': int t;student b; cout<<"本系统所以学生语文排名如下:"<<endl; for(int x=0;x<i-1;x+) t=x; for(int y=x+1;y<i;y+)if(st->Chinese)<(sy->Chinese) t=y; if(t!=x) b=*st; *st=*sx; *sx=b; if(i=0) cout<<"管理系统中没有录入数据或者数据已经被删除!"f

54、or(int k=0;k<i;k+) cout<<k+1<<" "<<"姓名:"<<" "<<sk->name<<"语文:"<<" "<<sk->Chinese<<"数学:"<<" "<<sk->maths <<"英语:"<<" "<

55、<sk->English<<"物理:"<<" "<<sk->physics<<"化学:"<<" "<<sk->chemistry<<"总分:"<<" "<<(*sk).getsum() <<"平均分:"<<" "<<(*sk).getaverage()<<en

56、dl;break;case '10': int t;student b; cout<<"本系统所以学生英语排名如下:"<<endl; for(int x=0;x<i-1;x+) t=x; for(int y=x+1;y<i;y+)if(st->English)<(sy->English) t=y; if(t!=x) b=*st; *st=*sx; *sx=b; if(i=0) cout<<"管理系统中没有录入数据或者数据已经被删除!"for(int k=0;k<i;k

57、+) cout<<k+1<<" "<<"姓名:"<<" "<<sk->name<<"语文:"<<" "<<sk->Chinese<<"数学:"<<" "<<sk->maths <<"英语:"<<" "<<sk->English&

58、lt;<"物理:"<<" "<<sk->physics<<"化学:"<<" "<<sk->chemistry<<"总分:"<<" "<<(*sk).getsum() <<"平均分:"<<" "<<(*sk).getaverage()<<endl;break;case '

59、11': int t;student b; cout<<"本系统所以学生物理排名如下:"<<endl; for(int x=0;x<i-1;x+) t=x; for(int y=x+1;y<i;y+)if(st->physics)<(sy->physics) t=y; if(t!=x) b=*st; *st=*sx; *sx=b; if(i=0) cout<<"管理系统中没有录入数据或者数据已经被删除!"for(int k=0;k<i;k+) cout<<k+1<<" "<<"姓名:"<<" "<<sk->name<<"语文:"<<" "<<sk->Chinese<<"数学:

温馨提示

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

评论

0/150

提交评论