当前位置:文档之家› 数据结构_家谱管理系统方案

数据结构_家谱管理系统方案

宁波大红鹰学院信息工程学院课程设计报项目名称:家谱查询系统项目组长:白钰琦项目成员:徐程凯、徐海域、项鸿伟班级名称:10计科1班专业名称:计算机科学与技术完成时间:2012年12月1日信息工程学院制一、..................................... 案例描述-3 -1总体描述............................. -3 -2、模块描述........................... -4 -二、..................................... 设计思路-5 -三、..................................... 程序设计-5 -1、数据结构描述......................... -5 -2、主函数及其流程图...................... -6 -3、源程序........................... -7 -四、...................................... 调试与分析-7 -1、主菜单............................ -12 -2、显示家谱信息......................... -13 -3、显示家谱中第n代人所有信息................. -13 -4、按姓名查找某人并相应输出................... -13 -5、按出生日期查找家谱成员信息......... 错误!未定义书签。

6、为家谱中成员添加孩子信息.................. -14 -7、为家谱中成员添加妻子信息............ 错误!未定义书签。

8删除家谱中成员及其后代信息............ 错误!未定义书签。

9、修改家谱中成员信息......................................... -15 ................................................................................... -10、确定家谱中两个成员关系 ........... 错误!未定义书签。

11、按出生年月排序家谱 ............. 错误!未定义书签。

一、案例描述1、总体描述家谱管理系统是查询家谱信息必不可少的一部分 •利用家谱管理系统可 以清楚的查询到家族成员的详细信息。

该家谱管理系统是通过树来实现的。

本程序具有插入、查找等功能•可以实现存放家谱中各成员的信息。

程序的 操作界面简洁美观•易于操作。

本程序运用了函数、循环、树等知识来进行 设计.实现系统和数据结构设计1、 完成情况 .........................2、 心得体会 .......................... -15 - -16 -2、模块描述1).输入文件以存放最初家谱中各成员的信息•成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡) .也可附加其它信息、但不是必需的。

2).实现数据的存盘和读盘。

3).以图形方式显示家谱。

4).显示第n代所有人的信息。

5).按照姓名查询.输出成员信息(包括其本人、父亲、孩子的信息)。

6).按照出生日期查询成员名单。

7).输入两人姓名.确定其关系。

8).某成员添加孩子。

9).删除某成员(若其还有后代.则一并删除)。

10).修改某成员信息。

11).按出生日期对家谱中所有人排序。

12).打开一家谱时.提示当天生日的健在成员。

图1模块调用示意图、设计思路本程序要求模块化管理•分成菜单函数、创建函数、添加函数、查找函数、控制各个部分从而将程序简单化出来分析。

本程序的主要功能是:创建数据:创建各相关数据•例如创建家谱信息。

添加数据:增加家谱成员孩子信息。

查询信息:按照姓名来查询成员信息•还可以通过输入出生日期来查询该家谱信息。

退出系统:程序编译结束后退出系统。

三、程序设计1、数据结构描述本程序首先定义了结构体•定义了Ic.rc两个指针域;定义如下:typedef struct BiTNode{int mark;// 标记in t level;char name[50];〃姓名char birthday[50];〃生日char address[MAXN];〃住址int marriage;// 婚否(true表示结婚.false 表示没结婚)int live;// 建在(true表示活着.false 表示过世)int sex;// 性别(true表示男.false 表示女)Elemtype data;//struct BiTNode *lc,*rc;}BiTNode,*BiTree;2、主函数及其流程图图4创建家谱流程图3、源程序#in clude<stdio.h>#in clude<stri ng.h>#in clude<stdlib.h>#in clude<stri ng.h>typedef struct pnode{char male[10];char female[10];int n;struct pnode *fchild,*brother;}pno de,*ptree;void creatfamily(ptree ,FILE );void preorder(ptree p);void show(ptree p);in t Men u(){system("color 1f");system("mode con: cols=76 lin es=35");int i;n ; ri *$/"*******************\n\n");printf (” 输入1~6之间的数字选择相应功能:");scan f("%d",&i);return i;}ptree creatfamily(FILE *fp) {if(!feof(fp)){ptree p; p=(ptree)malloc(sizeof(p no de));char fname[10],m name[10];int i;fscan f(fp,"%s %s %d\n", fname,m name ,&i);if((strcmp(fname," n" )==0) && (strcmp( mn ame," n" )==0) && (i==0)) {p=NULL; return p;}else{ strcpy(p->male,fname); strcpy(p->female, mn ame); p-> n=i;printf (” 读取成功 \n");p->fchild=creatfamily(fp); p->brother=creatfamily(fp);return p;}}}void PreOrder(ptree p) printf (”请选择:\n"); printf (”\n ”); printf (”1. 读取一个家庭关系\n"); printf (”\n ”); printf (”2. 显示个豕庭关系\n ); printf (”\n"); printf (”3. 查找成员\n"); printf (”\n"); printf (”4. 添加新成员\n"); printf (”\n"); printf (”5. 修改成员\n"); printf (”\n"); printf (”6. 保存\n ”); printf (”\n"); printf (”7. 退出系统\n\n\n");printf (” \n");prin ff ********************************************************************************** **\ n\n"); 欢迎使用爱新觉罗家族管理系统{if(p){show(p);PreOrder(p->fchild); PreOrder(p->brother);}}void show(ptree p){printf(" 名字配偶第几代\n");prin tf("%2s %6s %d\n",p->male,p->female,p-> n); }void search(ptree p,char n ame[]){if(p){if(strcmp(p->male, name)==0){show(p);getchar();getchar();}search(p->fchild ,n ame); search(p->brother, name);}}void add(ptree p,char n ame[]){char fname[10], mn ame[10];int i;if(p){if(strcmp(p->male, name)==0){printf(" 名字配偶第几代\n");scan f("%s %s %d",fname,m name, &i); p->fchild=(ptree)malloc(sizeof(p no de)); strcpy(p->fchild->male,fname);strcpy(p->fchild->female, mn ame);p->fchild->n=i;p->fchild->fchild=NULL; p->fchild->brother=NULL;}add(p->fchild, name); add(p->brother, name);}}void gai(ptree p,char n ame[]){char fname[10], mn ame[10];int i;if(p){if(strcmp(p->male, name)==0){printf(" 名字配偶第几代\n”);scan f("%s %s %d",fname,m name, &i); strcpy(p->male,fname);strcpy(p->female,m name);p-> n=i;}gai(p->fchild, name); gai(p->brother, name);}}void save(ptree p,FILE *stream){if(p){fprin tf(stream,"%s %s %d",p->male,p->female,p->n); save(p->fchild,stream);save(p->brother,stream);}else{char out[20] = "n n 0";fprin tf(stream,"%s\n" ,out);}}int mai n(){ int status;char n ame[10];ptree p;FILE *fp= fope n("lmx.txt","r+");while(1){status=Me nu();switch(status){case 1:p=creatfamily(fp);getchar();getchar();break;case 2:PreOrder(p);getchar();getchar();break;case 3:printf(" 请输入搜索的名字\n");sca nf("%s", name);search(p ,n ame); break;case 4:printf(" 请输入要孩子的人\n");sca nf("%s", name);add(p ,n ame);break;case 5:printf(" 请输入要修该的人\n");sca nf("%s", name);gai(p, name); break;case 6:save(p,fp);getchar();getchar();break;case 7:printf("\n 感谢使用本系统\n");fclose(fp);fclose(fp);exit(O); // 如果选择5.则退出循环终止程序break;default :printf("\n 您选择有误\n");getchar();}}}四、调试与分析1、主菜单" -N:\字习圏掲结构\家族管理白锂琦\代码©E -家谱管理系统的主界面2、显示家谱信息读取家谱信息3、显示家谱中第n 代人所有信息显示家谱中第n 代人所有信息 计成成成成 A1取取取取 读读匕匕 功 应 第几代 第几代 第几代 偶 3iffi2 间配济配里斟酣无之尔舍若 %博赫 入字临字弊字禮子钮4、按姓名查找某人并相应输出查询家谱成员信息的界面5、为家谱中成员添加孩子信息为家谱中成员添加孩子信息誤搜 』入 Atff 厂入ASS 1 配富 噩产选择相应功能;4 第几代i 46修改家谱中成员信息 计入 入输历 2理SA 名弘 代 第 「可 偶両修改家谱中成员信息五、设计总结1、完成情况2、心得体会白钰琦:从这个项目中.我懂得了代码编写能力的提高不是一天两天的事.而是一个日积月累的过程。

相关主题