c语言亲戚计算器

#include<stdio.h>
#include<string.h>
#include<windows.h>
	//关系数值化
/*
	1.爷爷  2.奶奶  3.伯父  4.叔叔  5.姑母  6.姑姐  7.自己/兄弟  8.自己/姐妹 
	9.外公  10.外婆  11.大舅  12.小舅  13.大姨  14.小姨  15.哥哥  16.弟弟 
	17.侄子  18.侄女  19.姐姐  20.妹妹  21.外甥  22.外甥女  23.自己/老公  
	24.自己/老婆  25.孙子  26.孙女  27.外孙子  28.外孙女  29.儿子  30.女儿 31.无关系 
	32.爸爸 33.妈妈  
	
	34.曾祖父  35.曾祖母 36.伯祖父 37.叔祖父 38.姑婆 39.姑妈  40.曾外祖父 
	41.曾外祖母  42.舅公  43.姨婆  44.堂哥/堂弟  45.堂姐/堂妹  46. 叔叔/伯父 
	47.表哥/表弟  48.表姐/表妹  49.女儿/侄女 50.儿子/侄子  51.儿子/外甥  52.女儿/外甥女
	53.外曾祖父  54.外曾祖母  55.外伯祖父 56.外叔祖父 57.外姑祖父 58.舅舅 59.姨妈/妈妈 
	60.外曾外祖父 61.外曾外祖母 62.外舅公 63.外姨婆   64.姐姐/妹妹 65.哥哥  66.嫂子 
	67.侄孙 68.侄孙女 69.外侄孙 70.外侄孙女 71.姐夫 72.外甥孙 73.外甥孙女 74.妹夫 
	75.爸爸/公公 76.妈妈/婆婆 77.哥哥/大伯子 78.弟弟/小叔子 79.姐姐/大姑子 80.妹妹/小姑子 
	81.爸爸/岳父 82.妈妈/岳母 83.哥哥/大舅哥 84.弟弟/小舅子 85.姐姐/大姨子 86.妹妹/小姨子
	87.儿媳妇 88.曾孙 89.曾孙女 90.曾外孙 91.曾外孙女 92.女婿 93.外曾孙 94.外曾孙女 
	95.外曾外孙 96.外曾外孙女 	
*/ 

	//需要计算的关系集合 = {爸爸,妈妈,哥哥,弟弟,姐姐,妹妹,儿子,女儿} 
	//使用数字代表关系,方便计算
	char cal_relation[8][5] = {"爸爸","妈妈","哥哥","弟弟","姐姐","妹妹","儿子","女儿"};
	
	//全亲戚关系 
	char relation[96][15] = {
		"爷爷","奶奶","伯父","叔叔","姑母","姑姐","自己/兄弟","自己/姐妹","外公","外婆",
		"大舅","小舅","大姨","小姨","哥哥","弟弟","侄子","侄女","姐姐","妹妹",
		"无关系","外甥","外甥女","自己/老公","自己/老婆","孙子","孙女","外孙子","外孙女","儿子","女儿",
		"爸爸","妈妈","曾祖父","曾祖母","伯祖父 ","叔祖父","姑婆","姑妈","曾外祖父",
		"曾外祖母","舅公","姨婆","堂哥/堂弟","堂姐/堂妹","叔叔/伯父","表哥/表弟","表姐/表妹","女儿/侄女",
		"儿子/侄子","儿子/外甥","女儿/外甥女","外曾祖父","外曾祖母","外伯祖父","外叔祖父","外姑祖父","舅舅", 
		"姨妈/妈妈","外曾外祖父","外曾外祖母","外舅公","外姨婆","姐姐/妹妹","哥哥","嫂子","侄孙","侄孙女","外侄孙","外侄孙女","姐夫",
		"外甥孙","外甥孙女","妹夫","爸爸/公公","妈妈/婆婆","哥哥/大伯子","弟弟/小叔子","姐姐/大姑子","妹妹/小姑子",
		"爸爸/岳父","妈妈/岳母","哥哥/大舅哥","弟弟/小舅子","姐姐/大姨子","妹妹/小姨子","儿媳妇","曾孙","曾孙女",
		"曾外孙","曾外孙女","女婿","外曾孙","外曾孙女","外曾外孙","外曾外孙女"
		};
	
	//二代关系图
	int generation_two[8][8] = {
		{1 ,2 ,3 ,4 ,5 ,6 ,7 ,8},
		{9 ,10,11,12,13,14,7 ,8},
		{33,32,15,7 ,6 ,8 ,17,18},
		{33,32,7 ,16,8 ,20,17,18},
		{33,32,15,7 ,6 ,8 ,21,22},
		{33,32,7 ,16,8 ,20,21,22},
		{23,22,29,29,30,30,25,26},
		{23,22,29,29,30,30,27,28}
	}; 
	
	//三代关系图
	int generation_three[33][8] = {
	/*1*/	{34,35,36,37,38,38,32,39},
	/*2*/	{40,41,42,42,43,43,32,39},
	/*3*/	{1 ,2 ,3 ,32,5 ,39,44,45},
	/*4*/	{1 ,2 ,32,4 ,39,6 ,44,45},
	/*5*/	{1 ,2 ,3 ,46,5 ,39,47,48},
	/*6*/	{1 ,2 ,46,4 ,39,6 ,47,48},
	/*7*/	{32,33,15,16,19,20,50,49},
	/*8*/	{32,33,15,16,19,20,51,52},
	/*9*/	{53,54,55,56,57,57,58,59},
	/*10*/	{60,61,62,62,63,63,58,59},
	/*11*/	{9 ,10,11,58,13,59,47,48},
	/*12*/	{9 ,10,58,12,59,14,47,48},
	/*13*/	{9 ,10,11,58,13,59,47,48},
	/*14*/	{9 ,10,58,12,59,14,47,48},
	/*15*/  {32,33,7 ,7 ,64,64,50,49},
	/*16*/	{32,33,7 ,7 ,64,64,51,52},
	/*17*/	{65,66,17,17,18,18,67,68},
	/*18*/	{65,66,17,17,18,18,69,70},
	/*19*/	{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 },
	/*20*/	{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }, 
	/*21*/	{71,19,21,21,22,22,72,73},
	/*22*/	{74,20,21,21,22,22,72,73},
	/*23*/	{75,76,77,78,79,80,29,30},
	/*24*/	{81,82,83,84,85,86,29,30},
	/*25*/	{29,87,25,25,26,26,88,89},
	/*26*/	{29,87,25,25,26,26,90,91},
	/*27*/	{92,30,27,27,28,28,93,94},
	/*28*/	{92,30,27,27,28,28,95,96},
	};

char* two(char *relation1 ,char *relation2);
char* three(char *relation1 ,char *relation2, char *reletion3);

int main(void){

	int select = -1;
	
	//程序主循环
	while(1){
		if(select == -1){
			//清屏 
			system("cls");
			printf("****************\n");
			printf("请选择:\n\n");
			printf("0.退出    程序\n");
			printf("1.二代关系计算\n");
			printf("2.三代关系计算\n");
			printf("****************\n");
			scanf("%d",&select);
		}
		if(select == 1){
		printf("你可以输入以下关系:爸爸,妈妈,哥哥,姐姐,弟弟,妹妹,儿子,女儿\n"); 
		printf("请输入两个关系:");
		//接收文字的关系 
		char relation1[5],relation2[5];
		scanf("%s%s",relation1,relation2);
		
		//两代关系计算函数 
		char *result = two(relation1,relation2);
		if(result != NULL){
			printf("亲戚关系:");
			printf("%s\n\n",result);
		}else{
			printf("输入错误!\n");
		}
		//2秒以后清屏 
		Sleep(2000); 
		system("cls");
		//每次计算以后select置为-1,回到主循环第一句
		select = -1; 
		
	}else if(select == 2){
		//清屏 
		system("cls");
		printf("你可以输入以下关系:爸爸,妈妈,哥哥,姐姐,弟弟,妹妹,儿子,女儿\n"); 
		printf("请输入三个关系:");
		char relation1[5],relation2[5],relation3[5];
		scanf("%s%s%s",relation1,relation2,relation3);
		//三代关系计算函数 
		char *result = three(relation1,relation2,relation3);
		if(result != NULL){
			printf("亲戚关系:");
			printf("%s\n\n",result);
		}else{
			printf("输入错误!\n");
		}
		//2秒以后清屏 
		Sleep(2000); 
		system("cls");
		//每次计算以后select置为-1,回到主循环第一句
		select = -1; 
	}else if(select == 0){
		//选零退出 
		break;
	}else{
		
		printf("输入错误!\n");
		//2秒以后清屏 
		Sleep(2000); 
		system("cls");
		//每次计算以后select置为-1,回到主循环第一句
		select = -1; 
	}
} 
	
	return 0;
} 




char* two(char *relation1,char *relation2){
	//存储数值化的关系 
	int r1,r2;	
	for(int i = 0; i < 8; i++){
		if(!strcmp(relation1, cal_relation[i])){
			r1 = i;
		}
		if(!strcmp(relation2, cal_relation[i])){
			r2 = i;
		}
	}
	//只有r1,r2都小于8才代表找到了 
	if(r1 < 8 && r2 < 8){
		return relation[generation_two[r1][r2] - 1];
	}else{
		return NULL;
	} 
	
}

char *three(char *relation1,char *relation2,char *relation3){	
	//存储数值化的关系 
	int r1,r2;
	char *relation_two = two(relation1,relation2);	
	
	
	int i,j;
	for(i = 0; i < 96; i++){
		if(!strcmp(relation[i], relation_two)){
			r1 = i;
			break;
		}
	} 
	
	for(j = 0; j < 8; j++){
		if(!strcmp(relation3, cal_relation[j])){
			r2 = j;
			break;
		}
	}
	
	//printf("(%d,%d)",r1,r2);
	if(i < 96 && j < 8){
		return relation[generation_three[r1][r2] - 1];
	} else{
		return NULL;
	}

}

猜你喜欢

转载自blog.csdn.net/qq_40238526/article/details/92145057