家谱管理系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

洛阳理工学院课程设计报告课程名称___________________________________设计题目___________________________________专业___________________________________班级___________________________________学号___________________________________姓名___________________________________完成日期___________________________________数据结构课程设计家谱管理系统计算机科学与技术B150405B15080822宋士龙2016年12月30日课程设计任务书设计题目:家谱管理系统设计内容与要求:【问题描述】:实现具有下列功能的家谱管理系统1).输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。2).实现数据的存盘和读盘。3).显示家谱。4).按照出生日期查询成员名单。5).按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。6).修改某成员信息。【基本要求】:界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明。指导教师:_______________年月日课程设计评语成绩:指导教师:_______________年月日洛阳理工学院课程设计报告1一、算法思想本程序是一个管理家谱的系统,通过这个系统可以对家族成员进行创建、显示、查找、修改、以及保存家谱和读取家谱功能。该系统分为以下几个模块,分别是:创建家谱,显示家谱、按姓名和生日查找家庭成员、修改家谱、存盘、读盘以及退出系统。本程序用到的存储形式为多叉树,因为家谱中每个人既有父母又有孩子,而且孩子的个数并不确定,所以用多叉树来存储最为合适。用多叉树来存储,就用用到多叉树的递归创建及递归遍历。因为是多叉树,所以遍历时用广度优先搜索合适。本函数最主要的思想就是递归调用,每个子函数中都会用到递归。定义结构体时给定指针数组的最大容量,来规定家谱中最多可以存多少人。定义一个家族树的指针变量用来当每个子函数的参数,从而将其返回到主函数中。以下时算法思想流程图:二、模块划分1.intmain():主函数2.voidCreatTree(TreeNode*Tree):创建家族树3.voidOutPutAll(TreeNode*Tree):显示家谱4.voidMenue(TreeNode*Tree):主菜单5.voidSubMenue1(TreeNode*Tree):副菜单(修改选项菜单)6.voidChange(TreeNode*Tree):修改家谱7.TreeNode*SearchTree(TreeNode*Tree,charname[],intlength):按照姓名查找家谱成员家谱管理系统创建家谱显示家谱修改家谱查找成员读写家谱按照姓名按照生日修改本人修改父母修改孩子存盘读盘退出系统洛阳理工学院课程设计报告28.TreeNode*SearchTree1(TreeNode*Tree,charbirth[],intlength):按照生日查找家谱成员9.voidOutPutMessage(TreeNode*Tree,charname[],intlength):输出按姓名查找到的家谱成员10.voidOutPutMessage1(TreeNode*Tree,charbirth[],intlength):输出按生日查找到的家谱成员11.voidSaveFamily(TreeNode*root):保存家谱12.voidReadFamily(TreeNode**root):读取家谱三、数据结构typedefstructTreeNode{intChildNum;//记录这个人拥有几个儿女charName[20];//记录这个人的姓名charbirthday[20];//生日intmarriage;//婚否(1表示结婚,0表示没结婚)intdeath;//生死(1表示活着,0表示过世)charKind;//标示节点的种类有女G男Bcharaddress[100];//住址charlivemassage[50];//死亡日期(如果其已经死亡)structTreeNode*NextNode[20];//记录这个人的儿女structTreeNode*Parent;//记录这个节点的父节点}TreeNode,*tree;四、测试第一组数据为:爷爷,奶奶,爸爸,妈妈,我,二叔,二婶,姐姐,三叔,三婶,弟弟一共三代11个人。其中爷爷是根节点,奶奶为爷爷的配偶,同时也是爷爷的第一个后继节点。爸爸,二叔,三叔为爷爷的子女。爸爸的配偶是妈妈,爸爸的子女是我。二叔的配偶是二婶,子女是姐姐。三叔的的配偶是三婶,三叔的的子女是弟弟。进入程序之后,首先进行创建家谱,然后进行存盘,之后进行修改和查询等步骤。退出程序在进入程序时,进行读盘。之后在进行其他操作,程序完成之后退出即可。洛阳理工学院课程设计报告3图1家族树第一组数据测试截图为:图2显示家谱爷爷爸爸二叔奶奶三叔妈妈二婶三婶我姐姐弟弟洛阳理工学院课程设计报告4图3按照姓名查找家族成员图4存盘第二组数据为:洛阳理工学院课程设计报告5图4王家家族树第二组数据测试截屏为:图5修改家族成员的信息王老王大刘老王二李大张二王小一王小二洛阳理工学院课程设计报告6图6修改某个人的具体信息图7按照生日查找某人洛阳理工学院课程设计报告7图8读盘五、源程序#includestdio.h#includestdlib.h#includestring.h#ifdefWIN32#defineCLEARsystem(cls)#defineTipForSaveFilePositionprintf(\t\t输入文件名及保存位置(eg:D:\\\\example.txt):)#defineTipForReadFilePositionprintf(\t\t文件名及其路径(eg:D:\\\\example.txt):)#else#defineCLEARsystem(clear)#defineTipForSaveFilePositionprintf(\t\t输入文件名及保存位置(eg:/home/xiong/example.txt):)#defineTipForReadFilePositionprintf(\t\t文件名及其路径(eg:/home/xiong/example.txt):)#endif#definemaxFileNameLen50//保存的文件名的最大长度intFLAG=0;inta=1;typedefstructTreeNode{intChildNum;//记录这个人拥有几个儿女charName[20];//记录这个人的姓名charbirthday[20];//生日intmarriage;//婚否(1表示结婚,0表示没结婚)洛阳理工学院课程设计报告8intdeath;//生死(1表示活着,0表示过世)charKind;//标示节点的种类有女G男Bcharaddress[100];//住址charlivemassage[50];//死亡日期(如果其已经死亡)structTreeNode*NextNode[20];//记录这个人的儿女structTreeNode*Parent;//记录这个节点的父节点}TreeNode,*tree;voidCreatTree(TreeNode*Tree);voidOutPutAll(TreeNode*Tree);voidMenue(TreeNode*Tree);voidSubMenue1(TreeNode*Tree);voidSubMenue2(TreeNode*Tree);voidChange(TreeNode*Tree);voidAddNew(TreeNode*Tree);TreeNode*SearchTree(TreeNode*Tree,charname[],intlength);TreeNode*SearchTree1(TreeNode*Tree,charbirth[],intlength);voidOutPutMessage(TreeNode*Tree,charname[],intlength);voidOutPutMessage1(TreeNode*Tree,charbirth[],intlength);voidSaveFamily(TreeNode*root);voidReadFamily(TreeNode**root);intmain()//主函数{TreeNode*Tree;//TreeNode**Tree1;//Tree1=&(*Tree);Tree=(TreeNode*)malloc(sizeof(TreeNode));Tree-Parent=NULL;strcpy(Tree-Name,0);Menue(Tree);return0;}voidMenue(TreeNode*Tree)//输出主菜单{/*TreeNode**Tree1;Tree1=&Tree;*/charc;charname[20];charbirth[20];while(1){system(cls);printf(\t);printf(\n\n\t\t**********欢迎使用家族管理系统**********\n\n);printf(\n\t\tA:输入家谱信息建立树);洛阳理工学院课程设计报告9printf(\n\t\tB:输出整个家谱信息);printf(\n\t\tC:按出生日期查找某人);printf(\n\t\tD:按姓名查找某人);printf(\n\t\tE:修改某个人的信息);printf(\n\t\tF:存盘);printf(\n\t\tG:读盘);printf(\n\t\tH:退出整个程序\n\t);c=getchar();switch(c){case'A':TreeNode*NewNode;NewNode=(TreeNode*)malloc(sizeof(TreeNode));printf(\n\t请输入姓名:);scanf(%s,Tree-Name);printf(\n\t请输入性别女G男B:);getchar();scanf(%c,&(Tree-Kind));Tree-Parent=NewNode;Tree-Parent=NULL;//CreatTree(Tree);//printf(\n\t--------------家谱图已经建立成功---------------\n\n);printf(\n\n\t--------------请按Enter键继续操作--------------);getchar();break;case'B':if(strcmp(Tree-Name,0)==0){printf(\n\t家谱图的多叉树尚未建立请先建立树\n);getchar();break;}printf(\n\n\t整个家谱的主要信息如下:);OutPutAll(Tree);getchar();break;case'C':if(strcmp(Tree-birthday,0)==0){printf(\n\t家谱图的多叉树尚未建立请先建立树\n);getchar();break;}printf(\n\t请输入你要查找的出生日期:);洛阳理工学院课程设计报告10scanf(%s,birth);OutPutMessage1(SearchTree1(Tree,birth,20),birt

1 / 26
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功