数据结构_家谱管理系统方案

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

宁波大红鹰学院
信息工程学院





项目名称:家谱查询系统
项目组长:白钰琦
项目成员:徐程凯、徐海域、项鸿伟
班级名称: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、确定家谱中两个成员关系 ........... 错误!未定义书签。

11、按出生年月排序家谱 ............. 错误!未定义书签。

一、案例描述
1、总体描述
家谱管理系统是查询家谱信息必不可少的一部分 •利用家谱管理系统可 以清楚的查询到家族成员的详细信息。

该家谱管理系统是通过树来实现的。

本程序具有插入、查找等功能•可以实现存放家谱中各成员的信息。

程序的 操作界面简洁美观•易于操作。

本程序运用了函数、循环、树等知识来进行 设计.实现系统和数据结构设计
1、 完成情况 .........................
2、 心得体会 .......................... -15 - -16 -
2、模块描述
1).输入文件以存放最初家谱中各成员的信息•成员的信息中均应包含以下内容:
姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡) .也可附加其它信息、但不是必需的。

2).实现数据的存盘和读盘。

3).以图形方式显示家谱。

4).显示第n代所有人的信息。

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

6).按照出生日期查询成员名单。

7).输入两人姓名.确定其关系。

8).某成员添加孩子。

9).删除某成员(若其还有后代.则一并删除)。

10).修改某成员信息。

11).按出生日期对家谱中所有人排序。

12).打开一家谱时.提示当天生日的健在成员。

图1模块调用示意图
、设计思路
本程序要求模块化管理•分成菜单函数、创建函数、添加函数、查找函数、控制各个部分从而将程序简单化出来分析。

本程序的主要功能是:创建数据:创建各相关数据•例如创建家谱信息。

添加数据:增加家谱成员孩子信息。

查询信息:按照姓名来查询成员信息•还可以通过输入出生日期来查询该家谱信息。

退出系统:程序编译结束后退出系统。

三、程序设计
1、数据结构描述
本程序首先定义了结构体•定义了Ic.rc两个指针域;
定义如下:
typedef struct BiTNode
{
int mark;// 标记
in t level;
char name[50];〃姓名
char birthday[50];〃生日
char address[MAXN];〃住址
int marriage;// 婚否(true表示结婚.false 表示没结婚)
int live;// 建在(true表示活着.false 表示过世)
int sex;// 性别(true表示男.false 表示女)Elemtype data;//
struct BiTNode *lc,*rc;
}BiTNode,*BiTree;
2、主函数及其流程图
图4创建家谱流程图3、源程序
#in clude<stdio.h>
#in clude<stri ng.h>
#in clude<stdlib.h>
#in clude<stri ng.h>
typedef struct pnode
{
char male[10];
char female[10];
int n;
struct pnode *fchild,*brother;
}pno de,*ptree;
void creatfamily(ptree ,FILE );
void preorder(ptree p);
void show(ptree p);
in t Men u(){
system("color 1f");
system("mode con: cols=76 lin es=35");
int i;
n ; ri *$/"******************
*\n\n");
printf (” 输入1~6之间的数字选择相应功能:");
scan f("%d",&i);
return i;
}
ptree creatfamily(FILE *fp) {
if(!feof(fp))
{
ptree p; p=(ptree)malloc(sizeof(p no de));
char fname[10],m name[10];
int i;
fscan f(fp,"%s %s %d\n", fname,m name ,&i);
if((strcmp(fname," n" )==0) && (strcmp( mn ame," n" )==0) && (i==0)) {
p=NULL; return p;
}
else
{ strcpy(p->male,fname); strcpy(p->female, mn ame); p-> n=i;
printf (” 读取成功 \n");
p->fchild=creatfamily(fp); p->brother=creatfamily(fp);
return p;
}
}
}
void PreOrder(ptree p) printf (”
请选择:\n"); printf (”
\n ”); printf (”
1. 读取一个家庭关系\n"); printf (”
\n ”); printf (”
2. 显示个豕庭关系\n ); printf (”
\n"); printf (”
3. 查找成员\n"); printf (”
\n"); printf (”
4. 添加新成员\n"); printf (”
\n"); printf (”
5. 修改成员\n"); printf (”
\n"); printf (”
6. 保存\n ”); printf (”
\n"); printf (”
7. 退出系统\n\n\n");
printf (” \n");
prin ff *******************************************************************
*************** **\ n\n"); 欢迎使用爱新觉罗家族管理系统
{
if(p)
{
show(p);
PreOrder(p->fchild); PreOrder(p->brother);
}
}
void show(ptree p)
{
printf(" 名字配偶第几代\n");
prin tf("%2s %6s %d\n",p->male,p->female,p-> n); }
void search(ptree p,char n ame[])
{
if(p)
{
if(strcmp(p->male, name)==0)
{
show(p);
getchar();
getchar();
}
search(p->fchild ,n ame); search(p->brother, name);
}
}
void add(ptree p,char n ame[])
{
char fname[10], mn ame[10];
int i;
if(p)
{
if(strcmp(p->male, name)==0)
{
printf(" 名字配偶第几代\n");
scan f("%s %s %d",fname,m name, &i); p->fchild=(ptree)malloc(sizeof(p no de)); strcpy(p->fchild->male,fname);
strcpy(p->fchild->female, mn ame);
p->fchild->n=i;
p->fchild->fchild=NULL; p->fchild->brother=NULL;
}
add(p->fchild, name); add(p->brother, name);
}
}
void gai(ptree p,char n ame[])
{
char fname[10], mn ame[10];
int i;
if(p)
{
if(strcmp(p->male, name)==0)
{
printf(" 名字配偶第几代\n”);
scan f("%s %s %d",fname,m name, &i); strcpy(p->male,fname);
strcpy(p->female,m name);
p-> n=i;
}
gai(p->fchild, name); gai(p->brother, name);
}
}
void save(ptree p,FILE *stream)
{
if(p)
{
fprin tf(stream,"%s %s %d",p->male,p->female,p->n); save(p->fchild,stream);
save(p->brother,stream);
}
else
{
char out[20] = "n n 0";
fprin tf(stream,"%s\n" ,out);
}
}
int mai n()
{ int status;
char n ame[10];
ptree p;
FILE *fp= fope n("lmx.txt","r+");
while(1){
status=Me nu();
switch(status)
{
case 1:
p=creatfamily(fp);
getchar();
getchar();
break;
case 2:
PreOrder(p);
getchar();
getchar();
break;
case 3:
printf(" 请输入搜索的名字\n");
sca nf("%s", name);
search(p ,n ame); break;
case 4:
printf(" 请输入要孩子的人\n");
sca nf("%s", name);
add(p ,n ame);
break;
case 5:
printf(" 请输入要修该的人\n");
sca nf("%s", name);
gai(p, name); break;
case 6:
save(p,fp);
getchar();
getchar();
break;
case 7:
printf("\n 感谢使用本系统\n");
fclose(fp);
fclose(fp);
exit(O); // 如果选择5.则退出循环终止程序
break;
default :
printf("\n 您选择有误\n");
getchar();
}
}
}四、调试与分析
1、主菜单
" -N:\字习圏掲结构\家族管理白锂琦\代码©E -
家谱管理系统的主界面
2、显示家谱信息
读取家谱信息
3、显示家谱中第n 代人所有信息
显示家谱中第n 代人所有信息 计成成成成 A1取取取取 读读
匕匕 功 应 第几代 第几代 第几代 偶 3iffi2 间配济配里斟酣无
之尔舍若 %博赫 入字临字弊字禮子钮
4、按姓名查找某人并相应输出
查询家谱成员信息的界面
5、为家谱中成员添加孩子信息
为家谱中成员添加孩子信息誤搜 』入 Atff 厂

ASS 1 配
富 噩产选择相应功能;4 第几代
i 4
6
修改家谱中成员信息 计入 入输历 2理SA 名弘 代 第 「可 偶両修改家谱中成员信息
五、设计总结
1、完成情况
2、心得体会
白钰琦:从这个项目中.我懂得了代码编写能力的提高不是一天两天的事.而是一个日积月累的过程。

在不断地编写调试•是在提出问题解决问题的过程中慢慢提升起来的。

所以•自己决定向编程高手看齐•多编程多提问多思考。

在今后的时间里更加努力地学习。

徐程凯:在这个项目里我做了对家谱管理的系统分析。

刚开始我们从网上下载好了我们需要的资料•通过取其精华去其糟粕•本来是想把系统整合的很完美•可是由于我c语言基础不太扎实.未能完成。

也向同学请教.只能做到现在这个地步。

通过这次课程设计.我对这个树的操作有了深刻的了解.对C语言也有了更深刻的了解。

但我们需要更深刻地思考其实质是什么。

了解实验所需的基本程序•并用所学知识实现它。

徐海域:这次的项目我的主要任务是撰写实验报告•刚开始的几天我开始写项目描述.接着我也卡了下代码.关于树我懂的不多.看了以前的书.也是浑浑噩噩的。

通过之前下载好的资料•我也试着去整合一些好的地方.不过未能完成。

通过本次的项目我意识到自己知识的匮乏。

在之后的日子里我会好好的补习知识。

希望在下次的项目中可以完成的好点。

项鸿伟:这次课程设计着实让人头疼•我们多次运行了程序•很可惜许多功能无法实现•这
使我们非常的头疼•但是在百度强大的搜索下.我们找到了模版.经过了艰难的研究.我们终
^于完善了[这个程序。

—。

相关文档
最新文档