家谱管理系统1(1)说课材料

合集下载

家谱管理系统

家谱管理系统

家谱管理系统家谱管理系统一、引言家谱是一种记录家族世系和血统关系的文献资料,对于了解家族历史和传统具有重要意义。

然而,传统的家谱管理方式存在数据维护困难、信息交流不便等问题。

为了解决这些问题,设计并开发了家谱管理系统。

二、系统概述1:目标家谱管理系统旨在提供一个集中管理、维护家族世系和血统关系的平台,方便用户进行查询、编辑和分享家谱信息。

2:功能- 登录功能:用户可以通过账号密码登录系统。

- 家族成员管理:用户可以添加、删除和修改家族成员的信息。

- 家谱维护:用户可以创建、编辑和保存家谱信息。

- 家族树展示:用户可以查看并浏览家族世系树。

- 家谱搜索:用户可以根据关键词快速搜索家谱中的成员。

- 信息分享:用户可以将家谱信息分享给他人。

- 数据备份:系统可以对家谱数据进行定期备份。

三、系统设计1:系统结构家谱管理系统采用三层架构,包括表示层、业务逻辑层和数据访问层。

表示层负责与用户的交互,业务逻辑层处理系统的业务逻辑,数据访问层负责与数据库的交互。

2:数据库设计系统采用关系型数据库存储家谱信息,包括家族成员表、家族关系表和用户表。

家族成员表存储每个成员的个人信息,家族关系表记录成员之间的血缘关系,用户表用于存储系统的用户信息。

3:用户界面设计系统的用户界面简洁明了,包括登录界面、家族成员管理界面、家谱维护界面、家族树展示界面和搜索界面。

界面设计遵循用户友好的原则,方便用户理解和操作。

四、系统实现1:技术选型系统采用Java语言进行开发,使用Spring框架进行项目管理和依赖注入,使用MySQL作为数据库,使用、CSS和JavaScript实现前端页面。

2:功能实现- 登录功能:通过编写登录逻辑和账号密码验证模块实现用户登录功能。

- 家族成员管理:设计数据库结构,编写增删改查操作的接口和逻辑。

- 家谱维护:实现家谱信息的编辑和保存功能。

- 家族树展示:使用数据结构和算法实现家族关系的图形展示。

- 家谱搜索:通过数据库查询和关键词匹配实现家谱搜索功能。

家谱管理系统1(1)

家谱管理系统1(1)

《软件综合设计》家谱管理系统院系:计算机科学技术学院二系班级:计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

家谱管理系统1

《软件综合设计》家谱管理系统院系:计算机科学技术学院二系班级:计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.家族树展示:通过家族树展示功能,用户可以直观地了解家族的基本结构和成员关系。

系统将家族成员按照世代排列,通过树状图展示。

用户可以通过点击树中的结点,进一步查看该成员的详细信息。

4.信息统计:系统可以根据用户需要,进行一些基本的统计分析。

比如,系统可以统计家族的总人数、男女比例、平均寿命等信息,以便用户了解家族的整体情况。

5. 数据导出:为了方便用户保存和共享家族信息,系统提供数据导出功能。

用户可以将家族信息导出为Excel、CSV等格式的文件,以便在其他应用程序中使用。

总之,数据结构家谱管理系统通过数据结构的概念和原理,提供了一种直观、高效的方式来管理家族的信息。

它可以帮助用户了解家族结构、查找成员、进行统计分析,并方便地将数据导出保存。

希望这个系统能够帮助用户更好地管理和维护家族的信息,传承家族的文化和价值观。

数据结构-家谱管理系统

数据结构-家谱管理系统

数据结构-家谱管理系统数据结构家谱管理系统在当今数字化的时代,信息管理变得越来越重要,而家谱作为家族历史和传承的重要记录,也需要一种有效的管理方式。

一个高效的家谱管理系统能够帮助我们更好地保存、查询和分析家族信息,增强家族成员之间的联系和认同感。

接下来,让我们深入探讨一下家谱管理系统所涉及的数据结构和功能。

首先,我们来了解一下什么是数据结构。

简单来说,数据结构是指数据元素之间的关系和组织方式。

在家谱管理系统中,我们需要选择合适的数据结构来存储和操作家族成员的信息。

一种常见的数据结构选择是树形结构。

家谱本身就具有天然的层次关系,从祖先开始,逐渐分支到子孙后代。

我们可以将每个家族成员看作一个节点,通过父子关系将节点连接起来,形成一棵家族树。

这种树形结构能够清晰地展示家族的分支和传承关系。

为了实现树形结构,我们可以使用链表或者数组来存储节点信息。

链表的优点是插入和删除节点比较方便,适合家族成员信息的动态变化。

而数组则可以更高效地随机访问节点,但在插入和删除操作时可能需要移动大量元素。

在家谱管理系统中,每个家族成员的节点应该包含哪些信息呢?至少要包括姓名、性别、出生日期、婚姻状况等基本信息。

此外,还可以添加照片、个人简介、联系方式等扩展信息,以丰富家族成员的资料。

除了存储家族成员的信息,家谱管理系统还需要提供强大的查询功能。

用户可能想要查找特定姓名的家族成员,或者查找某个时间段出生的成员,甚至是查找具有特定亲属关系的成员。

为了实现这些查询功能,我们可以在数据结构中建立索引,例如按照姓名建立哈希索引,按照出生日期建立排序索引等。

这样可以大大提高查询的效率。

另外,家族关系的计算也是家谱管理系统的一个重要功能。

比如,计算两个家族成员之间的亲属关系远近,判断是否存在共同的祖先等。

这需要我们在树形结构的基础上进行深度优先搜索或者广度优先搜索等算法的应用。

在数据存储方面,我们可以选择将家谱数据存储在本地文件中,如XML 或者 JSON 格式,也可以选择将数据存储在数据库中,如关系型数据库 MySQL 或者非关系型数据库 MongoDB。

家谱管理系统实验报告

家谱管理系统实验报告

《家谱管理系统》课程设计报告学院:信息科学与工程学院班级:计算机科学与技术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。

家谱管理系统项目简介

家谱管理系统项目简介

引言概述家谱管理系统是一个基于计算机技术的家族谱系追溯与记录工具,它的主要目标是帮助用户轻松地管理家族的谱系信息,并提供便捷的查询和维护功能。

家谱管理系统的应用范围广泛,可以适用于家族组织、家族企业、家族文化传承等方面。

本文将针对家谱管理系统进行详细的介绍和分析,包括系统架构、功能模块、技术实现等方面的内容。

正文内容1. 系统架构1.1 客户端1.1.1 用户界面家谱管理系统的客户端采用友好的图形用户界面,用户可以通过界面操作完成家谱信息的添加、查询、修改等操作。

1.1.2 数据存储客户端需要提供本地数据存储功能,用于存储用户的家谱信息。

可以通过文件存储或数据库存储的方式实现。

1.2 服务器端1.2.1 数据库管理服务器端需要建立一套完善的数据库管理系统,用于存储和管理用户的家族谱系数据,保障数据的安全性和稳定性。

1.2.2 业务逻辑处理服务器端需要实现家谱信息的增删改查等基本业务逻辑处理,包括数据的校验、数据的关联处理等功能。

1.3 网络通信客户端和服务器端之间需要建立稳定可靠的网络通信,确保用户能够正常访问服务器端的数据。

2. 功能模块2.1 家谱信息录入模块家谱管理系统需要提供一个用户友好的家谱信息录入界面,用户可以通过该界面输入家族成员的基本信息,并建立起家族成员之间的关系网。

2.2 家谱查询模块家谱管理系统提供了强大的查询功能,用户可以通过姓名、出生日期、关系等关键字进行快速搜索和查找。

并可根据用户需求展示不同级别的家族成员。

2.3 家族统计模块家谱管理系统可以根据家族成员的属性信息进行统计分析,比如年龄分布、性别比例等,为家族成员提供全面的了解。

2.4 家族事件模块家谱管理系统可以记录家族的重要事件,比如婚姻、出生、逝世等,方便用户进行追溯和回顾。

2.5 家族文化传承模块家谱管理系统可以提供家族文化资料共享功能,让家族成员可以共同学习和传承家族的优秀文化。

3. 技术实现3.1 前端技术家谱管理系统的前端界面部分可以采用HTML、CSS、JavaScript等前端技术进行开发,实现交互式的用户界面,提升用户体验。

家谱处理课程设计

家谱处理课程设计

家谱处理课程设计一、教学目标本课程旨在让学生了解和掌握家谱的基本概念、结构和制作方法。

通过本课程的学习,学生应能够:1.知识目标:掌握家谱的定义、起源、发展历程以及家谱中的基本内容,如世系、人物、事迹等。

2.技能目标:学会如何收集家谱资料、整理家谱信息、绘制家谱图表,并能够运用文字、图片、图表等多种方式表达和展示家谱。

3.情感态度价值观目标:培养学生对家族历史的尊重和热爱,增强民族认同感,培养学生的家庭责任感和传承家族文化的意识。

二、教学内容本课程的教学内容主要包括以下几个部分:1.家谱的基本概念:介绍家谱的定义、起源、发展历程以及家谱的作用和意义。

2.家谱的结构和内容:详细讲解家谱的结构,包括序言、目录、世系表、人物传记等部分,以及家谱中的基本内容,如世系、人物、事迹等。

3.家谱的收集和整理:教授如何收集家谱资料、整理家谱信息、绘制家谱图表。

4.家谱的制作和展示:讲解家谱的制作步骤,如设计、排版、印刷等,以及如何运用文字、图片、图表等多种方式表达和展示家谱。

5.家族历史与文化:通过家谱为载体,引导学生了解和探讨家族历史、家族文化以及家族价值观。

三、教学方法为了提高教学效果,本课程将采用以下几种教学方法:1.讲授法:教师讲解家谱的基本概念、结构和制作方法,引导学生掌握家谱知识。

2.案例分析法:通过分析具体的家谱案例,让学生了解家谱的制作过程和展示方式。

3.讨论法:学生就家族历史、家族文化等问题进行讨论,培养学生的思考和表达能力。

4.实践操作法:学生动手制作家谱,培养学生的实际操作能力和创新思维。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用权威、实用的家谱教材,为学生提供系统的家谱知识。

2.参考书:提供相关的参考书籍,丰富学生的知识储备。

3.多媒体资料:制作精美的多媒体课件,生动展示家谱的制作过程和家族历史。

4.实验设备:提供计算机、打印机等设备,让学生动手制作家谱。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

家谱管理系统1(1)《软件综合设计》家谱管理系统院系:计算机科学技术学院二系班级:计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章概述 01.1 课题研究的目的和技术发展现状 01.2 课题研究的主要内容 01.3 课题研究的难点 0第2章需求分析 (1)2.1 性能需求 (1)2.2 功能需求 (1)第3章可行性分析 (1)3.1 经济可行性分析 (1)3.2 技术可行性分析 (1)第4章概要设计 (2)4.1 程序设计的基本思想 (2)4.2 总体功能模块图 (2)4.3相关应用技术 (2)第5章详细设计 (3)5.1日期信息的合法性检验 (3)5.2 添加成员孩子模块 (5)5.3 添加成员兄弟模块 (9)5.4 按照出生日期对家谱排序 (11)5.5 由兄弟、孩子二叉树生成家谱文件 (14)5.6 按照姓名、出生日期查找家谱成员 (15)第6章调试分析与测试结果 (17)6.1 测试方法 (17)6.2 测试过程 (17)6.3 测试结论 (17)第7章结束语 (23)参考文献 (23)附录 (24)第1章概述1.1 课题研究的目的和技术发展现状本《家谱管理系统》是以电子家谱的形式记载父系家族世袭、人物为中心。

电子能准确记录家族成员出生卒年,以及生活地点、家庭成员等信息。

一般情况下是不会出现信息丢失情况。

更不需要担心传统家谱随着年代的久远字迹不清晰,有破损等情况的出现。

所以本课题的研究目的是让大家不但能够非常容易的记录家族情况,而且能清楚的了解本家族信息,使用起来非常方便。

现有的计算机技术足以支撑电子家谱的开发。

家谱的科学管理不但有助于民族文化和地方文化的发展,而且有其自身的积极意义。

例如本电子家谱是利用Visval C++ 6.0开发完成的。

电子家谱的出现无疑让家谱焕然一新,但是传统家谱更能凸显出历史的韵味,文化的内涵。

这是电子家谱所不能够替代的,电子家谱不可能成为文物。

开发人员应该清楚的认识到这一点。

1.2 课题研究的主要内容家谱,又称族谱、祖谱、宗谱等。

一种以表谱形式,记载一个以血缘关系为主题的家族世系繁衍。

本课题研究的主要内容是以电子家谱的形式记录、查询父系家族历史信息为主要内容。

1.3 课题研究的难点建立输入文件以存放最初家谱中各成员的信息,以及能够对修改后的家谱存盘以备以后使用。

用户界面的设计不够完美。

功能上的设计难度很大。

第2章需求分析2.1 性能需求系统的核心是利用对话框的连接和文本处理来存储和修改家族管理系统的信息联系,其中的每一个动作都可能影响到其他的功能。

使用方便,易于传播,数据共享等性能。

易于维护。

2.2 功能需求✧建立输入文件以存放最初家谱中各成员的信息。

✧成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)也可附加其它信息、但不是必需的。

✧能对修改后的家谱存盘以备以后使用。

✧能从文件中读出已有的家谱,形成树状关系。

✧家谱建立好之后,以图形方式显示出来。

✧显示第n代所有人的信息。

✧按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。

✧按照出生日期查询成员名单。

✧输入两人姓名,确定其关系。

✧某人添加孩子。

✧删除某人(若其还有后代,则一并删除)。

✧修改某人信息。

✧按出生日期对家谱中所有人排序。

✧打开一家谱时,若家谱中某人的生日在打开家谱的那一天,应给出提示。

第3章可行性分析3.1 经济可行性分析对系统开发规模进行估算属此软件项目属于小规模软件开发。

所以开发人员三到五人即可。

开发,维护等成本相对较低。

所以从经济可行性分析的角度来看此《家谱管理系统》适于开发。

3.2 技术可行性分析根据软件系统功能、性能要求的各项约束条件从技术的角度实现系统的可行性。

家谱信息以树的形式一次读入内存,而个人的各种资料虽然目前条目不多,但随着程序的升级,以后可能越来越大。

我把树形结构和个人信息记录的文档分为两个文件保存在外存中,一个文件串行化的记录家谱树的结构化信息,保持少量个人信息作为识别标志;另一个文档保存完整的个人信息。

索引时,以树形中的少量信息为依据在另一个文件中找到全部个人信息资料。

第4章概要设计4.1 程序设计的基本思想《家谱管理系统》的总体设计思路是先为程序搭建好一个人结构框架,家庭成员之间的关系,用树形结构(家族树)表示,这是本《家谱管理系统》的逻辑结构。

根据MFC的特点,采用CfamilytreeDlg类实现用户窗口界面指令对于家谱的各种操作。

有文件控制和家谱控制两大模块,按生日查找、删除成员、文件输入输出、修改成员信息、按名字查找、成员关系显示、按代数显示等各种操作。

然后再根据需求分析逐步增强程序的功能和性能。

4.2 总体功能模块图4.3相关应用技术1.定义“家谱”类型2.用结构Date存储日期3.用结构QuickSortNode存储快速排序数组值(为快速排序而设)4.根据家谱的特点,采用孩子-兄弟的二叉树链表表示法(链表的基本单位为以结构PersonNode表示的结点),各种操作以COperationFamilytree类来实现。

5.根据MFC的特点,采用CfamilytreeDlg类实现用户窗口界面指令对于家谱的各种操作。

第5章详细设计5.1日期信息的合法性检验图5-1 日期信息的合法性检查Int COperationFamilytree::ReadNode(FILE *fp, Person &T,char* parentname){//本函数从文件fp中读取信息到结点T中,并读取结点的父亲名字到字符数组parentname中//分别读取结点值,为:姓名,出生日期(年,月,日),婚否,地址,健在否,(如过世,还有死亡日期)fscanf(fp,"%s%d%d%d%d%s%d",T->,&T->info.birthday.year,&T->info.birthday.month,&T->info.birthday.day,&T->info.marry,T->info.addr,&T->info.live);if(T->info.live==0)fscanf(fp,"%d%d%d",&T->info.deathday.year,&T->info.deathday.month,&T->info.deathday.day);fscanf(fp,"%s",parentname);if(!IsDateValid(T->info.birthday)) //出生日期合法性检查return FILE_DATA_NOT_PRACTICAL;if(T->info.live==0) //若过世,死亡日期合法性检查if(!IsDateValid(T->info.deathday))return FILE_DATA_NOT_PRACTICAL;return OK;}5.2 添加成员孩子模块图5-2 添加成员孩子流程图Int COperationFamilytree::CreateFamilytree(CString filename){//本函数建立一新家谱DestroyFamilytree(); //建立一新家谱之前,清空原有家谱FILE* fp;if((fp=fopen(filename,"r"))==0) //打开文件filenamereturn READ_FILE_ERROR;T=new PersonNode; //定义根结点if(!T)return NOT_ENOUGH_MEMORY;T->child=0;T->sibling=0;T->parent=0;Person parentT, temp; //定义两个临时结点char parentname[MAX_CHARNUM]; //定义一个临时字符串数组//读取根结点值,(姓名,出生日期(年,月,日),婚否,地址,健在否,(如过世,还有死亡日期))int result;result=ReadNode(fp,T,parentname);if(result==FILE_DATA_NOT_PRACTICAL){delete T; //若不合法,删除申请的堆空间T=0;return result;}if(strcmp(T->,parentname)==0){//根结点名字与其父亲名字相同,说明为空树delete T;T=0;return PEDIGREE_EMPTY;}temp=new PersonNode; //申请一结点if(!temp){ //申请失败DestroyFamilytree(); //释放申请空间return NOT_ENOUGH_MEMORY;}result=ReadNode(fp,temp,parentname);while(strcmp(temp->,parentname)&&strcmp(temp->,"end")){ //读取信息结束的条件是两个人的名字同为endif(result==FILE_DATA_NOT_PRACTICAL){//若数据不合法,释放已申请空间,然后返回delete temp;DestroyFamilytree();return result;}parentT=0;Find(T,parentT,parentname); //找到parentname 所在结点parentTif(parentT){ //如果parentT存在,说明parentname在家谱中//并且parentname为temp的父亲int cmp;cmp=CompareDate(temp->info.birthday,parentT->info.birthday);if(cmp<0){ //若孩子出生日期比父亲大,则不对delete temp;DestroyFamilytree();return FILE_DATA_NOT_PRACTICAL;}temp->child=temp->sibling=0;temp->parent=parentT; //temp的父指针指向parentT;if(parentT->child){//parentname已经有孩子InsertSibling(parentT->child,temp);}//ifelse//parentname无孩子,则temp应为parentT->child=temp;//parentname的第一个孩子}//ifelse{//parentT不存在,说明家谱中不存在parentname此人DestroyFamilytree(); //返回出错信息return FILE_DATA_ERROR;}temp=new PersonNode; //申请一结点if(!temp){//申请失败DestroyFamilytree();//释放申请空间return NOT_ENOUGH_MEMORY;}result=ReadNode(fp,temp,parentname); //继续读取数据}//whileif(temp)delete temp;fclose(fp);return OK;}5.3 添加成员兄弟模块图5-3 添加成员兄弟模块void SaveNode(FILE *fp, Person &pNode){//本函数向文件fp中存取一结点pNodechar ch='\n';if(pNode){fprintf(fp,"%s %d %d %d %d %s %d ",pNode->,pNode->info.birthday.year,pNode->info.birthday.month,pNode->info.birthday.day,pNode->info.marry,pNode->info.addr,pNode->info.live);if(pNode->info.live==0)fprintf(fp," %d %d %d ",pNode->info.deathday.year,pNode->info.deathday.month,pNode->info.deathday.day);if(pNode->parent) //家谱结束fprintf(fp," %s ",pNode->parent->);elsefprintf(fp," %s","-1");fprintf(fp," %c",ch);}}int COperationFamilytree::SaveFamilytree(CString filename){//本函数保存家谱到文件filename中FILE* fp;if((fp=fopen(filename,"w"))==0) //打开文件filenamereturn WRITE_FILE_ERROR;PreOrderTraverse(fp,T,SaveNode); //从根结点开始存储家谱数据//置家谱数据结束标记(一结点的名字与其父结点的名字同为end)fprintf(fp,"%s %d %d %d %d %s %d %s","end",1999,12,2,1,"end",1,"end");fclose(fp);return OK;}void COperationFamilytree::PreOrderTraverse(FILE* fp,Person &T, void (__cdecl *Visit)(FILE* fp,Person &)){//本函数把所有以T结点为根结点的结点值存到文件fp中if(T){(*Visit)(fp,T);PreOrderTraverse(fp,T->child,Visit);PreOrderTraverse(fp,T->sibling,Visit);}}5.4 按照出生日期对家谱排序void CFamilytreeDlg::OnFamilytreeSort(){// TODO: Add your command handler code hereRefreshList();QuickSortNode* order;int totalNums=0;operFamilytree.GetPersonNums(operFamilytree.GetRoot(),totalNums );order=new QuickSortNode[totalNums+1];if(!order){AfxMessageBox("内存不足!");return;}AfxMessageBox("排序后结果请见下部列表。

相关文档
最新文档