家谱管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
洛 阳 理 工 学 院
课 程 设 计 报 告
课程名称 ___________________________________ 设计题目 ___________________________________ 专 业 ___________________________________ 班 级 ___________________________________ 学 号 ___________________________________ 姓 名 ___________________________________ 完成日期 ___________________________________
数据结构课程设计 家谱管理系统 计算机科学与技术 B150405 B15080822 宋士龙 2016年12月30日
课程设计任务书
设计题目:家谱管理系统
设计内容与要求:
【问题描述】:实现具有下列功能的家谱管理系统
1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。
2). 实现数据的存盘和读盘。
3). 显示家谱。
4). 按照出生日期查询成员名单。
5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。
6). 修改某成员信息。
【基本要求】:
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。
测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明。
指导教师:_______________
年月日
课程设计评语
成绩:
指导教师:_______________
年月日
一、算法思想
本程序是一个管理家谱的系统,通过这个系统可以对家族成员进行创建、显示、查找、修改、以及保存家谱和读取家谱功能。该系统分为以下几个模块,分别是:创建家谱,显示家谱、按姓名和生日查找家庭成员、修改家谱、存盘、读盘以及退出系统。本程序用到的存储形式为多叉树,因为家谱中每个人既有父母又有孩子,而且孩子的个数并不确定,所以用多叉树来存储最为合适。用多叉树来存储,就用用到多叉树的递归创建及递归遍历。因为是多叉树,所以遍历时用广度优先搜索合适。本函数最主要的思想就是递归调用,每个子函数中都会用到递归。定义结构体时给定指针数组的最大容量,来规定家谱中最多可以存多少人。定义一个家族树的指针变量用来当每个子函数的参数,从而将其返回到主函数中。
以下时算法思想流程图:
二、模块划分
1.int main():主函数
2.void CreatTree(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[],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; //记录这个人拥有几个儿女
char Name[20];//记录这个人的姓名
char birthday[20];//生日
int marriage;//婚否(1表示结婚,0表示没结婚)
int death;//生死(1表示活着,0表示过世)
char Kind;//标示节点的种类有女G男B
char address[100];//住址
char livemassage[50];//死亡日期(如果其已经死亡)
struct TreeNode *NextNode[20]; //记录这个人的儿女
struct TreeNode *Parent; //记录这个节点的父节点
}TreeNode,*tree;
四、测试
第一组数据为:
爷爷,奶奶,爸爸,妈妈,我,二叔,二婶,姐姐,三叔,三婶,弟弟一共三代11个人。
其中爷爷是根节点,奶奶为爷爷的配偶,同时也是爷爷的第一个后继节点。爸爸,二叔,三叔为爷爷的子女。爸爸的配偶是妈妈,爸爸的子女是我。二叔的配偶是二婶,子女是姐姐。三叔的的配偶是三婶,三叔的的子女是弟弟。
进入程序之后,首先进行创建家谱,然后进行存盘,之后进行修改和查询等步骤。退出程序在进入程序时,进行读盘。之后在进行其他操作,程序完成之后退出即可。