当前位置: 首页 > news >正文

营销网站策划方案宝安专业做网站

营销网站策划方案,宝安专业做网站,企业展厅数字多媒体,企业网站设计网络公司三#xff0e;家谱管理系统#xff08;必做#xff09;#xff08;树#xff09; [问题描述] 实现具有下列功能的家谱管理系统。 [基本要求] #xff08;1#xff09;输入文件以存放最初家谱中各成员的信息#xff0c;成员的信息中均应包含以下内容#xff1a;姓名…三家谱管理系统必做树 [问题描述] 实现具有下列功能的家谱管理系统。 [基本要求] 1输入文件以存放最初家谱中各成员的信息成员的信息中均应包含以下内容姓名、出生日期、婚否、地址、健在否、死亡日期若其已死亡也可附加其它信息、但不是必需的。 2实现数据的文件存储和读取。 3以图形方式显示家谱。 4显示第n 代所有人的信息。 5按照姓名查询输出成员信息包括其本人、父亲、孩子的信息。 6按照出生日期查询成员名单。 7输入两人姓名确定其关系。 8某成员添加孩子。 9删除某成员若其还有后代则一并删除。 10修改某成员信息。 11要求建立至少40个成员的数据以较为直观的方式显示结果并提供文稿形式以便检查。 12界面要求有合理的提示每个功能可以设立菜单根据提示可以完成相关的功能要求。 13存储结构根据系统功能要求自行设计但是要求相关数据要存储在数据文件中。测试数据要求使用1、全部合法数据2、局部非法数据。进行程序测试以保证程序的稳定。 数据结构 用到的数据结构为二叉树、二进制文件的读写。 算法设计思想 运用左孩子、右兄弟的二叉树形式来存储家谱中成员信息结构体中储存着每个人的基本信息包括1表示存在0表示不存在用于建树、几代人、姓名、出生日期、死亡日期 、婚否 0未婚1已婚、健在否0去世1健在、地址 第一次输入家谱信息时根据先序遍历的算法进行建树此后在运行程序时便不需要再输入全部信息了因为程序已将家谱信息存入二进制文件中直接读取即可显示n代人的基本信息只需先序遍历二叉树如果该成员是第n代人输出其基本信息按照姓名查询输出成员信息包括其本人、父亲、孩子的信息先序遍历返回该结点指针并输出本人基本信息根据其parent指针输出其父亲的基本信息输出其左孩子及其左孩子的全部右兄弟指针的基本信息就是其全部孩子按照出生日期查询成员名单也是通过先序遍历进行查找。输入两人姓名确定其关系。先序遍历查找到两人的指针并返回先判断两人是否是同一代人在判断两人的父亲指针及其父亲指针的父亲指针是否相同来判断两人的关系。某成员添加孩子。先序遍历查找到此人的指针并返回先判断此人左孩子指针是否为空如果为空则直接将其添加为左孩子如果不为空则判断其左孩子的右兄弟结点一直找到为空的右兄弟结点插入到此处。删除某成员若其还有后代则一并删除。先序遍历查找到此人的指针并返回如果此节点有右兄弟的话那么直接将右兄弟结点插入到指向此节点的右兄弟结点利用后序遍历的二叉树销毁算法释放掉此节点及其孩子结点的指针信息。修改某成员信息先序遍历查找到此人的指针并返回直接进行修改。 测试数据和结果 下图是经过上图修改后的家谱信息 源代码 #include stdlib.h #include stdlib.h #includeiostream #includefstream #includestring.h #includemath.h using namespace std; typedef struct memberinfo {bool exist; //1表示存在0表示不存在用于建树 int num; //几代 char name[20]; //姓名 char birthday[20]; //出生日期 char deathday[20]; //死亡日期 bool marry; //婚否 0未婚1已婚 bool live; //健在否0去世1健在 char address[100]; //地址 }Info; typedef struct Genealogy {Info member;struct Genealogy *lchild,*rbrother,*parent; }Genealogy,*genealogy;Info person; Info people; void PreOrderTraverseWrite_Dat(fstream file,Genealogy* T); void PreOrderTraverseWrite_Txt(fstream file,Genealogy* T); void FindChild_txt(Genealogy* p,fstream file); void writefile(fstream p) //将家谱信息写进二进制文件 {p.open(族谱.dat,ios::out|ios::binary);if(p.fail()){cout打开文件失败;return ;} Info father;char a[20], b[20], c[20], d[20];int n;char l;do{cinfather.exist;cin.ignore();if(father.exist1){cinfather.num;cin.ignore();cin.getline(a, 20);cin.getline(b, 20);cin.getline(c, 20);strcpy(father.name,a);strcpy(father.birthday,b);strcpy(father.deathday,c);cinfather.marry;cin.ignore();cinfather.live;cin.ignore();cin.getline(d, 20);strcpy(father.address,d);}else{strcpy(father.name,NULL);strcpy(father.birthday,NULL);strcpy(father.deathday,NULL);father.marry1;father.live1;father.num0;}p.write((char*)father,sizeof(father));cinl;cin.ignore();}while(ly);p.close(); } void Create(fstream data,genealogy T) {data.read((char*)person,sizeof(person));if(person.exist0) TNULL;else{T(Genealogy*)malloc(sizeof(Genealogy));if(!T) exit(0);T-member.existperson.exist;T-member.numperson.num;strcpy(T-member.name,person.name);strcpy(T-member.birthday,person.birthday);strcpy(T-member.deathday,person.deathday);strcpy(T-member.address,person.address);T-member.marryperson.marry;T-member.liveperson.live;Create(data,T-lchild);Create(data,T-rbrother);} } void output_impl(genealogy T, bool left, string const indent) {if (T-rbrother ){output_impl(T-rbrother , false, indent (left ? | : ));}cout indent;cout (left ? \\ : /);cout -----;cout T-member.name endl;if (T-lchild ){output_impl(T-lchild , true, indent (left ? : | ));} } void output(genealogy T) {if (T-rbrother ){output_impl(T-rbrother , false, );}cout T-member.name endl;if (T-lchild ){output_impl(T-lchild , true, );} }void CreateGenealogy(fstream data,genealogy T) {data.open(族谱.dat,ios::in|ios::binary);Create(data,T);data.close(); } void setparent(genealogy T,Genealogy* parent) {T-parentparent;if(T-lchild!NULL)setparent(T-lchild,T);if(T-rbrother!NULL)setparent(T-rbrother,parent); } void Show(genealogy T,int n) {if(T!NULL){if(T-member.numn){cout姓名T-member.nameendl;cout日期T-member.birthday-T-member.deathdayendl;if(T-member.marry1) cout婚否已婚endl;else cout婚否未婚endl;if(T-member.live1) cout健在否健在endl;else cout健在否不健在endl;cout地址T-member.addressendl;cout------------------------------------------------------------endl;}Show(T-lchild,n);Show(T-rbrother,n);} } void Menu() {cout 家谱管理系统 endl;cout 主菜单 endl;cout 1:输入家谱信息 \n 2:创建家谱 \n 3:显示第n代所有人的信息 \n 4:按照姓名查询输出成员信息包括其本人、父亲、孩子的信息 \n 5:按照出生日期查询成员名单 \n 6:输入两人姓名确定其关系 \n 7. 某成员添加孩子 \n 8. 删除某成员若其还有后代则一并删除 \n 9. 修改某成员信息 \n 10. 退出系统 \n 输入选择(1—11): ;} Genealogy* FindMember(genealogy T,char Name[]) {Genealogy* pNULL;if(TNULL) return NULL;else if(strcmp(Name,T-member.name)0) return T;else{pFindMember(T-lchild,Name);if(pNULL)return FindMember(T-rbrother,Name);else return p;} } Genealogy* FindMember1(genealogy T,genealogy q) {Genealogy* pNULL;if(TNULL) return NULL;else if(T-rbrotherq) return T;else{pFindMember1(T-lchild,q);if(pNULL)return FindMember1(T-rbrother,q);else return p;} } //在以t为根的树中找结点p的双亲 Genealogy* findParent(genealogy t,Genealogy* p){if(t NULL || p NULL) return NULL;Genealogy* q t-lchild;Genealogy* s;//循长子的兄弟链递归在子树中搜索 while(q ! NULL q ! p){s findParent(p,q);if( s! NULL) return s; //找到双亲返回 q q-rbrother;}if(q ! NULL q p) return t; //找到双亲 else return NULL; //未找到 } void FindChild(Genealogy* p) {int i1;if(p-lchild){pp-lchild;cout第i个孩子信息: endl;cout姓名p-member.nameendl;cout日期p-member.birthday-p-member.deathdayendl;if(p-member.marry1) cout婚否已婚endl;else cout婚否未婚endl;if(p-member.live1) cout健在否健在endl;else cout健在否不健在endl;cout地址p-member.addressendl;i;pp-rbrother;cout------------------------------------------------------------endl;while(p){cout第i个孩子信息: endl;cout姓名p-member.nameendl;cout日期p-member.birthday-p-member.deathdayendl;if(p-member.marry1) cout婚否已婚endl;else cout婚否未婚endl;if(p-member.live1) cout健在否健在endl;else cout健在否不健在endl;cout地址p-member.addressendl;i;pp-rbrother;cout------------------------------------------------------------endl;}}else cout该成员无孩子endl; }Genealogy* Findmember_birthday(genealogy T,char Birthday[]) {Genealogy* pNULL;if(TNULL) return NULL;else if(strcmp(Birthday,T-member.birthday)0) return T;else{pFindmember_birthday(T-lchild,Birthday);if(pNULL)return Findmember_birthday(T-rbrother,Birthday);else return p;} } void InsertChild(genealogy q) {Genealogy* q1q;Genealogy* p(Genealogy*)malloc(sizeof(Genealogy));p-lchildNULL;p-rbrotherNULL;cout请输入添加孩子的姓名;cinp-member.name;cout请输入添加孩子的出生日期;cinp-member.birthday;p-member.deathday[0]#;p-member.live1;p-member.marry0;cout请输入添加孩子的地址;cinp-member.address;p-member.exist1;if(q-lchildNULL){q-lchildp;p-parentq;}else{q1q-lchild;if(q1-rbrotherNULL){q1-rbrotherp;p-parentq;}else{while(q1-rbrother)q1q1-rbrother;q1-rbrotherp;p-parentq;} }p-member.numq-member.num1;cout添加成功endl; } Genealogy* Destroy(genealogy q) {if(q){q-lchildDestroy(q-lchild);q-rbrotherDestroy(q-rbrother);free(q);return NULL;} } void DeleteMember(genealogy q,genealogy p) {p-rbrotherq-rbrother;Destroy(q);cout删除成功endl; } void ModifyMemberinformation(genealogy q) {int choice;while(true){cout 1:修改姓名 \n 2:修改出生日期 \n 3.修改死亡日期\n 4:修改是否健在 \n 5:修改是否已婚 \n 6:修改地址 \n 7. 退出系统 \n 输入选择(1—6): ;cinchoice;switch (choice){case 1:cout请输入修改后的姓名;cinq-member.name;break;case 2:cout请输入修改后的出生日期;cinq-member.birthday;break;case 3:cout请输入修改后的死亡日期;cinq-member.deathday;break;case 4:cout请输入修改后是否健在 1.是 0.否;cinq-member.live;break;case 5:cout请输入修改后是否已婚 1.是 0.否;cinq-member.marry;break;case 6:cout请输入修改后的地址; cinq-member.address;break;case 7:return;break;}} } int main() {fstream datafile;int choice;genealogy T;bool judgetrue;while(judgetrue){Menu();cinchoice;switch (choice){case 1:cout请输入家谱信息;writefile(datafile);cout \n;break;case 2:CreateGenealogy(datafile,T);Genealogy* Parent;setparent(T,Parent);output(T);cout家谱创建成功endl;cout \n ;break;case 3:int n;cout请输入要查找第几代人的信息; cinn;cout------------------------------------------------------------endl;Show(T,n); break;case 4:char Name[20];cout请输入要查找人的姓名; cinName;Genealogy* p1;p1FindMember(T,Name);if(p1NULL) cout查无此人endl;else{cout------------------------------------------------------------endl;cout本人信息endl;cout姓名p1-member.nameendl;cout日期p1-member.birthday-p1-member.deathdayendl;if(p1-member.marry1) cout婚否已婚endl;else cout婚否未婚endl;if(p1-member.live1) cout健在否健在endl;else cout健在否不健在endl;cout地址p1-member.addressendl;cout------------------------------------------------------------endl;cout父亲信息endl;cout姓名p1-parent-member.name endl;cout日期p1-parent-member.birthday-p1-parent-member.deathdayendl;if(p1-parent-member.marry1) cout婚否已婚endl;else cout婚否未婚endl;if(p1-parent-member.live1) cout健在否健在endl;else cout健在否不健在endl;cout地址p1-parent-member.addressendl;cout------------------------------------------------------------endl;FindChild(p1);}break;case 5:char Birthday[20];cout请输入你想要查询成员的生日;cinBirthday;Genealogy* p3;p3Findmember_birthday(T,Birthday);if(p3NULL) cout查无此人endl;else{cout------------------------------------------------------------endl;cout此人信息endl;cout姓名p3-member.nameendl;cout日期p3-member.birthday-p3-member.deathdayendl;if(p3-member.marry1) cout婚否已婚endl;else cout婚否未婚endl;if(p3-member.live1) cout健在否健在endl;else cout健在否不健在endl;cout地址p3-member.addressendl;cout------------------------------------------------------------endl;}break;case 6:char Name1[20],Name2[20];cout请输入第一个人的姓名; cinName1;cout请输入第二个人的姓名; cinName2;Genealogy* q1,*q2;q1FindMember(T,Name1);if(q1NULL) {cout家谱中没有第一个人endl;break;} q2FindMember(T,Name2); if(q2NULL){cout家谱中没有第二个人endl;break;}if(abs(q1-member.num-q2-member.num)0){if(q1-parentq2-parent)coutName1和Name2是亲兄弟endl;elsecoutName1和Name2是堂兄弟endl;}if(abs(q1-member.num-q2-member.num)1){if(q1-member.numq2-member.num){if(q1-parentq2)coutName2是Name1的父亲endl;elsecoutName2是Name1的叔叔endl;}else{if(q1q2-parent)coutName1是Name2的父亲endl;elsecoutName1是Name2的叔叔endl;}}if(abs(q1-member.num-q2-member.num)2){if(q1-member.numq2-member.num){if(q1-parent-parentq2)coutName2是Name1的爷爷endl;elsecoutName2是Name1的堂爷爷endl;}else{if(q1q2-parent-parent)coutName1是Name2的爷爷endl;elsecoutName1是Name2的堂爷爷endl;}}if(abs(q1-member.num-q2-member.num)3){if(q1-member.numq2-member.num){if(q1-parent-parentq2)coutName2是Name1的祖先endl;elsecoutName2是Name1的祖先的兄弟endl;}else{if(q1q2-parent-parent)coutName1是Name2的祖先endl;elsecoutName1是Name2的祖先的兄弟endl;}}break;case 7:char Name3[20];cout请输入被插入成员父亲的姓名;cinName3;Genealogy* q3;q3FindMember(T,Name3);if(q3NULL)cout查无此人endl;else{InsertChild(q3);}break;case 8:char Name4[20];cout请输入删除成员的姓名;cinName4;Genealogy* q4,*q5;q4FindMember(T,Name4);//coutq4-member.nameendl;q5FindMember1(T,q4);//coutq5-member.nameendl;DeleteMember(q4,q5);break;case 9:char Name5[20];cout请输入要修改信息的成员的姓名;cinName5;Genealogy* q6;q6FindMember(T,Name5);ModifyMemberinformation(q6);break;case 10:judgefalse;break;case 11:output(T);}} //此行往下的操作是将之前修改过的家谱信息重新写入文件中 fstream file;file.open(族谱.dat,ios::out|ios::binary); person.exist0; //定义空白变量 person.num-1;strcpy(person.name,NULL);strcpy(person.birthday,000);strcpy(person.deathday,000);person.marry-1;person.live-1;strcpy(person.address,NULL);PreOrderTraverseWrite_Dat(file,T);file.close();//此行往下的操作是将之前修改过的家谱写入文件家谱展示.txt中可点击查看 fstream File;File.open(家谱展示.txt);PreOrderTraverseWrite_Txt(File,T);File.close();coutok啦endl;} void PreOrderTraverseWrite_Dat(fstream file,Genealogy* T) {if(TNULL){file.write((char*)person,sizeof(person));}if(T!NULL){people.existT-member.exist;people.numT-member.num;strcpy(people.name,T-member.name);strcpy(people.birthday,T-member.birthday);strcpy(people.deathday,T-member.birthday);people.marryT-member.marry;people.liveT-member.live;strcpy(people.address,T-member.address);file.write((char*)people,sizeof(people));PreOrderTraverseWrite_Dat(file, T-lchild);PreOrderTraverseWrite_Dat(file, T-rbrother);} } void PreOrderTraverseWrite_Txt(fstream file,Genealogy* T) {if(TNULL){file姓名空\n;file此处无人\n;file------------------------------------------------------------\n;}if(T!NULL){people.existT-member.exist;people.numT-member.num;strcpy(people.name,T-member.name);strcpy(people.birthday,T-member.birthday);strcpy(people.deathday,T-member.birthday);people.marryT-member.marry;people.liveT-member.live;strcpy(people.address,T-member.address);file姓名people.name\n;file第people.num代人\n; file出生日期people.birthday\n;file死亡日期people.deathday\n;if(people.marry1)file婚否已婚\n;elsefile婚否未婚\n;if(people.live1)file健在否健在\n;elsefile健在否不健在\n;file地址people.address\n;FindChild_txt(T,file);file------------------------------------------------------------\n;PreOrderTraverseWrite_Txt(file, T-lchild);PreOrderTraverseWrite_Txt(file, T-rbrother);} } void FindChild_txt(Genealogy* p,fstream file) {int i1;if(p-lchild){pp-lchild;file第i个孩子姓名p-member.name\n;i;pp-rbrother;while(p){file第i个孩子姓名p-member.name\n;i;pp-rbrother;}}else file该成员无孩子\n; } /*姓名、出生日期、婚否、地址、健在否、死亡日期*/
http://www.laogonggong.com/news/105642.html

相关文章:

  • 网站广告位投放上海人才招聘哪个网站好
  • 天马网络网站网站在百度的标头不对
  • wordpress禁止截图青岛关键词优化seo
  • 有高级感的公司名字淘宝seo是指
  • 建立网站有哪些步骤东莞网站建设流程
  • 怎么访问域名网站吗流程图制作软件
  • 表白网站制作平台wordpress手动降级
  • wordpress底部链接修改山东网站seo公司
  • 北京网站建设知名公司排名wordpress评论 是哪个页面
  • 江西华邦网站建设做自己视频教程的网站
  • 山西推广型网站建设建设局网站新闻
  • 网站的建设与维护需要资质吗wordpress 上一页下一页
  • vs用户登录注册网站建设代码wordpress手机版下载
  • 徐州模板建站平台淘宝内部优惠券网站怎样做的
  • 威县网站建设报价免费推广网站都有哪些
  • 贵阳官方网站农业信息网站建设概念
  • 网站右边悬浮代码网站自动生成系统
  • 网站导航是怎么做的企业网站用什么技术做
  • wordpress网站访问量如何有效提高网站排名
  • 深圳产品网站建设wordpress 自动保存 插件
  • python做网站 知乎沈阳网站哪家做的好
  • 视频做动图的网站sem和seo
  • 西宁网站建设python基础教程推荐
  • 商务网站建设 模板东营市东营网站设计
  • wordpress本地做好如何改站点地址网站相关前置许可
  • 网站建设分金手指专业十九中国卫生人才网
  • 好的网站首页的特点建筑公司取名参考
  • 温州网站建设华一网站检测报告哪里做
  • 北京正规网站建设公司企业管理公司是干什么的
  • 网站建设要会英语吗上海集团网址