课程设计报告格式

更新时间:2023-03-09 15:11:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

洛 阳 理 工 学 院

课 程 设 计 说 明 书

课程名称 数据结构

设计课题 家谱管理系统 专 业 计算机科学与技术 班 级 B110503 学 号 B11050311 姓 名 欧阳斌 完成日期 2013年6月11日

课 程 设 计 任 务 书

设计题目:家谱管理系统 设计内容与要求:

实现具有下列功能的家谱管理系统

1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容: 姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。

2). 实现数据的存盘和读盘。 3). 显示家谱。

4). 显示第n 代所有人的信息。

5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 6). 按照出生日期查询成员名单。 7). 输入两人姓名,确定其关系。 8). 某成员添加孩子。

9). 删除某成员(若其还有后代,则一并删除)。 10).修改某成员信息。

11).按出生日期对家谱中所有人排序。

12).打开一家谱时,提示当天生日的健在成员。

建立至少30个成员的数据,以直观的方式显示结果,并提供文稿形式以便检查。 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;

指导教师:

年 月 日

课 程 设 计 评 语

成绩:

指导教师:

年 月 日

洛 阳 理 工 学 院 课 程 设 计 报 告

【问题描述】

设计一个家庭族谱系统,使其满足以下条件:

1). 输入文件以存放最初家谱中各成员的信息。 成员的信息中均应包含以下内容:

姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)也可附加其它信息、但不是必需的。 2). 实现数据的存盘和读盘。 3). 以图形方式显示家谱。

4). 显示第n 代所有人的信息。

5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 6). 按照出生日期查询成员名单。 7). 输入两人姓名,确定其关系。 8). 某成员添加孩子。

9). 删除某成员(若其还有后代,则一并删除)。 10).修改某成员信息。

11).按出生日期对家谱中所有人排序。

12).打开一家谱时,提示当天生日的健在成员。

【基本要求】

建立至少30个成员的数据,以直观的方式显示结果,并提供文稿形式以便检查。 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明; 【测试数据】

【算法思想】

抽象数据类型兄弟孩子树的定义如下: ADT CSNode{

数据对象:person是兄弟孩子树中的每一个节点,T是整个树的统一体

数据关系:R1={<personi-1,personi>|<personi-1,personi>表示personi-1和

personi之间有血缘关系}

基本操作:

CSNode *CreatTree(fstream &outfile);

初始条件:已经打开了文本文件PersonInfo.txt

操作结果:创建一个兄弟孩子树T,并把从文件中的数据送到树中,关闭文件。

void CreatParent_step(CSNode *parent);

初始条件:兄弟孩子树T已经存在

操作结果:对所有的孩子节点添加指向父亲的指针 void InOrderTraverse(CSNode *T); 初始条件:兄弟孩子树T已经存在 操作结果:对T进行中序遍历。

1

洛 阳 理 工 学 院 课 程 设 计 报 告

bool Today_Brithday(CSNode *T); 初始条件:兄弟孩子树T已经存在

操作结果:根据计算机系统的时间判断几天是否有人过生日,并显示他们的名字。

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已经存在

操作结果:根据输入的出生日期进行查找,如找到则返回该节点的指针。 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,char name[]); 初始条件:兄弟孩子树T已经存在

操作结果:根据输入的姓名进行查找,如找到则根据用户要求修改相应

的信息。

bool Add_New_Child(CSNode *T); 初始条件:兄弟孩子树T已经存在

操作结果:根据输入的姓名进行查找,如找到则在他的孩子树中添加新

的孩子节点。

void InOrderInfile(CSNode *T,fstream &infile);

初始条件:兄弟孩子树T已经存在,且已经打开了文本文件

PersonInfo.txt

操作结果:把现在的数据读入文件中,关闭文件。 bool Generation(CSNode *T,CSNode *child); 初始条件:兄弟孩子树T已经存在 操作结果:判断child是否是T的后代,如果是返回true,否则返回false。 void Output_Two_Member_Realtionship(CSNode *T,char name1[],char

name2[]);

2

洛 阳 理 工 学 院 课 程 设 计 报 告

初始条件:兄弟孩子树T已经存在

操作结果:根据已经输入的两个姓名进行查找和判断,确定他们的关系。 void InOrderIn(CSNode *T,CSNode S[],int &num); 初始条件:兄弟孩子树T已经存在

操作结果:对T进行中序遍历,并且把每一个节点信息送到数组S中,

num为S中成员个数。

void LineChars(CSNode S[],int num); 初始条件:节点数组S已经存在

操作结果:对数组的节点信息按照出生日期进行排序,采用的是基数排序 }ADT CSNode

抽象数据类型队列的定义如下: ADT LinkQueue{

数据对象:D={ei| i=1,2,3,…,n;n≧0;ei∈LinkQueue}

数据关系:R1={<ei-1, ei>|<ei-1,ei>表示ei-1和ei之间有先后顺序关系} 基本操作:

bool InitQueue(LinkQueue &Q); 操作结果:创建一个空的队列Q。 bool DestroyQueue(LinkQueue &Q); 初始条件:队列Q存在

操作结果:销毁队列Q,Q不再存在。 bool EnQueue(LinkQueue &Q,CSNode e); 初始条件:队列Q存在

操作结果:插入元素e为Q的新的队尾元素。 bool ClearQueue(LinkQueue &Q); 初始条件:队列Q存在 操作结果:清空队列Q。

bool QueueEmpty(LinkQueue Q); 初始条件:队列Q存在

操作结果:若队列为空,则返回true,否则返回false。 bool DeQueue(LinkQueue &Q,CSNode &e); 初始条件:队列Q存在

操作结果:删除Q的队头元素,并用e返回其值,并返回true。 int QueueLength(LinkQueue Q); 初始条件:队列Q存在

操作结果:返回队列Q的长度。

bool GetHead(LinkQueue Q,CSNode &e); 初始条件:队列Q存在

操作结果:用e返回队首元素,并返回true。 } ADT LinkQueue

小四宋体,行间距单倍行距

【模块划分】

3

洛 阳 理 工 学 院 课 程 设 计 报 告

1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:

1 创建模块:void CreatTree(TreeNode *Node) 1 修改模块:void Change(TreeNode * Tree) 2 添加模块:void AddNew(TreeNode * Tree)

3 查询模块:TreeNode * SearchTree(TreeNode *Tree,char name[],int length) 4 输出模块:(1)void OutPutAll(TreeNode *Tree)

(2)void OutPutMessage(TreeNode * Tree,char name[],int length) 5菜单模块:(1) void MainMenue(TreeNode *Tree); (2)void SubMenue1(TreeNode * Tree); (3)void SubMenue2(TreeNode *Tree);

这次课程设计,家谱系统的设计,着实让人头疼,不过还好,老师的要求并不是要求每位同学各做一个,而是要求我们四人一组来完成这个作业,我们小组四人也不是这方面的强人,所以做起来有一定难度。但是我们通过查阅资料,以及借鉴同学制作的链表,另外还有同学的讲解,我们克服了这方面的困难。另一重要方面就是小组成员之间的合作,怎样协调大家共同做好一件事情的问题,只有参与此过程才会体会到团队合作所带来的快乐。

总之,我们四人一起讨论了程序实现过程中所出现的问题,大家根据各自的意见共同对程序加以改进。知识要附之于实践相结合,这次作业让我们收获颇丰。

否、健在否,也可附加其它信息、但不是必需的。 2). 实现数据的存盘和读盘。 3). 显示家谱。

4). 显示第n 代所有人的信息。

5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 6). 某成员添加孩子。

7). 删除某成员(若其还有后代,则一并删除)。

4

洛 阳 理 工 学 院 课 程 设 计 报 告

8).修改某成员信息。

【数据结构】

小四宋体,行间距单倍行距

【测试情况】

小四宋体,行间距单倍行距

【心得】

小四宋体,行间距单倍行距

【源程序】

5号,Times New Roman

5

本文来源:https://www.bwwdw.com/article/9c8a.html

Top