⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 td.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <string.h>
#include <math.h>
//#include "windows.h"
#include "stdio.h"
#include "Td.h"

int FirstWeek=2;//表示1980/1/1是星期2
int FirstLunar=68;

char solar_text[24][7]=
{
   "\x80\x5c\x0f\x5b\xd2\x00\x00","\x80\x59\x27\x5b\xd2\x00\x00","\x80\x7a\xcb\x66\x25\x00\x00",//"小寒","大寒","立春"
   "\x80\x96\xe8\x6c\x34\x00\x00","\x80\x60\xca\x86\xf0\x00\x00","\x80\x66\x25\x52\x06\x00\x00",//"雨水","惊蛰","春分"
   "\x80\x6e\x05\x66\x0e\x00\x00","\x80\x8c\x37\x96\xe8\x00\x00","\x80\x7a\xcb\x59\x0f\x00\x00",//"清明","谷雨","立夏"
   "\x80\x5c\x0f\x6e\xe1\x00\x00","\x80\x82\x92\x79\xcd\x00\x00","\x80\x59\x0f\x81\xf3\x00\x00",//"小满","芒种","夏至"
   "\x80\x5c\x0f\x66\x91\x00\x00","\x80\x59\x27\x66\x91\x00\x00","\x80\x7a\xcb\x79\xcb\x00\x00",//"小暑","大暑","立秋"
   "\x80\x59\x04\x66\x91\x00\x00","\x80\x76\x7d\x97\x32\x00\x00","\x80\x79\xcb\x52\x06\x00\x00",//"处暑","白露","秋分"
   "\x80\x5b\xd2\x97\x32\x00\x00","\x80\x97\x1c\x96\x4d\x00\x00","\x80\x7a\xcb\x51\xac\x00\x00",//"寒露","霜降","立冬"
   "\x80\x5c\x0f\x96\xea\x00\x00","\x80\x59\x27\x96\xea\x00\x00","\x80\x7a\xcb\x51\xac\x00\x00"//"小雪","大雪","冬至"
};

char gold[10][3]=
{
   "\x80\x75\x32","\x80\x4e\x59","\x80\x4e\x19","\x80\x4e\x01",//"甲","乙","丙","丁"
   "\x80\x62\x0a","\x80\x5d\xf1","\x80\x5e\x9a","\x80\x8f\x9b",//"戊","己","庚","辛"
   "\x80\x58\xec","\x80\x76\x78"//"壬","癸"
};

char  land[12][2]=
{
   "\x5b\x50","\x4e\x11","\x5b\xc5","\x53\x6f",//"子","丑","寅","卯"
   "\x8f\xb0","\x5d\xf3","\x53\x48","\x67\x2a",//"辰","巳","午","未"
   "\x75\x33","\x91\x49","\x62\x0c","\x4e\xa5"//"申","酉","戌","亥
};



short GetWeek(int ys,short ms, short ds);
int CountDays( int ys,short ms, short ds );
void  GetMonthTable(TIMEDATE * base_time,int month_range,int day_range,MONTHTABLE * ThisMonth);
void GetLunarYear(int year,short month,short l_m1,char *LunarYear);
void GetTimeDate(int year,short month,short day,TIMEDATE *today);
void GetNextWeek(week_date * today, int week_range,week_date * next);
void GetNextMinute(date_time_minute * today, int minute_range, date_time_minute * next);



/*void main(void)
{
//	UINT16 year;int i_month,i_day;
   UINT8 day; //month,
//	char l_y[20];
   MONTHTABLE month;
   TIMEDATE today1;
   today1.year=1995;
   today1.month=2;
   today1.day=1;
   month=GetMonthTable(today1,0,1);
   today1.month++;
   month=GetMonthTable(today1,1,0);
   
   /*
   printf("\nInput year:");
   scanf("%d",&year);
   printf("\nInput month:");
   scanf("%d",&i_month);
   printf("\nInput day:");
   scanf("%d",&i_day);
   month=i_month;
   day=i_day;
   GetWeek(year,month,day);
   */
//	GetLunarYear(2005,2,0,0,l_y);
/*	today1=GetTimeDate(1995,2,18);
   today1=GetTimeDate(1995,12,5);
   scanf("%d",&day);
}*/
int a;

/* 2003.11.5 wyj 检查查表越界 */
void  GetTimeDate(int year,short month,short day,TIMEDATE *today)//,TIMEDATE today)
{
	int index;short l_firstday,i,j,l_day,leap=0,change_day=0;
	int p_year;short p_month;
	short l_month;
	char LunarYear[20];
	
	//2003.10.20 wyj 加入
	memset(LunarYear, 0, sizeof(LunarYear));
	
	//memset(&today,0,sizeof(TIMEDATE));
	today->year=year;
	today->month=month;
	today->day=day;
	today->week=GetWeek(year,month,day);   //计算星期几
		
	//get lunar month of pre month
	/* 2003.11.5 wyj 检查查表越界 */
	if(year>=1980 && year<=2031)
	{
		p_year=year;
		p_month=month-1;
		if (p_month<1)
		{
			p_year--;
			p_month=12;
		}
		if (p_year<1980)
		{
			l_month=11;
			leap=0;
		} else
		{
			index=(p_year-1980)*12+p_month-1;
			l_month=LunarIndex[index].lmonth;
			if (l_month==0)
			{
				l_month=1;
				leap=0;
			} else
			{
				if (LunarIndex[index-1].lmonth==l_month)
					leap=1;
				for (i=0;i<30;i++)
				{
					if ((p_year%100)==LunarIndexEx[i].year&&p_month==LunarIndexEx[i].month)
					{
						if (LunarIndexEx[i].lmonth==l_month)
							leap=1;
						else
						{
							leap=0;
							l_month=LunarIndexEx[i].lmonth;
						}
						break;
					}
				}
			}
		}
		
		//get l_month and l_day
		for (i=0;i<30;i++)
		{
			if ((year%100)==LunarIndexEx[i].year&&month==LunarIndexEx[i].month)
			{
				j=i;
				change_day=LunarIndexEx[i].day;
				break;
			}
		}
		index=(year-1980)*12+month-1;
		l_firstday=FirstDay[index];//the first day in lunar of this month
		l_day=l_firstday;
		//if the first day is changeday
		if (LunarIndex[index].day==1)
		{
			if (LunarIndex[index].lmonth==l_month)
				leap=1;
			else
			{
				l_month=LunarIndex[index].lmonth;
				leap=0;
			}
		}
		//get the l_day and l_month
		for (i=2;i<=day;i++)
		{
			if (i==LunarIndex[index].day)
			{
				if (LunarIndex[index].lmonth==l_month)
					leap=1;
				else
				{
					l_month=LunarIndex[index].lmonth;
					leap=0;
				}
				l_day=1;
			}
			
			else if (day==change_day)
			{
				if (LunarIndexEx[j].lmonth==l_month)
					leap=1;
				else
				{
					leap=0;
					l_month=LunarIndexEx[j].lmonth;
				}
			} else
				l_day++;
		}
		today->l_day=l_day;
	}//end of if(year>=1980 && year<=2031)
	
	sprintf(today->timetxt,"%4d-%2d-%2d,\n",year,month,day);

	if(year>=1980 && year<=2031)
	{
		GetLunarYear(year,month,l_month,LunarYear);	
		strcpy(today->l_year,(char*)LunarYear);
		strcat(today->timetxt,LunarYear);
	}
	memset((char *)today->holiday_txt,0,sizeof(today->holiday_txt));
	memset((char *)today->holidayl_txt,0,sizeof(today->holidayl_txt));
	for (i=0;i<12;i++)
	{
		if (Holiday[i].month==month&&Holiday[i].day==day)
			strcpy(today->holiday_txt,Holiday[i].text);
	}
	/* 2003.11.5 wyj 检查查表越界 */
	if(year>=1980 && year<=2031)
	{
		for (i=0;i<6;i++)
		{
			if (HolidayL[i].month==l_month&&HolidayL[i].day==l_day)
				strcpy(today->holidayl_txt,HolidayL[i].text);
			
		}
		a=leap;
		today->l_month=leap*16+l_month;
	}
	return ;
	
}
/* 2003.11.5 wyj 检查查表越界 */
void GetMonthTable(TIMEDATE* base_time,int month_range,int day_range,MONTHTABLE * ThisMonth)
{
	int year=base_time->year;
	int index=0;
	short month=base_time->month;
	short day=base_time->day;
	short length=0;
	
	int i=0;
	unsigned short change_day,leap,l_m1,l_m2;
	//MONTHTABLE ThisMonth;
	// month change
	
	if (month_range)
	{
		month+=month_range;
		//the month <1 means the year must decrease 1;
		if (month<1)
		{
			year--;
			month=12;
		}
		//the month >12 means the year must increase 1;
		else if (month>12)
		{
			year++;
			month=1;
		}
		//need not change year;
		else
		{
			switch (month)
			{
			case 4: case 6: case 9: case 11:
				if (day>30)
					day=30;
				break;
			case 2:
				if ((year%400 ==0) || ((year%4==0)&&(year%100)))
				{
					if (day>29)
						day=29;
				} else if (day>28)
					day=28;
				break;
			}
		}//end need not change year
	}//end month change
		
	//change day
	else
	{
		day=day+day_range;
		//need change month,decrease 1
		if (day<1)
		{
			month--;
			//need change year,decreae 1
			if (month<1)
			{
				year--;
				month=12;
				day=31;
			}
			//need not change year
			else
			{
				switch (month)
				{
				case 1: case 3: case 5: case 7:
				case 8: case 10:
					day=31;
					break;
				case 4: case 6: case 9: case 11:
					day=30;
					break;
				case 2:
					if ((year%400 ==0) || ((year%4==0)&&(year%100)))
						day=29;
					else day=28;
					break;
				}
			}//end need not change year
			
		}//end month decrease 1
		
		//the day increase 
		else
		{
			switch (month)
			{
			case 1: case 3: case 5: case 7:
			case 8: case 10:
				if (day>31)
				{
					month++;
					day=1;
				}
				break;
			case 4: case 6: case 9: case 11:
				if (day>30)
				{
					month++;
					day=1;
				}
				break;
			case 2:
				if ((year%400 ==0) || ((year%4==0)&&(year%100)))
				{
					if (day>29)
					{
						month++;
						day=1;
					}
				} else
				{
					if (day>28)
					{
						month++;
						day=1;
					}
				}
				break;
			case 12:
				if (day>31)
				{
					year++;
					month=1;
					day=1;
				}
				break;
			}
		}
	}//end change day;
	
	//now we have the correct date to get monthtable
	ThisMonth->day=day;
	if (((month%2)&&(month<8))||((month>=8)&&(month%2==0)))
		length=31;
	else if (month!=2)
		length=30;
	else
	{
		if ((year%400 ==0) || ((year%4==0)&&(year%100)))
			length=29;
		else
			length=28;
	}
	ThisMonth->year=year;
	ThisMonth->month=month;
	ThisMonth->lenth=length;
	ThisMonth->firstday=GetWeek(year,month,1);

	/* 2003.11.5 wyj 检查查表越界 */
	if(year>=1980 && year<=2031)
	{
		index=(year-1980)*12+month-1;
		ThisMonth->l_firstday=FirstDay[index];
		
		change_day=LunarIndex[index].day;
		l_m1=LunarIndex[index].lmonth;
		if (l_m1==LunarIndex[index-1].lmonth)
			leap=1;//this flag indicate leap month.
		else
			leap=0;
		if (change_day==0)
			ThisMonth->l_midday[0]=0;
		else
			ThisMonth->l_midday[0]=l_m1+leap*16+change_day*256;
		
		for (i=0;i<30;i++)
		{
			if ((year%100)==LunarIndexEx[i].year&&month==LunarIndexEx[i].month)
			{
				change_day=LunarIndexEx[i].day;
				l_m2=LunarIndexEx[i].lmonth;
				if (l_m2==ThisMonth->l_midday[0]%16)
					leap=1;
				else
					leap=0;
				ThisMonth->l_midday[1]=l_m2+leap*16+change_day*256;
				break;
			} else
			{
				l_m2=0;
				ThisMonth->l_midday[1]=0;
			}
		}
		memset(ThisMonth->solar[0].solartxt,0,sizeof(ThisMonth->solar[0].solartxt));
		memset(ThisMonth->solar[1].solartxt,0,sizeof(ThisMonth->solar[1].solartxt));
		ThisMonth->solar[0].day=LunarIndex[index].fsday;
		strcpy(ThisMonth->solar[0].solartxt,solar_text[month*2-2]);
		ThisMonth->solar[1].day=LunarIndex[index].lsday;
		strcpy(ThisMonth->solar[1].solartxt,solar_text[month*2-1]);
	}//end of if(year>=1980 && year<=2031)
		
	//calculate the lunar year
	sprintf(ThisMonth->datetxt,"%4d-%2d-%2d",year,month,day);
	//	GetLunarYear(year,month,(short)l_m1,(short)l_m2,LunarYear);
	//	strcat(ThisMonth.datetxt,LunarYear);
	//get calendar data
	return ;//ThisMonth
}

void GetLunarYear(int year,short month,short l_m1,char * LunarYear)
{
   int l_year=year;
   int goldindex=FirstLunar/10;
   int landindex=FirstLunar%10;
   if (abs(month-l_m1)>4)
      l_year--;

   landindex=(landindex+l_year-1980)%12;
   goldindex=(goldindex+l_year-1980)%10;
   strncpy(LunarYear,(char *)gold[goldindex],3);
   strncat(LunarYear,(char *)land[landindex],2);
   strcat(LunarYear,"\x5e\x74");//年
   //printf("\nThe LunarYear:%s",LunarYear);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -