数据结构-家谱管理系统

更新时间:2024-03-06 12:29:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

宁波大红鹰学院

项目名称:项目组长:项目成员:班级名称:专业名称:完成时间:信息工程学院

课 程 设 计 报 告

家谱查询系统 白钰琦

徐程凯、徐海域、项鸿伟

10计科1班 计算机科学与技术 2012年12月1日

信息工程学院制

- 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 -

- 2 -

一、案例描述

1、总体描述

家谱管理系统是查询家谱信息必不可少的一部分,利用家谱管理系统可以清楚的查询到家族成员的详细信息。该家谱管理系统是通过树来实现的。本程序具有插入、查找等功能,可以实现存放家谱中各成员的信息。程序的操作界面简洁美观,易于操作。本程序运用了函数、循环、树等知识来进行设计,实现系统和数据结构设计。 2、模块描述

1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内

容:

姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。

2). 实现数据的存盘和读盘。 3). 以图形方式显示家谱。

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

5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 6). 按照出生日期查询成员名单。 7). 输入两人姓名,确定其关系。 8). 某成员添加孩子。

9). 删除某成员(若其还有后代,则一并删除)。 10).修改某成员信息。

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

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

主程序模块 菜单选择模块 树操作模块

图1 模块调用示意图

二、设计思路

本程序要求模块化管理,分成菜单函数、创建函数、添加函数、查找函数、控制各个部分从而将程序简单化出来分析。本程序的主要功能是:创建

- 3 -

数据:创建各相关数据,例如创建家谱信息。添加数据:增加家谱成员孩子信息。查询信息:按照姓名来查询成员信息,还可以通过输入出生日期来查询该家谱信息。退出系统:程序编译结束后退出系统。

三、程序设计

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

Main LocateTime(); ShowFamilyTree(T); ShowNth(T); SearchByName(T); SearchByBirthday(T); AddChild(T); AddWife(T); DeleteByName(T); - 4 - 退出

图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);

- 5 -

int Menu(){

system(\

system(\int i;

printf(\欢迎使用爱新觉罗家族管理系统*****************\\n\\n\printf(\请选择:\\n\printf(\printf(\printf(\printf(\

\\n\

1.读取一个家庭关系\\n\ \\n\

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(\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,\

if((strcmp(fname,\ && (strcmp(mname,\ && (i==0)) { p=NULL; return p; }

else {

strcpy(p->male,fname);

- 6 -

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(\}

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)

- 7 -

{

printf(\名字 配偶 第几代\\n\ scanf(\ 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(\ 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,\ save(p->fchild,stream); save(p->brother,stream); } else {

- 8 -

char out[20] = \ fprintf(stream,\ } }

int main() { int status; char name[10];

ptree p;

FILE *fp= fopen(\ 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(\search(p,name);

break; case 4: printf(\请输入要孩子的人\\n\

scanf(\add(p,name);

break; case 5: printf(\请输入要修该的人\\n\

scanf(\gai(p,name);

break; case 6: save(p,fp); getchar(); getchar(); break; case 7:

- 9 -

}

printf(\感谢使用本系统\\n\

fclose(fp); fclose(fp);

exit(0); //如果选择5,则退出循环终止程序 break;

default : printf(\您选择有误\\n\ }

getchar();

}四、调试与分析

1、主菜单

- 10 -

家谱管理系统的主界面

2、显示家谱信息

读取家谱信息

3、显示家谱中第n代人所有信息

显示家谱中第n代人所有信息

4、按姓名查找某人并相应输出

- 11 -

查询家谱成员信息的界面

5、为家谱中成员添加孩子信息

为家谱中成员添加孩子信息

6、修改家谱中成员信息

- 12 -

修改家谱中成员信息

五、设计总结

1、完成情况

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

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

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

- 13 -

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

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

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

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

- 14 -

本文来源:https://www.bwwdw.com/article/30aa.html

Top