家谱管理系统_第1页
家谱管理系统_第2页
家谱管理系统_第3页
家谱管理系统_第4页
家谱管理系统_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、洛 阳理工学 院课 程 设 计报 告课程名称_ _ _ 数据结构_课程设计_ _ _设计题目 _家谱管理系统 _专计算机科学与技术业 _ _ _ _ _班级 _B150405_ _学号_ B15080822 _ _姓名 _ _ 宋士龙 _ _完成日期_2016_年 12月30日_ _ _?课程 设计 任 务 书设计题目 :家谱管理系统设计内容与要求 :【问题描述】: 实现具有下列功能得家谱管理系统1)、 输入文件以存放最初家谱中各成员得信息 ,成员得信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期 (若其已死亡 ),也可附加其它信息、但不就是必需得。2)、 实现数据得存盘与

2、读盘 .3)、 显示家谱。4)、按照出生日期查询成员名单。5)、 按照姓名查询,输出成员信息(包括其本人、父亲、孩子得信息).6)、 修改某成员信息。【基本要求】:界面要求:有合理得提示,每个功能可以设立菜单,根据提示 ,可以完成相关得功能要求 .存储结构 :学生自己根据系统功能要求自己设计, 但就是要求相关数据要存储在数据文件中。测试数据:要求使用、全部合法数据 ;2、局部非法数据。进行程序测试 ,以保证程序得稳定 .测试数据及测试结果请在上交得资料中写明。指导教师: _ _ _年月日课 程 设 计 评语成绩:指导教师 : _ _ _年月日一、算法思想本程序就是一个管理家谱得系统,通过这个系

3、统可以对家族成员进行创建、显示、查找、修改、以及保存家谱与读取家谱功能。该系统分为以下几个模块,分别就是 :创建家谱,显示家谱、按姓名与生日查找家庭成员、修改家谱、存盘、读盘以及退出系统.本程序用到得存储形式为多叉树, 因为家谱中每个人既有父母又有孩子,而且孩子得个数并不确定,所以用多叉树来存储最为合适。用多叉树来存储,就用用到多叉树得递归创建及递归遍历。因为就是多叉树,所以遍历时用广度优先搜索合适.本函数最主要得思想就就是递归调用,每个子函数中都会用到递归 .定义结构体时给定指针数组得最大容量,来规定家谱中最多可以存多少人。定义一个家族树得指针变量用来当每个子函数得参数,从而将其返回到主函数

4、中。以下时算法思想流程图:家谱管理系统创建家谱显示家谱查找成员修改家谱读写家谱按按修修修存读照照改改改盘盘姓生本父孩名日人母子退出系统二、模块划分1. int m n():主函数2. vod Creat re( eeNoe Tree):创建家族树3. void OutPu ll(Tr eo *Tr e):显示家谱4. vod enue( T eeNo e Tree):主菜单5. vo ubMenue1( T e Nd * ree):副菜单 (修改选项菜单)6. v d Change(TreeNod Tree):修改家谱7. TeeNoe Serch ee( TreNod Tee, ar n,i

5、n en th):按照姓名查找家谱成员8. TreeN de Sea cT e1(reeNode Tr e, char birth ,int l ngt) :按照生日查找家谱成员9. oi utPutM s g (Tre N de ree, ar n m ,inleng):输出按姓名查找到得家谱成员10.void ut t ss e( TreeNode T ee,char rh , i tlength):输出按生日查找到得家谱成员11.void S veFamily(T eeNode *roo):保存家谱12.vod ReaFamly(TreeNod *r ot):读取家谱三、数据结构tyed

6、ef tuTreeNo eintC il ;/记录这个人拥有几个儿女char Na e 20; /记录这个人得姓名char birt a 2; /生日?int marriage ; /婚否(表示结婚,0 表示没结婚 )?int deah;/生死( 1 表示活着, 0 表示过世)cha Kind;/ 标示节点得种类有女男chaadd es 100 ;/住址?char l vema sa e 50 ;/死亡日期(如果其已经死亡)struc T eeNod Nex ode20;/ 记录这个人得儿女stucT eNode r nt;/记录这个节点得父节点T eeN e, t e;四、测试第一组数据为

7、:爷爷,奶奶 ,爸爸 ,妈妈,我,二叔 ,二婶 ,姐姐,三叔 ,三婶,弟弟一共三代 11 个人 .其中爷爷就是根节点,奶奶为爷爷得配偶,同时也就是爷爷得第一个后继节点 .爸爸,二叔,三叔为爷爷得子女。爸爸得配偶就是妈妈,爸爸得子女就是我 .二叔得配偶就是二婶,子女就是姐姐。三叔得得配偶就是三婶,三叔得得子女就是弟弟 .进入程序之后,首先进行创建家谱,然后进行存盘,之后进行修改与查询等步骤。退出程序在进入程序时, 进行读盘 .之后在进行其她操作 ,程序完成之后退出即可。爷爷奶奶爸爸妈妈二叔二婶三叔三婶我姐姐弟弟图 1 家族树第一组数据测试截图为:图 显示家谱图 3 按照姓名查找家族成员图 4存盘

8、第二组数据为:王老刘老王二张二王大李大王 小王 小一二图 4 王家家族树第二组数据测试截屏为 :图 5 修改家族成员得信息图 6 修改某个人得具体信息图 7 按照生日查找某人图 8 读盘五、源程序 includ n l stdlib 、#incl d ifd WI 3#defineL system( ls )defin ipForSa e printf(”t t 输入文件名及保存位置( eg:D: xample 、 xt) :)#defi e Ti ForRead p ntf( ” tt文件名及其路径(eg:D:e am le、 xt):”)# l efine defineC E RTi Fo

9、rs stem(c ear)v p (tt输入文件名及保存位置(eg:/he/xiong/exampl 、 txt ):define T ForR ad) rintf( t t 文件名及其路径(g:hom /xi n /e amp e、txt):) nf# f ne max 5 / 保存得文件名得最大长度 nt LAG 0;int a=1 ;t pedf st uct ree ode?inChildNum ; 记录这个人拥有几个儿女ch r Na e 0; /记录这个人得姓名?chab th y 20; /生日?int arri ge; /婚否(表示结婚,0 表示没结婚 )?int ath;

10、/生死( 1 表示活着 ,0 表示过世 )ch ind; /标示节点得种类有女G 男 B?char ad ss1 0 ;/住址? ar livem ss ge 50;/ 死亡日期 ( 如果其已经死亡)stru t TreeN de *NextNode 20;/记录这个人得儿女str ct T e N de *Parent;/记录这个节点得父节点 TreeN de,* r;voi re tTree(T eeNode Tree);voOutP tAl (T eeNode*Tre );v d e ue(Treeod re) ;v id ubMenue1( reeode Tree);voidSub e

11、n e2(Treeo e re ); oid Cha ge(T ee de Tr e); oidAd e( TreeNod Tree) ;TreeNode Sea chTr e(TreeNode ee, harna e, in le g h) ;T eeNod* Search re 1(Tree od *T ee,c arbrth,i t ngth) ; oid uP tMesa( TreeNode * Tree ,c ar ame , int len th) ;void Ou P tMessa 1( Tree ode T ee,cha birth ,int le th) ; id Save

12、amily ( Tree de *r ot);void ea Faml ( Tre N de r t); tm in()/ 主函数? T eNod r ;/Tr eNode *Tr e1;? / re 1 & ( *Tr e) ;Tr e=( ree o e ) ll ( sizeof ( Tr e ode));? ee Parent = UL ;strcpy( Tr e- Nam ,0) ;Me ( Tree); eturn;void M nu( T eeN deTr e)/输出主菜单/ Tre No e *Tr e1; ee1=&Tr ; /? rc;? ar name20;chabir

13、0;while ()? system(cls )”;? printf ( ” t);pr ntf(nntt * * 欢迎 使用 家族 管 理 系 统 * * * nn );?print ( ttA :输入家谱信息建立树”) ;?p tB:输出整个家谱信息” );?p i tf (” nttC:按出生日期查找某人) ;?printf (” tD :按姓名查找某人);printf( n : 修 改 某 个 人 得 信息”) ;?pri tf (” tF:存盘 ) ;? r ntf( ntG:读盘);?ri tf ( n ttH:退出整个程序nt);?=getchar();?w tch(c)?cas

14、e A:T e e * N wNod ;? N wNode=( ree ode )ma loc( sizeof( Tr Node);? pri t( t 请输入姓名: ” );? scanf( %s,Tre - Name);?pr tf( ”nt 请输入性别女G 男 B : ) ;?getchar();? ca f( c”,( Tree-Kind );? ree- a ent=Ne N de;? T e e N L;/? r tTr ( re );/? p intf (” n t- - - - -家谱图已经建立成功 - -n);print ( - - -请按Ent键继续操作 - );ge ch

15、ar();? br ak; ase B:? if(strcmp (T e - N me, ” ) =0)? ?p int (” nt 家谱图得多叉树尚未建立请先建立树?gethar( );?b eak;n) ;?prin f( n t 整个家谱得主要信息如下O t utAl ( Tree) ;: );?getcha ();?break;?caseC :if ( st c p(T e bi h ay, 0) =0)? ?prin f ( n家谱图得多叉树尚未建立请先建立树n) ;?g tchar( );?brea;? printf (” nt 请输入您要查找得出生日期: ”);scanf( s”

16、, bir h) ;?OutP tMes age1( ear hTree1( Tre, brth,20 ), bi th, 2); r nt( n nt - - - - - -* -* -* - - -* - - -*- n t );getch() ;? bre k;?ase :?f (strcm(e - N me, ”)=0)?rintf (”家谱图得多叉树尚未建立请先建立树” );?getchar();? ?bre k;? ?printf( n t 请输入您要查找得人得姓名:nt);?scanf( ” %s,”nme);?O P Me ge( earc T e( T ee, name, 2

17、0),name, 2);? r tf ( n nt- -*- - - - - * - - -*- *- - *- - nt );?ge c ar() ;?br k;? ase E:? f( trcmp ( T e-Na e, 0 ”) =0 )? rin f( ” t 家谱图得多叉树尚未建立请先建立树 e char( );n”);? ?br a ;?Ch n e(Tr e);? g t har();? r ak; ?case :? if (strc p(Tree-Nam , ” ) =0)?prin f(n t 家谱图得多叉树尚未建立请先建立树n);? get h r() ;? ? brea;

18、? ? ?Sav a ly ( Tre );? e har( );?b eak;?case :? / if( trc p( ree Na e,” ) =0 ) ?pr tf (家谱图得多叉树尚未建立请先建立树n );?get ar( );? br ak;? /Read am ly(&Tree) ;?getchar();? break;?c e H:? ?printf ( nnt - - - -本次服务到此结束 - - - -” );?pr ntf(” t- - - - -欢迎下次使用- -”);? t- - - - -谢谢 - - - - -n n”);? b eak;?cae n:? rea

19、k;def ult:? pri tf ( nnt - - -对不起!您得选择不在服务范围之内! - - - - );?rintf( t - -请您再次选择所需得服务项!- - -” );? ?prin f( nt - - - - -谢谢 - - - nt ” );? ?getc a () ; ea;?if( c=H | = f)? eak;?g tcha( ); oid CreatTre ( Tr eN de ode) /创建树i i;? reeNode *New de;?N o e (T eeNode *) al o( sz of(Tree od )) ; No e e de0 =Ne No

20、de;No e-NextN de 0= ULL ;p intf( ” nt 请输入出生日期: );s nf( ”s”, No - birth ay) ; ri tf( n t 请输入家庭住址: ” ); getchar( );? nf(%s,Node addr ss);pri t( nt 请输入就是否建在(1-就是或 0否 ): ); canf( ”d ,&(No - deat );?i (Node death=0)? ri tf( nt sc nf(请输入去世日期:) ;, d ivemas ag) ;? lse if(N de- d ath= 1)prin f( n t 仍然建在” );?

21、ri f( ” n t 请输入 %s 得配偶得姓名(输入0 代表没结婚): , N dee);?canf( s, Ne Node Name);?if ( strcm(Ne ode Name, ) !=0)?printf( t 请输入配偶得出生日期: );?scanf( % ”,NewNod birthday );printf (” 请输入家庭住址: );getcha( ); ?sca f( ” s” ,NewNode addres) ;?pr ntf( ” 请输入就是否建在( 1就是或 0否 ): ); scanf( ” d, & ( NewN de- ath));? if( ewNode d

22、eath=0 )? ? rintf ( nt 请输入去世日期:);?s nf(%s , ewNode ivemassa e) ;elif(Ne No e eah= 1 )? p i tf( nt 仍然建在”) ; ?pr ntf ( t 请输入 s 得子女得数目(当子女输入时便停止输入该成员有关信息ode me);): ,sc f ( d”, &( o e- C ild um);i( (N d ChildNu )= s c(NewNode N m,0)=0?r tur;)? if( ode- ind= N de-K = g)N w o e Kin =B ;? lse? N Node Ki G;

23、? N wNod Ch ld u =0; e N e ex No e 0= ULL ;?N e xt d 0 e Nod;? o e Ne No 0 ren=Node; / 孩子得父母? f r(i=1;iCh ldN m;i+ )? ? N de=( reeode * ) malloc(s z of ( reeNo e); a+;? printf ( t 请输入 s 得第 d 子女得名字 :,Node N me,) ;?sc f( s ,New ode Na);?printf (” nt 请输入得第%d 子女得性别女G 男 B: , Node- Nam ,i) ;? tchar();? sc

24、anf( ”c”,NewNode Kind );? NewNo -Chi Num -1;? ?N de Nex No e =NewN de;? ? tTr e(No NextNo e i); / 从子女得数目开始? oid OutPutAll ( Tr eNode *Tree)? nti, fl =0;?pr ntf(” n t * - * - * *- * * *- * * - );?p intf(”n姓名 : 出生日期: s 家庭住址: %s 性别: %c ,T e Name,Tr -b rt ay, Tr e addess, ree Kind ) ; f ( Tr e Ki d=G |T

25、r - ind= )gflag=1 ;?pr(女”); lsepri tf( ”男” );? rintf ( t 就是否健在(1健在, 0-去世 ):” );if ( ree dea h= ) printf ( 1 ”);else f ( Tre dea h=0 ) r ntf(0);( ! (Tr e Nex Node 0)?pr nt( nt 至今没有配偶与子女n);?re r;if( lag=1 )? intf ( t 丈夫 姓名 :s”, Tree N x No 0- Nae); ? ls?pri tf(” nt 妻子 姓名 : s, T ee-N xtN e0 N me);? t(”

26、 就是否健在(1健在 ,去世 ): ); f(Tree dea h=1) p ntf( 1 );ei ( r death=0) p in (0”);?for(i=1;i hl Num; +)printf( ” 第 d 个子女得姓名: s出生日期 : s家庭住址 :%s性别 % ,i, reeNex N d i Name, ree xtNodei birthday, ee extNode ddre s,T ee Ne t odei Kind) ;?i (Tree- extNode Kind= G|Tree- NextN e Kind= g )? ?prin f( 女 );?else?print

27、(”男”) ;p i f(t 就是否健在 (1- 健在,去世) : ) ;if ( Tre deat =1 ) pri tf(1);el e if( Tree deth=0 ) printf(”)0;? rintf ( ” );for( i= ; i =T ee Ch l m; +)? utPutA l(Tree NextNode i);?Tr Node Se rcTree(TreeNode?i t ;?T ee ode NewN d;?if (strcmp( Tree me, name)=0) Tr,char name ,int ngth)? f(l ngth=0)?FLAG=1;?el e

28、? FLAG= ;return re ;?i ( Tr e NextNod =NUL )retur LL ;for( i; i =Tree-Ch N m; +)if (i= )? NewNode=SearchT ee( T e- N xtNode i , na e,) ; elseN wN d =S ar hT( ree Next ode i , a e, 20);? if ( e o! =N LL )? retrn NewNod ;?ret rn L;voi t tMe ge( TreeNode *Tr, har m, i t ength)?int lag 0,i;?TreeNod ewNo

29、 e; i tf( nnt”- - - - *- -* - - - - *- - - - - ) ; if(Tree= ULL )? r f( nn t该家谱图中没有这个人得信息请确认就是否输入错误 , am );return;?p in( n t 您所要找得人已经找到信息如下所示:);? rint ( t 姓名 :%s 出生日期 : s 家庭住址 :%s性别 : c, am ,Tree brthday,Tree adress, re-K n );( ee Kind= |Tre Kind= )g? lag=1;/标记她(她)得性别? printf ( 女 );? se? pri f (男 );

30、?p n( t 就是否健在( 1健在, 0去世) :); if(Tree- eath=1) pintf( ” 1” );?els if(T ee-de t =0)printf ( ” ”);N w o e=Tree-Par nt;?if ( L G= 1)? if ( fla =1)?print nt 她就是嫁入此家族得所以亲生父母信息不在家谱内包括? rin (” nt 丈夫姓名 :%s”, ewN de N me););?e s? ?p t 她就是入赘此家族得所以亲生父母信息不在家谱内包括pri tf( ” nt 妻子姓名 :%s” ,NewNo e Name) ; ) ;(( ew od

31、e Ch ldN m) ) /判断她(她)就是否有孩子?p i tf( n得孩子得信息如下:) ;/ 输出她(她)得孩子得信息f r( i= ; i =N wNode- ildNum ; +)?pr n f(” nt 姓名 :%s性别: , ewNod - ext o ei- me);if ( NewNod xtN de i Kind= G wN de K nd= )g ?pr ntf( 女 );? se? rintf (”男 );?rin f( t 就是否健在(健在,0-去世):”);?if ( Tre d ath=)printf ( ”1);?elsei( r e de th= 0)pri

32、nt ( ” ) ;?retu ;i(NewNode=N L )/判断它就是不就是根节点如果就是得话就没有父母兄弟信息?print (” n t 就是这个家谱图里最年长得人, n me);?e se? if ( N Node-Kin G |NewNod ind= ) /判断父亲节点就是父亲还就是母亲? ? p n f( ”n t 母亲 姓名: s, N wN e- am);/输出她(她 ) 得父母亲得信息?p in (nt 父亲姓名 : s” ,N wNo e-e t od 0 - Name);? els? printf( n t 母亲姓名 : s, e Node Next de 0-N me

33、) ;? prin f ( n t 父亲 姓名: %,NewNo - a e);? if( ree ex Nod 0! =N LL) / 判断她 ( 她)就是否有配偶? ?if(f ag=1) /输出她(她)得配偶得信息printf( nt 丈夫姓名 :s”, T ee- extNod - Name);?elsei ? p intf( 妻子 姓名 :s,Tre NextNode ame) ; ( e Chi d um 0) 判断她(她)就是否有孩子? ? intf(nt 得孩子得信息如下: ”); / 输出她 (她 )得孩子得信息? ? f r(i=1 ; iNext ode i N me);? ? i ( Tree Ne tNode Ki d= | Tree Kind=g )? ?printf ( 女”);? ? else?pr nt(”男”);? p int (” t 就是否健在( 1-健在, 0去世) :”);? f (Tr death=)pr f ( ” 1”); lif ( T ee-d ah=0) rintf ( 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论