《家谱管理系统.docx》由会员分享,可在线阅读,更多相关《家谱管理系统.docx(47页珍藏版)》请在第壹文秘上搜索。
1、江西农业大学科技用用评fl/家谱管理系疣小组戚员;陈江、易侪、段浩级7M7拉志氏、#f与I2023.、BO目录1 .问题陈述12 .设计方法阐述12. 1总体规划13. 2功能分析与实现3主界面介绍3增加成员功能5显示家族成员信5删除功能6查询功能7查询第n代所有人得信息8修改成员信息8连接数据库9绘制图形家谱10小结113.总结114.代码115.家族成员44L问题陈述家谱用于记录某家族历代家族成员的情况与关系。现编制一个家谱资料管理软件,实现对一个家族所有的资料进行收集整理。支持对家谱的存储、更新、查询、统计等操作。并用计算机永久储存家族数据,方便随时调用。2.设计方法阐述2.1 总体规划
2、在动手编制程序之前,先要做好程序的规划,包括程序储存数据所用的结构,数据类型等等,只有确定了数据类型和数据结构,才能在此根底上进行各种算法的设计和程序的编写。首先是考虑数据类型。在家谱中,家族成员是最根本的组成局部,对于家族管理中,已经不能再进行细分了,所以选定家族成员作为数据的根本类型,并在程序中定义Person类。ClassPersonStringname;/姓名intage;年龄Stringsex;/T生别Birthdayymd;/出生口期StringfatherName;StringmotherName;StringSpouseName;intchildNum;intleveITemp
3、;/代数BooleanisAlive;是否健在)为方便计算机进行比拟,在Person类的某些属性中用数字代替了某些不会改变的字符串,譬如判断是否健在ItrUe为是,false为否)。在设置日期上,为方便以后的计算与比拟,也将日期用整型数字表示1999-05-05表示1999年5月5日,这种表示方法只需在输入和输出上作少许的运算便可方便地与日期进行转换。在设计家谱以图谱的形式来显示时,从直观来说,选择树型结构无疑是最直观易懂的,我在一开始构思的时候也是从树型结构去想的,但是二叉树不能满足我的要求,我的家谱中的一个节点有父亲,母亲,孩子(个数任意),配偶,兄弟姐妹(个数任意).于是我自己设计了一个
4、存储结构,一个节点有四个指针域,指向父亲(或母亲,指向配偶,指向兄弟姐妹。Familyparents;指向父亲的引用FamilySPoUSe/指向配偶的引用FamilyChild;指向孩子的引用Familybro_sis;指向兄弟姐妹StaticFamilyroot;祖先节点难题就是如何将所有的家族成员同过祖先节点连接起来。我的思路是先将所有的家族成员的信息用一个TXT文本存储起来,然后读出来,用一个数组mem存起来,之后初始化祖先节点,根据祖先节点的数据域的信息来添加,先添加祖先的父(母)亲,假设有那么从数组中读出来添加,否那么添加兄弟姐妹,再添加配偶,最后添加孩子,最重要的是每添加一个节点
5、时应该判断该节点是否己经在家族树中了,假设存在那么直接重家族树中找出来对其进行相应的操作,假设不在那么从数组mem中读取,之后遍历创立其兄弟姐妹,配偶,孩子。2 .2功能分析与实现设想好总体规划之后,便开始设计程序中需要用到的各个功能函数,初步设想是要先实现最根本的几项功能,其中数据操作的有:增加成员,修改成员资料,删除成员,数据查询的有:查看某代信息,按姓名查找,按生日查找,查看成员关系以及显示查看家族成员信息表,还有就是绘制家谱图以及连接数据库的操作。主界面介绍主界面由三局部组成:菜单、生日公告栏以及欢送封面。下面为主界面图:图1主界面图2菜单1图3菜单2说明:(1)菜单中主要包括三大子菜
6、单:文件、编辑、帮助。其中文件菜单中有连接数据库以及退出的操作,编辑中有所有功能实现操作。(2)生日公告栏为系统自动获取当日时间以判断今日家族中是否有人生日,如果有那么会自动发出祝福,本功能为创新功能。(3)特别说明:在每一个功能界面中都设有带图标的快捷功能键,便于操作。(4)主界面的代码位于:FTFrame.java中,下面将介绍功能。实现主界面的方法:位于PubIiCclassFTFrame类中增加成员功能我设计了两种添加方式,首先,添加进去的人要与家族里的某一个或某几个有联系,比方是某个人的孩子啊,或配偶,不然是无法参加进这个家族的。(1)根据要添加人的父亲添加,父亲必须在家族中找到。(
7、2)根据添加人的配偶。假设这个配偶已有配偶那么不允许添加,不允许三妻四妾。实现增加成员的方法:publicStringaddMember(Personp)代码省略该方法位于familyTest类中图4添加功能界面显示家族成员信家族成员信息表是用于显示及查看家族所有成员信息以及及时查看新增及删除后的情况,进入界面点击显示按钮即可完成功能。实现显TK成员信息表的方法:PubIiCVOidinitrOWData(FamiIyroot)代码省略/该方法位于FTFr三e类中;实现显示成员信息表界面的方法:位于AddMember类中;图5家庭信息表删除功能删除功能执行时,会将本人及其后代及配偶全部删除。实
8、现删除功能以及界面的代码;位于deleteMember类和EamilyTest类中。图6删除成员图1图7删除操作图该删除功能只通过姓名进行删除,删除后通过家庭成员信息表观察出其本人以及其后代及配偶以及完全被删除。查询功能查询功能中有两种查找功能:查询相同生日的所有成员、查找两人关系。(1)查询两人关系时,输入两人姓名即可按查询按钮进行查询。(2)查询相同生日成员时,在下拉列表中选中日期即可查询。图8查询操作实现查询功能以及界面的代码:位于SearchMember类和familyTest中,其中实现关系查询的函数为relationship(namezName),生日查询为brithday(Fam
9、ilyroot,Birthdayd).查询第n代所有人得信息进入操作界面,输入代数即可进行查询,如下列图中查询第3代人。图9代数查询实现显示成员信息表界面和方法:AddMeInber类中(界面)和familyTest中fiinquire_N(Familyrootzintanger)方法。修改成员信息修改操作中有明确的说明规那么,方便操作。在修改中好友根据姓名查询的操作,方便查看修改后是否正确。图10修改成员连接数据库在文件菜单中点击连接数据库操作,在弹出来的对话框中选择确定,在弹出的登陆框中输入用户名及密码便可以连接数据库。说明:由于技术原因本系统只可以连接MySQL数据库,还望谅解。图11菜
10、单中选择连接数据库图12确定连接数据库图13连接数据库实现数据库连接的方法:位于familyTest中Family类的publicvoidconnectionDB_MySQL(StringpassNum)方法。绘制图形家谱根据家族树的存储结构画出来,难点是其中的间距很难调准。图14家谱图实现绘制家谱图的方法:位于CFrame类中。小结至此,本家谱管理系统实现了在不同界面上操作不同的功能,其中包括七大主要功能以及主功能下的多个小功能。本家谱管理系统根本实现了要求的所有内容,界面使用了美化包。但是由于技术知识有限,本系统或多或少存在一些缺乏之处,待在今后改正。3 .总结通过这次大作业,体会很深刻,
11、用刚学的java都运用到这上面,学以致用,对所学知识有了更深刻的理解,同时还发现了许多平时在书本上没有遇见过的问题,促进了自己对知识的渴望,遇见了问题,就希望能够通过查找课外书来解决它们。刚接触题目的时候,自己就有了一定的想法,觉得这个程序做起来是问题不大的,但到了自己真正开始编程的时候却发现远远没有想象中那么简单,很多细节的问题没有预想到,很多关系的处理想得过于简单,以至于实施起来遇到了很大的困难,花了大量的时间。关于这个程序的缺点方面,由于自己花的时间不是很多,再加上知识有限,编写出来的界面不够友好,在功能上还是有不完善的地方,譬如说各项数据的统计还没有弄,数据的存储还不够理想等等。对于这
12、个程序的改良,我自己还是有不少想法的,因为怎么说都是自己亲手编制出来的程序,当然是希望尽善尽美。首先是需要加强数据的存储这方面的知识,使自己编写出来的程序能以一种标准的格式存储下来,方便以后其它程序的读取。总的来说,通过这次任务,收获还是挺多的,也发现了不少的问题,并给自己以后的学习指引了方向,知道自己缺少哪方面的知识,需要补充哪些知识等等。自己将会以这次作业为契机,看更多编程方面的书籍,不断充实自己的知识库。4 .代码我只提供的功能实现的代码,至于界面我没提供importjava.awt.*;importjava.io.*;importjava.util.*;importjava.sql.*
13、;importjavax.swing.*;publicclassfamiIyTest*paramargs*/publicstaticvoidmain(Stringargs)测试函数/TODOAuto-generatedmethodstub*Memberm=newMember();for(inti=O;im.memberNum;i+)System.out.println(m.memberi);*/System.out.println();Familyf=newFamily();f.initRoot();f.CreateFamilyTree(Family.root);/Birthdaya=newB
14、irthday(8888,6,1);/Familyt=f.isAtTree(Family.root,贾演);/System.out.println(t.parents.in);/f.birthday(Family.root,a);/System.out.println(f.birthday);/f.showFamilyTree(Family.root);/System.out.println(t.in);/System.OULPrintIn(f.deleteTree(贾演);/System.out.println(t.parents.in);Birthdaydl,d2;dl=newBirthd
15、ay(2,l);d2=newBirthday(3,3);Personpl,p2;pl=newPerSon(林四”,20,”男,dI,”林如海”);p2=newPerson(张三”,25,d2,“林黛玉);/System.out.println(f.addMember(p1);/System.out.println(f.addMember(p2);/System.out.println(f.nun);/f.showFamilyTree(Family.root);SyStem.oul.println(f.modification(王夫假贷,20,d1,true);/f.showFamilyTree(Family.root);CFramec=newCFrame(Family.root);/f.connectionDB-MySQL(cjtc);1)classBirthday(生日intyear;