山沟的哇 2021-12-28 21:31 采纳率: 50%
浏览 90
已结题

c++,想问一下这个问题该怎么做

在一个大学里,有若干教师和学生。根据这个信息设计三个类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() 计算大学里面所有教师的工资总和。

  • 写回答

1条回答 默认 最新

  • 关注

    题目应该是不全,有些要求提的也不对。
    参考如下:

    #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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月29日
  • 已采纳回答 12月29日
  • 创建了问题 12月28日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度