2022年家谱管理系统.docx

上传人:C****o 文档编号:59149665 上传时间:2022-11-09 格式:DOCX 页数:46 大小:752.11KB
返回 下载 相关 举报
2022年家谱管理系统.docx_第1页
第1页 / 共46页
2022年家谱管理系统.docx_第2页
第2页 / 共46页
点击查看更多>>
资源描述

《2022年家谱管理系统.docx》由会员分享,可在线阅读,更多相关《2022年家谱管理系统.docx(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院课 程 设 计 报 告课程名称 _ 数据结构课程设计名师归纳总结 设计题目_ 家谱治理系统第 1 页,共 26 页专业 _ 运算机科学与技术班级 _ 学号 _ 姓名 _ 完成日期_ - - - - - - -精选学习资料 - - - - - - - - - 课 程 设 计 任 务 书设计题目:家谱治理系统设计内容与要求:【问题描述】:实现具有以下功能的家谱治理系统 1. 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、诞生日期、婚否、地址、健在否、死亡日期(如其已死亡),也可附加其它 信息、但不是

2、必需的;2. 实现数据的存盘和读盘;3. 显示家谱;4. 依据诞生日期查询成员名单;5. 依据姓名查询,输出成员信息(包括其本人、父亲、孩子的信息);6. 修改某成员信息;【基本要求】:界面要求:有合理的提示,每个功能可以设立菜单,依据提示,可以完成相关的功 能要求;储备结构:同学自己依据系统功能要求自己设计,但是要求相关数据要储备在数据文件中;测试数据:要求使用1、全部合法数据; 2、局部非法数据;进行程序测试,以保证程序的稳固;测试数据及测试结果请在上交的资料中写明;指导老师: _ 年月日课 程 设 计 评 语成果:指导老师: _ 名师归纳总结 年月日第 2 页,共 26 页- - - -

3、 - - -精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告一、 算法思想本程序是一个治理家谱的系统,通过这个系统可以对家族成员进行创建、显示、查找、修改、以及储存家谱和读取家谱功能;该系统分为以下几个模块,分别是:创建家谱,显 示家谱、按姓名和生日查找家庭成员、修改家谱、存盘、读盘以及退出系统;本程序用到的 储备形式为多叉树,由于家谱中每个人既有父母又有孩子,而且孩子的个数并不确定,所以 用多叉树来储备最为合适;用多叉树来储备,就用用到多叉树的递归创建及递归遍历;由于 是多叉树,所以遍历时用广度优先搜寻合适;本函数最主要的思想就是递归调用,每个

4、子函 数中都会用到递归;定义结构体时给定指针数组的最大容量,来规定家谱中最多可以存多少 人;定义一个家族树的指针变量用来当每个子函数的参数,从而将其返回到主函数中;以下时算法思想流程图:家谱治理系统创建家谱显示家谱查找成员修改家谱读写家谱按按修修修存读照照改改改盘盘姓生本父孩名日人母子退出系统二、 模块划分1. 2. 3. 4. 5. 6. 7.int main:主函数 void CreatTreeTreeNode *Tree:创建家族树 void OutPutAllTreeNode *Tree:显示家谱 void MenueTreeNode *Tree:主菜单 void SubMenue1T

5、reeNode * Tree:副菜单(修改选项菜单)void ChangeTreeNode * Tree:修改家谱 TreeNode * SearchTreeTreeNode *Tree,char name,int length:依据姓名查找家 谱成员1 名师归纳总结 - - - - - - -第 3 页,共 26 页精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告8. 9.TreeNode * SearchTree1TreeNode *Tree,char birth,int length:依据生日查找家 谱成员 void OutPutMessa

6、geTreeNode * Tree,char name,int length:输出按姓名查找到的家谱成员 10. void OutPutMessage1TreeNode * Tree,char birth,int length:输出按生日查找 到的家谱成员 11. void SaveFamilyTreeNode *root:储存家谱 12. void ReadFamilyTreeNode *root:读取家谱三、 数据结构typedef struct TreeNode int ChildNum; / 记录这个人拥有几个儿女 char Name20;/ 记录这个人的姓名 char birthda

7、y20;/ 生日 int marriage;/ 婚否( 1 表示结婚, 0 表示没结婚)int death;/ 生死( 1 表示活着, 0 表示过世)char Kind;/ 标示节点的种类有女 G 男 B char address100;/ 住址 char livemassage50;/ 死亡日期(假如其已经死亡)struct TreeNode *NextNode20; /记录这个人的儿女 struct TreeNode *Parent; /记录这个节点的父节点 TreeNode,*tree; 四、 测试第一组数据为:爷爷,奶奶,爸爸,妈妈,我,二叔,二婶,姐姐,三叔,三婶,弟弟一共 三代 1

8、1 个人;其中爷爷是根节点,奶奶为爷爷的配偶,同时也是爷爷的第一个后继节点;爸爸,二叔,三叔为爷爷的子女;爸爸的配偶是妈妈,爸爸的子女是我;二叔的 配偶是二婶,子女是姐姐;三叔的的配偶是三婶,三叔的的子女是弟弟;进入程序之后,第一进行创建家谱,然后进行存盘,之后进行修改和查询等 步骤;退出程序在进入程序时,进行读盘;之后在进行其他操作,程序完成之后 退出即可;2 名师归纳总结 - - - - - - -第 4 页,共 26 页精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告爷爷 奶奶爸爸妈妈二叔二婶三叔三婶我姐姐弟弟图 1 家族树第一组数据测试截

9、图为:图 2 显示家谱3 名师归纳总结 - - - - - - -第 5 页,共 26 页精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告图 3 依据姓名查找家族成员图 4 存盘其次组数据为:4 名师归纳总结 - - - - - - -第 6 页,共 26 页精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告王大李大王老刘老张二王二王 小 王 小一 二图 4 王家家族树其次组数据测试截屏为:图 5 修改家族成员的信息5 名师归纳总结 - - - - - - -第 7 页,共 26 页精选学习资料 -

10、- - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告图 6 修改某个人的详细信息图 7 依据生日查找某人6 名师归纳总结 - - - - - - -第 8 页,共 26 页精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告图 8 读盘五、 源程序#include #include #include #ifdef WIN32 #define CLEAR systemcls #define TipForSaveFilePosition printftt 输入文件名及储存位置 eg: D:example.txt : #defin

11、e TipForReadFilePosition printftt 文件名及其路径 eg: D:example.txt: #else #define CLEAR systemclear #define TipForSaveFilePosition printftt输入文件名及储存位置eg: /home/xiong/example.txt: #define TipForReadFilePosition printftt文件名及其路径eg: /home/xiong/example.txt: #endif #define maxFileNameLen 50 / 储存的文件名的最大长度 int FLA

12、G=0; int a=1; typedef struct TreeNode int ChildNum; / 记录这个人拥有几个儿女 char Name20;/ 记录这个人的姓名 char birthday20;/ 生日 int marriage;/ 婚否( 1 表示结婚, 0 表示没结婚)7 名师归纳总结 - - - - - - -第 9 页,共 26 页精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告int death;/ 生死( 1 表示活着, 0 表示过世)char Kind;/ 标示节点的种类有女 G 男 B char address10

13、0;/ 住址 char livemassage50;/ 死亡日期(假如其已经死亡)struct TreeNode *NextNode20; /记录这个人的儿女 struct TreeNode *Parent; /记录这个节点的父节点 TreeNode,*tree; void CreatTreeTreeNode *Tree; void OutPutAllTreeNode *Tree; void MenueTreeNode *Tree; void SubMenue1TreeNode * Tree; void SubMenue2TreeNode *Tree; void ChangeTreeNode

14、* Tree; void AddNewTreeNode * Tree; TreeNode * SearchTreeTreeNode *Tree,char name,int length; TreeNode * SearchTree1TreeNode *Tree,char birth,int length ; void OutPutMessageTreeNode * Tree,char name,int length; void OutPutMessage1TreeNode * Tree,char birth,int length; void SaveFamilyTreeNode *root;

15、void ReadFamilyTreeNode *root; int main/ 主函数 TreeNode *Tree;/TreeNode *Tree1; /Tree1=&*Tree; Tree=TreeNode *mallocsizeofTreeNode; Tree-Parent =NULL; strcpyTree-Name,0; MenueTree; return 0; void MenueTreeNode *Tree/ 输出主菜单 /*TreeNode *Tree1; Tree1=&Tree;*/ char c; char name20; char birth20; while1 sys

16、temcls; printft; printfnntt*欢 迎 使 用 家 族 管 理 系 统*nn; printfntt A: 输入家谱信息建立树; 8 名师归纳总结 - - - - - - -第 10 页,共 26 页精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告printfntt B:输出整个家谱信息; ; printfntt C:按诞生日期查找某人; printfntt D:按姓名查找某人; printfntt E:修改某个人的信息; printfntt F:存盘printfntt G:读盘; nt; printfntt H:退出整个程

17、序c=getchar; switchc case A: TreeNode * NewNode; NewNode=TreeNode *mallocsizeofTreeNode; printfnt 请输入姓名 :; scanf%s,Tree-Name; printfnt请输入性别女G 男 B:; getchar; scanf%c,&Tree-Kind; Tree-Parent=NewNode; Tree-Parent=NULL;/ CreatTreeTree; / 家谱图已经建立胜利-nn; printfnt-printfnnt-getchar; break; case B: 请按 Enter 键

18、连续操作 -; ifstrcmpTree-Name,0=0 printfnt 家谱图的多叉树尚未建立请先建立树 n; getchar; break; printfnnt整个家谱的主要信息如下:; OutPutAllTree; getchar; break; case C: ifstrcmpTree-birthday,0=0 printfnt 家谱图的多叉树尚未建立请先建立树 n; getchar; break; printfnt请输入你要查找的诞生日期:; 9 名师归纳总结 - - - - - - -第 11 页,共 26 页精选学习资料 - - - - - - - - - 洛 阳 理 工 学

19、 院 课 程 设 计 报 告scanf%s,birth; OutPutMessage1SearchTree1Tree,birth,20,birth,20; printfnnt-*-*-*-*-*-*-*-*-*-*-nt; getchar; break; case D: ifstrcmpTree-Name,0=0 printfnt 家谱图的多叉树尚未建立请先建立树 n; getchar; break; printfnt请输入你要查找的人的姓名:nt; scanf%s,name; OutPutMessageSearchTreeTree,name,20,name,20; printfnnt-*-*

20、-*-*-*-*-*-*-*-*-nt; getchar; break; case E: ifstrcmpTree-Name,0=0 printfnt 家谱图的多叉树尚未建立请先建立树 n; getchar; break; ChangeTree; getchar; break; case F: ifstrcmpTree-Name,0=0 printfnt 家谱图的多叉树尚未建立请先建立树 n; getchar; break; SaveFamilyTree; getchar; break; case G: /*ifstrcmpTree-Name,0=0 printfnt 家谱图的多叉树尚未建立请

21、先建立树 n; getchar; break; 10 名师归纳总结 - - - - - - -第 12 页,共 26 页精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告*/ ReadFamily&Tree; getchar; break; case H: printfnnt-本次服务到此终止-; printfnt-欢迎下次使用 -; printfnt-感谢 -nn; break; case n: break; default: printfnnt-对不起 .你的挑选不在服务范畴之内 .-; printfnt-请您再次挑选所需的服务项 .-; vo

22、id CreatTreeTreeNode *Node / 创建树 int i; TreeNode *NewNode; NewNode=TreeNode *mallocsizeofTreeNode; Node-NextNode0=NewNode; Node-NextNode0=NULL; printfnt 请输入诞生日期:; scanf%s,Node-birthday; printfnt 请输入家庭住址:;getchar; scanf%s,Node-address; printfnt 请输入是否建在 1-是或 0-否:; scanf%d,&Node-death; ifNode-death=0 p

23、rintfnt请输入去世日期:; scanf%s,Node-livemassage; else ifNode-death=1 printfnt 仍旧建在 ; printfnt 请输入 %s 的配偶的姓名 输入 0 代表没结婚 :,Node-Name; 11 名师归纳总结 - - - - - - -第 13 页,共 26 页精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告scanf%s,NewNode-Name; ifstrcmpNewNode-Name,0.=0 printft请输入配偶的诞生日期:; scanf%s,NewNode-birthd

24、ay; printfnt 请输入家庭住址:;getchar; scanf%s,NewNode-address; printfnt 请输入是否建在 1- 是或 0-否:; scanf%d,&NewNode-death; ifNewNode-death=0 printfnt 请输入去世日期:; scanf%s,NewNode-livemassage; else ifNewNode-death=1 printfnt 仍旧建在 ; printfnt请输入 %s 的子女的数目当子女输入0 时便停止输入该成员有关信息:,Node-Name; scanf%d,&Node-ChildNum; ifNode-C

25、hildNum=0&strcmpNewNode-Name,0=0 return ; ifNode-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;/ 孩子的父母 fori=1;iChildNum;i+ NewNode=TreeNode *mallocsizeofTreeNode;a+; printfnt 请输入 %s 的第 %d 子女的名字 :

26、,Node-Name,i; scanf%s,NewNode-Name; printfnt请输入 %s 的第 %d 子女的性别女G 男 B:,Node-Name,i; getchar; scanf%c,&NewNode-Kind; NewNode-ChildNum=-1; NewNode-Parent=Node; Node-NextNodei=NewNode; CreatTreeNode-NextNodei; / 从子女的数目开头 void OutPutAllTreeNode *Tree 12 名师归纳总结 - - - - - - -第 14 页,共 26 页精选学习资料 - - - - - -

27、 - - - 洛 阳 理 工 学 院 课 程 设 计 报 告int i, flag=0; printfnt-*-*-*-*-*-*-*-*-*-; printfnt姓 名 :%s 出 生 日 期 :%s 家 庭 住 址 : %s 性别: %c,Tree-Name,Tree-birthday,Tree-address,Tree-Kind; if Tree-Kind=G|Tree-Kind=g flag=1; printf 女; else printf 男; printft 是否健在 1-健在, 0-去世 :; ifTree-death=1 printf1; else ifTree-death=0

28、 printf0; if .Tree-NextNode0 printfnt 至今没有配偶和子女 n; return; ifflag=1 else printfnt 丈夫 姓名 :%s,Tree-NextNode0-Name; printfnt 妻子 姓名 :%s,Tree-NextNode0-Name; printft 是否健在 1-健在, 0-去世 :; ifTree-death=1 printf1; else ifTree-death=0 printf0; fori=1;iChildNum;i+ printfnt第 %d个 子 女 的 姓 名 :%s 出 生 日 期 :%s 家 庭 住 址

29、 : %s 性别%c,i,Tree-NextNodei-Name,Tree-NextNodei-birthday,Tree-NextNodei-address,Tre e-NextNodei-Kind; if Tree-NextNodei-Kind=G|Tree-NextNodei-Kind=g printf 女; else printf 男; printft 是否健在 1-健在, 0-去世 :; ifTree-death=1 printf1; else ifTree-death=0 printf0; printfnt; fori=1;iChildNum;i+ OutPutAllTree-Ne

30、xtNodei; 13 名师归纳总结 - - - - - - -第 15 页,共 26 页精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告 TreeNode * SearchTreeTreeNode *Tree,char name,int length int i; TreeNode *NewNode; ifstrcmpTree-Name,name=0 iflength=0 FLAG=1; else FLAG=0; return Tree; ifTree-NextNode0=NULL return NULL; fori=0;iChildNum;i

31、+ if i=0 NewNode=SearchTreeTree-NextNodei,name,0; else NewNode=SearchTreeTree-NextNodei,name,20; if NewNode.=NULL return NewNode; return NULL; void OutPutMessageTreeNode * Tree,char name,int length int flag=0,i; TreeNode *NewNode; printfnnt-*-*-*-*-*-*-*-*-*-*-; ifTree=NULL printfnnt*该 家 谱 图 中 没 有 %

32、s这 个 人 的 信 息 请 确 认 是 否 输 入 错 误*n,name; return; printfnnt您所要找的人已经找到信息如下所示:; 家庭住址:%s 性printfnnt姓名:%s出生日期:%s 别:%c,name,Tree-birthday,Tree-address,Tree-Kind; if Tree-Kind=G|Tree-Kind=g flag=1; /标记他 她的性别 printf 女; 14 名师归纳总结 - - - - - - -第 16 页,共 26 页精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告 else p

33、rintf 男; printft 是否健在 1-健在, 0-去世 :; ifTree-death=1 printf1; else ifTree-death=0 printf0; NewNode=Tree-Parent; if FLAG=1 ifflag=1 printfnnt 她是嫁入此家族的所以亲生父母信息不在家谱内包括 ; printfnt 丈夫 姓名 :%s,NewNode-Name; else printfnnt他是入赘此家族的所以亲生父母信息不在家谱内包括; printfnt 妻子姓名 :%s,NewNode-Name; if NewNode-ChildNum0 /判定他 她是否有孩

34、子 printfnt 的孩子的信息如下:; / 输出他 她 的孩子的信息fori=1;iChildNum;i+ printfnt 姓名 :%s 性别 :,NewNode-NextNodei-Name; if NewNode-NextNodei-Kind=G|NewNode-Kind=g printf 女; else printf 男; printft 是否健在 1-健在, 0-去世 :; ifTree-death=1 printf1; else ifTree-death=0 printf0; return; ifNewNode=NULL/判定它是不是根节点假如是的话就没有父母兄弟信息print

35、fnt是这个家谱图里最年长的人,name; else if NewNode-Kind=G|NewNode-Kind=g / 判定父亲节点是父亲仍是母亲printfnt 母亲 姓名 :%s,NewNode-Name;/ 输出他(她)的父母亲的信息15 名师归纳总结 - - - - - - -第 17 页,共 26 页精选学习资料 - - - - - - - - - 洛 阳 理 工 学 院 课 程 设 计 报 告printfnt 父亲 姓名 :%s,NewNode-NextNode0-Name; else printfnt 母亲 姓名 :%s,NewNode-NextNode0-Name; printfnt 父亲 姓名 :%s,NewNode-Name; ifTree-NextNode0.=NULL / 判定他 她是否有配偶 ifflag=1/ 输出他 她的配偶的信息 printfnt 丈夫 姓名 :%s,Tree-NextNode0-Name; else printfnt 妻子 姓名 :%s,Tre

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

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁