c++简单的学生管理系统----继承练习

来源:互联网 发布:网络心理误区 编辑:程序博客网 时间:2024/06/07 23:49
# include <iostream>
# include <string.h>
using namespace std;

const char null = '\0';
static char * strsave(char * s) {
    char * p;
    p = new char[strlen(s) + 1];
    strcpy(p, s);
    return p;
}

class Data_rec {
protected:
    char * name;
    char * id_number;
public:
    Data_rec() {
        name = null;
        id_number = null;
    }
    Data_rec(char * name1, char * id_number1) {
        name = strsave(name1);
        id_number = strsave(id_number1);
    }
    ~Data_rec() {
        delete[] name;
        delete[] id_number;
    }

    void print() {
        cout << "\n" << "name:" << name << endl;
        cout << "id_number:" << id_number << endl;
    }
};

class Student: virtual public Data_rec {
protected:
    char * major;

    long int stu_no;
    int level;
public:
    Student(char * name1, char * id_number1, char * major1, long int stu_no1,
            int level1) :
        Data_rec(name1, id_number1) {
        major = strsave(major1);
        stu_no = stu_no1;
        level = level1;
    }
    ~Student() {
        delete[] major;
    }
    void print();
};

void Student::print() {
    Data_rec::print();
    cout << "Major:" << major << endl;
    cout << "stu_no:" << stu_no << endl;
    cout << "level:" << level << endl;
}

class Employee: virtual public Data_rec {
protected:
    char * dept;
    double salary;
public:
    Employee(char * name1, char * id_number1, char * dept1, float salary1)
            :Data_rec(name1, id_number1)
            {
                dept = strsave(dept1);
                salary = salary1;
            }
            ~Employee() {
                delete[] dept;
            }
            void print();
        };
        void Employee::print() {
            Data_rec::print();
            cout << "Department:" << dept << endl;
            cout << "salary:" << salary << endl;
        }

        class Teacher: virtual public Employee {
        protected:
            char * title;
        public:
            Teacher(char * name1, char * id_number1, char * dept1, float salary1, char * title1) :
                Data_rec(name1, id_number1), Employee(name1, id_number1, dept1, salary1) {
                title = strsave(title1);
            }
            ~Teacher() {
                delete[] title;
            }
            void print();
        };
        void Teacher::print() {
            Employee::print();
            cout << "title:" << title << endl;
        }

        class E_Student: public Employee, public Student {
        public:
            E_Student(char * name1, char * id_number1, char * major1, long int stu_no1, int level1, char * dept1, float salary1):
            Data_rec(name1, id_number1), Employee(name1, id_number1, dept1, salary1),
            Student(name1, id_number1, major1, stu_no1, level1)
            {
            }
            void print();
        };
        void E_Student::print() {
            Student::print();
            cout << "Department:" << dept << endl;
            cout << "salary:" << salary << endl;
        }
        int main(void) {
            Student my_student("zhangming", "010123456789123", "computer science", 1234, 4);
            Employee my_employee("chandaiwei", "010434535431234", "electrical engineering", 7.20);
            Teacher my_teacher("lixiaoping", "010234568977789", "computer science", 12.34, "professor");
            E_Student my_E_Student("zhangming", "010123456789123", "computer science", 203478.3, 3, "electrical engineering", 7.20);
            cout << "\n\n";
            my_teacher.print();
            cout << "\n\n";
            my_E_Student.print();
            return 0;
        }