多功能日期查询小工具

#include <stdio.h>

//规定:每年2月的最后一天为末日 
 
struct date
{
	int i;//天干 : 甲乙丙丁戊己庚辛壬癸 
	int j;//地支 : 子丑寅卯辰巳午未申酉戌亥 
	int year;
	int month;
	int day;
	int week;//对应日期是星期几  取值为【0,6】 
	int animal_sign;//生肖
	int zodiac;//星座(十二宫)
};

bool is_leap_year(int year)//判断是否为闰年; 闰年分为普通闰年(是4的倍数但不能被100整除)和世纪闰年(能被100整除而且必须能被400整除)
{
	if(year%100 == 0)
	{
		if(year%400 == 0)
			return true;
		else
			return false;
	}
	else
	{
		if(year%4 == 0)
			return true;
		else
			return false;
	}
}

void printf_week(int week)
{
	switch(week)
	{
		case 0: printf("Suanday\n"); break;
		case 1: printf("Monday\n"); break;
		case 2: printf("Tuesday\n"); break;
		case 3: printf("Wednesday\n"); break;
		case 4: printf("Thursday\n");  break;
		case 5: printf("Friday\n"); break;
		case 6: printf("Saturday\n"); break;
	}
	return;
}

void printf_animal_sign(date d, date standard_date, int k)
{
	int i = standard_date.i, j = standard_date.j;
	if(d.year >= standard_date.year)
	{
		for(int n = 0; n < k; n++)
		{
			i++;
			if(i == 11)
			{
				i = 1;
			}
			j++;
			if(j == 13)
			{
				j = 1;
			}
		}
	}
	else
	{
		for(int n = 0; n < k; n++)
		{
			i--;
			if(i == 0)
			{
				i = 10; 
			}
			j--;
			if(j == 0)
			{
				j = 12;
			}
		}
	}
	switch(i)
	{
		case 1: printf("甲"); break;
		case 2: printf("已"); break;
		case 3: printf("丙"); break;
		case 4: printf("丁"); break;
		case 5: printf("戊"); break;
		case 6: printf("己"); break;
		case 7: printf("庚"); break;
		case 8: printf("辛"); break;
		case 9: printf("壬"); break;
		case 10: printf("癸"); break;
	}
	switch(j)
	{
		case 1: printf("子"); break;
		case 2: printf("丑"); break;
		case 3: printf("寅"); break;
		case 4: printf("卯"); break;
		case 5: printf("辰"); break;
		case 6: printf("巳"); break;
		case 7: printf("午"); break;
		case 8: printf("未"); break;
		case 9: printf("申"); break;
		case 10: printf("酉"); break;
		case 11: printf("戌"); break;
		case 12: printf("亥"); break;
	}
	switch(d.animal_sign)
	{
		case 1: printf("鼠年--Your animal sign is rat\n"); break;
		case 2: printf("牛年--Your animal sign is ox\n"); break;
		case 3: printf("虎年--Your animal sign is tiger\n"); break;
		case 4: printf("兔年--Your animal sign is rabbit\n"); break;
		case 5: printf("龙年--Your animal sign is dragon\n"); break;
		case 6: printf("蛇年--Your animal sign is snake\n"); break;
		case 7: printf("马年--Your animal sign is horse\n"); break;
		case 8: printf("羊年--Your animal sign is goat\n"); break;
		case 9: printf("猴年--Your animal sign is monkey\n"); break;
		case 10: printf("鸡年--Your animal sign is rooster\n"); break;
		case 11: printf("狗年--Your animal sign is dog\n"); break;
		case 12: printf("猪年--Your animal sign is pig\n"); break;
	}
}

void printf_zodiac(date d)
{
	switch(d.month)
	{
		case 1:
			if(d.day <= 19)
			{
				printf("星  座:摩羯座			守护星:土星\n");
				printf("守护神:农神萨图恩		关键词:现实\n");
				printf("象 征:山羊			四象性:土\n");
				printf("掌管宫位:第十官禄宫		阴阳性:阴性\n");
				printf("最大特征:实际			三方官:基本\n");
				printf("幸运石:绿宝石			金 属:银\n");
				printf("--------------物质之宫擢升行星--------------\n");
				printf("火星黄道带时间:约12月22日--01月19日(冬至--大寒前一天)\n");
			}
			else
			{
				printf("星  座:水瓶座			守护星:天王星\n");
				printf("守护神:乌拉诺斯			关键词:若即若离\n");
				printf("象 征:水瓶			四象性:风\n");
				printf("掌管宫位:第十一福德宫		阴阳性:阳性\n");
				printf("最大特征:求知			三方官:固定\n");
				printf("幸运石:红色石榴石		金 属:蛋白石\n");
				printf("--------------关系之宫擢升行星--------------\n");
				printf("水星黄道带时间:约01月20日--02月18日(大寒--雨水前一天)\n");
			}
			break;
		case 2:
			if(d.day <= 18)
			{
				printf("星  座:水瓶座			守护星:天王星\n");
				printf("守护神:乌拉诺斯			关键词:若即若离\n");
				printf("象 征:水瓶			四象性:风\n");
				printf("掌管宫位:第十一福德宫		阴阳性:阳性\n");
				printf("最大特征:求知			三方官:固定\n");
				printf("幸运石:红色石榴石		金 属:蛋白石\n");
				printf("--------------关系之宫擢升行星--------------\n");
				printf("水星黄道带时间:约01月20日--02月18日(大寒--雨水前一天)\n");
			}
			else
			{
				printf("星  座:双鱼座			守护星:海王星\n");
				printf("守护神:海神波塞冬		关键词:难拒绝人\n");
				printf("象 征:鱼			四象性:水\n");
				printf("掌管宫位:第十二玄秘宫		阴阳性:阴性\n");
				printf("最大特征:滥情			三方官:变动\n");
				printf("幸运石:猫眼石			金 属:铜\n");
				printf("--------------结束之宫擢升行星--------------\n");
				printf("金星黄道带时间:约02月19日--03月20日(雨水--春分前一天)\n");
			}
			break;
		case 3:
			if(d.day <= 20)
			{
				printf("星  座:双鱼座			守护星:海王星\n");
				printf("守护神:海神波塞冬		关键词:难拒绝人\n");
				printf("象 征:鱼			四象性:水\n");
				printf("掌管宫位:第十二玄秘宫		阴阳性:阴性\n");
				printf("最大特征:滥情			三方官:变动\n");
				printf("幸运石:猫眼石			金 属:铜\n");
				printf("--------------结束之宫擢升行星--------------\n");
				printf("金星黄道带时间:约02月19日--03月20日(雨水--春分前一天)\n");
			}
			else
			{
				printf("星  座:白羊座			守护星:火星\n");
				printf("守护神:战神阿瑞斯		关键词:直白\n");
				printf("象  征:公羊			四象性:火\n");
				printf("掌管宫位:第一命宫		阴阳性:阳性\n");
				printf("最大特征:控制			三方官:基本\n");
				printf("幸运石:红宝石			金 属:铁\n");
				printf("--------------生命之宫擢升行星--------------\n");
				printf("太阳黄道带时间:约03月21日--04月19日(春分--谷雨前一天)\n");
			}
			break;
		case 4:
			if(d.day <= 19)
			{
				printf("星  座:白羊座			守护星:火星\n");
				printf("守护神:战神阿瑞斯		关键词:直白\n");
				printf("象  征:公羊			四象性:火\n");
				printf("掌管宫位:第一命宫		阴阳性:阳性\n");
				printf("最大特征:控制			三方官:基本\n");
				printf("幸运石:红宝石			金 属:铁\n");
				printf("--------------生命之宫擢升行星--------------\n");
				printf("太阳黄道带时间:约03月21日--04月19日(春分--谷雨前一天)\n");
			}
			else
			{
				printf("星  座:金牛座			守护星:金星\n");
				printf("守护神:爱神维纳斯		关键词:内敛\n");
				printf("象  征:公牛			四象性:土\n");
				printf("掌管宫位:第二财帛宫		阴阳性:阴性\n");
				printf("最大特征:沉稳			三方官:固定\n");
				printf("幸运石:翡翠、玉		金 属:木\n");
				printf("--------------物质之宫擢升行星--------------\n");
				printf("月亮黄道带时间:约04月20日--05月20日(谷雨--小满前一天)\n");
			}
			break;
		case 5:
			if(d.day <= 20)
			{
				printf("星  座:金牛座			守护星:金星\n");
				printf("守护神:爱神维纳斯		关键词:内敛\n");
				printf("象  征:公牛			四象性:土\n");
				printf("掌管宫位:第二财帛宫		阴阳性:阴性\n");
				printf("最大特征:沉稳			三方官:固定\n");
				printf("幸运石:翡翠、玉		金 属:木\n");
				printf("--------------物质之宫擢升行星--------------\n");
				printf("月亮黄道带时间:约04月20日--05月20日(谷雨--小满前一天)\n");
			}
			else
			{
				printf("星  座:双子座			守护星:水星\n");
				printf("守护神:智神赫尔墨斯		关键词:自由\n");
				printf("象 征:孪生子			四象性:风\n");
				printf("掌管宫位:第三兄弟宫		阴阳性:阳性\n");
				printf("最大特征:思想			三方官:变动\n");
				printf("幸运石:祖母绿			金 属:水银\n");
				printf("--------------关系之宫擢升行星--------------\n");
				printf("约05月21日--06月21日(小满--夏至前一天)\n");
			}
			break;
		case 6:
			if(d.day <= 21)
			{
				printf("星  座:双子座			守护星:水星\n");
				printf("守护神:智神赫尔墨斯		关键词:自由\n");
				printf("象 征:孪生子			四象性:风\n");
				printf("掌管宫位:第三兄弟宫		阴阳性:阳性\n");
				printf("最大特征:思想			三方官:变动\n");
				printf("幸运石:祖母绿			金 属:水银\n");
				printf("--------------关系之宫擢升行星--------------\n");
				printf("约05月21日--06月21日(小满--夏至前一天)\n");
			}
			else
			{
				printf("星  座:巨蟹座			守护星:月亮\n");
				printf("守护神:阿尔忒弥斯		关键词:家庭\n");
				printf("象 征:蟹			四象性:水\n");
				printf("掌管宫位:第四田宅宫		阴阳性:阴性\n");
				printf("最大特征:感觉			三方官:基本\n");
				printf("幸运石:珍珠			金 属:金\n");
				printf("--------------结束之宫擢升行星--------------\n");
				printf("木星及海王星黄道带时间:约06月22日--07月22日(夏至--大暑前一天)\n");
			}
			break;
		case 7:
			if(d.day <= 22)
			{
				printf("星  座:巨蟹座			守护星:月亮\n");
				printf("守护神:阿尔忒弥斯		关键词:家庭\n");
				printf("象 征:蟹			四象性:水\n");
				printf("掌管宫位:第四田宅宫		阴阳性:阴性\n");
				printf("最大特征:感觉			三方官:基本\n");
				printf("幸运石:珍珠			金 属:金\n");
				printf("--------------结束之宫擢升行星--------------\n");
				printf("木星及海王星黄道带时间:约06月22日--07月22日(夏至--大暑前一天)\n");
			}
			else
			{
				printf("星  座:狮子座			守护星:太阳\n");
				printf("守护神:光明神阿波罗		关键词:物质\n");
				printf("象  征:狮子			四象性:火\n");
				printf("掌管宫位:第五子女宫		阴阳性:阳性\n");
				printf("最大特征:权力			三方官:固定\n");
				printf("幸运石:红宝石			金 属:黄金\n");
				printf("--------------生命之宫擢升行星--------------\n");
				printf("冥王星黄道带时间:约07月23日--08月22日(大暑--处暑前一天)\n");
			}
			break;
		case 8:
			if(d.day <= 22)
			{
				printf("星  座:狮子座			守护星:太阳\n");
				printf("守护神:光明神阿波罗		关键词:物质\n");
				printf("象  征:狮子			四象性:火\n");
				printf("掌管宫位:第五子女宫		阴阳性:阳性\n");
				printf("最大特征:权力			三方官:固定\n");
				printf("幸运石:红宝石			金 属:黄金\n");
				printf("--------------生命之宫擢升行星--------------\n");
				printf("冥王星黄道带时间:约07月23日--08月22日(大暑--处暑前一天)\n");
			}
			else
			{
				printf("星  座:处女座			守护星:水星\n");
				printf("守护神:艾斯特莱雅			关键词:挑剔\n");
				printf("象 征:处女			四象性:土\n");
				printf("掌管宫位:第六奴仆宫		阴阳性:阴性\n");
				printf("最大特征:分析力		三方官:变动\n");
				printf("幸运石:蓝宝石			金 属:水银\n");
				printf("--------------物质之宫黄道带时间--------------\n");
				printf("约08月23日--09月23日(处暑--秋分前一天)\n");
			}
			break;
		case 9:
			if(d.day <= 22)
			{
				printf("星  座:处女座			守护星:水星\n");
				printf("守护神:艾斯特莱雅		关键词:挑剔\n");
				printf("象 征:处女			四象性:土\n");
				printf("掌管宫位:第六奴仆宫		阴阳性:阴性\n");
				printf("最大特征:分析力		三方官:变动\n");
				printf("幸运石:蓝宝石			金 属:水银\n");
				printf("--------------物质之宫黄道带时间--------------\n");
				printf("约08月23日--09月23日(处暑--秋分前一天)\n");
			}
			else
			{
				printf("星  座:天秤座			守护星:金星\n");
				printf("守护神:阿佛洛狄忒		关键词:公平\n");
				printf("象 征:天秤			四象性:风\n");
				printf("掌管宫位:第七夫妻宫		阴阳性:阳性\n");
				printf("最大特征:衡量抉择		三方官:基本\n");
				printf("幸运石:橄榄石			金 属:木\n");
				printf("--------------关系之宫擢升行星--------------\n");
				printf("土星黄道带时间:约09月24日--10月23日(秋分--霜降前一天)\n");
			}
			break;
		case 10:
			if(d.day <= 23)
			{
				printf("星  座:天秤座			守护星:金星\n");
				printf("守护神:阿佛洛狄忒		关键词:公平\n");
				printf("象 征:天秤			四象性:风\n");
				printf("掌管宫位:第七夫妻宫		阴阳性:阳性\n");
				printf("最大特征:衡量抉择		三方官:基本\n");
				printf("幸运石:橄榄石			金 属:木\n");
				printf("--------------关系之宫擢升行星--------------\n");
				printf("土星黄道带时间:约09月24日--10月23日(秋分--霜降前一天)\n");
			}
			else
			{
				printf("星  座:天蝎座			守护星:冥王星\n");
				printf("守护神:冥王哈迪斯		关键词:神秘\n");
				printf("象 征:蝎子			四象性:水\n");
				printf("掌管宫位:第八疾厄宫		阴阳性:阴性\n");
				printf("最大特征:渴望			三方官:固定\n");
				printf("幸运石:猫眼石			金 属:铁\n");
				printf("--------------结束之宫擢升行星--------------\n");
				printf("天王星黄道带时间:约10月24日--11月22日(霜降--小雪前一天)\n");
			}
			break;
		case 11:
			if(d.day <= 22)
			{
				printf("星  座:天蝎座			守护星:冥王星\n");
				printf("守护神:冥王哈迪斯		关键词:神秘\n");
				printf("象 征:蝎子			四象性:水\n");
				printf("掌管宫位:第八疾厄宫		阴阳性:阴性\n");
				printf("最大特征:渴望			三方官:固定\n");
				printf("幸运石:猫眼石			金 属:铁\n");
				printf("--------------结束之宫擢升行星--------------\n");
				printf("天王星黄道带时间:约10月24日--11月22日(霜降--小雪前一天)\n");
			}
			else
			{
				printf("星  座:射手座			守护星:木星\n");
				printf("守护神:众神之王宙斯		关键词:贪玩\n");
				printf("象 征:人马			四象性:火\n");
				printf("掌管宫位:第九迁移宫		阴阳性:阳性\n");
				printf("最大特征:自由			三方官:变动\n");
				printf("幸运石:绿松石			金 属:锡\n");
				printf("--------------生命之宫黄道带时间--------------\n");
				printf("约11月23日--12月21日(小雪--冬至前一天)\n");
			}
			break;
		case 12:
			if(d.day <= 21)
			{
				printf("星  座:射手座			守护星:木星\n");
				printf("守护神:众神之王宙斯		关键词:贪玩\n");
				printf("象 征:人马			四象性:火\n");
				printf("掌管宫位:第九迁移宫		阴阳性:阳性\n");
				printf("最大特征:自由			三方官:变动\n");
				printf("幸运石:绿松石			金 属:锡\n");
				printf("--------------生命之宫黄道带时间--------------\n");
				printf("约11月23日--12月21日(小雪--冬至前一天)\n");
			}
			else
			{
				printf("星  座:摩羯座			守护星:土星\n");
				printf("守护神:农神萨图恩		关键词:现实\n");
				printf("象 征:山羊			四象性:土\n");
				printf("掌管宫位:第十官禄宫		阴阳性:阴性\n");
				printf("最大特征:实际			三方官:基本\n");
				printf("幸运石:绿宝石			金 属:银\n");
				printf("--------------物质之宫擢升行星--------------\n");
				printf("火星黄道带时间:约12月22日--01月19日(冬至--大寒前一天)\n");
			}
			break;
	}
}

int main()
{
	printf("请输入日期\n格式形如:年/月/日\n"); 
	int n = 0;//闰年计数器 
	int m = 0;//两日期相隔的天数(只计月日)
	int k = 0;//两年份相差年数 
	struct date standard_date = {6, 12, 2019, 2, 28, 4, 12, 12};
	struct date d;
	scanf("%d/%d/%d", &d.year, &d.month, &d.day);
	if(d.year <= standard_date.year/*所求年份在标准年份(人为规定)之前*/)//找闰年的年数 
	{
		for(int i = d.year+1; i > d.year && i <= standard_date.year; i++)
		{
			if(is_leap_year(i))
				n++;
		}
		n = n + (standard_date.year - d.year);
		n = n % 7;
		if(n > standard_date.week)//得到所求年份的末日是星期几
		{
			d.week = standard_date.week + 7 - n;
			printf("The end day of the desired year is ");
			printf_week(d.week);
		}
		else
		{
			d.week = standard_date.week - n;
			printf("The end day of the desired year is ");
			printf_week(d.week);
		}
		k = standard_date.year - d.year;
		k %= 12;//得到 k 的有效值 
		d.animal_sign = standard_date.animal_sign - k;
		if(d.animal_sign <= 0)
		{
			d.animal_sign += 12;
		}
	}
	
	else
	{
		for(int i = standard_date.year+1; i > standard_date.year && i <= d.year; i++)
		{
			if(is_leap_year(i));
				n++;
		}
		n = n + (d.year - standard_date.year);
		n = n % 7;
		if(n < (7 - standard_date.week))//得到所求年份的末日是星期几
		{
			d.week = standard_date.week + n;
			printf("The end day of the desired year is ");
			printf_week(d.week);
		}
		else
		{
			d.week = standard_date.week + n - 7;
			printf("The end day of the desired year is ");
			printf_week(d.week);
		}
		k = standard_date.year - d.year;
		k %= 12;//得到 k 的有效值 
		d.animal_sign = standard_date.animal_sign + k;
		if(d.animal_sign > 12)
		{
			d.animal_sign -= 12;
		}
	}
	switch(d.month)//得到两日期相隔天数 
	{
		case 1: 
		if(is_leap_year(d.year))
		{
			m = 31 - d.day + 29;
		}
		else
		{
			m = 31 - d.day + 28;
		}
		break;
		case 2:
		if(is_leap_year(d.year))
		{
			m = 29 - d.day;
		}
		else
		{
			m = 28 - d.day;
		} 
		break;
		case 3: m = d.day; break;
		case 4: m = d.day + 31; break;
		case 5: m = d.day + 61; break;
		case 6: m = d.day + 92; break;
		case 7: m = d.day + 122; break;
		case 8: m = d.day + 153; break;
		case 9: m = d.day + 184; break;
		case 10: m = d.day + 214; break;
		case 11: m = d.day + 245; break;
		case 12: m = d.day + 275; break;
	}
	m = m % 7;
	if(d.month != 1 && d.month != 2)
	{
		if(m < (7 - d.week))//得到所求日期是星期几
		{
			d.week = d.week + m;
		}
		else
		{
			d.week = d.week + m - 7;
		}
	}
	else
	{
		if(m <= d.week)
		{
			d.week = d.week - m;
		}
		else
		{
			d.week = d.week - m + 7;
		}
	}
	printf("It's ");
	printf_week(d.week);//输出星期几 
	printf_animal_sign(d, standard_date, k);//输出生肖 
	printf_zodiac(d);//输出星座及性格 
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值