数据结构大作业之家谱管理系统Word下载.docx

上传人:b****2 文档编号:5141321 上传时间:2023-05-04 格式:DOCX 页数:32 大小:70.34KB
下载 相关 举报
数据结构大作业之家谱管理系统Word下载.docx_第1页
第1页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第2页
第2页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第3页
第3页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第4页
第4页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第5页
第5页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第6页
第6页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第7页
第7页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第8页
第8页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第9页
第9页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第10页
第10页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第11页
第11页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第12页
第12页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第13页
第13页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第14页
第14页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第15页
第15页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第16页
第16页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第17页
第17页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第18页
第18页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第19页
第19页 / 共32页
数据结构大作业之家谱管理系统Word下载.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构大作业之家谱管理系统Word下载.docx

《数据结构大作业之家谱管理系统Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构大作业之家谱管理系统Word下载.docx(32页珍藏版)》请在冰点文库上搜索。

数据结构大作业之家谱管理系统Word下载.docx

//指向兄弟的指针

private:

//成员的各种数据

stringname="

未知"

;

stringbirthPlace="

BirthDaybirthDay;

stringsex="

floatheight=0;

intage=0;

stringeducation="

stringjob="

stringfather="

classFamilySystem{

FamilySystem()=default;

~FamilySystem(){

deleteroot;

}

boolfileInit();

//从文件中读取数据

intmenu();

//显示菜单(功能)

booladdMem();

//增加成员

booldeleteMem();

//删除成员

booldemandMem();

//查询

booldemandAve();

//查询家庭整体情况

boolmodifyMem();

//修改成员

boolshowFamily();

//展示整个家谱

boolsaveFile();

//保存信息到文件中,将使用两个文件,一个保存成员信息,一个保存家谱整体信息

Member*root=nullptr;

//家谱数结构的根节点指针?

inttotal=0;

//总人数

floataveAge=0;

//平均年龄

floataveHeight=0;

//平均身高

floataveMember=0;

//家庭平均人数

floatratio=0;

//男女比例

voidcalculate();

//计算平均值等

Member*seek(string);

//查找是否存在成员

voiddisplay(Member*,int);

//先序遍历树,用于显示所有成员

externstringgets();

//用于接收键盘的输入

类的函数及相关操作函数的实现

iomanip>

vector>

fstream>

sstream>

conio.h>

#include"

SystemClass.h"

cin;

cout;

endl;

setw;

vector;

ios;

ifstream;

ofstream;

istringstream;

stringgets(){//从控制台获取字符等信息

strings;

while(intn=_getch()){

if(n==27){

throw27;

break;

}

elseif(n==13){

cout<

endl;

elseif(n==8){

s.pop_back();

"

\b\b"

else{

char(n);

s.push_back(char(n));

returns;

}

//与BirthDay相关的函数

istream&

in,BirthDay&

b){//从文件中读取生日的信息

in>

b.year>

b.month>

b.day;

returnin;

ostream&

out,BirthDay&

b){

out<

b.year<

<

b.month<

returnout;

//与Member相关的函数

voidMember:

setE(){

try{

istringstreamsin;

cout<

setw(20)<

请输入成员信息:

\n"

<

endl<

姓名:

"

sin.str(gets());

sin>

name;

出生地:

sin.clear();

birthPlace;

生日:

while(true){

sin.clear();

sin>

birthDay.year>

birthDay.month>

birthDay.day;

if(!

sin||birthDay.year>

2014||birthDay.month>

12||birthDay.day>

31){

cout<

输入错误,请重新输入:

sin.str(gets());

elsebreak;

性别:

while(sin>

sex){

if(sex=="

male"

||sex=="

female"

男"

女"

break;

else{

性别必须是male、female、男或者女,请重新输入:

}

身高(厘米):

while(!

(sin>

height)){

sin.str(gets());

年龄:

age)||age>

300){

学历:

education;

工作:

job;

父亲:

father;

catch(intex){

throwex;

return;

m){

setw(25)<

该成员信息如下:

endl

<

setw(25)<

姓名:

m.name<

endl

出生地:

m.birthPlace<

生日:

m.birthDay.year<

m.birthDay.month

m.birthDay.day<

m.sex<

m.height<

m.age<

m.education<

m.job<

m.father<

m.name>

m.birthPlace>

m.birthDay>

m.sex

>

m.height>

m.age>

m.education>

m.job>

m.father;

//FamilySystem的成员函数

intFamilySystem:

menu(){

cout<

\n\n"

---------------------------\n"

||\n"

|系统菜单|\n"

|1.查询成员|\n"

|2.查询家庭整体情况|\n"

|3.添加成员|\n"

|4.删除成员|\n"

|5.修改成员信息|\n"

|6.显示整个家谱|\n"

|按ESC退出系统|\n"

intn=0;

while

(1){

n=_getch();

if(n==27)break;

if(n>

=49&

&

n<

=54)break;

\n请按下1、2、3、4、5、6选择或按ESC键退出!

returnn;

boolFamilySystem:

fileInit(){

ifstreaminfile;

//打开存储成员信息的文件,读入成员信息

infile.open("

Members.txt"

ios:

in|ios:

_Nocreate);

if(!

infile){

returnfalse;

vector<

Member*>

genely;

//保存这一代成员的指针

next;

//保存下一代成员的指针

Member*temp=newMember;

//临时保存输入的成员信息

root=temp;

//第一个赋给root

genely.push_back(root);

next.push_back(root);

while(infile>

*temp){

//将成员放入家族树中,成员的父亲必须是这一代的成员

for(autoi=genely.begin();

i!

=genely.end();

++i){

if((*i)->

name==temp->

father){

if((*i)->

pson==nullptr)

(*i)->

pson=temp;

else{

Member*p=(*i)->

pson;

while(p->

pbro!

=nullptr)

p=p->

pbro;

p->

pbro=temp;

}

next.push_back(temp);

temp=nullptr;

//若成员的父亲不是这一代的成员,则将next赋予genely,迭进下一代

if(temp!

=nullptr){

genely=next;

//迭进下一代

next.clear();

//清空next

for(autoi:

genely){//将成员放入家族树中

if(i->

i->

next.push_back(temp);

temp=nullptr;

break;

//动态创建临时成员变量,用于存储输入的下一个成员的信息

temp=newMember;

infile.close();

//关闭存储成员信息的文件

//若文件中没有成员信息,将root置为空

if(root->

name=="

root=nullptr;

//打开存储家庭总体信息的文件,读入信息

Wholes.txt"

infile>

total>

aveAge>

aveHeight>

aveMember>

ratio;

//关闭文件

returntrue;

Member*FamilySystem:

seek(stringnam){

//若家谱树为空,返回空指针

if(root==nullptr)

returnnullptr;

//若root不为空,继续查找

Member*store=nullptr;

//存储返回的指针

//存储这一代的指针

//存储下一代的指针

for(;

){//循环查找

//在这一代中查找,若找到,跳到最后

for(autop:

genely){

if(p->

name==nam){

store=p;

gotoEnd;

}

//判断下一代是否为空,若为空,跳到最后

intjubge=0;

pson!

=nullptr)

++jubge;

if(jubge==0)

gotoEnd;

//找到下一代

Member*temp=p->

if(temp==nullptr)continue;

while(temp->

pbro!

next.push_back(temp->

pbro);

temp=temp->

genely=next;

next.clear();

End:

returnstore;

addMem(){

3.添加成员.\n"

Member*temp=newMember;

temp->

setE();

//输入成员信息

catch(int){

//检查其父亲是否存在

Member*jubge=seek(temp->

father);

if(root==nullptr)root=temp;

elseif(jubge==nullptr){

\n家谱中没有此人父亲的信息!

无法插入!

\n请确认此人是否此家族中的人!

else{

if(seek(temp->

name)!

\n\n此人已存在于家谱中!

按ENTER确定添加并返回菜单\n按ESC取消添加并返回菜单"

for(;

){

intj=_getch();

if(j==27){

deletetemp;

if(j==13){

if(jubge->

pson==nullptr)jubge->

else{

Member*p=jubge->

while(p->

p=p->

p->

}

cout<

\n保存成功!

\n按ESC键返回菜单"

if(_getch()==27)

deleteMem(){

4.删除成员.\n\n"

请输入姓名:

stringna;

istringstreamsin(gets());

sin>

na;

gotoend;

Member*temp=seek(na);

if(temp==nullptr)

\n\n家谱中没有此人!

else{

if(temp->

\n\n此人有后代!

若删除此人其后代将同时被删!

\n\n按ENTER继续\n按ESC退出"

if(j==27)

returnfalse;

if(j==13)

Member*p=seek(temp->

if(p==nullptr)root=nullptr;

elseif(temp==p->

pson)p->

pson=nullptr;

while(p->

=temp){

p=p->

p->

pbro=nullptr;

\n\n删除成功!

cout<

end:

returntrue;

demandMem(){

1.查询成员.\n\n"

try{

Member*m=seek(na);

if(m!

=nullptr)cout<

*m;

elsecout<

\n\n对不起,家谱中没有此人的信息!

voidFamilySystem:

calcula

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2