搜索
您的当前位置:首页正文

数据结构-家谱管理系统

来源:好走旅游网
.

宁波大红鹰学院

项目名称:项目组长:项目成员:班级名称:专业名称:完成时间:;.

信息工程学院

课 程 设 计 报 告

家谱查询系统 白钰琦

徐程凯、徐海域、项鸿伟

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、主函数及其流程图

LocateTime(); ShowFamilyTree(T); ShowNth(T); SearchByName(T); Main SearchByBirthday(T); AddChild(T); AddWife(T); DeleteByName(T); 退出 ;. . 图3 家谱管理流程图 CreateeTree()() 申请节点,int i=1 输入成员名Tree->Name,给定Node->Num 分配节点 输入成员名Tree->Name CreatTree(Node->NextNode[i]); Y i<=node->num N 结束

图4 创建家谱流程图 3、源程序

#include #include #include #include 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\ 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\ 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\}

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\ 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\ 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\ save(p->fchild,stream); save(p->brother,stream); } else {

;.

.

char out[20] = \"n n 0\"; fprintf(stream,\"%s\\n\ } }

int main() { int status;

char name[10]; ptree p;

FILE *fp= fopen(\"lmx.txt\ 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\ search(p,name); break; case 4: printf(\"请输入要孩子的人\\n\"); scanf(\"%s\ add(p,name); break; case 5: printf(\"请输入要修该的人\\n\"); scanf(\"%s\ 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、完成情况

进程 项目计划 总体方案 编写代码 实验报告 视频制作 整体完善 答辩 第1次课 第2次课 第3次课 第4次课 负责人 全体成员 全体成员 徐程凯 徐海域 白钰琦 全体成员 全体成员 2、心得体会

白钰琦:从这个项目中,我懂得了代码编写能力的提高不是一天两天的事,而是一个日积月累的过程。在不断地编写调试,是在提出问题解决问题的过程中慢慢提升起来的。所以,自己决定向编程高手看齐,多编程多提问多思考。在今后的时间里更加努力地学习。

徐程凯:在这个项目里我做了对家谱管理的系统分析。刚开始我们从网上下载好了我们需要的资料,通过取其精华去其糟粕,本来是想把系统整合的很完美,可是由于我c语言基础不太扎实,未能完成。也向同学请教,只能做到现在这个地步。通过这次课程设计,我对这个树的操作有了深刻的了解,对C语言也有了更

;.

.

深刻的了解。但我们需要更深刻地思考其实质是什么。了解实验所需的基本程序,并用所学知识实现它。

徐海域:这次的项目我的主要任务是撰写实验报告,刚开始的几天我开始写项目描述,接着我也卡了下代码,关于树我懂的不多,看了以前的书,也是浑浑噩噩的。通过之前下载好的资料,我也试着去整合一些好的地方,不过未能完成。通过本次的项目我意识到自己知识的匮乏。在之后的日子里我会好好的补习知识。希望在下次的项目中可以完成的好点。

项鸿伟:这次课程设计着实让人头疼,我们多次运行了程序,很可惜许多功能无法实现,

这使我们非常的头疼,但是在百度强大的搜索下,我们找到了模版,经过了艰难的研究,我们终于完善了这个程序。

;.

因篇幅问题不能全部显示,请点此查看更多更全内容

Top