收藏 分销(赏)

家谱综合管理系统.doc

上传人:精**** 文档编号:3032784 上传时间:2024-06-13 格式:DOC 页数:36 大小:403.04KB
下载 相关 举报
家谱综合管理系统.doc_第1页
第1页 / 共36页
家谱综合管理系统.doc_第2页
第2页 / 共36页
家谱综合管理系统.doc_第3页
第3页 / 共36页
家谱综合管理系统.doc_第4页
第4页 / 共36页
家谱综合管理系统.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、洛 阳 理 工 学 院课 程 设 计 报 告 数据结构课程设计课程名称 _家谱管理系统设计题目 _计算机科学和技术专 业 _B150405班 级 _B15080822学 号 _宋士龙姓 名 _12月30日完成日期 _课 程 设 计 任 务 书设计题目:家谱管理系统设计内容和要求:【问题描述】:实现含有下列功效家谱管理系统1). 输入文件以存放最初家谱中各组员信息,组员信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需。2). 实现数据存盘和读盘。3). 显示家谱。4). 根据出生日期查询组员名单。5). 根据姓名查询,输出组员信息(

2、包含其本人、父亲、孩子信息)。6). 修改某组员信息。【基础要求】:界面要求:有合理提醒,每个功效能够设置菜单,依据提醒,能够完成相关功效要求。存放结构:学生自己依据系统功效要求自己设计,不过要求相关数据要存放在数据文件中。测试数据:要求使用1、全部正当数据;2、局部非法数据。进行程序测试,以确保程序稳定。测试数据及测试结果请在上交资料中写明。 指导老师:_ 年 月 日课 程 设 计 评 语 成绩: 指导老师:_ 年 月 日一、 算法思想本程序是一个管理家谱系统,经过这个系统能够对家族组员进行创建、显示、查找、修改、和保留家谱和读取家谱功效。该系统分为以下多个模块,分别是:创建家谱,显示家谱、

3、按姓名和生日查找家庭组员、修改家谱、存盘、读盘和退出系统。本程序用到存放形式为多叉树,因为家谱中每个人现有父母又有孩子,而且孩子个数并不确定,所以用多叉树来存放最为适宜。用多叉树来存放,就用用到多叉树递归创建及递归遍历。因为是多叉树,所以遍历时用广度优先搜索适宜。本函数最关键思想就是递归调用,每个子函数中全部会用到递归。定义结构体时给定指针数组最大容量,来要求家谱中最多能够存多少人。定义一个家族树指针变量用来当每个子函数参数,从而将其返回到主函数中。以下时算法思想步骤图:家谱管理系统创建家谱显示家谱修改家谱查找组员读写家谱根据姓名根据生日修改本人修改父母修改孩子存盘读盘退出系统二、 模块划分1

4、. int main():主函数2. void CreatTree(TreeNode *Tree):创建家族树3. void OutPutAll(TreeNode *Tree):显示家谱 4. void Menue(TreeNode *Tree):主菜单5. void SubMenue1(TreeNode * Tree):副菜单(修改选项菜单)6. void Change(TreeNode * Tree):修改家谱7. TreeNode * SearchTree(TreeNode *Tree,char name,int length):根据姓名查找家谱组员8. TreeNode * Searc

5、hTree1(TreeNode *Tree,char birth,int length):根据生日查找家谱组员9. void OutPutMessage(TreeNode * Tree,char name,int length):输出按姓名查找到家谱组员10. void OutPutMessage1(TreeNode * Tree,char birth,int length):输出按生日查找到家谱组员11. void SaveFamily(TreeNode *root):保留家谱12. void ReadFamily(TreeNode *root):读取家谱三、 数据结构typedef str

6、uct TreeNode int ChildNum; /统计这个人拥有多个儿女 char Name20;/统计这个人姓名 char birthday20;/生日int marriage;/婚否(1表示结婚,0表示没结婚)int death;/生死(1表示活着,0表示过世) char Kind;/标示节点种类有女G男B char address100;/住址 char livemassage50;/死亡日期(假如其已经死亡) struct TreeNode *NextNode20; /统计这个人儿女 struct TreeNode *Parent; /统计这个节点父节点 TreeNode,*tr

7、ee;四、 测试第一组数据为:爷爷,奶奶,父亲,母亲,我,二叔,二婶,姐姐,三叔,三婶,弟弟一共三代11个人。其中爷爷是根节点,奶奶为爷爷配偶,同时也是爷爷第一个后继节点。父亲,二叔,三叔为爷爷儿女。父亲配偶是母亲,父亲儿女是我。二叔配偶是二婶,儿女是姐姐。三叔配偶是三婶,三叔儿女是弟弟。进入程序以后,首优异行创建家谱,然后进行存盘,以后进行修改和查询等步骤。退出程序在进入程序时,进行读盘。以后在进行其它操作,程序完成以后退出即可。爷爷父亲二叔奶奶三叔母亲二婶三婶我姐姐弟弟 图1 家族树第一组数据测试截图为:图2 显示家谱图3 根据姓名查找家族组员图4 存盘第二组数据为:王老王大刘老王二李大张

8、二王小一王小二图4 王家家族树第二组数据测试截屏为:图5 修改家族组员信息图6 修改某个人具体信息图7 根据生日查找某人图8 读盘五、 源程序#include #include #include #ifdef WIN32#define CLEAR system(cls)#define TipForSaveFilePosition printf(tt输入文件名及保留位置(eg: D:example.txt): )#define TipForReadFilePosition printf(tt文件名及其路径(eg: D:example.txt): )#else#define CLEAR syste

9、m(clear)#define TipForSaveFilePosition printf(tt输入文件名及保留位置(eg: /home/xiong/example.txt): )#define TipForReadFilePosition printf(tt文件名及其路径(eg: /home/xiong/example.txt): )#endif#define maxFileNameLen 50 /保留文件名最大长度int FLAG=0;int a=1; typedef struct TreeNode int ChildNum; /统计这个人拥有多个儿女 char Name20;/统计这个人

10、姓名 char birthday20;/生日int marriage;/婚否(1表示结婚,0表示没结婚)int death;/生死(1表示活着,0表示过世) char Kind;/标示节点种类有女G男B char address100;/住址 char livemassage50;/死亡日期(假如其已经死亡) struct TreeNode *NextNode20; /统计这个人儿女 struct TreeNode *Parent; /统计这个节点父节点 TreeNode,*tree; void CreatTree(TreeNode *Tree); void OutPutAll(TreeNod

11、e *Tree); void Menue(TreeNode *Tree); void SubMenue1(TreeNode * Tree); void SubMenue2(TreeNode *Tree); void Change(TreeNode * Tree); void AddNew(TreeNode * Tree); TreeNode * SearchTree(TreeNode *Tree,char name,int length); TreeNode * SearchTree1(TreeNode *Tree,char birth,int length) ; void OutPutMes

12、sage(TreeNode * Tree,char name,int length); void OutPutMessage1(TreeNode * Tree,char birth,int length); void SaveFamily(TreeNode *root); void ReadFamily(TreeNode *root); int main()/主函数 TreeNode *Tree;/TreeNode *Tree1; /Tree1=&(*Tree); Tree=(TreeNode *)malloc(sizeof(TreeNode); Tree-Parent =NULL; strc

13、py(Tree-Name,0); Menue(Tree); return 0; void Menue(TreeNode *Tree)/输出主菜单 /*TreeNode *Tree1; Tree1=&Tree;*/ char c; char name20;char birth20;while(1) system(cls); printf(t); printf(nntt*欢 迎 使 用 家 族 管 理 系 统*nn);printf(ntt A:输入家谱信息建立树 ); printf(ntt B:输出整个家谱信息 ); printf(ntt C:按出生日期查找某人 ); printf(ntt D:按

14、姓名查找某人 ); printf(ntt E:修改某个人信息 );printf(ntt F:存盘 );printf(ntt G:读盘 ); printf(ntt H:退出整个程序 nt); c=getchar();switch(c) case A: TreeNode * NewNode; NewNode=(TreeNode *)malloc(sizeof(TreeNode);printf(nt请输入姓名:); scanf(%s,Tree-Name); printf(nt请输入性别女G男B:); getchar(); scanf(%c,&(Tree-Kind);Tree-Parent=NewNo

15、de; Tree-Parent=NULL;/ CreatTree(Tree); / printf(nt-家谱图已经建立成功-nn); printf(nnt-请按Enter键继续操作-); getchar(); break; case B: if(strcmp(Tree-Name,0)=0) printf(nt家谱图多叉树还未建立请先建立树n); getchar(); break; printf(nnt整个家谱关键信息以下:); OutPutAll(Tree); getchar(); break; case C: if(strcmp(Tree-birthday,0)=0) printf(nt家谱

16、图多叉树还未建立请先建立树n); getchar(); break; printf(nt请输入你要查找出生日期:); scanf(%s,birth); OutPutMessage1(SearchTree1(Tree,birth,20),birth,20); printf(nnt-*-*-*-*-*-*-*-*-*-*-nt); getchar(); break; case D: if(strcmp(Tree-Name,0)=0) printf(nt家谱图多叉树还未建立请先建立树n); getchar(); break; printf(nt请输入你要查找人姓名:nt); scanf(%s,nam

17、e); OutPutMessage(SearchTree(Tree,name,20),name,20); printf(nnt-*-*-*-*-*-*-*-*-*-*-nt); getchar(); break; case E:if(strcmp(Tree-Name,0)=0) printf(nt家谱图多叉树还未建立请先建立树n); getchar(); break; Change(Tree); getchar(); break;case F:if(strcmp(Tree-Name,0)=0) printf(nt家谱图多叉树还未建立请先建立树n); getchar(); break; Save

18、Family(Tree);getchar(); break;case G:/*if(strcmp(Tree-Name,0)=0) printf(nt家谱图多叉树还未建立请先建立树n); getchar(); break; */ReadFamily(&Tree);getchar();break; case H: printf(nnt-此次服务到此结束-); printf(nt-欢迎下次使用-);printf(nt-谢谢-nn);break;case n:break; default: printf(nnt-对不起!你选择不在服务范围之内!-); printf(nt-请您再次选择所需服务项!-);

19、 printf(nt-谢谢-nt);getchar(); break; if (c=H|c=f) break; getchar(); void CreatTree(TreeNode *Node) /创建树 int i; TreeNode *NewNode; NewNode=(TreeNode *)malloc(sizeof(TreeNode); Node-NextNode0=NewNode; Node-NextNode0=NULL; printf(nt请输入出生日期:); scanf(%s,Node-birthday); printf(nt请输入家庭住址:);getchar(); scanf(

20、%s,Node-address); printf(nt请输入是否建在(1-是或0-否):); scanf(%d,&(Node-death);if(Node-death=0) printf(nt请输入逝世日期:); scanf(%s,Node-livemassage); else if(Node-death=1) printf(nt仍然建在);printf(nt请输入%s配偶姓名(输入0代表没结婚):,Node-Name); scanf(%s,NewNode-Name); if(strcmp(NewNode-Name,0)!=0)printf(t请输入配偶出生日期:);scanf(%s,NewN

21、ode-birthday); printf(nt请输入家庭住址:);getchar();scanf(%s,NewNode-address);printf(nt请输入是否建在(1-是或0-否):); scanf(%d,&(NewNode-death); if(NewNode-death=0) printf(nt请输入逝世日期:); scanf(%s,NewNode-livemassage); else if(NewNode-death=1) printf(nt仍然建在);printf(nt请输入%s儿女数目(当儿女输入0时便停止输入该组员相关信息):,Node-Name); scanf(%d,&

22、(Node-ChildNum); if(Node-ChildNum)=0&strcmp(NewNode-Name,0)=0) return ; if(Node-Kind=G|Node-Kind=g) NewNode-Kind=B; else NewNode-Kind=G; NewNode-ChildNum=0; NewNode-NextNode0=NULL; Node-NextNode0=NewNode; Node-NextNode0-Parent=Node;/孩子父母 for(i=1;iChildNum;i+) NewNode=(TreeNode *)malloc(sizeof(TreeNo

23、de);a+;printf(nt请输入%s第%d儿女名字:,Node-Name,i); scanf(%s,NewNode-Name); printf(nt请输入%s第%d儿女性别女G男B:,Node-Name,i); getchar(); scanf(%c,&NewNode-Kind);NewNode-ChildNum=-1; NewNode-Parent=Node; Node-NextNodei=NewNode; CreatTree(Node-NextNodei); /从儿女数目开始void OutPutAll(TreeNode *Tree) int i, flag=0;printf(nt-

24、*-*-*-*-*-*-*-*-*-);printf(nt姓名:%s 出生日期:%s 家庭住址:%s 性别: %c,Tree-Name,Tree-birthday,Tree-address,Tree-Kind);if (Tree-Kind=G|Tree-Kind=g) flag=1; printf(女); else printf(男);printf(t是否健在(1-健在,0-逝世):);if(Tree-death=1) printf(1);else if(Tree-death=0) printf(0); if (!(Tree-NextNode0) printf(nt至今没有配偶和儿女n); r

25、eturn; if(flag=1) printf(nt丈夫 姓名:%s,Tree-NextNode0-Name); else printf(nt妻子 姓名:%s,Tree-NextNode0-Name);printf(t是否健在(1-健在,0-逝世):);if(Tree-death=1) printf(1);else if(Tree-death=0) printf(0);for(i=1;iChildNum;i+) printf(nt第%d个儿女姓名:%s 出生日期:%s 家庭住址:%s 性别%c,i,Tree-NextNodei-Name,Tree-NextNodei-birthday,Tre

26、e-NextNodei-address,Tree-NextNodei-Kind); if (Tree-NextNodei-Kind=G|Tree-NextNodei-Kind=g) printf(女); else printf(男);printf(t是否健在(1-健在,0-逝世):); if(Tree-death=1) printf(1); else if(Tree-death=0) printf(0); printf(nt);for(i=1;iChildNum;i+) OutPutAll(Tree-NextNodei); TreeNode * SearchTree(TreeNode *Tre

27、e,char name,int length) int i; TreeNode *NewNode; if(strcmp(Tree-Name,name)=0) if(length=0) FLAG=1; else FLAG=0; return Tree; if(Tree-NextNode0=NULL) return NULL; for(i=0;iChildNum;i+) if (i=0) NewNode=SearchTree(Tree-NextNodei,name,0); else NewNode=SearchTree(Tree-NextNodei,name,20); if (NewNode!=N

28、ULL) return NewNode; return NULL; void OutPutMessage(TreeNode * Tree,char name,int length) int flag=0,i; TreeNode *NewNode; printf(nnt-*-*-*-*-*-*-*-*-*-*-); if(Tree=NULL) printf(nnt*该家谱图中没有%s这个人信息请确定是否输入错误*n,name); return; printf(nnt您所要找人已经找到信息以下所表示:); printf(nnt姓名:%s出生日期:%s 家庭住址:%s 性别:%c,name,Tree

29、-birthday,Tree-address,Tree-Kind); if (Tree-Kind=G|Tree-Kind=g) flag=1; /标识她(她)性别 printf(女); else printf(男);printf(t是否健在(1-健在,0-逝世):);if(Tree-death=1) printf(1);else if(Tree-death=0) printf(0); NewNode=Tree-Parent; if (FLAG=1) if(flag=1) printf(nnt她是嫁入此家族所以亲生父母信息不在家谱内包含); printf(nt丈夫 姓名:%s,NewNode-N

30、ame); else printf(nnt她是入赘此家族所以亲生父母信息不在家谱内包含); printf(nt妻子姓名:%s,NewNode-Name); if (NewNode-ChildNum)0) /判定她(她)是否有孩子 printf(nt孩子信息以下:); /输出她(她)孩子信息for(i=1;iChildNum;i+) printf(nt姓名:%s 性别:,NewNode-NextNodei-Name);if (NewNode-NextNodei-Kind=G|NewNode-Kind=g) printf(女); else printf(男);printf(t是否健在(1-健在,0

31、-逝世):); if(Tree-death=1) printf(1); else if(Tree-death=0) printf(0); return; if(NewNode=NULL)/判定它是不是根节点假如是话就没有父母弟兄信息 printf(nt是这个家谱图里最年长人,name); else if (NewNode-Kind=G|NewNode-Kind=g) /判定父亲节点是父亲还是母亲 printf(nt母亲 姓名:%s,NewNode-Name);/输出她(她)父母亲信息 printf(nt父亲 姓名:%s,NewNode-NextNode0-Name); else printf(

32、nt母亲 姓名:%s,NewNode-NextNode0-Name); printf(nt父亲 姓名:%s,NewNode-Name); if(Tree-NextNode0!=NULL) /判定她(她)是否有配偶 if(flag=1)/输出她(她)配偶信息 printf(nt丈夫 姓名:%s,Tree-NextNode0-Name); else printf(nt妻子 姓名:%s,Tree-NextNode0-Name); if (Tree-ChildNum0) /判定她(她)是否有孩子 printf(nt孩子信息以下:); /输出她(她)孩子信息 for(i=1;iChildNum;i+)

33、printf(nt姓名:%s 性别:,Tree-NextNodei-Name); if (Tree-NextNodei-Kind=G|Tree-Kind=g) printf(女); else printf(男);printf(t是否健在(1-健在,0-逝世):); if(Tree-death=1) printf(1); else if(Tree-death=0) printf(0); else printf(nt%s至今还没有孩子,name); else printf(nt%s至今还没有配偶和孩子n,Tree-Name); TreeNode * SearchTree1(TreeNode *Tree,char birth,int length) int i; TreeNode *NewNode; if(strcmp(Tree-birthday,birth)=0) if(length=0) FLAG=1; else

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服