ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:294.12KB ,
资源ID:4805446      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4805446.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(家谱管理系统.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

家谱管理系统.docx

1、家谱管理系统洛 阳 理 工 学 院课 程 设 计 报 告 课程名称 _设计题目 _专 业 _班 级 _学 号 _姓 名 _完成日期 _课 程 设 计 任 务 书设计题目:家谱管理系统设计内容与要求:【问题描述】:实现具有下列功能的家谱管理系统1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。2). 实现数据的存盘和读盘。3). 显示家谱。4). 按照出生日期查询成员名单。5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。6). 修改某成员信息。【基本要求】:界

2、面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明。 指导教师:_ 年 月 日课 程 设 计 评 语 成绩: 指导教师:_ 年 月 日一、算法思想本程序是一个管理家谱的系统,通过这个系统可以对家族成员进行创建、显示、查找、修改、以及保存家谱和读取家谱功能。该系统分为以下几个模块,分别是:创建家谱,显示家谱、按姓名和生日查找家庭成员、修改家谱、存盘、读盘以及退出系统。

3、本程序用到的存储形式为多叉树,因为家谱中每个人既有父母又有孩子,而且孩子的个数并不确定,所以用多叉树来存储最为合适。用多叉树来存储,就用用到多叉树的递归创建及递归遍历。因为是多叉树,所以遍历时用广度优先搜索合适。本函数最主要的思想就是递归调用,每个子函数中都会用到递归。定义结构体时给定指针数组的最大容量,来规定家谱中最多可以存多少人。定义一个家族树的指针变量用来当每个子函数的参数,从而将其返回到主函数中。以下时算法思想流程图:家谱管理系统创建家谱显示家谱修改家谱查找成员读写家谱按照姓名按照生日修改本人修改父母修改孩子存盘读盘退出系统二、模块划分1.int main():主函数2.void Cr

4、eatTree(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 * SearchTree1(TreeNode *Tree,char birth

5、,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 struct TreeNode int ChildNum; /记录这个人拥有

6、几个儿女 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,*tree;四、测试第一组数据为:爷爷,奶奶,爸爸,妈妈,我,二

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

8、据测试截屏为:图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 system(clear)#define Ti

9、pForSaveFilePosition 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;/记录这个人的姓名 char birthda

10、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; void CreatTree(TreeNode *Tree); void OutPutAll(TreeNode *Tree);

11、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 OutPutMessage(TreeN

12、ode * 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; strcpy(Tree-Na

13、me,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=NewNod

15、e; 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(

17、%s,name); 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();

18、break; SaveFamily(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-对不起!你的选择不在服务范围之内!-); pr

19、intf(nt-请您再次选择所需的服务项!-); 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请输

20、入家庭住址:);getchar(); scanf(%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) pri

21、ntf(t请输入配偶的出生日期:); scanf(%s,NewNode-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时

22、便停止输入该成员有关信息):,Node-Name); scanf(%d,&(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+) Ne

23、wNode=(TreeNode *)malloc(sizeof(TreeNode);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 OutP

24、utAll(TreeNode *Tree) int i, flag=0; printf(nt-*-*-*-*-*-*-*-*-*-); 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); return; 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(Tr

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1