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