{ printf(\不能打开家谱文件\\n\ return; } n=0;
fclose(fp); }
void ReadFile(FamType fam[],int &n) {
FILE *fp; long length; int i;
if((fp=fopen(\ { n=0; return; }
fseek(fp,0,2); length=ftell(fp); rewind(fp);
n=length/sizeof(FamType); for(i=0;i fread(&fam[i],sizeof(FamType),1,fp); fclose(fp); } void SaveFile(FamType fam[],int n) { int i; FILE *fp; if((fp=fopen(\ { printf(\数据家谱文件不能打开\\n\ return; } for(i=0;i void InputFam(FamType fam[],int &n) { printf(\输入父亲、母亲和儿子姓名:\ scanf(\ n++; } 14 void OutputFile(FamType fam[],int n) { int i; if(n<0) { printf(\没有任何记录\\n\ return; } for(i=0;i void main() { BTree *bt; FamType fam[MaxSize]; int n,sel,sell; ReadFile(fam,n); do { printf(\文件操作2.家谱操作0.退出 请选择:\ scanf(\ switch(sel) { case 1: do { printf(\:输入2:输出9:全清0:存盘返回 请选择:\ scanf(\ switch(sell) { case 9:DelAll(fam,n); break; case 1:InputFam(fam,n); break; case 2:OutputFile(fam,n); break; case 0:SaveFile(fam,n); break; } }while (sell!=0); break; case 2: bt=CreatBTree(\ do 15 } { printf(\找某人所有儿子 2.找某人所有祖先 0:返回 请选择:\ scanf(\ switch(sell) { case 1: FindSon(bt); break; case 2: printf(\ break; } }while(sell!=0); break; } }while(sel!=0); 3设计结果与分析 3.1菜单函数功能测试 系统运行后就会自动显示如图3-1的主菜单,选项包括:1、文件,2、家谱,0、退出,。当用户选择相应的代号就进入相应的功能模块。 图3-1 主菜单函数功能检测 4.2输入功能函数测试 系统运行后就会自动显示如图3-2的输入功能模块,界面出现1:输入>>输入父亲、母亲和儿子的姓名,用户输入信息。 16 图3-2输入功能函数测试 3.3输出功能函数测试 系统运行后就会自动显示如图3-3的输出功能模块,界面出现2:输出。用户输入数字2后系统自动输出数据信息。 图3-3输出功能函数测试 3.4清盘功能函数测试 系统运行后就会自动显示如图3-4的清盘功能模块,界面出现9:全清。用户输入数9后自动系统清除所有的数据并返回。 图3-4清盘功能函数测试 3.5存盘功能函数测试 系统运行后就会自动显示如图3-5的存盘功能模块,界面出现0:存盘返回。 17 用户输入数0后系统自动保存所有的数据并返回。 图3-5存盘功能函数测试 3.6查询功能函数测试 系统运行后就会自动显示如图3-6的查询功能模块,界面出现1:找某人的 所有儿子 图3-6查询某人儿子功能函数测试 系统运行后就会自动显示如图 3-7的查询功能模块,界面出现2:找某人的 所有祖先 图3-7查询某人祖先功能函数测试 18