数据结构大作业之家谱管理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档