《家谱管理系统.docx》由会员分享,可在线阅读,更多相关《家谱管理系统.docx(45页珍藏版)》请在第一文库网上搜索。
1、江西农业大学科技用可许MlO /家谱管理系疫小俎戚员:准在、易伟、段诰抵。7汪志氏、初噂看Vas2023. 、30目录1 .问题陈述12 .设计方法阐述12. 1总体规划13. 2功能分析与实现3主界面介绍3增加成员功能5显示家族成员信5删除功能6查询功能7查询第n代所有人得信息8修改成员信息8连接数据库9绘制图形家谱10小结113 .总结114.代码115.家族成员441 .问题陈述家谱用于记录某家族历代家族成员的情况与关系O现编制一个家谱资料管理 软件,实现对一个家族所有的资料进行收集整理。支持对家谱的存储、更新、查 询、统计等操作。并用计算机永久储存家族数据,方便随时调用。2 .设计方法
2、阐述2.1 总体规划在动手编制程序之前,先要做好程序的规划,包括程序储存数据所用的结构, 数据类型等等,只有确定了数据类型和数据结构,才能在此根底上进行各种算法 的设计和程序的编写。首先是考虑数据类型。在家谱中,家族成员是最根本的组成局部,对于家族 管理中,已经不能再进行细分了,所以选定家族成员作为数据的根本类型,并在 程序中定义Person类。Class Person String nam;/姓名in*tag;/年龄String Sx; /性另UBirthday ymd;/出生日期String fathrNam;String mothrNam;String SPe)USNam;intchiI
3、dNum;itlVITmp; /代数Be)C)Ian isAliv;/是否健在)为方便计算机进行比拟,在Person类的某些属性中用数字代替了某些不会 改变的字符串,譬如判断是否健在true为是,false为否)。在设置日期上,为 方便以后的计算与比拟,也将日期用整型数字表示1999-05-05表示1999年5月 5日,这种表示方法只需在输入和输出上作少许的运算便可方便地与日期进行转 换。在设计家谱以图谱的形式来显示时,从直观来说,选择树型结构无疑是最直 观易懂的,我在一开始构思的时候也是从树型结构去想的,但是二叉树不能满足 我的要求,我的家谱中的一个节点有父亲,母亲,孩子个数任意),配偶,兄
4、 弟姐妹个数任意).于是我自己设计了一个存储结构,一个节点有四个指针域, 指向父亲或母亲),指向配偶,指向兄弟姐妹。Family parents; /指向父亲的引用Family SPOUSe;/指向配偶的引用Family ChiId;/指向孩子的引用Family bro_sis;指向兄弟姐妹Static Family root;/祖先节点难题就是如何将所有的家族成员同过祖先节点连接起来。我的思路是先将所有的家族成员的信息用一个TXT文本存储起来,然后读出来,用一个数组mem 存起来,之后初始化祖先节点,根据祖先节点的数据域的信息来添加,先添加祖 先的父母)亲,假设有那么从数组中读出来添加,否那
5、么添加兄弟姐妹,再添 加配偶,最后添加孩子,最重要的是每添加一个节点时应该判断该节点是否已经 在家族树中了,假设存在那么直接重家族树中找出来对其进行相应的操作,假设 不在那么从数组mem中读取,之后遍历创立其兄弟姐妹,配偶,孩子。2 . 2功能分析与实现设想好总体规划之后,便开始设计程序中需要用到的各个功能函数,初步设 想是要先实现最根本的几项功能,其中数据操作的有:增加成员,修改成员资料, 删除成员,数据查询的有:查看某代信息,按姓名查找,按生日查找,查看成员 关系以及显示查看家族成员信息表,还有就是绘制家谱图以及连接数据库的操 作。主界面介绍主界面由三局部组成:菜单、生日公告栏以及欢送封面
6、。下面为主界面图: 图1主界面图2菜单1图3菜单2说明:1)菜单中主要包括三大子菜单:文件、编辑、帮助。其中文件菜单中有 连接数据库以及退出的操作,编辑中有所有功能实现操作。12)生日公告栏为系统自动获取当日时间以判断今日家族中是否有人生日,如 果有那么会自动发出祝福,本功能为创新功能。3)特别说明:在每一个功能界面中都设有带图标的快捷功能键,便于操作。4)主界面的代码位于:FTFrame. java ,下面将一一介绍功能。实现主界面的方方:位于PUbliC class FTFrame类中增加成员功能我设计了两种添加方式,首先,添加进去的人要与家族里的某一个或某几个 有联系,比方是某个人的孩子
7、啊,或配偶,不然是无法参加进这个家族的。1)根据要添加人的父亲添加,父亲必须在家族中找到。2)根据添加人的配偶。假设这个配偶已有配偶那么不允许添加,不允许 三妻四妾。实现增加成员的方法:public String addMember (Person p) 代码省略 该 方法位于familyTes七类中图4添加功能界面显示家族成员信家族成员信息表是用于显示及查看家族所有成员信息以及及时查看新增及 删除后的情况,进入界面点击显示按钮即可完成功能。实现显示成员信息表的方 :PUbIiCVOidinitrOWData (Family root) 代 码省略/该方法位于FTFrame类中;实现显示成员信
8、息表界面的方法:位于AddMelnber类中;图5家庭信息表删除功能删除功能执行时,会将本人及其后代及配偶全部删除。实现删除功能以及界面的代码:位于deleteMember类和familyTes七类中。图6删除成员图1图7删除操作图该删除功能只通过姓名进行删除,删除后通过家庭成员信息表观察出其本人 以及其后代及配偶以及完全被删除。查询功能查询功能中有两种查找功能:查询相同生日的所有成员、查找两人关系。(1)查询两人关系时,输入两人姓名即可按查询按钮进行查询。(2)查询相同生日成员时,在下拉列表中选中日期即可查询。图8查询操作实现查询功能以及界面的代码:位于SearchMember类和famil
9、yTest中,其 中实现关系查询的函数为 relationship (name Name),生日查询为 brithday(Family root,Birthday d).查询第代所有人得信息进入操作界面,输入代数即可进行查询,如下列图中查询第3代人。图9代数查询实现显示成员信息表界面和方法:AddMelnber类中(界面)和familyTest中 inquire_N (Family rootfint anger)方法。修改成员信息修改操作中有明确的说明规那么,方便操作。在修改中好友根据姓名查询的 操作,方便查看修改后是否正确。图10修改成员连接数据库在文件菜单中点击连接数据库操作,在弹出来的对
10、话框中选择确定,在弹出 的登陆框中输入用户名及密码便可以连接数据库。说明:由于技术原因本系统只可以连接MySQL数据库,还望谅解。图11菜单中选择连接数据库图12确定连接数据库图13连接数据库实现数据库连接的方法:位于familyTest中Family类的public void ConnectionDB_MySQL (String PaSSNUm)方法。绘制图形家谱根据家族树的存储结构画出来,难点是其中的间距很难调准。图14家谱图实现绘制家谱图的方法:位于CFrame类中。小结至此,本家谱管理系统实现了在不同界面上操作不同的功能,其中包括七大 主要功能以及主功能下的多个小功能。本家谱管理系统根
11、本实现了要求的所有内容,界面使用了美化包。但是由于 技术知识有限,本系统或多或少存在一些缺乏之处,待在今后改正。3 .总结通过这次大作业,体会很深刻,用刚学的java都运用到这上面,学以致用, 对所学知识有了更深刻的理解,同时还发现了许多平时在书本上没有遇见过的问 题,促进了自己对知识的渴望,遇见了问题,就希望能够通过查找课外书来解决 它们。刚接触题目的时候,自己就有了一定的想法,觉得这个程序做起来是问题 不大的,但到了自己真正开始编程的时候却发现远远没有想象中那么简单,很多 细节的问题没有预想到,很多关系的处理想得过于简单,以至于实施起来遇到了 很大的困难,花了大量的时间。关于这个程序的缺点
12、方面,由于自己花的时间不 是很多,再加上知识有限,编写出来的界面不够友好,在功能上还是有不完善的 地方,譬如说各项数据的统计还没有弄,数据的存储还不够理想等等。对于这个程序的改良,我自己还是有不少想法的,因为怎么说都是自己亲手 编制出来的程序,当然是希望尽善尽美。首先是需要加强数据的存储这方面的知 识,使自己编写出来的程序能以一种标准的格式存储下来,方便以后其它程序的读 取。总的来说,通过这次任务,收获还是挺多的,也发现了不少的问题,并给自 己以后的学习指引了方向,知道自己缺少哪方面的知识,需要补充哪些知识等等。 自己将会以这次作业为契机,看更多编程方面的书籍,不断充实自己的知识库。4 .代码
13、我只提供的功能实现的代码,至于界面我没提供import java.awt;import java.io.*;import java.util.*;import java.sql.*;import j avax.swing.*;public class family Test * param args*/public static void main(String args) 测试函数/ TODO Auto-generated method stub*Member m = new Member();for(int i=O;im.memberNum;i+)System.out.println(m.
14、memberi);*/System.out.println();Family f = new Family();f.initRoot();f. CreateFamily Tree(Family.root);/Birthday a = new Birthday(8888,6,ll);/Family t = f.isAtTree(Family.root,贾演);/System.out.println(t.parents.in);/f.birthday(Family.root,a);/System.out.println(f.birthday);Hi. sho wFamilyTree(Family.
15、root);/System.out.println(t.in);/System.out.println(f.deleteTree( 贾演);/System.out.println(t.parents.in);Birthday dl,d2;dl = new Birthday(2,l);d2 = new Birthday(3,3);Person pl,p2;pl=new PerSon(林四,20,男”,dl J林如海”);p2=new PerSOn(“张三”,25,d2,“林黛玉);/System.out.println(f.addMember(p 1);/System.out.println(f.addMember(p2);/System.out.println(f.num);/f.showFamily Tree(Familyroot);/System.out.println(f.