数据结构大作业之家谱管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++实现的数据结构大作业之家谱管理系统
欢迎界面:
主菜单:
其他一些运行结果不在一一列举,一面篇幅过长。
这个家谱管理系统,支持键盘操作,所有的操作都可以用键盘完成,如选择功能、退出等。代码的实现使用的是c++11标准,与旧标准或有不同。
类的头文件:
#include
#include
using std::string;
using std::ostream;
using std::istream;
struct BirthDay{//生日结构变量
int year=0;int month=0;int day=0;
};
class Member{
friend class FamilySystem;
friend ostream&operator<<(ostream&out,
const Member&m);//输出成员信息到控制台friend istream&operator>>(istream&, Member&m);//从文件中读入成员信息
public:
Member()=default;//使用默认合成构造函数
void setE();//通过控制台输入给成员赋值
~Member()=default;//使用默认合成析构函数
Member*pson=nullptr;//指向儿子的指针
Member*pbro=nullptr;//指向兄弟的指针private:
//成员的各种数据
string name="未知";
string birthPlace="未知";
BirthDay birthDay;
string sex="未知";
float height=0;
int age=0;
string education="未知";
string job="未知";
string father="未知";
};
class FamilySystem{
public:
FamilySystem()=default;//使用默认合成构造函数
~FamilySystem(){
delete root;
}
bool fileInit();//从文件中读取数据
int menu();//显示菜单(功能)
bool addMem();//增加成员
bool deleteMem();//删除成员
bool demandMem();//查询
bool demandAve();//查询家庭整体情况
bool modifyMem();//修改成员
bool showFamily();//展示整个家谱
bool saveFile();//保存信息到文件中,将使用两个文件,一个保存成员信息,一个保存家谱整体信息
Member*root=nullptr;//家谱数结构的根节点指针?
private:
int total=0;//总人数
float aveAge=0;//平均年龄
float aveHeight=0;//平均身高
float aveMember=0;//家庭平均人数
float ratio=0;//男女比例
void calculate();//计算平均值等
Member*seek(string);//查找是否存在成员
void display(Member*,int);//先序遍历树,用于显示所有成员
};
extern string gets();//用于接收键盘的输入
类的函数及相关操作函数的实现
#include
#include
#include
#include
#include
#include"SystemClass.h"
using std::cin;
using std::cout;
using std::endl;
using std::setw;
using std::vector;
using std::ios;
using std::ifstream;
using std::ofstream;
using std::istringstream;
string gets(){//从控制台获取字符等信息string s;
while(int n=_getch()){
if(n==27){
throw27;
break;
}
else if(n==13){
cout< break; } else if(n==8){ s.pop_back(); cout<<"\b \b"; } else{ cout< s.push_back(char(n)); } } return s; } //与BirthDay相关的函数 istream&operator>>(istream&in,BirthDay &b){//从文件中读取生日的信息 in>>b.year>>b.month>>b.day; return in; } ostream&operator<<(ostream&out,BirthDay&b){ out< b.day; return out; } //与Member相关的函数 void Member::setE(){ try{ istringstream sin;