家族管理系统

上传人:橙** 文档编号:333365046 上传时间:2022-09-01 格式:PDF 页数:23 大小:1,006.78KB
返回 下载 相关 举报
家族管理系统_第1页
第1页 / 共23页
家族管理系统_第2页
第2页 / 共23页
家族管理系统_第3页
第3页 / 共23页
家族管理系统_第4页
第4页 / 共23页
家族管理系统_第5页
第5页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《家族管理系统》由会员分享,可在线阅读,更多相关《家族管理系统(23页珍藏版)》请在金锄头文库上搜索。

1、名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 23 页 -1-一、案例描述1、总体描述拿到这道题目我们首先想到的毫无疑问就是树,然而怎样将整个家庭的成员信息整合到一颗树上就是我们具体所要做的。首先我们要定义一个结构来记录一个成员的信息。而每个成员又和其他成员拥有不同的关系,这个就要靠自己去逻辑了,用左孩子右兄弟的方法可以将这个成员与其兄弟和儿女进行联系起来,然而还差两个关系就是父母和配偶的关系这就要在这个结构里多添加两个指针了一个用来和父亲节点建立关系另一个用来和配偶节点建立关系。而然用多叉树的方法也是很合适的,只需在结构里定义一个结构数组将配偶和子女都放在儿子节点上,而配偶节

2、点放在数组的第一个位子即可区分清楚配偶和子女。另外多加一个指针来将节点和父亲节点联系起来。这样就同样可也访问某个成员的兄弟姐妹了,只需访父亲节点的儿子节点即可。上图就是一个简单的家谱示意图:功能演示【1】首先,运行程序用户看到的是提示界面如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 23 页 -2-创建家谱信息建立多叉树名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 23 页 -3-显示整个家谱信息创新点:会显示生日提示名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 23 页 -4-添加新成员查找成员信息名师资料总结-精品资料欢迎下载-名师精心

3、整理-第 5 页,共 23 页 -5-二、设计思路本程序要求模块管理,分成菜单函数、输入函数、输出函数、查询函数、插入删除函数等,控制各个部分从而将程序简单化出来分析。本程序的主要功能有:1)创建一个家谱,能够输入家族的相关信息2)查找相应的人员3)添加新的成员4)输出整个家族的成员5)修改成员的信息6)退出名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 23 页 -6-图 1 家族管理系统功能模块图三、程序设计2、数据结构描述主程序#include#include#include#include char c1,c2,c3;int sum=0;int MATEFLAG=0;in

4、t tadaym,tadayd;typedef struct TreeNode int Num;/记录这个人拥有几个儿女char Name20;/记录这个人的姓名char Kind;/标示节点的种类有女G 男 B 名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 23 页 -7-char birth10;int birthy;/记录这个人的生日int birthm;int birthd;struct TreeNode*NextNode20;/记录这个人的儿女,配偶。NextNode0 为配偶struct TreeNode*Parent;/记录这个节点的父节点TreeNode;voi

5、d CreatTree(TreeNode*Tree);void OutPutAll(TreeNode*Tree);TreeNode*SearchTree(TreeNode*Tree,char name,int length);void MainMenue(TreeNode*Tree);void SubMenue1(TreeNode*Tree);void SubMenue2(TreeNode*Tree);void Change(TreeNode*Tree);void AddNew(TreeNode*Tree);void OutPutMessage(TreeNode*Tree,char name,

6、int length);int showtime(void)SYSTEMTIME sys;GetLocalTime(&sys);printf(nnnnnnttt%4d年%02d 月%02d日%02d:%02d:%02d 星期%1dn,sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wDayOfWeek);tadaym=sys.wMonth;tadayd=sys.wDay;printf(nnttt 按回车进入主界面.);return 0;/主函数main()TreeNode*Tree;Tree=(TreeNo

7、de*)malloc(sizeof(TreeNode);Tree-Parent=NULL;strcpy(Tree-Name,0);showtime();getchar();MainMenue(Tree);家族管理系统包括以下几个部分:int Num;/记录这个人拥有几个儿女char Name20;/记录这个人的姓名char Kind;/标示节点的种类有女G 男 B char birth10;int birthy;/记录这个人的生日int birthm;int birthd;struct TreeNode*NextNode20;/记录这个人的儿女,配偶。NextNode0 为配偶struct T

8、reeNode*Parent;/记录这个节点的父节点3、源程序#include#include#include#include char c1,c2,c3;int sum=0;int MATEFLAG=0;int tadaym,tadayd;typedef struct TreeNode int Num;/记录这个人拥有几个儿女char Name20;/记录这个人的姓名char Kind;/标示节点的种类有女G 男 B 名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 23 页 -8-char birth10;int birthy;/记录这个人的生日int birthm;int b

9、irthd;struct TreeNode*NextNode20;/记录这个人的儿女,配偶。NextNode0 为配偶struct TreeNode*Parent;/记录这个节点的父节点TreeNode;void CreatTree(TreeNode*Tree);void OutPutAll(TreeNode*Tree);TreeNode*SearchTree(TreeNode*Tree,char name,int length);void MainMenue(TreeNode*Tree);void SubMenue1(TreeNode*Tree);void SubMenue2(TreeNod

10、e*Tree);void Change(TreeNode*Tree);void AddNew(TreeNode*Tree);void OutPutMessage(TreeNode*Tree,char name,int length);int showtime(void)SYSTEMTIME sys;GetLocalTime(&sys);printf(nnnnnnttt%4d年%02d 月%02d日%02d:%02d:%02d 星期%1dn,sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wDayOfWeek

11、);tadaym=sys.wMonth;tadayd=sys.wDay;printf(nnttt 按回车进入主界面.);return 0;/主函数main()TreeNode*Tree;Tree=(TreeNode*)malloc(sizeof(TreeNode);Tree-Parent=NULL;strcpy(Tree-Name,0);showtime();getchar();MainMenue(Tree);/添加新的成员void AddNew(TreeNode*Tree)SubMenue2(Tree);/输出副菜单void SubMenue2(TreeNode*Tree)char c;in

12、t num;char name20;char birth10;TreeNode*NewNode;getchar();while(1)system(cls);printf(t);printf(nnt=请选择你的操作=);printf(nt=A:添加子女的信息=);printf(nt=B:添加配偶的信息=);printf(nt=C:返回主界面=nt);c=getchar();switch(c)名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 23 页 -9-case A:case a:printf(nnt请输入那个人的名字:nt);scanf(%s,name);Tree=SearchT

13、ree(Tree,name,20);if(Tree=NULL)printf(nnt*该 家 谱图中没有%s 这个人的信息请确认是否输入错误*n,name);break;if(Tree-Parent=NULL&Tree-NextNode0=NULL|Tree-Parent!=NULL&Tree-Name!=Tree-Parent-NextNode0-Name)printf(nnt%s至今还没有配偶请先添加配偶,Tree-Name);break;if(Tree-Parent=NULL&(Tree-Num20|Tree-NumNum=0;if(MATEFLAG=1)Tree=Tree-Parent;

14、NewNode=(TreeNode*)malloc(sizeof(TreeNode);printf(nnt请输入添加人员姓名:nt);scanf(%s,NewNode-Name);sum+;while(1)printf(nnt请输入添加人员性别女G 男 B:nt);getchar();scanf(%c,&NewNode-Kind);if(NewNode-Kind=G|NewNode-Kind=g|NewNode-Kind=B|NewNode-Kind=b)break;else puts(error);printf(nnt请输入添加人员生日:nt);puts(输 入 格 式:1990.01.01

15、或1990/01/01);getchar();while(1)scanf(%d%c%d%c%d,&NewNode-birthy,&c1,&NewNode-birthm,&c2,&NewNode-birthd);if(NewNode-birthy1900&NewNode-birthybirthm0&NewNode-birthmbirthd0&NewNode-birthdNum;NewNode-NextNode0=(TreeNode*)malloc(sizeof(TreeNode);NewNode-NextNode0=NULL;NewNode-Num=0;NewNode-Parent=Tree;T

16、ree-NextNodenum+1=NewNode;Tree-Num=Tree-Num+1;printf(nnt=子女信息添加成功=);break;名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 23 页 -10-case B:case b:printf(nnt请输入那个人的名字:nt);scanf(%s,name);Tree=SearchTree(Tree,name,20);if(Tree-Parent!=NULL&strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0|Tree-NextNode0!=NULL)printf(nnt已经有了配偶);break;if(Tree=NULL)printf(nnt*该 家 谱图中没有%s 这个人的信息请确认是否输入错误*n,name);break;NewNode=(TreeNode*)malloc(sizeof(TreeNode);printf(nnt请输入添加配偶的姓名:nt);scanf(%s,NewNode-Name);sum+;printf(nnt请输入添加配偶的生日:nt);pu

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号