c语言家谱管理系统(包含文件导入导出)

这是该系统的组成模块:
整个模块的组成

void Menu()
{
	printf("\n\t\t------------------家谱管理系统-----------------\n\n");  //说明该代码的实现功能
	printf("\t\t* * * * * * * * * * * * * * * * * * * * * * *\n");
	printf("\t\t*                                           *\n");
	printf("\t\t*         家谱信息管理菜单                  *\n");
	printf("\t\t*                                           *\n");
	printf("\t\t*          1:创建家谱(祖先)               *\n");
	printf("\t\t*          2:添加新的家庭成员               *\n");
	printf("\t\t*          3:修改某个人的信息               *\n");
	printf("\t\t*          4:删除名为name的成员             *\n");
	printf("\t\t*          5:输出整个家谱信息               *\n");
	printf("\t\t*          6:查找某个人的信息               *\n");
	printf("\t\t*          7:从文件中导入                   *\n");
	printf("\t\t*          8:保存进文件                     *\n");
	printf("\t\t*          9:统计家谱信息                   *\n");
	printf("\t\t*          0:退出整个程序                   *\n");
	printf("\t\t*                                           *\n");
	printf("\t\t* * * * * * * * * * * * * * * * * * * * * * *\n");
}

这是该系统的界面:
在这里插入图片描述

void input_file(PedTree Tree) {		//导入文件
	FILE* fp;
	int i = 0;
	fp = fopen("C:/Users/jkl13/Desktop/家谱1.txt", "r");
	if (fp == NULL)
	{
		printf("can not open file\n");
		exit(0);
	}
	while (i < Maxx) {
		fscanf(fp, "%d%s%d%d%d%s%s%d\n", &node[i].num, &node[i].name, &node[i].sex, &node[i].birthday,
			&node[i].death_day, &node[i].education, &node[i].work, &node[i].dai);
		if (node[i].death_day != 0) {
			all_life_expe += int((node[i].death_day - node[i].birthday) / 10000);
			com_peo++;
		}	//死亡日期减出生日期/10000得到寿命长度
		if (node[i].sex == 1) {
			man++;
		}
		else if (node[i].sex == -1)
		{
			woman++;
		}
		i++;
	}
	fclose(fp);
	CreatePedTree(Tree, 0);
}

这是他的读取和显示,这里是通过孩子数量(第一个)和排列顺序读取的,后面的代数没什么用,不过也不能去掉,可以自己照着改一下就行,建议改成以父母名字为寻找方向去读取,不过因为我比较忙,而且作业也过了,所以就没有继续优化了
在这里插入图片描述

void output_file(PedTree Tree) {		//导入文件
	FILE* fp;
	if ((fp = fopen("C:/Users/jkl13/Desktop/家谱.txt", "a")) == NULL) {
		printf("cannot open file\n");
		return;
	}
	_output_file(Tree, fp);
	printf("保存成功!\n");
	fflush(stdin);//清除键盘缓冲区 
	printf("\n\t\t按任意键继续:");
	getch();
	fclose(fp);
	fp = NULL;
	free(fp);
}

这是删除和保存
在这里插入图片描述

void FindInfor(PedTree Tree)//查找名字为name的成员
{
	fflush(stdin);//清除键盘缓冲区 
	system("cls");
	char Name[20];
	char choice;// 
	int tempch;
	char TempName[20];
	char TempData[20];
	int n;
	PedTree TempTree;
	printf("\n\t\t请输入要查找人的姓名:");
	scanf("%s", Name);
	if (SearchPedTree(Tree, Name, &TempTree))
	{
		//PedTree TempParent = TempTree->parent;
		system("cls");
		printf("\n\t\t----****---***---查找人的信息---***----****-----");
		printf("\n\t\t查找人的姓名:%s\n\t\t", TempTree->data.name);
		printf("\n\t\t查找人的性别:%d\n\t\t", TempTree->data.sex);
		printf("\n\t\t查找人的出生日期:%d\n\t\t", TempTree->data.birthday);
		printf("\n\t\t查找人的死亡日期:%d\n\t\t", TempTree->data.death_day);
		printf("\n\t\t查找人的学历:%s\n\t\t", TempTree->data.education);
		printf("\n\t\t查找人的工作:%s\n\t\t", TempTree->data.work);
		printf("\n\t\t----****---***---信息展示完毕---***----****-----");
		fflush(stdin);//清除键盘缓冲区 
		printf("\n\t\t按任意键继续:");
		getch();
	}
	else {
		printf("\n\t\t找不到你要查找的人!\n");
		fflush(stdin);//清除键盘缓冲区 
		printf("\n\t\t按任意键继续:");
		getch();
	}
}

这是查找和显示
在这里插入图片描述

void ChangeInfor(PedTree Tree)//修改家谱信息 
{
	fflush(stdin);//清除键盘缓冲区 
	system("cls");
	char Name[20];
	char choice;// 
	int tempch;
	char TempName[20];
	int TempData1;
	int TempData2;
	char TempData3[20];
	char TempData4[20];
	PedTree TempTree;
	printf("\n\t\t请输入要修改人的姓名:");
	scanf("%s", Name);
	if (SearchPedTree(Tree, Name, &TempTree))
	{
		PedTree TempParent = TempTree->parent;
		fflush(stdin);//清除键盘缓冲区 
		system("cls");
		printf("\n\t\t请输入要修改人的姓名:(不需要修改输入0)\n\t\t");
		scanf("%s", TempName);
		if (strcmp(TempName, "0") != 0)
			strcpy(TempTree->data.name, TempName);
		fflush(stdin);//清除键盘缓冲区
		printf("\n\t\t请输入要修改人的性别:(1男,-1女)\n\t\t");
		scanf("%d", &tempch);
		if (tempch != '0')
			TempTree->data.sex = tempch;
		if (Tree->data.sex == 1) {
			man++;
			woman--;
		}
		else if (Tree->data.sex == -1)
		{
			woman++;
			man--;
		}
		fflush(stdin);//清除键盘缓冲区 
		printf("\n\t\t请输入要修改人的出生日期:(不需要修改输入0)\n\t\t");
		scanf("%d", &TempData1);
		if (TempData1 != 0)
			TempTree->data.birthday = TempData1;
		printf("\n\t\t请输入要修改人的死亡日期:(不需要修改输入0)\n\t\t");
		scanf("%d", &TempData2);
		if (TempData2 != 0)
			TempTree->data.death_day = TempData2;
		printf("\n\t\t请输入要修改人的学历:(不需要修改输入0)\n\t\t");
		scanf("%s", TempData3);
		if (strcmp(TempData3, "0") != 0)
			strcpy(TempTree->data.education, TempData3);
		fflush(stdin);//清除键盘缓冲区	
		printf("\n\t\t请输入要修改人的工作:(不需要修改输入0)\n\t\t");
		scanf("%s", TempData4);
		if (strcmp(TempData4, "0") != 0)
			strcpy(TempTree->data.work, TempData4);
		printf("\n\t\t----****---***---信息修改成功---***----****-----");
		fflush(stdin);//清除键盘缓冲区 
		printf("\n\t\t按任意键继续:");
		getch();
	}
	else
		printf("\n\t\t找不到你要查找的人!\n");
	fflush(stdin);//清除键盘缓冲区 
	printf("\n\t\t按任意键继续:");
	getch();
}

修改信息
在这里插入图片描述本来想做一下MFC项目的,可是没时间了,而且过了,也就没有做了。
这是我参考的博客,我在他的代码上进行了一些修改,加了几个功能,和修改了一些逻辑,满足我的作业需求。
这是本人写的代码,放github上了,进去可能有点慢,要是你有科学上网工具当我没说

  • 20
    点赞
  • 153
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值