|
以下是萬年曆
比如說你存檔 檔名叫cal
那你執行的時候打cal 就會出現這個月的月曆
打cal 2005會出現那年的年曆
打cal 10 2005會出現2005 10月月曆
打cal 10 10 2005會出現星期幾 這天是國慶日 星期一
有興趣的可以打cal 9 1752
就可以看到少的日期溜
還有1752年以前的潤年和之後的潤年是不一樣的唷!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int three(int month,int day,int year);
int two(int month,int year, int len);
int one(int year);
int cal(int month,int day,int year);
int zero();
int main(int argc, char** argv) {
if(argc == 4)
three(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]));
else if(argc == 3)
two(atoi(argv[1]), atoi(argv[2]), strlen(argv[2]));
else if(argc == 2)
one(atoi(argv[1]));
else if(argc == 1)
zero();
return 0;
}
int zero() {
char
b[1][3],
*a, *c, *d, ee[1][5],
*months[12]={"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
time_t rawtime;
int e;
time ( &rawtime );
printf("%s\n", ctime( &rawtime));
sscanf(ctime(&rawtime),"%s %s %s %s %d",&a,&b,&c,&d,&e);
sscanf(ctime(&rawtime),"%s %s %s %s %s",&a,&b,&c,&d,&ee);
printf("%s", b[0]);
for(int i = 0;i<12;i++)
if(strcmp(b[0], months)==0)
two(i+1, e, strlen(ee[0]));
// if(strcmp(b[0], months)==0) printf("%s %d", months, i+1);
// add by function
return 0;
}
int one(int year) {
int adjust[7]={6, 7, 1, 2, 3, 4, 5}, date, tmp,counter = 0;
int db[12][42];
int i;
for( i = 0 ; i<12 ; i++ )
for(int j = 0;j<42;j++)
db[j]=0;
for(int month = 1;month<=12;month++) {
counter = 0;
date = adjust[cal(month, 1, year)];
for(int i = 1;i<date;i++) {
counter += 1;
}
for( i = 1;i<=31;i++) {
tmp = cal(month, i, year);
if(tmp>=0) {
date = adjust[tmp];
if(date) {
db[month-1][counter]=i;
counter += 1;
}
}
}
}
for(int h = 0;h<4;h++) {
if(h == 0)
printf(" January February March \n");
else if(h == 1)
printf(" April May June \n");
else if(h == 2)
printf(" July August September \n");
else if(h == 3)
printf(" October November December \n");
printf(" Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa\n");
for(int j = 0;j<6;j++) {
for(int i = 0;i<3;i++) {
for(int k = 0;k<7;k++) {
if(db[3*h + i][j*7+k]== 0)
printf(" ");
else printf("%3d", db[3* h +i][j*7+k]);
}
printf(" ");
}
printf("\n");
}
}
// add by function
return 0;
}
int two(int month, int year, int len) {
int adjust[7]={6, 7, 1, 2, 3, 4, 5}, date, tmp, counter = 0;
char *months[12]={"January", "February", "March","April", "May", "June",
"July", "August", "September","October", "November", "December"};
// add by function
int i;
date = adjust[cal(month, 1, year)];
// add by function
for( i=0 ; (unsigned)i<11-(strlen(months[1])+len+1)/2 ; i++)
printf(" ");
printf("%s %d\n", months[month-1], year);
printf(" Su Mo Tu We Th Fr Sa\n");
for( i=1; i<date; i++) {
printf(" ");
counter += 1;
}
for( i = 1;i<=31;i++) {
tmp = cal(month, i, year);
if(tmp>=0) {
date = adjust[tmp];
if(date) {
printf("%3d", i);
counter += 1;
if(counter %7 == 0)
printf("\n");
}
}
}
// add by function
return 0;
}
int three(int month,int day,int year) {
char *days[7]={"Fri", "Sat", "Sun", "Mon", "Tue", "Wed", "Thu"};
int tmp;
tmp = cal(month, day, year);
if(tmp>=0)
printf("%s", days[tmp]);
// add by function
return 0;
}
int cal(int month,int day,int year) {
long total = 0;
int months[12]= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (((( (year % 4 == 0) && (year % 100 != 0) ) ||
(year % 400 == 0))&& month > 2) && year > 1752)
months[1] += 1;
if( (year % 4 == 0) && year < 1752)
months[1] +=1;
if(year == 1752)
months[1] += 1;
if(months[month-1]<day)
return -1;
for(int i = 0;i<month-1;i++) {
total+=months;
}
if(month<1 ||month > 12)
return -1;
if(year < 0 )
return -1;
else if(year > 1752)
return (((365*(year-1)+(year-1)/4-(year-1)/100+(year-1)/400)+total+day)+2)%7 ;
else if(year < 1752)
return ((365*(year-1)+(year-1)/4+total+day))%7 ;
else if(year == 1752 && month < 9 )
return ((365*(year-1)+(year-1)/4+total+day))%7 ;
else if(year == 1752 && month > 9 )
return (((365*(year-1)+(year-1)/4-(year-1)/100+(year-1)/400)+total+day)+2)%7;
else if(year == 1752 && month == 9 && day < 3 )
return ((365*(year-1)+(year-1)/4+total+day))%7;
else if(year == 1752 && month == 9 && day > 13 )
return (((365*(year-1)+(year-1)/4-(year-1)/100+(year-1)/400)+total+day)+2)%7;
else
return -1;
system("PAUSE");
} |
|