家族管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、案例描述
1、总体描述
拿到这道题目我们首先想到的毫无疑问就是树,然而怎样将整个家庭的成员信息整合到一颗树上就是我们具体所要做的。
首先我们要定义一个结构来记录一个成员的信息。而每个成员又和其他成员拥有不同的关系,这个就要靠自己去逻辑了,用左孩子右兄弟的方法可以将这个成员与其兄弟和儿女进行联系起来,然而还差两个关系就是父母和配偶的关系这就要在这个结构里多添加两个指针了一个用来和父亲节点建立关系另一个用来和配偶节点建立关系。而然用多叉树的方法也是很合适的,只需在结构里定义一个结构数组将配偶和子女都放在儿子节点上,而配偶节点放在数组的第一个位子即可区分清楚配偶和子女。另外多加一个指针来将节点和父亲节点联系起来。这样就同样可也访问某个成员的兄弟姐妹了,只需访父亲节点的儿子节点即可。
上图就是一个简单的家谱示意图:
功能演示
【1】首先,运行程序用户看到的是提示界面如下:
创建家谱信息建立多叉树
显示整个家谱信息
创新点:会显示生日提示
添加新成员查找成员信息
二、设计思路
本程序要求模块管理,分成菜单函数、输入函数、输出函数、查询函数、插入删除函数等,控制各个部分从而将程序简单化出来分析。本程序的主要功能有:
1)创建一个家谱,能够输入家族的相关信息
2)查找相应的人员
3)添加新的成员
4)输出整个家族的成员
5)修改成员的信息
6)退出
图 1家族管理系统功能模块图
三、程序设计
2、数据结构描述
主程序
#include
#include
#include
#include
int sum=0;
int MATEFLAG=0; int tadaym,tadayd; typedef struct TreeNode
{
int Num;
//记录这个人拥有几个儿女
char Name[20];
//记录这个人的姓名
char Kind;
//标示节点的种类有女G男B
char birth[10];
int birthy;
//记录这个人的生日
int birthm;
int birthd;
struct TreeNode * NextNode[20]; //记录这个人的儿女,配偶。NextNode[0]为配偶
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(TreeNode *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( "\n\n\n\n\n\n\t\t\t%4d年%02d月%02d 日%02d:%02d:%02d 星
期%1d\n",sys.wYear,sys.wMonth,sys.wDay,s ys.wHour,sys.wMinute,
sys.wSecond,sys.wDayOfWeek);
tadaym=sys.wMonth;
tadayd=sys.wDay;
printf("\n\n\t\t\t 按回车进入主界面..."); return 0;
}
//主函数
main()
{
TreeNode *Tree;
Tree=(TreeNode
*)malloc(sizeof(TreeNode));
Tree->Parent =NULL;
strcpy(Tree->Name,"0");
showtime();
getchar();
MainMenue(Tree);
}
家族管理系统包括以下几个部分:
int Num;
//记录这个人拥有几个儿女
char Name[20];
//记录这个人的姓名
char Kind;
//标示节点的种类有女G男B
char birth[10];
int birthy;
//记录这个人的生日
int birthm;
int birthd;
struct TreeNode * NextNode[20]; //记录这个人的儿女,配偶。NextNode[0]为配偶
struct TreeNode * 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 Name[20]; //记录这个人的姓名
char Kind; //标示节点的种类有女G男B