家谱管理系统设计报告样本
- 格式:doc
- 大小:175.50 KB
- 文档页数:51
《数据结构的课程设计》报告题目:家谱管理系统设计与实现班级:1612401学号:*********姓名:***指导老师:**完成日期:2014.1.3目录一.需求分析.二.程序主要功能.三.程序运行平台.四.程序类说明.五.运行分析六.存在的不足与对策.七.体验感悟八.程序源代码.需求分析实现具有下列功能的家谱管理系统。
程序主要功能(1)输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。
(2)实现数据的存盘和读盘。
(3)以图形方式显示家谱。
(4)显示第n 代所有人的信息。
(5)按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。
(6)按照出生日期查询成员名单。
(7)输入两人姓名,确定其关系。
(8)某成员添加孩子。
(9)删除某成员(若其还有后代,则一并删除)。
(10)修改某成员信息。
(11)按出生日期对家谱中所有人排序。
(12)打开一家谱时,提示当天生日的健在成员。
(13)要求建立至少30个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。
(14)界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
(15)存储结构:根据系统功能要求自行设计,但是要求相关数据要存储在数据文件中。
测试数据:要求使用1、全部合法数据;2、局部非法数据。
进行程序测试,以保证程序的稳定。
程序运行平台该程序是用VC++6.0制做的,使用Microsoft Visual C++ 6.0运行该程序,具体操作是:打开Microsoft Visual C++ 6.0,菜单栏里点文件→打开工作区→找到“图书管理系统.dsw”这个文件→打开,或者在资源管理器中双击该文件,此时,VC++6.0会自动打开,并载入该系统相关资源,点击Run命令菜单或者或用快捷键Ctrl+F5运行该程序。
目录第一章绪论 (2)第二章需求分析 (3)2.1 题目 (3)2.2 设计任务 (3)2.3 数据测试 (3)第三章概要设计 (3)3.1 设计思想 (3)3.2 实现方法 (4)第四章详细设计 (4)4.1 功能构想 (4)4.2 界面设计 (4)4.3 增加成员 (5)4.3.1 添加子女 (5)4.3.2 添加配偶 (5)4.4 修改成员 (6)4.4.1 修改个人信息 (6)4.4.2 修改父母信息 (6)4.4.3 修改兄弟姐妹的信息 (6)4.4.4 修改子女的信息 (7)第五章调试分析 (7)第六章测试结果 (9)致谢 (10)参考文献 (11)附录 (11)第一章绪论目前,很多家庭家谱丢失,家庭一些关系混乱,为了避免这一问题,制定一家谱程序。
家谱用于记录某家族历代家族成员的情况与关系,实现对一个家族所有的资料进行收集整理。
支持对家谱的存储、更新、查询、统计等操作。
并用计算机永久储存家族数据,方便随时调用。
第二章需求分析2.1 题目家谱管理系统2.2 设计任务系统总体说明:以树形结构存储家族信息,只考虑三代(祖父,父亲,叔叔,姑姑,自己,兄弟姐妹,堂兄弟姐妹),只考虑每个人有 0 或者 1个兄弟姐妹的情况。
注意每个结点结构。
统计统计家族成员人数,查询家族成员辈份。
完成功能的详细说明: 1.输入家族成员情况,建立树结构(涉及创建二叉树);2.统计家族成员人数和每一个家庭成员人数(涉及树的遍历);3.查询家族成员辈份情况(任意输入两个家庭成员,查询他们的关系,父子,祖孙,兄弟,堂兄弟,共同的祖先)。
4. 选做,考虑每个人有多个兄弟姐妹的情况。
2.3 数据测试第三章概要设计3.1设计思想测试的数据有:田迎新陈瑞英田紫藤田紫恒孙超李美霖创建一棵树,存储家庭关系,数据类型有int Num; // 记录这个人拥有几个儿女char Name[20]; //记录这个人的姓名char Sex; //标示节点的种类有女(0)男(1)struct TreeNode * NextNode[20]; // 记录这个人的儿女 struct TreeNode * Parent; //记录这个节点的父节点3.2 实现方法完成功能的函数有void CreatTree(TreeNode *Tree);// ----------------- 创建树void OutPutAll(TreeNode *Tree);// ----------------- 遍历并输出树中的内容void firstoftxt();// --------------------------- 写入文件的开始信息void ofAll(TreeNode *Tree);// --------------------- 写入文件函数void ifAll();// -------------------------------- 读取文件的函数TreeNode * SearchTree(TreeNode *Tree,char name[],int length);// 查找结点的函数 void MainMenue(TreeNode *Tree);// ---------------------- 主菜单void SubMenue1(TreeNode * Tree);// ---------------- 修改成员信息的菜单void SubMenue2(TreeNode *Tree);// ----------------- 添加新成员菜单void Change(TreeNode * Tree);// ------------------- 修改成员信息void AddNew(TreeNode * Tree);// ------------------- 添加新成员void OutPutMessage(TreeNode * Tree,char name[],int length);// 输出已经查找到的人的信息第四章详细设计4.1 功能构想构想好总体规划之后,便开始设计程序中需要用到的各个功能函数,初步构想是要先实现最基本的几项功能,其中数据操作的有:增加成员,修改成员资料,删除成员;数据存取的有:打开家谱,新建家谱,保存家谱;数据查询的有:查看某代信息,按姓名查找,查看成员关系,等等。
人类族谱管理系统设计报告.软件学院综合训练项目报告书课程名称数据结构项目名称人类家谱管理系统专业班级软件13-3班组别第五组成员张伟竹王雨柔何惠民任课教师孙宁word 资料目录 1. 设计时间………………………………………………………………12. 设计任务………………………………………………………………13. 设计内容………………………………………………………………13.1问题分析…………………………………………………………….13.2 程序设计……………………………………………………………33.3测试与分析………………………………………………………..103.3.1测试………………………………………………………..……103.3.2分析………………………………………………………..……143.4代码………………………………………………………………..144. 总结与展望………………………………………………………….215. 参考文献…………………………………………………………….22word 资料1 设计时间XXXX年12月16日——XXXX年1月6日2 设计任务树形结构是一种非常重要的非线性结构,它用于描述数据元素之间的层次关系,人类家谱是树形结构的典型体现,通过此项训练让学生掌握树形结构的知识;使学生重点掌握树与二叉树的转换,二叉树的存储和遍历;此项训练要求构造一棵家谱树,并完成任意成员的查找。
3 设计内容3.1问题分析1. 程序所能达到的功能,见功能模块图(图3-1)。
(1)输入家族始祖信息,初始化(或创建)一个家族族谱树。
(2)输入要添加人信息,插入新的家族成员。
(3)输入要查找人姓名,对家族成员进行查找。
(4)输入要修改人姓名,修改某一个家族成员信息。
2.输入的形式和输出的形式。
输入和输出的姓名可以是中文也可以是英文,变量名为char类型,且最多不得多余20字符,对于某一个人所处代数为数字,变量名为int类型,对输入输出的性别,本设计要求是M或F表示,故必须是英文,为char类型的变量。
课程设计报告课程名称《数据结构》课题名称排序综合专业班级学号姓名联系方式指导教师20 11 年 12 月 21 日目录1. 问题陈述 (3)2.设计方法阐述 (3)2.1总体规划 (3)2.2功能构想 (4)2.2.1增加成员 (4)2.2.2修改成员资料 (5)2.2.3删除成员 (6)2.2.4打开家谱 (7)2.2.5新建家谱 (8)2.2.6保存家谱 (10)2.2.7查看某代信息 (11)2.2.8按姓名查找 (12)2.2.9按生日查找 (12)2.2.10查看成员关系 (13)2.2.11按出生日期排序 (14)2.3板块整合 (15)2.4调试分析 (19)3.总结 (19)4. 测试结果 (20)1.问题陈述家谱用于记录某家族历代家族成员的情况与关系。
现编制一个家谱资料管理软件,实现对一个家族所有的资料进行收集整理。
支持对家谱的存储、更新、查询、统计等操作。
并用计算机永久储存家族数据,方便随时调用。
2.设计方法阐述2.1总体规划在动手编制程序之前,先要做好程序的规划,包括程序储存数据所用的结构,数据类型等等,只有确定了数据类型和数据结构,才能在此基础上进行各种算法的设计和程序的编写。
首先是考虑数据类型。
在家谱中,家族成员是最基本的组成部分,对于家族管理中,已经不能再进行细分了,所以选定家族成员作为数据的基本类型,并在程序中定义COperationFamilytree 类。
其中COperationFamilytree 类的各种属性可以根据需要进行添加或删除,从日常生活应用的角度出发,制定了COperationFamilytree 类中包含了一下属性:char name[MAX_CHARNUM]; //姓名Date birthday; //出生日期In tsex; //性别char addr[MAX_CHARNUM]; //基本资料int live; //健在否Date deathday; //死亡日期int ChildNums(Person pNode) ; //返回pNode孩子数intInSiblingPos(Person pNode); //返回pNode在其兄弟中的排行为方便计算机进行比较,在familytree类的某些属性中用数字代替了某些不会改变的字符串,譬如性别(1代表男,0代表女)、判断是否健在(1为是,0为否)。
《家谱管理系统》课程设计报告学院:信息科学与工程学院班级:计算机科学与技术08-4班制作人:邢尚文****:***山东科技大学2011年9月1日需求分析:本系统主要完成对家谱的相关操作和家谱人员信息的管理,包括打开家谱、新加家谱、保存家谱和家谱人员的姓名查找、某代信息查找、信息删除等。
系统的核心是利用对话框的连接和文本处理来存储和修改家谱管理系统的信息联系,其中的每一个动作都可能影响到其他的功能。
本系统实现以下功能:1). 输入文件以存放最初家谱中各成员的信息。
成员的信息中均应包含以下内容:姓名、辈分、父辈姓名、电话。
2). 实现数据的存盘和读盘。
3). 以图形方式显示家谱。
4). 显示第n 代所有人的信息。
5). 按照姓名查询,输出成员信息6). 删除某成员。
本系统的作用不是为了代替家谱,而是为了更好的建立家庭之间成员的联系,提供一个查询的平台,里面的族谱及文化介绍可以有效的介绍家族历史,让成员了解家族历史,向外界展示。
E-R图程序界面与代码:using System;using System.Collections.Generic; using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication12 {public partial class Form1 : Form {public Form1(){InitializeComponent();}private void button4_Click(object sender, EventArgs e){if (textBox1.Text == "" && textBox2.Text == " "){MessageBox.Show("信息不全请重新填写");}if (textBox1.Text == "admin" && textBox2.Text == "admin"){Form2 form = new Form2();form.Show();}else{textBox1.Text = "";textBox2.Text = "";MessageBox.Show("请重新输入用户名密码?");}}private void button1_Click(object sender, EventArgs e){Form6 form = new Form6();form.Show();}private void button3_Click(object sender, EventArgs e){Form7 form = new Form7();form.Show();}private void button2_Click(object sender, EventArgs e){MessageBox.Show("本软件的设¨计?是º?为a了¢?让¨?用®?户¡ì能¨¹够?更¨¹好?地Ì?管¨¹理¤¨ª家¨°谱¡Á以°?及¡ã方¤?便À?家¨°谱¡Á的Ì?修T改?,ê?使º1用®?注Á¡é册¨¢过y的Ì?账?号?的Ì?登Ì?陆?后¨®就¨ª可¨¦以°?使º1用®?本À?软¨¨ª件t!ê?");}}}using System;using System.Collections.Generic; using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication12 {public partial class Form2 : Form {public Form2(){InitializeComponent();}private void祖Á?先¨¨功|德Ì?ToolStripMenuItem_Click(object sender, EventArgs e) {Form3 form = new Form3();form.Show();}private void zToolStripMenuItem_Click(object sender, EventArgs e){Form4 form = new Form4();form.Show();}private void祭¨¤祖Á?文?化¡¥ToolStripMenuItem_Click(object sender, EventArgs e) {Form5 form = new Form5();form.Show();}private void家¨°谱¡Á管¨¹理¤¨ªToolStripMenuItem_Click(object sender, EventArgs e){Form8 form = new Form8();form.Show();}private void dsdfsdToolStripMenuItem_Click(object sender, EventArgs e){Form9 form = new Form9();form.Show();}private void通ª¡§讯?录?添¬¨ª加¨®ToolStripMenuItem_Click(object sender, EventArgs e){Form10 form = new Form10();form.Show();}private void制?作Á¡Â人¨?ToolStripMenuItem1_Click(object sender, EventArgs e) {MessageBox.Show("制?作Á¡Â人¨?计?算?机¨²08-3班㨤:êo李¤?蓟?涛¬?,ê?李¤?赟²S,ê?张?拓ª?,ê?苏?晓t慧?");}private void通ª¡§讯?录?ToolStripMenuItem_Click(object sender, EventArgs e) {MessageBox.Show("要°a做Á?出?修T改?需¨¨要°a提¬¨¢供?管¨¹理¤¨ª员¡À权¨¡§限T!ê?");Form11 form = new Form11();form.Show();}private void制?作Á¡Â人¨?ToolStripMenuItem_Click(object sender, EventArgs e) {Form13 form = new Form13();form.Show();}}}using System;using System.Collections.Generic; using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication12 {public partial class Form3 : Form {public Form3(){InitializeComponent();}}}using System;using System.Collections.Generic; using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication12 {public partial class Form4 : Form {public Form4(){InitializeComponent();}}}using System;using System.Collections.Generic; using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication12 {public partial class Form5 : Form {public Form5(){InitializeComponent();}}}using System;using System.Collections.Generic; using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication12 {public partial class Form6 : Form {public Form6(){InitializeComponent();}}}using System;using System.Collections.Generic; using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication12 {public partial class Form7 : Form {public Form7(){InitializeComponent();}}}using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.OleDb;namespace WindowsFormsApplication12{public partial class Form9 : Form{public Form9(){InitializeComponent();}private void Form9_Load(object sender, EventArgs e){// TODO: 这a行D代䨲码?将?数ºy据Y加¨®载?到Ì?表À¨ª“¡ãdb1DataSet11.表À¨ª2”¡À中D。
宁波大红鹰学院信息工程学院课程设计报项目名称:家谱查询系统项目组长:白钰琦项目成员:徐程凯、徐海域、项鸿伟班级名称:10计科1班专业名称:计算机科学与技术完成时间:2012年12月1日信息工程学院制一、..................................... 案例描述-3 -1总体描述............................. -3 -2、模块描述........................... -4 -二、..................................... 设计思路-5 -三、..................................... 程序设计-5 -1、数据结构描述......................... -5 -2、主函数及其流程图...................... -6 -3、源程序........................... -7 -四、...................................... 调试与分析-7 -1、主菜单............................ -12 -2、显示家谱信息......................... -13 -3、显示家谱中第n代人所有信息................. -13 -4、按姓名查找某人并相应输出................... -13 -5、按出生日期查找家谱成员信息......... 错误!未定义书签。
6、为家谱中成员添加孩子信息.................. -14 -7、为家谱中成员添加妻子信息............ 错误!未定义书签。
8删除家谱中成员及其后代信息............ 错误!未定义书签。
9、修改家谱中成员信息......................................... -15 ................................................................................... -10、确定家谱中两个成员关系 ........... 错误!未定义书签。
家谱管理系统。
洛阳科技学院课程设计报告数据结构课程设计课程名称_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _家谱管理系统设计主题_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _计算机科学与技术专业_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ b 150405班级_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ b 15080822学校编号_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _宋世龙的姓氏是_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x XXX,2006年12月30日。
完成日期_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _家谱管理系统设计的内容和要求;[问题描述]以下内容:实现了具有以下功能的家谱树管理系统1)。
家谱管理系统一、需求分析本系统实现以下功能:1). 输入文件以存放最初家谱中各成员的信息。
成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期( 若其已死亡) 也可附加其它信息、但不是必须的。
2). 实现数据的存盘和读盘。
3). 以图形方式显示家谱。
4). 显示第n 代所有人的信息。
5). 按照姓名查询, 输出成员信息( 包括其本人、父亲、孩子的信息) 。
6). 按照出生日期查询成员名单。
7). 输入两人姓名, 确定其关系。
8). 某成员添加孩子。
9). 删除某成员( 若其还有后代, 则一并删除) 。
10).修改某成员信息。
11).按出生日期对家谱中所有人排序。
12).打开一家谱时, 提示当天生日的健在成员。
测试要求:1).建立至少30个成员的数据, 以较为直观的方式显示结果, 并提供文稿形式以便检查。
2).对界面的要求是: 有合理的提示, 每个功能能够设立菜单, 根据提示,能够完成相关的功能要求。
二、设计概要1、抽象数据类型兄弟孩子树的定义如下: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进行中序遍历。
家谱管理系统设计(共18页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--《软件综合设计》家谱管理系统院系:计算机科学技术学院二系班级:计11 – 2班姓名:刘文秀(15)合作者:姜雪(05) 、岳奉宜(33)指导教师:薛曼玲2013 年 12 月 01 日《软件综合设计》任务书一、题目:家谱管理系统二、设计要求(1)刘文秀(组长)、姜雪和岳奉宜组成课程设计小组。
(2)小组成员分工协作完成。
要求每个成员有自己相对独立的模块,,同时要了解其他组员完成的内容。
(3)查阅相关资料,自学具体课题中涉及到的新知识。
(4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。
(5)所设计的系统应有菜单、动画和音乐。
(6)按要求写出课程设计报告,并于设计结束后1周内提交。
其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求分析、总体设计、详细设计、程序的调试与测试、总结与体会、结束语、程序清单(带中文注释)、参考文献等。
报告一律用A4纸打印,正文的中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。
1级标题中文字体为黑体,西文字体为Time New Roma,采用三号字;段落为居中、段前18磅、段后12磅、行距采用“固定值”18磅,首行缩进:无,段中不分页,与下段同页。
仅一级标题上目录。
三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在400行有效程序行以上,不得抄袭。
四、课程设计工作计划2013年12月2日,指导教师讲课,学生根据题目准备资料,需求分析;2013年12月3日,设计小组进行总体方案设计和任务分工;2013年12月4日~2013年12月10日,每人完成自己承担的程序模块并通过独立编译;2013年12月11日~12日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2013年12月13日,验收、开始撰写课程设计报告;2013年12月18日前,提交课程设计报告和软件。
数据结构_家谱管理系统【数据结构_家谱管理系统】一、引言家谱是记录家族成员关系的重要文献,传统的家谱管理方式已经无法满足现代社会的需求。
为了更好地管理家族信息,提高家族成员之间的联系和交流,我们设计并开发了一款家谱管理系统。
本文将详细介绍该系统的设计和实现。
二、系统概述家谱管理系统是一个基于数据结构的软件应用,旨在帮助用户管理家族成员的信息,包括姓名、性别、出生日期、配偶、子女等。
系统提供了多种功能,包括添加、删除、修改、查询、统计等操作,方便用户对家谱信息进行维护和管理。
三、系统设计1. 数据结构选择在家谱管理系统中,我们选择了树这种数据结构来表示家族关系。
每个节点代表一个家庭成员,节点之间通过指针连接,形成家族的层级结构。
2. 数据模型设计家族成员的信息可以通过一个结构体来表示,包括姓名、性别、出生日期等字段。
每个节点除了包含成员信息外,还包含指向配偶的指针和指向子女的指针。
3. 系统功能设计家谱管理系统提供了以下功能:(1) 添加成员:用户可以输入成员信息,系统根据用户输入创建一个新的节点,并将其插入到适当的位置。
(2) 删除成员:用户可以指定要删除的成员,系统会删除该成员及其所有子孙节点。
(3) 修改成员信息:用户可以选择要修改的成员,然后输入新的信息进行更新。
(4) 查询成员信息:用户可以通过姓名、出生日期等条件查询成员信息。
(5) 统计家族人数:系统可以统计家族的总人数、男性人数、女性人数等信息。
四、系统实现1. 数据结构实现我们使用C语言来实现家谱管理系统。
通过定义一个节点结构体,使用指针来连接各个节点,实现家族关系的表示和管理。
2. 功能实现(1) 添加成员:根据用户输入的信息,创建一个新节点,并将其插入到适当的位置。
插入操作需要遍历树来找到合适的位置。
(2) 删除成员:根据用户指定的成员,删除该节点及其所有子孙节点。
删除操作需要递归地遍历树。
(3) 修改成员信息:根据用户选择的成员,更新其信息。
Project 3 家谱管理一、题目用树型结构实现家族成员信息管理,(如建立、删除、查询、统计、打印等)二、数据结构与算法1.定义树结点node {string name;node *left;node *right;string sex;//male or femaleint num;//结点编号node() {name = "";left = right = NULL;num = 0;sex = "male";}};2.定义class tree{};实现不同对树的操作其中,以static int count记录节点总数;以static int height记录树高度;以node* root作为头指针;以node* arr[maxnode]将每个节点的指针记录在数组里。
3.对于该树的操作:a. 创建树:首先此project中树由男性为根结点。
男性的左孩子是其兄弟,右孩子是其第一任妻子,第一任妻子的右孩子是其第二任妻子,每个妻子的左孩子是其与这位妻子的孩子。
如此递归生成家谱。
输入时,用0表示左孩子,1表示右孩子,以1010等的字符串输入结点位置来创造结点。
创建后用函数cheak来检验创造的树是否正确,具体来说就是避免创建树时出现有结点没有父结点的情况。
b.删除结点:以结点的name成员搜索结点,删除结点及其子树。
c.查询结点:以结点的name成员搜索结点,打印该结点的父母兄弟、妻子、男孩。
d.统计函数:统计家谱总数。
本project中通过#define定义打印屏幕宽度screen_width为96,最多结点maxnode为32,因此树高度不超过5层,总数count不超过32. (linux下测试,终端宽度可以任意,windows下的话只能是80)e.打印:采用广度优先搜索遍历来打印树。
三、测试数据、结果及分析1.界面(注:单词“member”拼写错误已在代码中改正)2.初始化家族成员(注:初始化人数须大于1.)3.功能菜单(基于2中初始化的成员):(1)输出整棵树中的成员其中未存储成员的树的节点用“no”来表示。
数据结构课程设计——家谱管理系统一、问题描述问题名称:电子家谱问题内容:用树形的形式表示某家族的家谱,每个树结点表示一个家族成员,成员基本信息如下,具体属性自行确定。
1、姓名2、性别3、出生地4、配偶5、电话6、家庭住址7、职业8、简历9、其他系统实现功能:1、家谱信息1.1、输入1.2、修改1.3、删除2、查询2.1、某家谱成员的所有子孙的集合2.2、某家谱成员的所有祖先的集合2.3、某家谱成员的所有同辈成员的集合2.4、求某家谱成员的所有上一辈成员的集合2.5、给出两个家谱成员,确定他们的关系2.6、其他查询3、统计功能3.1、统计家谱成员的总人数3.2、统计从事某种职业的人数3.3、综合统计其他功能要求:1、用文件保存家谱信息2、图形方式显示家谱2二、系统总体设计(模块结构图)建立家谱读取文件保存家谱添加结点修改结点删除结点程序入口输出家谱统计基本查询关系查询祖先列表两人关系三、算法和数据结构设计数据结构的设计:使用兄弟孩子父亲表示法数据结构由如下的结构体组成1.1、日期的结构struct Date{int year; //年int month; //月int day; //日};1.2、成员信息的结构struct Info{char name[max_char_num];//姓名char birthplace[max_char_num];//出生地点Date birthdate;//结构date定义的出生日期Date deathdate;//结构date定义的死亡日期char sex[max_char_num];//性别char wife_or_husband[max_char_num];//配偶char phone[max_array_num];//电话char address[max_char_num];//家庭住址char resume[max_char_num];//简历//其他信息如下int height;//高度char occupation[max_char_num];//职业3char education[max_char_num];//受教育程度char top_headship[max_char_num];//最高职位char parentname[max_char_num];//父亲姓名,用于添加节点时用int Depth;//二叉树深度,输出二叉树时用};1.3、结点的结构typedef struct CSNode{Info data; //个人信息类型结构CSNode *firstchild,*nextsibling,*parent; //csnode的第一个孩子节点,下一个兄弟节点,双亲节点}*person;数据结构设计体会:使用树的按层遍历的方法找出某人的祖先的集合,但在从文件重建家谱的部分又碰到了困难,如何保存文件可是既节省空间又节省重建家谱的时间。
家谱管理系统姓名:田鑫磊学号:1514020421(1)功能部分:本程序共实现了6个功能分别为:1.读出家谱并显示2.确定指定成员在家族中得辈份3.输出指定辈得所有成员4.在家谱中添加新成员,并追加到文件中5.输出指定家庭得所有成员6、退出本系统(2)各功能得算法思想:1.读出家谱并显示存储结构用栈,按照先显示双亲,然后显示其所有孩子得顺序显示所有得家庭成员。
2.确定指定成员在家族中得辈份用求成员所在得二叉树中得层数(按层遍历二叉树)来确定,这里采用得就是递归算法3.输出指定辈得所有成员此处定义了一个新得结构体类型(增加存储节点所在得层数),定义如下:struct{BTNode*q;int loc;//存结点所在得层数}qu[10];并用一个队列来比较显示同辈分得所有成员.4.在家谱中添加新成员,并追加到文件中首先,输入一个新成员得名字;然后,输入其双亲;之后,再添加到整个存储二叉链表中。
然后,再将新得存储结构写回到文件中。
二叉链表得结点类型为:typedefstruct node{ElemType data[10]; //存放成员得名字struct node *child;//其孩子指针struct node *brother;//其兄弟指针}BTNode;5.输出指定家庭得所有成员首先,设一个栈,并设一个标记位,先置1;然后,找到输入得要待显示得成员,将标记位置0;再次,显示其孩子与兄弟,依次下去直到显示完其所有得亲戚。
6.退出本系统通过一个输入字符q来控制,每完成一个功能,系统提示就是否要继续操作: 当q为“Y”或者“y”时,显示菜单,程序继续执行;当ﻩq为其她字符时,程序执行结束,退出本系统。
三、详细设计:通过一个do—while语句来控制各个模块得选择与实现。
1.读出家谱并显示void display(BTNode *b){BTNode*q[10]; //定义一个栈int front,rear;int k;BTNode *p;p=b;k=0;front=-1;rear=0;q[rear]=p; //头结点先入栈while(front〈rear){front++;p=q[front];ﻩprintf("%s",p->data ); //头结点出栈,并显示printf("(”);ﻩdisbr(p->child);printf(")\n");if(p-〉child!=NULL) //显示其孩子{ﻩrear++;q[rear]=p->child;ﻩ}if(p->brother!=NULL) //显示其兄弟{ﻩrear++;q[rear]=p->brother;}}}2.确定指定成员在家族中得辈分int generation(BTNode *b,int h,ElemType x[])ﻩ//用递归得思想{ int i;if(b==NULL)return(0);i=strcmp(b-〉data,x); //比较就是否相等if(i==0)return(h);int L=generation(b->child,h+1,x);if(L==0)L=generation(b->brother,h,x);return(L);}3、输出指定辈得所有成员void layer(BTNode *t,intm){ struct //定义一个新得结点类型,在孩子兄弟存储结构得基础上添加一个数据域存其所在层数ﻩ{BTNode *q;ﻩ int loc;}qu[10];int front,rear;BTNode *p;p=t;k=0;front=—1;rear=0;qu[rear]、q=p;qu[rear]、loc=1;if( qu[rear]、loc==m) //找到m辈得即输出printf("%c",p—〉data);while(front〈rear)//通过站查找所有m辈得结点并输出{ front++;p=qu[front]、q;if(p—>child!=NULL)ﻩ{rear++;qu[rear]、q=p—〉child;qu[rear]、loc=qu[front]、loc+1;if(m== qu[rear]、loc)ﻩ printf(”%s ”,p—>child—>data);ﻩ}if(p->brother!=NULL){rear++;qu[rear]、q=p->brother;qu[rear]、loc=qu[front]、loc;if( qu[rear]、loc==m)printf(”%s ",p—>brother—>data);ﻩ}}}4、在家谱中添加新成员,并追加到文件中voidadd(BTNode *&b,ElemType y[],ElemTypex[]){char [20]="”;FILE *fp;ﻩBTNode *p,*q;int i;p=FindNode(b,y);q=(BTNode *)malloc(sizeof(BTNode));ﻩfor(i=0;x[i]!='\0';i++)ﻩq->data[i]=x[i];ﻩﻩq->data[i]=’\0’;q—>child=q-〉brother=NULL;ﻩif(p—〉child ==NULL)ﻩﻩp—>child=q;ﻩelseﻩ{p=p-〉child;ﻩﻩwhile(p->brother!=NULL)ﻩﻩﻩp=p—>brother ;p->brother=q;}display(b);printf("向文件中读入新家谱\n");printf("\n input a :");ﻩ scanf("%s",&);ﻩif((fp=fopen(,”w”))==NULL){puts(”\n can't open the file、”);exit(0);}elseDispBTNode(b,fp);fclose (fp);}void DispBTNode(BTNode *b,FILE *fp){char a[10];int i=0;ﻩif(b!=NULL)ﻩ{while(b->data[i]!='\0'){ﻩ a[i]=b->data[i];ﻩﻩﻩi++;ﻩ}ﻩa[i]='\0’;fputs(a,fp); //写入文件ﻩif(b->child!=NULL|| b->brother!=NULL)ﻩ{ﻩﻩf puts(s,fp);ﻩDispBTNode(b-〉child,fp);//递归写入其孩子ﻩﻩﻩif (b—〉brother!=NULL)ﻩﻩ{ﻩﻩfputs(p,fp);DispBTNode(b->brother,fp); //递归写入其兄弟ﻩﻩﻩ}ﻩfputs(t,fp);}ﻩ}}5、输出指定家庭得所有成员void dispfamily(BTNode *b,ElemType x[]){BTNode*p;BTNode *q[MaxSize];int top=-1,tap=1;if(b!=NULL){top++;q[top]=b;while(top〉—1){p=q[top];top-—;if(strcmp(p—〉data,x)==0) //查找此人{top=-1;tap=0;}if(p-〉child!=NULL){top++;q[top]=p-〉child;if(tap==0){display(p-〉child); //显示其孩子 return ;ﻩ }}if(p->brother!=NULL){top++;q[top]=p—>brother;if(tap==0){display(p—>brother);//显示其兄弟return ;}}}}}6、退出本系统此处通过一个输入字符q来控制,当q为“Y”或者“y”时,显示菜单,程序继续执行,当q为其她字符时,程序执行结束,退出本系统。
数据结构家谱管理系统范本在当今数字化的时代,管理和保存家族信息变得越来越重要。
一个高效的数据结构家谱管理系统能够帮助我们更好地记录家族成员的关系、个人信息以及家族的历史。
接下来,让我们详细探讨一下这样一个系统的范本。
首先,让我们来明确一下这个系统的主要目标和功能。
其核心目标是提供一个集中、准确且易于维护的平台,用于存储和查询家族信息。
主要功能应包括:家族成员信息的录入与编辑、成员之间关系的定义和展示、家族历史事件的记录、以及强大的查询和搜索功能。
在设计数据结构时,我们需要考虑如何有效地存储家族成员的信息。
可以创建一个“家族成员”表,其中包含诸如姓名、出生日期、出生地、逝世日期(若有)、照片(路径)等基本字段。
为了表示成员之间的关系,我们可以再创建一个“关系”表,记录每个成员与其亲属(如父母、配偶、子女等)的关联。
对于界面设计,应追求简洁明了、易于操作的风格。
首页可以展示家族树的概览,以直观的方式呈现家族成员之间的关系。
用户点击某个成员节点,能够查看该成员的详细信息,并可以进行编辑或添加新的信息。
在录入家族成员信息时,系统应提供友好的输入界面,并进行必要的数据验证,以确保输入信息的准确性和完整性。
例如,出生日期的格式应该符合规范,姓名不能为空等。
为了方便查询,系统应支持多种查询方式。
用户可以通过姓名、出生日期范围、籍贯等条件进行搜索,快速找到所需的家族成员信息。
在家谱管理系统中,数据的安全性和备份也是至关重要的。
用户的登录和操作权限应该得到严格控制,只有授权人员能够进行数据的修改和删除。
同时,定期对数据进行备份,以防止数据丢失。
此外,系统还可以提供一些扩展功能,比如生成家族报告,以图表或文档的形式展示家族的人口分布、年龄结构等信息;或者与社交媒体平台集成,方便与家族成员分享家族历史和最新动态。
在实际开发过程中,选择合适的编程语言和数据库管理系统也非常关键。
常见的编程语言如 Java、Python 等都能够胜任,而数据库可以选择 MySQL、SQL Server 等。
数据结构大作业说明文档一、题目的选择这次数据结构的大作业,我的选题是家谱管理系统的设计与实现。
由于平时疏于编程——针对我得个人实际——我把主要的目标定位在完成家谱管理系统得基本要求。
(基本要求大纲中有,就不浪费版面了)二、设计的思路接到这个题目,我的总体设计思路是先为程序搭建好一个结构框架,再跟据时间的宽裕程度和其它的要求逐步增强程序的性能。
关于IO的设计:考虑到题目要求家谱信息以树形的形式一次读入内存,而个人的各种资料现在虽然条目不多,但随着程序的升级,以后可能变得越来越大。
我把树形结构和个人信息记录的文档分为两个文件保存在外存中,一个文件串行化地记录家谱树的结构信息,保存少量个人信息作为识别标志;另一个文件保存完整的个人信息,所有的个人信息以线性记录的方式记录在其中。
当程序运行要读入家谱结构时,只读入保存少量记录的文件并建立起树形结构。
索引时,以树形中的少量信息为依据在另一个文件中找到全部的各人信息资料。
这样的好处主要有两点:1. 由于树形结构是串行化记录于外存,一个节点记录多次,信息大量冗余,如果树形节点中保留全部信息,必将造成大量的空间浪费;只保存作为索引的少量信息在树形结构中,节约了空间。
2. 由于结构的精简,在家谱初始化时读入内存需要的时间相应减少,节约了装载时间。
这样做存在的问题:每次执行修改,添加,删除,查询时都要直接访问外存来取得或写入数据。
内外存访问上的巨大时间差的存在,使得进行这些操作相对来说并不显得很高效。
关于树形的结构:在树形结构的选择上,根据实际中多子女的现象选择一般树,考虑到家谱中成员可能存在的不定成员数问题,抛弃了以数组为基础的一般树方案,决定用链表来实现。
树形结构的外存保存。
为了提高效率,树形结构在程序初始化时由外存文件一次读入内存,此后不管插入还是修改,删除都不再对外存的树结构保存文件进行操作,只在内存中处理,程序退出时对外存树结构文件进行一次更新。
也就是说,不管在程序运行中中对家谱结构进行多少种,多少次的操作,外存的树结构文件始终只会被程序访问两次。
目录
第一章绪论............................................................... 错误!未定义书签。
第二章需求分析........................................................... 错误!未定义书签。
2.1题目...................................................................... 错误!未定义书签。
2.2设计任务.............................................................. 错误!未定义书签。
2.3数据测试.............................................................. 错误!未定义书签。
第三章概要设计....................................................... 错误!未定义书签。
3.1 设计思想 ........................................................ 错误!未定义书签。
3.2 实现方法 ........................................................ 错误!未定义书签。
第四章详细设计....................................................... 错误!未定义书签。
4.1功能构想.............................................................. 错误!未定义书签。
4.2界面设计.............................................................. 错误!未定义书签。
4.3增加成员.............................................................. 错误!未定义书签。
4.3.1 添加子女 .................................................... 错误!未定义书签。
4.3.2 添加配偶 .................................................... 错误!未定义书签。
4.4修改成员.............................................................. 错误!未定义书签。
4.4.1修改个人信息............................................. 错误!未定义书签。
4.4.2修改父母信息............................................. 错误!未定义书签。
4.4.3修改兄弟姐妹的信息................................. 错误!未定义书签。
4.4.4修改子女的信息......................................... 错误!未定义书签。
第五章调试分析....................................................... 错误!未定义书签。
第六章测试结果....................................................... 错误!未定义书签。
致谢 .............................................................................. 错误!未定义书签。
参考文献 ......................................................................... 错误!未定义书签。
附录........................................................................... 错误!未定义书签。
第一章绪论
当前, 很多家庭家谱丢失, 家庭一些关系混乱, 为了避免这一问题, 制定一家谱程序。
家谱用于记录某家族历代家族成员的情况与关系, 实现对一个家族所有的资料进行收集整理。
支持对家谱的存储、更新、查询、统计等操作。
并用计算机永久储存家族数据, 方便随时调用。
第二章需求分析
2.1题目
家谱管理系统
2.2设计任务
系统总体说明:
以树形结构存储家族信息, 只考虑三代( 祖父, 父亲, 叔叔, 姑姑, 自己, 兄弟姐妹, 堂兄弟姐妹) , 只考虑每个人有0或者1个兄弟姐妹的情况。
注意每个结点结构。
统计统计家族成员人数, 查询家
族成员辈份。
完成功能的详细说明:
1.输入家族成员情况, 建立树结构( 涉及创立二叉树) ;
2.统计家族成员人数和每一个家庭成员人数( 涉及树的遍历) ;
3.查询家族成员辈份情况( 任意输入两个家庭成员, 查询她们的关系, 父子, 祖孙, 兄弟, 堂兄弟, 共同的祖先) 。
4. 选做, 考虑每个人有多个兄弟姐妹的情况。
2.3数据测试
测试的数据有: 田迎新陈瑞英田紫藤田紫恒孙超李美霖……..
第三章概要设计
3.1 设计思想
创立一棵树, 存储家庭关系, 数据类型有
int Num; //记录这个人拥有几个儿女
char Name[20]; //记录这个人的姓名
char Sex; //标示节点的种类有女(0) 男(1)
struct TreeNode * NextNode[20]; //记录这个人的儿女
struct TreeNode * Parent; //记录这个节点的父节点
3.2 实现方法
完成功能的函数有
void CreatTree(TreeNode *Tree);//--------------------------------创立树
void OutPutAll(TreeNode *Tree);//-------------------------------遍历并输出树中的内容
void firstoftxt();//----------------------------------------------------写入文件的开始信息
void ofAll(TreeNode *Tree);//-------------------------------------写入文件函数
void ifAll();//---------------------------------------------------------读取文件的函数
TreeNode * SearchTree(TreeNode *Tree,char name[],int length);//查找结点的函数
void MainMenue(TreeNode *Tree);//-----------------------------主菜单
void SubMenue1(TreeNode * Tree);//----------------------------修改成员信息的菜单
void SubMenue2(TreeNode *Tree);//-----------------------------添加新成员菜单
void Change(TreeNode * Tree);//---------------------------------修改成员信息
void AddNew(TreeNode * Tree);//--------------------------------添加新成员
void OutPutMessage(TreeNode * Tree,char name[],int length);//输出已经查找到的人的信息
第四章详细设计
4.1功能构想
构想好总体规划之后, 便开始设计程序中需要用到的各个功能函数, 初步构想是要先实现最基本的几项功能, 其中数据操作的有: 增加成员, 修改成员资料, 删除成员; 数据存取的有: 打开家谱, 新建家谱, 保存家谱; 数据查询的有: 查看某代信息, 按姓名查找, 查看成员关系, 等等。
4.2界面设计
cout<<"\n\n\t ---*****---请选择你的操作---****---";
cout<<"\n\t--------------1:输入家谱信息建立多叉树----------------------";
cout<<"\n\t--------------2:在家族中查找某人并输出她或(她)的相应信息----";
cout<<"\n\t--------------3:添加新的成员。