大数据结构-家谱管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
宁波大红鹰学院信息工程学院
课
程
设
计
报
告
项目名称:家谱查询系统
项目组长:白钰琦
项目成员:徐程凯、徐海域、项鸿伟
班级名称:10计科1班
专业名称:计算机科学与技术
完成时间: 2012年12月1日
信息工程学院制
目录
一、案例描述.................................................... - 3 -
1、总体描述................................................. - 3 -
2、模块描述................................................. - 3 -
二、设计思路.................................................... - 3 -
三、程序设计.................................................... - 4 -
1、数据结构描述............................................. - 4 -
2、主函数及其流程图......................................... - 4 -
3、源程序................................................... - 5 -
四、调试与分析.................................................. - 5 -
1、主菜单.................................................. - 10 -
2、显示家谱信息............................................ - 11 -
3、显示家谱中第n代人所有信息.............................. - 11 -
4、按姓名查找某人并相应输出................................ - 11 -
5、按出生日期查找家谱成员信息................... 错误!未定义书签。
6、为家谱中成员添加孩子信息................................ - 12 -
7、为家谱中成员添加妻子信息..................... 错误!未定义书签。
8、删除家谱中成员及其后代信息................... 错误!未定义书签。
9、修改家谱中成员信息...................................... - 12 -
10、确定家谱中两个成员关系...................... 错误!未定义书签。
11、按出生年月排序家谱.......................... 错误!未定义书签。
五、设计总结................................................... - 13 -
1、完成情况................................................ - 13 -
2、心得体会................................................ - 13 -
一、案例描述
1、总体描述
家谱管理系统是查询家谱信息必不可少的一部分,利用家谱管理系统可以清楚的查询到家族成员的详细信息。
该家谱管理系统是通过树来实现的。
本程序具有插入、查找等功能,可以实现存放家谱中各成员的信息。
程序的操作界面简洁美观,易于操作。
本程序运用了函数、循环、树等知识来进行设计,实现系统和数据结构设计。
2、模块描述
1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:
姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。
2). 实现数据的存盘和读盘。
3). 以图形方式显示家谱。
4). 显示第n 代所有人的信息。
5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。
6). 按照出生日期查询成员名单。
7). 输入两人姓名,确定其关系。
8). 某成员添加孩子。
9). 删除某成员(若其还有后代,则一并删除)。
10).修改某成员信息。
11).按出生日期对家谱中所有人排序。
12).打开一家谱时,提示当天生日的健在成员。
图1 模块调用示意图
二、设计思路
本程序要求模块化管理,分成菜单函数、创建函数、添加函数、查找函数、控制各个部分从而将程序简单化出来分析。
本程序的主要功能是:创建
数据:创建各相关数据,例如创建家谱信息。
添加数据:增加家谱成员孩子信息。
查询信息:按照姓名来查询成员信息,还可以通过输入出生日期来查询该家谱信息。
退出系统:程序编译结束后退出系统。
三、程序设计
1、数据结构描述
本程序首先定义了结构体,定义了lc,rc两个指针域;
定义如下:
typedef struct BiTNode
{
int mark;//标记
int level;
char name[50];//姓名
char birthday[50];//生日
char address[MAXN];//住址
int marriage;//婚否(true表示结婚,false表示没结婚)
int live;//建在(true表示活着,false表示过世)
int sex;//性别(true表示男,false表示女)
char livemassage[50];//死亡日期(如果其已经死亡)
Elemtype data;//
struct BiTNode *lc,*rc;
}BiTNode,*BiTree;
2、主函数及其流程图
3、源程序
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<string.h>
typedef struct pnode
{
char male[10];
char female[10];
int n;
struct pnode *fchild,*brother; }pnode,*ptree;
void creatfamily(ptree ,FILE ); void preorder(ptree p);
void show(ptree p);
int Menu(){
system("color 1f");
system("mode con:cols=76 lines=35");
int i;
printf("****************** 欢迎使用爱新觉罗家族管理系统*****************\n\n");
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");
printf("******************************************************************* *\n\n");
printf("输入1~6之间的数字选择相应功能:");
scanf("%d",&i);
return i;
}
ptree creatfamily(FILE *fp)
{
if(!feof(fp))
{
ptree p;
p=(ptree)malloc(sizeof(pnode));
char fname[10],mname[10];
int i;
fscanf(fp,"%s %s %d\n", fname,mname,&i);
if((strcmp(fname,"n")==0) && (strcmp(mname,"n")==0) && (i==0))
{
p=NULL;
return p;
}
else
{
strcpy(p->male,fname);
strcpy(p->female,mname);
p->n=i;
printf("读取成功\n");
p->fchild=creatfamily(fp);
p->brother=creatfamily(fp);
return p;
}
}
}
void PreOrder(ptree p)
{
if(p)
{
show(p);
PreOrder(p->fchild);
PreOrder(p->brother);
}
}
void show(ptree p)
{
printf("名字配偶第几代\n");
printf("%2s %6s %d\n",p->male,p->female,p->n); }
void search(ptree p,char name[])
{
if(p)
{
if(strcmp(p->male,name)==0)
{
show(p);
getchar();
getchar();
}
search(p->fchild,name);
search(p->brother,name);
}
}
void add(ptree p,char name[])
{
char fname[10],mname[10];
int i;
if(p)
{
if(strcmp(p->male,name)==0)
{
printf("名字配偶第几代\n");
scanf("%s %s %d",fname,mname,&i);
p->fchild=(ptree)malloc(sizeof(pnode));
strcpy(p->fchild->male,fname);
strcpy(p->fchild->female,mname);
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 name[])
{
char fname[10],mname[10];
int i;
if(p)
{
if(strcmp(p->male,name)==0)
{
printf("名字配偶第几代\n");
scanf("%s %s %d",fname,mname,&i);
strcpy(p->male,fname);
strcpy(p->female,mname);
p->n=i;
}
gai(p->fchild,name);
gai(p->brother,name);
}
}
void save(ptree p,FILE *stream)
{
if(p)
{
fprintf(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";
fprintf(stream,"%s\n",out);
}
}
int main()
{ int status;
char name[10];
ptree p;
FILE *fp= fopen("lmx.txt","r+");
while(1){
status=Menu();
switch(status)
{
case 1:
p=creatfamily(fp);
getchar();
getchar();
break;
case 2:
PreOrder(p);
getchar();
getchar();
break;
case 3:
printf("请输入搜索的名字\n");
scanf("%s",name);
search(p,name);
break;
case 4:
printf("请输入要孩子的人\n");
scanf("%s",name);
add(p,name);
break;
case 5:
printf("请输入要修该的人\n");
scanf("%s",name);
gai(p,name);
break;
case 6:
save(p,fp);
getchar();
getchar();
break;
case 7:
printf("\n感谢使用本系统\n");
fclose(fp);
fclose(fp);
exit(0); //如果选择5,则退出循环终止程序
break;
default :
printf("\n您选择有误\n");
getchar();
}
}
}四、调试与分析
1、主菜单
家谱管理系统的主界面2、显示家谱信息
读取家谱信息
3、显示家谱中第n代人所有信息
显示家谱中第n代人所有信息4、按姓名查找某人并相应输出
查询家谱成员信息的界面5、为家谱中成员添加孩子信息
为家谱中成员添加孩子信息6、修改家谱中成员信息
修改家谱中成员信息
五、设计总结
1、完成情况
2、心得体会
白钰琦:从这个项目中,我懂得了代码编写能力的提高不是一天两天的事,而是一个日积月累的过程。
在不断地编写调试,是在提出问题解决问题的过程中慢慢提升起来的。
所以,自己决定向编程高手看齐,多编程多提问多思考。
在今后的时间里更加努力地学习。
徐程凯:在这个项目里我做了对家谱管理的系统分析。
刚开始我们从网上下载好了我们需要的资料,通过取其精华去其糟粕,本来是想把系统整合的很完美,可是由于我c语言基础不太扎实,未能完成。
也向同学请教,只能做到现在这个地步。
通过这次课程设计,我对这个树的操作有了深刻的了解,对C语言也有了更
深刻的了解。
但我们需要更深刻地思考其实质是什么。
了解实验所需的基本程序,并用所学知识实现它。
徐海域:这次的项目我的主要任务是撰写实验报告,刚开始的几天我开始写项目描述,接着我也卡了下代码,关于树我懂的不多,看了以前的书,也是浑浑噩噩的。
通过之前下载好的资料,我也试着去整合一些好的地方,不过未能完成。
通过本次的项目我意识到自己知识的匮乏。
在之后的日子里我会好好的补习知识。
希望在下次的项目中可以完成的好点。
项鸿伟:这次课程设计着实让人头疼,我们多次运行了程序,很可惜许多功能无法实现,这使我们非常的头疼,但是在百度强大的搜索下,我们找到了模版,经过了艰难的研究,我们终于完善了这个程序。