本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
本文为笔者大一《面向对象程序设计》课程章节实验报告,现将题目整理并分享,希望能够帮助正在学习C++的小伙伴!本文将学习到的编程技能包括:类的继承方法、访问权限问题
知识提纲
类的继承方法、访问权限问题
- 继承方式限定了基类成员在派生类中的访问权限,包括: public(公有的)、private(私有的)和 protected(受保护的)。默认为 private,指明基类成员在派生类中的最高访问权限的。
- 如:通过private继承public类后public的成员变量变为子类的private成员变量。
类的多态性
- 多态性指的是调用一个函数时,根据函数参数的类型、个数不同或调用时的对象不同能产生不同的行为。
- 如:子类继承基类后可重写基类的函数A,通过子类实例化对象调用名字A的函数时,调用的是子类重写的函数A。
一、校园人员信息录入与显示(类实现)
- 题目: 编写一个人员信息管理系统。这个系统的功能是:交互式的实现校园人员信息的录入与显示。
- 分析:
- 学校里,主要有四类人员:大学本科学生、教师、研究生和助教。
- 大学本科生每周有固定的学时数。教师除了固定的学时数外,还有每周的教学时数。研究生除了固定的学时数外,每周还可以自由做一定的研究。助教生除了上课外,还要做研究和一定的教学工作。
- 人员的基本信息包括姓名、编号、性别、身份证号、总学时数以及每周固定学时数。各个人员之间的关系: people类派生出student 类和teacher类,student 类派生出graduate类, graduate类和teacher类派生出TA类。
- 按下给出的类设计架构完成人员信息管理系统:
#include < iostream>
class people
{
public:
//添加程序
private:
};
class student: virtual public people
{
public:
//添加程序
private:
};
class teacher:virtual public people
{
public:
//添加程序
private:
};
class graduate: virtual public student
{
public:
//添加程序
private:
};
class TA : public graduate, public teacher
{
public:
//添加程序
private:
};
void main()
{
//添加程序
}
- 代码
#include "pch.h"
#include < iostream>
#include <string>
using namespace std;
class people //基类
{
public:
people()
{
weekTime = 0;
totalTime = 0;
}
void setCode(int mcode);
void setName(string mname);
void setSex(string msex);
void setId(string mId);
void setWeekTime(double wtime);
void setTotalTime(double tTime);
string getName();
string getSex();
int getCode();
string getId();
double getWeekTime();
double getTotalTime();
virtual void input() = 0;
virtual void print() = 0;
private:
string name; //姓名
string sex; //性别
string id; //身份证号
int code; //编号
double weekTime; //每周基本学时
double totalTime; //总学时
};
void people::setCode(int mcode)
{
code = mcode;
}
void people::setName(string mname)
{
name = mname;
}
void people::setSex(string msex)
{
sex = msex;
}
void people::setId(string mId)
{
id = mId;
}
void people::setWeekTime(double wtime)
{
weekTime = wtime;
}
void people::setTotalTime(double tTime)
{
totalTime = tTime;
}
string people::getName()
{
return name;
}
string people::getSex()
{
return sex;
}
int people::getCode()
{
return code;
}
string people::getId()
{
return id;
}
double people::getWeekTime()
{
return weekTime;
}
double people::getTotalTime()
{
return totalTime;
}
//**********************************************************************************************************
class student : virtual public people //学生类
{
public:
virtual void input();
virtual void print();
private:
};
void student::input()
{
cout << "请输入本科生信息\n";
cout << "姓名 性别 身份证号 每周固定学时数\n";
string mName, mSex;
string mID;
double mWeekTime;
cin >> mName >> mSex >> mID >> mWeekTime;
setName(mName);
setSex(mSex);
setId(mID);
setWeekTime(mWeekTime);
double totalTime = mWeekTime;
setTotalTime(totalTime);
}
void student::print()
{
cout << "学生: " << getName() << '\t' << "编号:" << getCode() << '\t' << getSex() << '\t' << getId() << '\t' <<"固定学时:"<<getWeekTime()<<'\t'<< "总学时:"<<getTotalTime()<<endl;
}
//**********************************************************************************************************
class teacher :virtual public people //教师类
{
public:
teacher();
virtual void input();
virtual void print();
virtual double getTeachTime();
void setTeachTime(double mTeachTime);
private:
double teachTime; //每周教学时长
};
teacher::teacher()
{
teachTime = 0;
}
void teacher::setTeachTime(double mTeachTime)
{
teachTime = mTeachTime;
}
double teacher::getTeachTime()
{
return teachTime;
}
void teacher::input()
{
cout << "请输入教师信息\n";
cout << "姓名 性别 身份证号 每周固定学时数 每周教学时长\n";
string mName, mSex;
string mID;
double mWeekTime, mTeachTime;
cin >> mName >> mSex >> mID >> mWeekTime >> mTeachTime;
setName(mName);
setSex(mSex);
setId(mID);
setWeekTime(mWeekTime);
setTeachTime(mTeachTime);
double totalTime = mWeekTime + mTeachTime;
setTotalTime(totalTime);
}
void teacher::print()
{
cout << "教师: " << getName() << '\t' << "编号:" << getCode() << '\t' << getSex() << '\t' << getId() << '\t' << "固定学时:" << getWeekTime() <<"周教学时长:"<<teachTime<< '\t' << "总学时:" << getTotalTime() << endl;
}
//**********************************************************************************************************
class graduate : virtual public student //研究生类
{
public:
graduate();
void setStudyTime(double mStudyTime);
virtual void input();
virtual void print();
private:
double studyTime; //研究时长
};
graduate::graduate()
{
studyTime = 0;
}
void graduate::setStudyTime(double mStudyTime)
{
studyTime = mStudyTime;
}
void graduate::input()
{
cout << "请输入研究生信息\n";
cout << "姓名 性别 身份证号 每周固定学时数 每周研究时长\n";
string mName, mSex;
string mID;
double mWeekTime, mStudyTime;
cin >> mName >> mSex >> mID >> mWeekTime >> mStudyTime;
setName(mName);
setSex(mSex);
setId(mID);
setWeekTime(mWeekTime);
setStudyTime(mStudyTime);
double totalTime = mWeekTime + mStudyTime;
setTotalTime(totalTime);
}
void graduate::print()
{
cout << "研究生: " << getName() << '\t' << "编号:" << getCode() << '\t' << getSex() << '\t' << getId() << '\t' << "固定学时:" << getWeekTime() << "周研究时长:" << studyTime << '\t' << "总学时:" << getTotalTime() << endl;
}
//**********************************************************************************************************
class TA : public graduate, public teacher //助教生类(上课+研究)
{
public:
void input();
virtual void print();
private:
};
void TA::input()
{
cout << "请输入助教生生信息\n";
cout << "姓名 性别 身份证号 每周固定学时数 每周研究时长 每周教学时长\n";
string mName, mSex;
string mID;
double mWeekTime, mStudyTime, mTeachTime;
cin >> mName >> mSex >> mID >> mWeekTime >> mStudyTime >> mTeachTime;
setName(mName);
setSex(mSex);
setId(mID);
setWeekTime(mWeekTime);
setStudyTime(mStudyTime);
setTeachTime(mTeachTime);
double totalTime = mWeekTime + mStudyTime + mTeachTime;
setTotalTime(totalTime);
}
void TA::print()
{
cout << "助教生: " << getName() << '\t' << "编号:" << getCode() << '\t' << getSex() << '\t' << getId() << '\t' << "固定学时:" << getWeekTime() << "周研究时长:" << getTeachTime() << '\t' << "总学时:" << getTotalTime() << endl;
}
//**********************************************************************************************************
int main()
{
int num = 0;
int studentNum = 10000;
int teacherNum = 20000;
int graduateNum = 30000;
int taNum = 40000;
people* p[10000];
cout << "\n____________________校园人员信息管理系统____________________\n\n";
while (1)
{
string choose;
cout << "请选择录入信息or显示校园人员信息(1 or 2): ";
cin >> choose;
if (choose == "1")
{
cout << "请输入要录入的人员类别(1.本科生,2.教师,3.研究生,4.助教生):";
string op;
cin >> op;
if (op == "1")
{
p[num] = new student();
p[num]->setCode(studentNum);
p[num]->input(); //"->"不能写成"."
// p[num++]->print();
++studentNum;
num++;
}
else if (op == "2")
{
p[num] = new teacher();
p[num]->setCode(teacherNum);
p[num]->input();
// p[num++]->print();
++teacherNum;
num++;
}
else if (op == "3")
{
p[num] = new graduate();
p[num]->setCode(graduateNum);
p[num]->input();
// p[num++]->print();
++graduateNum;
num++;
}
else if (op == "4")
{
p[num] = new TA();
p[num]->setCode(taNum);
p[num]->input();
// p[num++]->print();
++taNum;
num++;
}
else
{
cout << "输入有误,请重新输入\n";
}
}
else if (choose == "2")
{
cout << endl;
cout << "学生信息:\n";
if (studentNum == 10000) cout << "无\n";
for (int i = 0; i < num; ++i)
{
if (p[i]->getCode() >= 10000 && p[i]->getCode() < 20000) p[i]->print();
}
cout << endl;
cout << "教师信息:\n";
if (teacherNum == 20000) cout << "无\n";
for (int i = 0; i < num; ++i)
{
if(p[i]->getCode()>=20000&&p[i]->getCode()<30000) p[i]->print();
}
cout << endl;
cout << "研究生信息:\n";
if (graduateNum == 30000) cout << "无\n";
for (int i = 0; i < num; ++i)
{
if (p[i]->getCode() >= 30000 && p[i]->getCode() < 40000) p[i]->print();
}
cout << endl;
cout << "助教生信息:\n";
if (taNum == 40000) cout << "无\n";
for (int i = 0; i < num; ++i)
{
if (p[i]->getCode() >= 40000 && p[i]->getCode() < 50000) p[i]->print();
}
}
else cout << "输入有误!请重新输入!\n";
}
}
- 结果