家谱管理系统

上传人:re****.1 文档编号:509000184 上传时间:2023-07-29 格式:DOCX 页数:14 大小:240.22KB
返回 下载 相关 举报
家谱管理系统_第1页
第1页 / 共14页
家谱管理系统_第2页
第2页 / 共14页
家谱管理系统_第3页
第3页 / 共14页
家谱管理系统_第4页
第4页 / 共14页
家谱管理系统_第5页
第5页 / 共14页
点击查看更多>>
资源描述

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

1、家谱管理系统(总7页)-本页仅作为文档封面,使用时请直接删除即可-内页可以根据需求调整合适字体及大小-家谱管理系统一、需求分析本系统实现以下功能:1) . 输入文件以存放最初家谱中各成员的信息。 成员的信息中均应包含以 下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)也 可附加其它信息、但不是必需的。2) . 实现数据的存盘和读盘。3) . 以图形方式显示家谱。4) .显示第n代所有人的信息。5) . 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。6) . 按照出生日期查询成员名单。7) . 输入两人姓名,确定其关系。8) . 某成员添加孩子。9) . 删除某成

2、员(若其还有后代,则一并删除)。10) .修改某成员信息。11) .按出生日期对家谱中所有人排序。12) .打开一家谱时,提示当天生日的健在成员。测试要求:1).建立至少 30 个成员的数据,以较为直观的方式显示结果,并提供文稿形 式以便检查。2).对界面的要求是:有合理的提示,每个功能可以设立菜单,根据提示, 可以完成相关的功能要求。二、设计概要1、抽象数据类型兄弟孩子树的定义如下:ADT CSNode数据对象:person是兄弟孩子树中的每一个节点,T是整个树的统一体 数据关系:R1= | 表示 per son 和 i-1 i i-1 i i-1 per son之间有血缘关系i基本操作:C

3、SNode *CreatTree(fstream &outfile);初始条件:已经打开了文本文件操作结果:创建一个兄弟孩子树并把从文件中的数据送到树中,关闭文件。void CreatParent_step(CSNode *parent);初始条件:兄弟孩子树T已经存在操作结果:对所有的孩子节点添加指向父亲的指针void InOrderTraverse(CSNode *T);初始条件:兄弟孩子树T已经存在操作结果:对T进行中序遍历。bool Today_Brithday(CSNode *T);初始条件:兄弟孩子树T已经存在操作结果:根据计算机系统的时间判断几天是否有人过生日,并显示他们的名字。

4、bool (int n,CSNode *T,LinkQueue &Q);初始条件:兄弟孩子树T已经存在,队列Q也已经存在操作结果:用队列Q返回第N代人的所有信息void Link_Info(LinkQueue Q);初始条件:队列Q中是第N代人的所有信息 操作结果:显示队列中所有人的信息。CSNode *DetectMember_Name(CSNode *T,char name);初始条件:兄弟孩子树T已经存在 操作结果:根据输入的姓名进行查找,如找到则返回该节点的指针。CSNode *DetectMember_BornDate(CSNode *T,Date date);初始条件:兄弟孩子树T

5、已经存在操作结果:根据输入的出生日期进行查找,如找到则返回该节点的指 针。void OutputOneInfo(CSNode *T);初始条件:采集到一个节点T 操作结果:显示这一个节点的所有信息。void Output_Name_Relation(CSNode *T);初始条件:采集到一个节点T 操作结果:显示这一个节点的父亲和孩子的所有信息。void Delete_Member(CSNode *T,char name);初始条件:兄弟孩子树T已经存在操作结果:根据输入的姓名进行查找,如找到则删除该节点和他所有的 孩子节点。void Edit_Member_Info(CSNode *T,ch

6、ar name);初始条件:兄弟孩子树T已经存在操作结果:根据输入的姓名进行查找,如找到则根据用户要求修改相应 的信息。bool Add_New_Child(CSNode *T);初始条件:兄弟孩子树T已经存在操作结果:根据输入的姓名进行查找,如找到则在他的孩子树中添加新 的孩子节点。void InOrderInfile(CSNode *T,fstream &infile);初始条件:兄弟孩子树T已经存在,且已经打开了文本文件操作结果:把现在的数据读入文件中,关闭文件。bool Generation(CSNode *T,CSNode *child);初始条件:兄弟孩子树T已经存在操作结果:判断

7、child是否是T的后代,如果是返回true,否则返回 false。void Output_Two_Member_Realtionship(CSNode *T,char name1,char name2);初始条件:兄弟孩子树T已经存在操作结果:根据已经输入的两个姓名进行查找和判断,确定他们的关void InOrderIn(CSNode *T,CSNode S,int &num);初始条件:兄弟孩子树T已经存在操作结果:对T进行中序遍历,并且把每一个节点信息送到数组S中,num为S中成员个数。void LineChars(CSNode S,int num);初始条件:节点数组S已经存在 操作结

8、果:对数组的节点信息按照出生日期进行排序,采用的是基数 排序ADT CSNode2、抽象数据类型队列的定义如下:ADT LinkQueue数据对象:D=e| i = 1,2,3n ; nMO ; eLinkQueueii数据关系:R1=|表示e和e之间有先后顺序关系i-1 ii-1 ii-1i基本操作:bool InitQueue(LinkQueue &Q);操作结果:创建一个空的队列Qobool DestroyQueue(LinkQueue &Q);初始条件:队列Q存在操作结果:销毁队列Q, Q不再存在。bool EnQueue(LinkQueue &Q,CSNode e);初始条件:队列Q

9、存在 操作结果:插入元素e为Q的新的队尾元素。bool ClearQueue(LinkQueue &Q);初始条件:队列Q存在操作结果:清空队列Q。bool QueueEmpty(LinkQueue Q);初始条件:队列Q存在操作结果:若队列为空,则返回true,否则返回false。bool DeQueue(LinkQueue &Q,CSNode &e);初始条件:队列Q存在操作结果:删除Q的队头元素,并用e返回其值,并返回trueint QueueLength(LinkQueue Q);初始条件:队列Q存在操作结果:返回队列Q的长度。bool GetHead(LinkQueue Q,CSNo

10、de &e);初始条件:队列Q存在操作结果:用e返回队首元素,并返回true。 ADT LinkQueue3、主程序Void main()打开文本文件;Do接受命令(对兄弟孩子树进行相关的操作的选项);处理命令(对兄弟孩子树进行相关的操作);while(“命令”!二“退出”);三、详细设计1、程序:由于程序有 1000 多行,所以就不列出,见附后的源程序(电子 报告)。2、函数的调用关系图:mai1r、rirr1r1rir产rOutput_N_MembeKJDetecL-rAdd_New_Child1.JirDelete_MembKMrrEdit_Member_I nfL,Name_Relat

11、io宀7Today_Brithday1 FV1 FVVVv1rvOutput_Two_Member_Realtionshipi.DetectMember_Nam DetectMember_BornDInOrderinfile四、调试分析1、家谱系统的编程过程还是比较简单的,储存结构是兄弟孩子树,所以调 试的时候还是比较顺利的。2、这次程序因为是关于树的操作,所以用递归的思想用的比较多。3、程序当中的在用树的相关操作外,还运用了队列。4、在时间和空间复杂度上,都进行了有效的控制。5、该系统的安全效果较好,能自动辨别出错误的输入信息,并给出警告或提示。五、测试结果图1主界面图2家谱图显示图3修改成员信息图4添加成员图5按姓名查找(只显示自己信息)x按it名查找输入查找人的姓名姓名性别性址是否已婚是否健在与查找人刖金日MAN江苏NONOFATHERMEL、MAN江苏NONOHIMSELF1金杰金容MAN1NoNoSON(DAUTf禰定i取消illlllllllll III III 1111*破显示他父亲和孩子图6按姓名查找图7按出生日期查找

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

当前位置:首页 > 学术论文 > 其它学术论文

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