1、目录一任务一 .11.1 任务介绍及小组成员任务分配 11.2 设计思想及主要流程图 21.3 主要程序清单 21.4 运行结果及分析 32.1 任务介绍及小组成员任务分配 32.2 设计思想及主要流程图 42.3 主要程序清单 62.4 运行结果及分析 63.1 任务介绍及小组成员任务分配 73.2 设计思想及主要流程图 73.3 主要程序清单 83.4 运行结果及分析 11二任务二 .121 任务介绍及小组成员任务分配 122 设计思想及主要流程图 123 主要程序清单 184.运行结果及分析 22三、收获、体会及建议: .231一任务一1.1 任务介绍及小组成员任务分配任务介绍根据输出设
2、计类设计类就是根据数据封装的要求,抽象出适合的类。有如下测试程序和测试程序的输出结果,要求设计类 Welcome。void main()Welcome we;Welcome you(we);you.Display();you.Set(“Thank you.”);cout#include using namespace std;class Welcomepublic :Welcome() Set(“Welcome!“); Welcome() Set(“Goodbye!“); Display(); Welcome(Welcome void Display() cout 0调用公用成员函数 GTze
3、ro()d=0调用公用成员函数 EQzero()d#includeusing namespace std;class funpublic:void GTzero();void EQzero();void LTzero();void set();double d;private:double a;浙江理工大学科技与艺术学院机电系课程设计报告7double b;double c;double x1;double x2;double p;double q;void fun:GTzero()x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);couta;cinb;cin
4、c;d=b*b-4*a*c;cout0)t.GTzero();if(t.d=0)t.EQzero();else if(t.d0,则主函数则会调用成员函数 void LTzero(),再输出实根x1,x2 的值。3.1 任务介绍及小组成员任务分配任务介绍使用包含(聚合)和派生设计新类(1)使用包含的方法,编写一个点类 Point 和线段类 Line,演示构造函数、复制构造函数、析构函数作用及其调用顺序;(2)使用派生的方法,编写一个点类 Point,然后由它派生线段类,并演示构造函数、复制构造函数、析构函数作用及其调用顺序。3.2 设计思想及主要流程图1.3.1 设计思路使用包含的方法先编写一个
5、点类 Point,在类中声明构造函数和析构函数,再建立 Distance 函数,题目中没有要求函数的输出值,定义函数输出为计算点到原点 o 的距离。然后编写线类 Line,同样声明构造函数和析构函数,建立 Display 函数计算两点间的距离,特别注意 Line 构造函数的对象是两个 Point 类,实现了类 Line 对类 Point 的包含。在 main 函数中声明两个 Point 类 a、b,用类 Line 包含已经定义的类 Point,最后调用相应的函数。1.3.1 主要流程图浙江理工大学科技与艺术学院机电系课程设计报告9类 Point开始在 Point 类中定义构造函数、析构函数、复
6、制构造函数声明类 Line在类外对 Point 类的成员函数进行定义声明两个 Point 类的对象 a、b主函数调用 Point 类中的 Distance 函数set()用 Line 类包含声明的两个 Point 类 a、b在 Line 类中定义构造函数和析构函数,在 Line 类外定义成员函数调用 Line 类中的 Display 函数set()调用 Line 类和 Point 类的析构函数1.3.2 设计思路使用派生类的方法同包含先编写一个点类 Point,在类中声明构造函数和析构函数,再建立 Distance 函数题目中没有要求,输出计算点到原点 o 的距离。然后编写派生线类 Line
7、对 Point 类进行公有继承,同样声明构造函数和析构函数,建立 Display 函数计算两点间的距离。在 main函数中声明两个 Point 类 a、b,实现类 Line 对类 Point 中对象的继承,最后调用相应的函数。1.3.2 主要流程图浙江理工大学科技与艺术学院机电系课程设计报告10类 Point开始在 Point 类中定义构造函数、析构函数、复制构造函数声明派生类 Line在类外对 Point 类的成员函数进行定义声明两个 Point 类的对象 a、b主函数调用 Point 类中的 Distance 函数set()用 Line 类继承声明的两个 Point 类 a、b在 Line
8、 类中定义构造函数和析构函数,在 Line 类外定义成员函数调用 Line 类中的 Display 函数set()调用 Line 类和 Point 类的析构函数3.3 主要程序清单1.3.1#include #include using namespace std;class Pointpublic:Point(double px=0, double py=0):x(px), y(py)Point()couta.xa.y;coutb.x b.y;cout#includeusing namespace std;class Pointpublic:Point(double px=0, double
9、 py=0)x = px; y = py;double Distance(Point double x, y;Point()couta.xa.y;coutb.xb.y;cout#includeclass employeeprotected:char *name; /姓名 int individualempNo; /个人编号 int grade; /级别 float accumpay; /月薪总额 static int employeeNo;/本公司职员编号目前最大值 public: employee(); /构造函数 employee(); /析构函数 virtual void pay()=0
10、; /计算月薪函数 virtual void promote(int increment=0); /升级函数 virtual void displaystatus()=0; /显示人员信息 ;/兼职技术人员类class technician:public employeeprivate:float hourlyrate; /每小时酬金 int workhours; /当月工作时间 public:technician(); /构造函数 void promote(int);/升级函数 void pay(); /计算月薪函数 void displaystatus(); /显示人员函数 ;/兼职推销员
11、类class salesman:virtual public employeeprotected:float commrate;/按销售额提取酬金的百分比 float sales; /当月销售额 public: salesman(); /构造函数 void promote(int); /升级函数 void pay(); /计算月薪函数 void displaystatus(); /显示人员函数 ;/经理类class manager:virtual public employeeprotected:float monthlypay;/固定月薪数 public:manager(); /构造函数 v
12、oid promote(int); /升级函数 void pay(); /计算月薪函数 void displaystatus();/显示人员函数 ;/销售经理类class salesmanager:public manager,public salesmanpublic:salesmanager();/构造函数void promote(int);/升级函数void pay(); /计算月薪函数 void displaystatus();/显示人员函数;int employee:employeeNo=1000;/员工编号基数为 1000employee:employee()char namest
13、r50;/输入雇员姓名时首先临时存放在 namestr 中coutnamestr;name=new charstrlen(namestr)+1;/动态申请用于存放姓名的内存空间strcpy(name,namestr);/将临时存放的姓名复制到 nameindividualempNo=employeeNo+;/新输入的员工,其编号为目前最大编号加 1grade=1; /级别初级为 1accumpay=0.0; /月薪总额初值为 0employee:employee()delete name; /在析构函数中删除为存放姓名动态分配的内存空间void employee:promote(int inc
14、rement)grade+=increment;/升级,提升的级数由increment 指定/兼职技术人员technician:technician()hourlyrate=100;/每小时酬金 100void technician:promote(int)employee:promote(2);/级别void technician:pay()coutworkhours;accumpay=hourlyrate*workhours;/计算月薪,按小时计算coutsales;accumpay=sales*commrate;/月薪=销售提成coutsales;accumpay=monthlypay+
15、commrate*sales;/月薪=固定工资+销售提成cout a;switch(a)case 0:break;case 1: manager m1;employee* a;a=a-promote();a-pay();a-displaystatus();goto biaohao; break;case 2:technician t1;employee* b;b=b-promote();b-pay();b-displaystatus();goto biaohao;break;case 3:salesmanager sm1;employee* c;c=c-promote();c-pay();c-
16、displaystatus();goto biaohao;break;case 4:salesman s1;employee* d;d=d-promote();d-pay();d-displaystatus();goto biaohao;break;default:cout“你输入有误,请重试!“endl;goto biaohao;break;return 0;浙江理工大学科技与艺术学院机电系课程设计报告244.运行结果及分析分析当桌面出现请选择功能后,用户就该输入 0 到 4 的数字,选择其它数字时,程序就会自动出现“你输入有误,请重试”的字样,若选择 1,则程序进入 case 1,在 ca
17、se 1 中会定义一个 manager 类的对象 m1 和指向基类对象 m1 的指针变量 a,通过指针来指向虚函数浙江理工大学科技与艺术学院机电系课程设计报告25promote(),pay()和 displaystatus(),从而输出若选择 2,则程序进入 case 2,在 case 2 中会定义一个 technician 类的对象 t1 和指向基类对象 t1 的指针变量 b,通过指针来指向虚函数 promote(),pay()和 displaystatus(),从而输出若选择 3,则程序进入 case 3,在 case 3 中会定义一个 salesmanager 类的对象 sm1 和指向基
18、类对象 sm1 的指针变量 c,通过指针来指向虚函数 promote(),pay()和displaystatus(),从而输出若选择 4,则程序进入 case 4,在 case4 中会定义一个 salesman 类的对象 s1 和指向基类对象 s1 的指针变量 d,通过指针来指向虚函数 promote(),pay()和 displaystatus(),从而输出三、收获、体会及建议通过这个课程设计,我们学到了不少甚至在实际操作过程中犯的一些错误还会有意外的收获,感觉实训很有意思。在具体操作中对这学期所学的 C+语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之处,在以后的上机中应更加注意,同时体会到 C+语言具有的语句简洁,使用灵活,执行效率高等特点。发现上机实训的重要作用,特别是对构造函数和析构函数的理解。通过实际操作,学会 C+语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。深刻体会到“没有做不到的,只有想不到的” , “团结就是力量” , “实践是检验真理的标准”等寓意。