宁波大红鹰学院
项目名称:项目组长:项目成员:班级名称:专业名称:完成时间:;.
信息工程学院
课 程 设 计 报 告
家谱查询系统 白钰琦
徐程凯、徐海域、项鸿伟
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 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语言也有了更 ;. . 深刻的了解。但我们需要更深刻地思考其实质是什么。了解实验所需的基本程序,并用所学知识实现它。 徐海域:这次的项目我的主要任务是撰写实验报告,刚开始的几天我开始写项目描述,接着我也卡了下代码,关于树我懂的不多,看了以前的书,也是浑浑噩噩的。通过之前下载好的资料,我也试着去整合一些好的地方,不过未能完成。通过本次的项目我意识到自己知识的匮乏。在之后的日子里我会好好的补习知识。希望在下次的项目中可以完成的好点。 项鸿伟:这次课程设计着实让人头疼,我们多次运行了程序,很可惜许多功能无法实现, 这使我们非常的头疼,但是在百度强大的搜索下,我们找到了模版,经过了艰难的研究,我们终于完善了这个程序。 ;. 因篇幅问题不能全部显示,请点此查看更多更全内容