c语言大作业万年历,C语言实现万年历

#include

#include

#include

#include

typedef struct today

{

int day;

int month;

int year;

} today;

int day_cankao[2][13]={

{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31}

};

char *week[]=

{

"Sun","Mon","Tue","Wen","Thu","Fir","Sat"

};

struct tm *todayuse;//struct tm定义c语言中time的结构体

today today_current;

int getweekday(today today_usenow)

{

// w = y + [y/4] + [ c/4 ] – 2c+ [13 * (m+1) / 5] + d – 1

//其中,c是年份的前两位,y是年份的后两位,m是月份,d是日期,这里需要注意的是,如果是1月和2月,c和y需要按照上一年来取值。

int w=0;

int year=today_usenow.year;

int month=today_usenow.month;

if(today_usenow.month==1 || today_usenow.month==2)

{

month+=12;

year--;

}

int y=year%100;

int c=year/100;

int m=month;

w=y + y/4 + c/4 - 2*c+ 26* (m+1) / 10 + today_usenow.day -1;

while(w<0)

{

w+=7;

}

return (w%7);

}

int is_leap(int year)

{

if( (year%4==0 && year%100!=0) || (year%400==0))

{

return 1;

}

else

return 0;

}

int getmonthdays(int year,int month)

{

return day_cankao[is_leap(year)][month];

}

void print_calendar(today today_usenow)

{

printf("---------------------------\n");

printf("Sun Mon Tue Wen Thu Fir Sat\n");

int firstday=0;

today today_usehere=today_usenow;

today_usehere.day=1;

int day=getweekday(today_usehere);//日期前

//int daysuseafter

int days=getmonthdays(today_usenow.year,today_usenow.month);//月总数

// 0 1 2 3 4 5 6 // 6

int daysbefore=0;

if((today_usenow.month-1)==0)

{

//现在为1月,去年的十二月份

daysbefore=getmonthdays(today_usenow.year-1,12);

// printf("%d is",daysbefore);

}

else

{

daysbefore=getmonthdays(today_usenow.year,today_usenow.month-1);

}

int daysbefoeit=daysbefore-day+1;

printf("");

int count=1;

if(day==0)

{

daysbefoeit-=7;

for(int i=0;i

{

printf("%d ", daysbefoeit);

daysbefoeit++;

}

printf("\n");

count=7;

}

else

{

for(int i=0;i

{

printf("%d ", daysbefoeit);

daysbefoeit++;

}

count=day;

}

int m=1;

for(int i=0;i<=6-day;i++)

{

if(m<10)

{

printf(" %d ",m);

}

else

{

printf("%d ",m);

}

m++;

}

printf("\n");

if(day==0)

{

count=14;

}

else

{

count=7;

}

int hang=0;

while(m<=days)

{

if(m<10)

{

printf(" %d ",m);

}

else

{

printf("%d ",m);

}

hang++;

if(hang==7)

{

printf("\n");

hang=0;

}

m++;

}

if(day==0)

{

count=days+7;

}

else

{

count=day+days;

}

int newmonth=1;

for(int j=hang;j<7;j++)

{

if(newmonth<10)

{

printf(" %d ",newmonth);

}

else

{

printf("%d ",newmonth);

}

newmonth++;

}

printf("\n");

count=count+7-hang;

for(int j=0;j< 42-count;j++)

{

if(newmonth<10)

{

printf(" %d ",newmonth);

}

else

{

printf("%d ",newmonth);

}

newmonth++;

}

}

//int getmonth

int main()

{

time_t timep;

struct tm *p;

time(&timep);

p =localtime(&timep); //此函数获得的tm结构体的时间,是已经进行过时区转化为本地时间

//p = gmtime(&timep); //把日期和时间转换为格林威治(GMT)时间的函数

/*printf("Year: %d\n", 1900+p->tm_year);

printf("Month: %d\n", 1+p->tm_mon);

printf("Day: %d\n", p->tm_mday);

printf("Hour: %d\n", p->tm_hour);

printf("Minute: %d\n", p->tm_min);

printf("Second: %d\n", p->tm_sec);

printf("Weekday: %d\n", p->tm_wday);

printf("Days: %d\n", p->tm_yday);

printf("Isdst: %d\n", p->tm_isdst);

*/

//printf("%d",day_cankao[0][12]);

today_current.year=1900+p->tm_year;

today_current.month=1+p->tm_mon;

today_current.day= p->tm_mday;

today use=today_current;

int c1,c2;

printf(" %d 年 %d 月 %d 日\n",today_current.year,today_current.month,today_current.day);

print_calendar(today_current);

while(1)

{

c1 = getch();

if(c1==27)

{

printf("您已经退出系统");

break;

}

if(c1==110)

{

printf(" %d 年 %d 月 %d 日\n",today_current.year,today_current.month,today_current.day);

//printf("%d \n",getweekday(today_current));

print_calendar(today_current);

use=today_current;

continue;

}

c2 = getch();

//printf( "%d %d",c1,c2);

if(c1==224 && c2==72)

{

use.month+=1;

if(use.month==13)

{

use.month=1;

use.year+=1;

}

printf(" %d 年 %d 月 %d 日\n",use.year,use.month,use.day);

//printf("%d \n",getweekday(today_current));

print_calendar(use);

}

if(c1==224 && c2==80)

{

use.month-=1;

if(use.month==0)

{

use.month=12;

use.year-=1;

}

printf(" %d 年 %d 月 %d 日\n",use.year,use.month,use.day);

//printf("%d \n",getweekday(today_current));

print_calendar(use);

}

if(c1==224 && c2==75)

{

use.year-=1;

printf(" %d 年 %d 月 %d 日\n",use.year,use.month,use.day);

//printf("%d \n",getweekday(today_current));

print_calendar(use);

}

if(c1==224 && c2==77)

{

use.year+=1;

printf(" %d 年 %d 月 %d 日\n",use.year,use.month,use.day);

//printf("%d \n",getweekday(today_current));

print_calendar(use);

}

printf("\n");

printf("按上下按钮,进行月份变换\n");

printf("按左右按钮,进行年份变换\n");

printf("按ESC按键,退出系统\n");

printf("按N按钮,查看当前日期\n");

}

//上 224 72

//下 224 80

//左 224 75

//右 224 77

//esc 27

// n 110

return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值