注:来源于教科书

/*]
[问题描述]
    设计一个院校管理程序.
    学生包括姓名,性别,身份证号码,生日,年龄,地址,学号,宿舍号,专业,年级的输入输出;
    教师包括姓名,性别,身份证号码,生日,年龄,地址,公寓,每天工作时间,每月薪水,授课专业,所从事的科研名称,所带研究生数目的输入输出;
    工人包括姓名,性别,身份证号码,生日,年龄,地址,公寓,每天工作时间,每月薪水,工作类别的输入输出.

[算法分析]
    设计一个RECORD类,它包括姓名,性别,身份证号码,生日,年龄,地址的输入输出,然后从RECORD类派生一个STUDENT类,实现学生数据学号,宿舍号,专业,年级的输入输出,从RECORD类派生一个STAFF的中间类,实现公寓,每天工作时间,每月薪水的输入输出,再从STAFF类派生出PROFESSOR类和WORKER类,分别实现教师授课专业,所从事的科研名称,所带研究生数目和工作类别的输入输出.下图反映了这些类之间的关系.

┏━━━━━┓
          ┃ 类RECORD ┃
          ┗━━━━━┛
   公有继承↙        ↘公有继承
┏━━━━━┓      ┏━━━━━┓
┃ 类STUDENT┃      ┃  类STAFF ┃
┗━━━━━┛      ┗━━━━━┛
             公有继承↙         ↘公有继承
         ┏━━━━━━┓      ┏━━━━━┓
         ┃ 类PROFESSOR┃      ┃ 类WORKER ┃
         ┗━━━━━━┛      ┗━━━━━┛
            院校管理系统类图
*/
#include "iostream.h"
#include "string.h"
#include "conio.h"

const char EMPTY='\0';

//RECORD类
class RECORD{
private:                                     //私有部分
    char *NAME;                              //姓名
    char *SEX;                               //性别
    char *IDENTIFIER;                        //身份证号码
    char *BIRTHDAY;                          //生日
    char *ADDRESS;                           //地址
    int  AGE;                                //年龄
public:                                      //公有部分
    RECORD();                                //构造函数
    void INSERT_NAME(char *S);               //插入姓名
    void INSERT_SEX(char *S);                //插入性别
    void INSERT_IDENTIFIER(char *S);         //插入身份证号码
    void INSERT_BIRTHDAY(char *S);           //插入生日
    void INSERT_ADDRESS(char *S);            //插入地址
    void INSERT_AGE(int A);                  //插入年龄
    void PRINT();                            //输出信息
};

//STUDENT子类
class STUDENT:public RECORD{
    //This class is derived from RECORD and inherits all the public members of the parent class.
private:                                     //私有部分
    char *STUDENT_ID;                        //学号
    char *DORMITORY_NUM;                     //宿舍号
    char *MAJOR;                             //专业
    int  LEVEL;                              //年级
public:                                      //公有部分
    STUDENT();                               //子类构造函数
    void INSERT_STUDENT_ID(char *s);         //插入学号
    void INSERT_DORMITORY_NUM(char *s);      //插入宿舍号
    void INSERT_MAJOR(char *s);              //插入专业
    void INSERT_LEVEL(int A);                //插入年级
    void PRINT();                            //输出信息
};

//STAFF子类
class STAFF:public RECORD{
    //STAFF类由RECORD派生并继承父类RECORD的全部公有成员
private:                                     //私有部分
    char  *DEPARTMENT;                       //公寓号
    int   WORKTIME;                          //工作时间
    float SALARY;                            //薪水(每月)
public:                                      //公有部分
    STAFF();                                 //子类构造函数
    void INSERT_DEPARTMENT(char *S);         //插入公寓号
    void INSERT_WORKTIME(int A);             //插入工作时间
    void INSERT_SALARY(float A);             //插入薪水
    void PRINT();                            //输出信息
};

//PROFESSOR子类
class PROFESSOR:public STAFF{
    //This class is derived from the derived class STAFF.
private:                                     //私有部分
    char *TEACH_MAJOR;                       //授课专业
    char *SEARCH_NAME;                       //科研名称
    int  GRADUATE_STUDENT_NUM;               //所带研究生数目
public:                                      //公有部分
    PROFESSOR();                             //二级继承类PROFESSOR的构造函数
    void INSERT_TEACH_MAJOR(char *S);        //插入授课专业
    void INSERT_SEARCH_NAME(char *S);        //插入科研名称
    void INSERT_GRADUATE_STUDENT_NUM(int A); //插入所带研究生数目
    void PRINT();                            //输出信息
};

//WORKER子类
class WORKER:public STAFF{
    //This class is derived from the derived class STAFF.
private:                                     //私有部分
    char *WORK_TYPE;                         //工作类别
public:                                      //公有部分
    WORKER();                                //二级继承类PROFESSOR的构造函数
    void INSERT_WORK_TYPE(char *S);          //插入工作类别
    void PRINT();                            //输出信息
};

/***********************************************************************************/
//定义父类RECORD成员
RECORD::RECORD(){                            //构造函数
    NAME = EMPTY;
    SEX = "MALE";
    IDENTIFIER = EMPTY;
    BIRTHDAY = EMPTY;
    AGE = 0;
};
void RECORD::INSERT_NAME(char *S){           //插入姓名
    char *BUFFER;
    BUFFER = new char[strlen(S)+1];
    strcpy(BUFFER,S);
    NAME = BUFFER;
};
void RECORD::INSERT_SEX(char *S){            //插入性别
    char *BUFFER;
    BUFFER = new char[strlen(S)+1];
    strcpy(BUFFER,S);
    SEX = BUFFER;
};
void RECORD::INSERT_IDENTIFIER(char *S){     //插入身份证号码
    char *BUFFER;
    BUFFER = new char[strlen(S)+1];
    strcpy(BUFFER,S);
    IDENTIFIER = BUFFER;
};
void RECORD::INSERT_BIRTHDAY(char *S){       //插入生日
    char *BUFFER;
    BUFFER = new char[strlen(S)+1];
    strcpy(BUFFER,S);
    BIRTHDAY = BUFFER;
};
void RECORD::INSERT_ADDRESS(char *S){        //插入地址
    char *BUFFER;
    BUFFER = new char[strlen(S)+1];
    strcpy(BUFFER,S);
    ADDRESS = BUFFER;
};
void RECORD::INSERT_AGE(int A){              //插入年龄
    AGE = A;
};
void RECORD::PRINT(){                        //输出信息
    cout << NAME       << endl
         << SEX        << "  "
         << IDENTIFIER << "  "
         << BIRTHDAY   << "  "
         << AGE        << "  "
         << ADDRESS    << endl;
};

/
//继承自父类RECORD的STUDENT子类成员
STUDENT::STUDENT(){
    RECORD:RECORD(); //Use the same constructor as the parent class.
    STUDENT::DORMITORY_NUM = EMPTY;
    STUDENT::MAJOR = EMPTY;
    STUDENT::LEVEL = 0;
};
void STUDENT::INSERT_STUDENT_ID(char *S){    //插入学号
    char *BUFFER;
    BUFFER = new char[strlen(S)+1];
    strcpy(BUFFER,S);
    STUDENT_ID = BUFFER;
};
void STUDENT::INSERT_DORMITORY_NUM(char *S){ //插入宿舍号
    char *BUFFER;
    BUFFER = new char[strlen(S)+1];
    strcpy(BUFFER,S);
    DORMITORY_NUM = BUFFER;
};
void STUDENT::INSERT_MAJOR(char *S){         //插入专业
    char *BUFFER;
    BUFFER = new char[strlen(S)+1];
    strcpy(BUFFER,S);
    MAJOR = BUFFER;
};
void STUDENT::INSERT_LEVEL(int A){           //插入年级
    LEVEL = A;
};
void STUDENT::PRINT(){                       //输出信息
    RECORD::PRINT(); //继承父类RECORD的PRINT()函数
    cout << endl;
    cout << "STUDENT_ID    --> " << STUDENT_ID    << endl
         << "DORMITORY_NUM --> " << DORMITORY_NUM << endl
         << "MAJOR         --> " << MAJOR         << endl
         << "LEVEL         --> " << LEVEL         << endl;
};

/
//继承自父类RECORD的STAFF子类成员
STAFF::STAFF(){                              //子类构造函数
    RECORD:RECORD(); //继承自父类RECORD的构造函数
    DEPARTMENT = EMPTY;
    WORKTIME = 0;
    SALARY = 300;
};
void STAFF::INSERT_DEPARTMENT(char *S){      //插入公寓号
    char *BUFFER;
    BUFFER = new char[strlen(S)+1];
    strcpy(BUFFER,S);
    DEPARTMENT = BUFFER;
};
void STAFF::INSERT_WORKTIME(int A){          //插入工作时间
    WORKTIME = A;
};
void STAFF::INSERT_SALARY(float A){          //插入薪水
    SALARY = A;
};
void STAFF::PRINT(){                         //输出信息
    RECORD::PRINT(); //继承父类RECORD的PRINT()函数
    cout << endl;
    cout << "DEPARTMENT         --> "  << DEPARTMENT << endl
         << "WORK TIME(PER DAY) --> "  << WORKTIME   << endl
         << "SALARY             --> $" << SALARY     << endl;
};

/
//从继承类STAFF导出的子类PROFESSOR成员
PROFESSOR::PROFESSOR(){                       //二级继承类PROFESSOR的构造函数
    STAFF:STAFF(); //继承父类STAFF的构造函数
    TEACH_MAJOR = EMPTY;
    SEARCH_NAME = EMPTY;
    GRADUATE_STUDENT_NUM = 0;
};
void PROFESSOR::INSERT_TEACH_MAJOR(char *S){  //插入授课专业
    char *BUFFER;
    BUFFER = new char[strlen(S)+1];
    strcpy(BUFFER,S);
    TEACH_MAJOR = BUFFER;
};
void PROFESSOR::INSERT_SEARCH_NAME(char *S){  //插入科研名称
    char *BUFFER;
    BUFFER = new char[strlen(S)+1];
    strcpy(BUFFER,S);
    SEARCH_NAME = BUFFER;
};
void PROFESSOR::INSERT_GRADUATE_STUDENT_NUM(int A){ //插入所带研究生数目
    GRADUATE_STUDENT_NUM = A;
};
void PROFESSOR::PRINT(){                      //输出信息
    STAFF::PRINT(); //调用父类STAFF的PRINT()函数
    cout << endl;
    cout << "TEACH MAJOR                                --> " << TEACH_MAJOR          << endl
         << "THE PROFESSOR'S SEARCH'S NAME              --> " << SEARCH_NAME          << endl
         << "THE NUMBER OF PROFESSOR'S GRADUATE STUDENT --> " << GRADUATE_STUDENT_NUM << endl;
};

/
//从继承类STAFF导出的子类WORKER成员
WORKER::WORKER(){                             //二级继承类PROFESSOR的构造函数
    STAFF:STAFF(); //继承父类STAFF的构造函数
    WORK_TYPE = "WORKER";
};
void WORKER::INSERT_WORK_TYPE(char *S){       //插入工作类别
    char *BUFFER;
    BUFFER = new char[strlen(S)+1];
    strcpy(BUFFER,S);
    WORK_TYPE = BUFFER;
};
void WORKER::PRINT(){                         //输出信息
    STAFF::PRINT(); //调用父类STAFF的PRINT()函数
    cout << endl;
    cout << "THE WORKER IS A    --> " << WORK_TYPE << endl;
};

/***********************************************************************************/
void main(){
    STUDENT   STU; //定义学生类的实例
    PROFESSOR PRO; //定义教授类的实例
    WORKER    WOR; //定义工人类的实例

/*STUDENT RECORD*/
    STU.INSERT_NAME("ZHANG SAN");
    STU.INSERT_SEX("FEMALE");
    STU.INSERT_IDENTIFIER("123456789");
    STU.INSERT_BIRTHDAY("1979/1/1");
    STU.INSERT_AGE(20);
    STU.INSERT_ADDRESS("BGD 100 BEIJIG");
    STU.INSERT_STUDENT_ID("12345");
    STU.INSERT_DORMITORY_NUM("8-3-225");
    STU.INSERT_MAJOR("COMPUTER SCIENCE");
    STU.INSERT_LEVEL(5);

/*PROFESSOR RECORD*/
    PRO.INSERT_NAME("LI SI");
    PRO.INSERT_SEX("MALE");
    PRO.INSERT_IDENTIFIER("11223344");
    PRO.INSERT_BIRTHDAY("1940/1/1");
    PRO.INSERT_AGE(60);
    PRO.INSERT_ADDRESS("111222333 ABCDE CHAOYANG");
    PRO.INSERT_DEPARTMENT("3-3-3");
    PRO.INSERT_WORKTIME(6);
    PRO.INSERT_SALARY(10000);
    PRO.INSERT_TEACH_MAJOR("MATH");
    PRO.INSERT_SEARCH_NAME("THE METHOD FOR CALCULATING");
    PRO.INSERT_GRADUATE_STUDENT_NUM(30);

/*WORKER RECORD*/
    WOR.INSERT_NAME("WANG WU");
    WOR.INSERT_SEX("MALE");
    WOR.INSERT_IDENTIFIER("44556677");
    WOR.INSERT_BIRTHDAY("1970/1/1");
    WOR.INSERT_AGE(30);
    WOR.INSERT_ADDRESS("23456 EFGHI HAIDIAN");
    WOR.INSERT_DEPARTMENT("10-3-6");
    WOR.INSERT_WORKTIME(10);
    WOR.INSERT_SALARY(1000);
    WOR.INSERT_WORK_TYPE("CLEARER");

STU.PRINT();
    cout << "\n------------------------------------------------------------\n" << endl;
    PRO.PRINT();
    cout << "\n------------------------------------------------------------\n" << endl;
    WOR.PRINT();
}

转载于:https://www.cnblogs.com/hcbin/archive/2010/02/22/1669588.html

[C++] - 面向对象-院校管理系统相关推荐

  1. RDBMS(关系型数据库管理系统)和 OODBMS(面向对象数据库管理系统)区别

    RDBMS: RDBMS 代表关系数据库管理系统.它是一个基于关系模型的数据库管理系统,也就是数据和关系被一些互相关联的表组成的集合锁替代.它是一个能让用户自己创建.更新数据库,并且实现对数据库管理和 ...

  2. python2.面向对象学生管理系统

    main.py(程序主入口) #1.导入管理系统模块 from mangerSystem import * #2.启动管理系统 #保证是当前文件运行才启动管理系统:if -- 创建对象并调用run() ...

  3. [C++] - 面向对象-图书管理系统

    注:来源于教科书 /* [问题描述]     设计一个图书管理系统,该图书管理系统分为借书,还书,图书维护和读者维护4个部分,如下图所示.                     ┏━━━━━━━┓ ...

  4. C++简单面向对象学校管理系统

    C++简单学校管理系统 关键词 设计 功能: 一.头文件 1.menu.h 2.Login.h 3.People.h 4.Student.h 5.Teacher.h 二.源文件 1.main.cpp ...

  5. 关系数据库系统RDBMS与面向对象数据库管理系统ODBMS优缺点比较

    关系数据库系统与面向对象数据库系统各自的优缺点 关系数据库系统的优点 a.灵活性和建库的简单性:目前在多数RDDMS产品中使用标准查询语言SQL,允许用户几乎毫无差别地从一个产品到另一个产品存取信息. ...

  6. python面向对象设计管理系统_python面向对象之单例设计模型

    单例 目标 单例设计模式 `__new__` 方法 Python 中的单例 01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的 ...

  7. 11.面向对象设计笔记

    面向对象分析-问题域精确模型 面向对象设计-求解问题域模型,得到系统实现方案 文章目录 面向对象设计六准则 弱耦合 强内聚 六个启发规则 软件重用(软件成分重用) 可重用类构件的特点 三种重用方式 系 ...

  8. OO开发思想:面向对象的开发方法(Object oriented,OO)

    面向对象的开发方法(Object oriented,OO)认为是好文章吧,拿来分享一下(转载) 面向对象的开发方法(Object oriented,OO) 从事软件开发的工程 师们常常有这样 的体会: ...

  9. 面向对象的关系数据库设计

    面向对象的关系数据库设计 一.概念的区分 有些人把面向对象的数据库设计(即数据库模式)思想与面向对象数据库管理系统(OODBMS) 理论混为一谈.其实前者是数据库用户定义数据库模式的思路,后者是数据库 ...

最新文章

  1. 水母智能联合蚂蚁森林、犀牛智造等,用AI助力非遗出圈,39万人开工得“福”
  2. 实现数据集多( 高 )维可视化(附代码)
  3. Javascript 装饰器极速指南
  4. python 对象类型有哪些?
  5. 修改echarts环形图的牵引线及文字位置
  6. php_mvc实现步骤五
  7. 广州大学计算机网络期末考试2013,广州大学计算机网络技术试卷(A卷)
  8. util中注入service
  9. 极光推送 java 绑定别名_极光推送-别名篇
  10. 给WPF文字加多条修饰线
  11. 2010_8_18_静态路由_静态路由路由排错(不连续地址汇总)
  12. Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”
  13. mysql 批量查询插入,MySQL批量插入查询出来的数据
  14. 以接口请求的方式,解决移动端页面中字体文件过大的问题
  15. ab test -- 实验效果不显著的改善方法 -- CUPED
  16. rpm -ivh *rpm 是什么意思
  17. 万恶的LayoutSubviews
  18. [DUBBO] disconnected from 问题
  19. Outlook 2013 pst/ost邮件数据文件迁移实现
  20. 看完它你就造了!为什么AR直播是淘宝造物节最火的黑科技

热门文章

  1. mysql教程日志_MySQL日志
  2. merge规则 python_用Python处理PDF
  3. 决策树(十二)--XGBoost
  4. osea/Beat Classification 4.0-4.2
  5. 基于Zephyr在微型MCU上使用Tensor Flow Lite Micro做图像分类
  6. 记录:编译opencv-4.1.0、opencv_contrib-4.1.0、dense_flow过程
  7. registerModule: 动态注册vuex模块,对于自定义生成组件很有用
  8. 人脸表情分类与识别:opencv人脸检测+Keras情绪分类
  9. Win8 Metro(C#)数字图像处理--2.39二值图像投影
  10. [Contest20180116]随机游走