在一个大学里,有若干教师和学生。根据这个信息设计三个类University、Teacher、Person和Student,一个接口Learnable。要求:
(1) 设计University类,里面使用常量属性:NAME,其值为NUIST。
(2) 设计Person类,属性包括姓名name和年龄age,添加无参和全参构造方法,并封装。
(3) 写出Learnable接口,里面包含study()和exercise()两个方法。
(4) 设计Teacher类(增加工号teacherID属性和工资salary属性)和Student类(增加学号studentID属性和专业major属性),它们继承Person类。
(5) University添加一个数组,里面存有所有教师和学生对象。
该类中有如下方法:
1)void register(Person person) 注册某人
2)void fire(Person person) 开除一个人
3)Person[] searchPerson(String name)根据名字查出所有与此名相同的Person,得到一个数组。
4)double getTotalSalary() 计算大学里面所有教师的工资总和。
c++,想问一下这个问题该怎么做
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 技术专家团-小桥流水 2021-12-28 23:03关注
题目应该是不全,有些要求提的也不对。
参考如下:#include <iostream> #include <string> using namespace std; class Person; class Teacher; class Student; class Person { protected: string name; int age; public: Person(){name="";age=0;} Person(string n,int a){name = n;age = a;} virtual int getType()=0; void setName(string na){name = na;} void setAge(int a){age = a;} string getName(){return name;} int getAge(){return age;} }; //这个接口没啥用啊 class Learnable { public: static void study(){cout <<"study"<<endl;} static void exercise(){cout << "exercise"<<endl;} }; class Teacher :public Person { private: int teacherId; double salary; public: void setTeacherId(int id){teacherId = id;} void setSalary(double s){salary = s;} int getTeacherId(){return teacherId;} double getSalary(){return salary;} int getType(){return 1;} //用1表示Teacher类 }; class Student:public Person { private: int studentID; string major; public: void setStuId(int id){studentID = id;} void setMajor(string m){major = m;} int getStuId(){return studentID;} string getMajor(){return major;} int getType(){return 2;} //用2表示Student类 }; class University { private: const string NAME; Person* mArray[20]; //定义一个数组 int mCount; //数组中元素的实际个数 public: University():NAME("NUIST"),mCount(0) { // } //注册某人 void regeist(Person* person) { mArray[mCount] = person; mCount++; } //开除一个人 void fire(Person* person) { int i=0; for ( i = 0;i<mCount;i++) { if (mArray[i]==person) { for (int j=i;j<mCount-1;j++) { mArray[j] = mArray[j+1]; } mCount--; break; } } } //根据名字查出所有与此名相同的Person,得到一个数组。 Person** searchPerson(string name,int &nmb) { nmb = 0; Person** array = new Person*[mCount]; for (int i = 0;i<mCount;i++) { if (mArray[i]->getName().compare(name)==0) { array[nmb++] = mArray[i]; } } return array; } //计算大学里面所有教师的工资总和。 double getTotalSalary() { double sum=0; for (int i = 0;i<mCount;i++) { //string claname = typeid(*mArray[i]).name(); if(mArray[i]->getType() == 1) { Teacher* t = (Teacher*) mArray[i]; sum += t->getSalary(); } } return sum; } }; int main() { Teacher* t1 = new Teacher(); t1->setName("张三"); t1->setAge(34); t1->setTeacherId(1234); t1->setSalary(5000); Teacher* t2 = new Teacher(); t2->setName("李四"); t2->setAge(38); t2->setTeacherId(1235); t2->setSalary(6000); Student* stu1 = new Student(); stu1->setName("张三"); stu1->setAge(18); stu1->setStuId(11111); stu1->setMajor("物理系"); Student* stu2 = new Student(); stu2->setName("学生2"); stu2->setAge(19); stu2->setStuId(11112); stu2->setMajor("生物系"); Student* stu3 = new Student(); stu3->setName("学生3"); stu3->setAge(20); stu3->setStuId(11113); stu3->setMajor("生物系"); //注册 University ut; ut.regeist(t1); ut.regeist(t2); ut.regeist(stu1); ut.regeist(stu2); ut.regeist(stu3); //开除 ut.fire(stu2); //查询 int nmb=0; Person** p = ut.searchPerson("张三",nmb); cout << "找到名字为张三的人数:"<<nmb<<endl; //计算工资 double ss = ut.getTotalSalary(); cout << "所有教师的工资为:"<<ss; return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度