《面向对象程序方案(c++)课程方案报告,通过组合和派生构成类人员信息管理系统成绩管理系统》由会员分享,可在线阅读,更多相关《面向对象程序方案(c++)课程方案报告,通过组合和派生构成类人员信息管理系统成绩管理系统(19页珍藏版)》请在金锄头文库上搜索。
1、面向对象的程序设计课程设计报告姓 名: 张聪 学 号: 100511217 班 级: 大类1002班 院 系: 数学与计算机学院 日 期: 2011.12.30 题目1:通过组合和派生构成新的类本设计题目的任务是使用Point类产生Line类。分别通过组合类及派生类两种方法实现,并要求分别给出使用类模板实现的程序。本设计题的目的是使学生掌握在不同的实现方法中,如何设计相应的构造函数和拷贝构造函数,进一步理解程序调用它们及析构函数的执行顺序,掌握组合类和派生类。另外本设计题目要让学生进一步掌握和理解类模板的技术及其实现方法。1. 设计框图:XYLinePoint(X,Y)lineLine2输出l
2、ine输出line22、源程序(1)组合类实现#include#includeusing namespace std;class Pointpublic:Point(int xx=0,int yy=0)X=xx;Y=yy;Point(Point &p);int GetX()return X;int GetY()return Y;private:int X,Y;Point:Point(Point &p)X=p.X;Y=p.Y;coutPoint拷贝构造函数被调用endl;/类的组合class Linepublic:Line(Point xp1,Point xp2);Line(Line &);do
3、uble GetLen()return len;private:Point p1,p2;double len;/组合类的构造函数Line:Line(Point xp1,Point xp2):p1(xp1),p2(xp2)coutLine构造函数被调用endl;double x=double(p1.GetX()-p2.GetX();double y=double(p1.GetY()-p2.GetY();len=sqrt(x*x+y*y);/组合类的拷贝构造函数Line:Line(Line &L):p1(L.p1),p2(L.p2)coutLine拷贝构造函数被调用endl;len=L.len;/
4、主函数void main()Point myp1(1,1),myp2(3,7);Line line(myp1,myp2);Line line2(line);coutThe length of the line is:;coutline.GetLen()endl;coutThe length of the line2 is:;coutline2.GetLen()endl;编译结果;(2)派生类实现#include #include using namespace std;class Point /Point类public:Point(int xx=0, int yy=0)coutPoint类的构
5、造函数被调用endl;X=xx;Y=yy;Point(Point &p);Point()coutPoint类的析构函数被调用endl;int GetX() return X;int GetY() return Y;private:int X,Y;Point:Point(Point &p)/拷贝构造函数的实现X=p.X;Y=p.Y;coutPoint类的拷贝构造函数被调用endl;class Line:public Point /派生类Linepublic:Line (int x1, int y1,int x2,int y2,double z=0.0):p1(x1,y1),p2(x2,y2) /
6、初始化列表coutLine类的构造函数被调用endl;len=z;double x=double(p1.GetX()-p2.GetX();double y=double(p1.GetY()-p2.GetY();len=sqrt(x*x+y*y);Line (Line &L);Line()coutLine类的析构函数被调用endl;double GetLen()return len; /返回得到的长度private:Point p1,p2;/Point类的对象p1,p2double len;Line:Line(Line &L):p1(L.p1),p2(L.p2)coutLine类的拷贝构造函数被
7、调用endl;len=L.len;int main() /主函数Point myp1(1,1),myp2(4,6); /建立Point类的对象Line line1(1,1,4,6);Line line2(line1); /利用拷贝构造函数建立一个新对象coutThe length of the line1 is:;coutline1.GetLen()endl;coutThe length of the line2 is:;coutline2.GetLen()endl;return 0;3、编译结果:4、小结首先由于刚开始没读懂题意,我直接把课题中的模板类实现做成只有一个display()函数,
8、根本没有真正显示出模板类的优点,后来通过和其他同学的讨论研究才发现自己在理解上有些偏差,于是我毫不犹豫地把原来学的程序放弃了,直接重新开始我的新任务,最后终于搞出来时,心情异常激动。题目2:人员信息管理系统本设计题目的任务是设计一个人员信息管理系统,并使用虚函数实现多态性,完成显示不同人员信息的任务。设计employee类,用来存储雇员的编号,级别,月薪等信息,能够对其进行操作和显示。以employee为基类派生出technician类,表示兼职技术人员,以及manager类,表示经理,以及salesman类,表示兼职推销员。利用manage类和salesman类派生出salesmanager
9、类,表示销售经理。注意使用虚基类。进一步使用虚函数和抽象类改进上面的程序。本设计题目的目的是让学生进一步理解和掌握C+中类的继承,虚基类,多态性,虚函数以及抽象类技术及实现方法。employee# name:char20# individualEmpNo:int#grade:int#accumPay:float#employeeNo:int=1000+ employee()+ employee()+ pay():void+ promote(:int): void+ SetName(: char*): void+ GetName():char*+ GetindividualEmpNo();int
10、salesman# CommRate:float# sales:float+ salesman()+ pay():voidmanager# monthliyPay:float+ manager()+pay():voidsalesmanager+ salesmanager()+ pay(): voidtechnician- hourlyRate:float- workHours:int+ technician()+SetworkHours(wh:int:void)1. 设计框图:2、源程序:#include#includeusing namespace std;class employeepro
11、tected:char name20; /姓名int individualEmpNo; /个人编号int grade; /级别float accumPay; /月薪总额static int employeeNo; /本公司职员编号目前最大值public:employee(); /够造函数employee(); / void pay();void promote(int);void SetName(char *);char * GetName();int GetindividualEmpNo();int Getgrade();float GetaccumPay();class technicia
12、n:public employeeprivate:float hourlyRate;int workHours;public:technician();void SetworkHours(int wh);void pay();class salesman:virtual public employeeprotected:float CommRate;float sales;public:salesman();void Setsales(float sl);void pay();class manager:virtual public employeeprotected:float monthlyPay;public:manager();void pay();class salesmanager:public manager,public salesmanpublic:salesmanager();void pay();int employee:emp