#include <stdioh>
void main()
{
int year,month,day,days,sum,i,n=0,a;
char c;
redo: printf("请输入年/月/日(例如:2010/1/1):\n");
scanf("%d/%d/%d",&year,&month,&day);
if(month==1&&(day>=32||day<=0))
{
printf("输入有误!1月只能有31天!\n");
goto redo;
}
if(month==2)
{
if((year%400==0)||(year%4==0&&year%100!=0))
{
if(day>=30||day<=0)
{
printf("输入有误!%d年是闰年,二月只能有29天!\n",year);
goto redo;
}
}
else if(day>=29||day<=0)
{
printf("输入有误!%d年是平年,二月只能有28天!\n",year);
goto redo;
}
}
if(month==3&&(day>=32||day<=0))
{
printf("输入有误!3月只能有31天!\n");
goto redo;
}
if(month==4&&(day>=31||day<=0))
{
printf("输入有误!4月只能有30天!\n");
goto redo;
}
if(month==5&&(day>=32||day<=0))
{
printf("输入有误!5月只能有31天!\n");
goto redo;
}
if(month==6&&(day>=31||day<=0))
{
printf("输入有误!6月只能有30天!\n");
goto redo;
}
if(month==7&&(day>=32||day<=0))
{
printf("输入有误!7月只能有31天!\n");
goto redo;
}
if(month==8&&(day>=32||day<=0))
{
printf("输入有误!8月只能有31天!\n");
goto redo;
}
if(month==9&&(day>=31||day<=0))
{
printf("输入有误!9月只能有30天!\n");
goto redo;
}
if(month==10&&(day>=32||day<=0))
{
printf("输入有误!10月只能有31天!\n");
goto redo;
}
if(month==11&&(day>=31||day<=0))
{
printf("输入有误!11月只能有30天!\n");
goto redo;
}
if(month==12&&(day>=32||day<=0))
{
printf("输入有误!12月只能有31天!\n");
goto redo;
}
if(month>=1&&month<=12)
{
if(year%400==0||(year%4==0&&year%100!=0))
printf("%d年是闰年。\n",year);
else printf("%d年是平年。\n",year);
}
if(year>=1901) goto loop1;
else goto loop2;
loop1: for(i=1901;i<year;i++)
{
if(i%400==0||(i%4==0&&i%100!=0))
n++;
}
days=(year-1901-n)365+n366;
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("一年内只能有12个月!请重新输入!\n");goto redo;
}
a=sum+day+days;
if((year%400==0||(year%4==0&&year%100!=0))&&(month>=3))
a++;
if(a%7==1) printf("%d年%d月%d日是星期二。\n",year,month,day);
if(a%7==2) printf("%d年%d月%d日是星期三。\n",year,month,day);
if(a%7==3) printf("%d年%d月%d日是星期四。\n",year,month,day);
if(a%7==4) printf("%d年%d月%d日是星期五。\n",year,month,day);
if(a%7==5) printf("%d年%d月%d日是星期六。\n",year,month,day);
if(a%7==6) printf("%d年%d月%d日是星期天。\n",year,month,day);
if(a%7==0) printf("%d年%d月%d日是星期一。\n",year,month,day);
goto label;
loop2: for(i=1900;i>year;i--)
{
if(i%400==0||(i%4==0&&i%100!=0))
n++;
}
days=(1900-year-n)365+n366;
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=58;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("一年内只能有12个月!请重新输入!\n");goto redo;
}
if(year%400==0||(year%4==0&&year%100!=0))
a=366-(day+sum)+days;
else a=365-(day+sum)+days;
if((year%400==0||(year%4==0&&year%100!=0))&&(month>=3))
a--;
if(a%7==0) printf("%d年%d月%d日是星期一。\n",year,month,day);
if(a%7==1) printf("%d年%d月%d日是星期天。\n",year,month,day);
if(a%7==2) printf("%d年%d月%d日是星期六。\n",year,month,day);
if(a%7==3) printf("%d年%d月%d日是星期五。\n",year,month,day);
if(a%7==4) printf("%d年%d月%d日是星期四。\n",year,month,day);
if(a%7==5) printf("%d年%d月%d日是星期三。\n",year,month,day);
if(a%7==6) printf("%d年%d月%d日是星期二。\n",year,month,day);
label: printf("Do you want to continueY/N:");
getchar();
c=getchar();
if(c=='Y'||c=='y')
{
n=0;
goto redo;
}
}
#include<stdioh>
#define Mon 1
#define Tues 2
#define Wed 3
#define Thur 4
#define Fri 5
#define Sat 6
#define Sun 0
#define January_days 31
#define February_days 28
#define March_days 31
#define April_days 30
#define May_days 31
#define June_days 30
#define July_days 31
#define August_days 31
#define September_days 30
#define October_days 31
#define November_days 30
#define December_days 31
#define first1month January_days
#define first2month January_days+February_days
#define first3month January_days+February_days+March_days
#define first4month January_days+February_days+March_days+April_days
#define first5month January_days+February_days+March_days+April_days+May_days
#define first6month January_days+February_days+March_days+April_days+May_days+June_days
#define first7month January_days+February_days+March_days+April_days+May_days+June_days \
+July_days
#define first8month January_days+February_days+March_days+April_days+May_days+June_days \
+July_days+August_days
#define first9month January_days+February_days+March_days+April_days+May_days+June_days \
+July_days+August_days+September_days
#define first10month January_days+February_days+March_days+April_days+May_days+June_days \
+July_days+August_days+September_days+October_days
#define first11month January_days+February_days+March_days+April_days+May_days+June_days \
+July_days+August_days+September_days+October_days+November_days
int known_weekday = Tues;
int known_year = 1901;
int konwn_month = 1;
int known_day = 1;
int day_count(int month)
{
switch(month)
{
case 1: return 0;break;
case 2: return first1month;break;
case 3: return first2month;break;
case 4: return first3month;break;
case 5: return first4month;break;
case 6: return first5month;break;
case 7: return first6month;break;
case 8: return first7month;break;
case 9: return first8month;break;
case 10: return first9month;break;
case 11: return first10month;break;
case 12: return first11month;break;
}
}
/char month_name(int month)
{
switch(month)
{
case 1:
return "January";
break;
case 2:
return "February";
break;
case 3:
return "March";
break;
case 4:
return "April";
break;
case 5:
return "May";
break;
case 6:
return "June";
break;
case 7:
return "July";
break;
case 8:
return "August";
break;
case 9:
return "September";
break;
case 10:
return "October";
break;
case 11:
return "November";
break;
case 12:
return "December";
break;
default:
break;
}
}/
char month_name(int month)
{
switch(month)
{
case 1:
return "一月";
break;
case 2:
return "二月";
break;
case 3:
return "三月";
break;
case 4:
return "四月";
break;
case 5:
return "五月";
break;
case 6:
return "六月";
break;
case 7:
return "七月";
break;
case 8:
return "八月";
break;
case 9:
return "九月";
break;
case 10:
return "十月";
break;
case 11:
return "十一月";
break;
case 12:
return "十二月";
break;
default:
break;
}
}
/按格式打印某年某月名称/
void first_line_print(int month, int year)
{
//printf("%20s %d \n",month_name(month),year);
printf("%8d年 %s \n",year, month_name(month));
}
/按格式打印星期名称/
void week_print()
{
//printf("%-6s%-6s%-6s%-6s%-6s%-6s%-6s\n","Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat");
printf("%-3s%-3s%-3s%-3s%-3s%-3s%-3s\n","日", "一", "二", "三", "四", "五", "六");
}
/计算该年该月份与已知日子之间的距离天数/
int date_distance_count(int month, int year)
{
int leap_year_count = 0;
int i;
int distance;
if (year > known_year)
{
for (i=known_year; i<year; i++)
{
if(((i%4 == 0) && (i%100 != 0) ) || (i%400 == 0))
{
leap_year_count++;
}
}
if (month > 2)
{
if(((year%4 == 0) && (year%100 != 0) ) || (year%400 == 0))
{
leap_year_count++;
}
}
}
else
if (year == known_year)
{
if (month > 2)
{
leap_year_count = 1;
}
}
distance = (year - known_year)365 + leap_year_count + day_count(month);
return distance;
}
/确定该月份第一天是星期几/
int makesure_firstday_weekday(int month, int year)
{
int date_distance = 0;
int weekday;
date_distance = date_distance_count(month, year);
weekday = (known_weekday + date_distance)%7;
return weekday;
}
/依次打印出该月份的日子/
void print_in_turn(int month, int firstday, int year)
{
int i = 1;
int weekday;
switch(firstday)
{
case Sun:
break;
case Mon:
printf("%-3s","");
break;
case Tues:
printf("%-6s","");
break;
case Wed:
printf("%-9s","");
break;
case Thur:
printf("%-12s","");
break;
case Fri:
printf("%-15s","");
break;
case Sat:
printf("%-18s","");
break;
}
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
{
for(i=0; i<31; i++)
{
weekday = (firstday + i)%7;
printf("%-3d",i+1);
if(weekday == Sat)
{
printf("\n");
}
}
break;
}
case 2:
{
if(((year%4 == 0) && (year%100 != 0) ) || (year%400 == 0)) /闰年/
{
for(i=0; i<29; i++)
{
weekday = (firstday + i)%7;
printf("%-3d",i+1);
if(weekday == Sat)
{
printf("\n");
}
}
break;
}
else /平年/
{
for(i=0; i<28; i++)
{
weekday = (firstday + i)%7;
printf("%-3d",i+1);
if(weekday == Sat)
{
printf("\n");
}
}
break;
}
}
case 4:
case 6:
case 9:
case 11:
{
for(i=0; i<30; i++)
{
weekday = (firstday + i)%7;/计算该天是星期几/
printf("%-3d",i+1);
if(weekday == Sat)
{
printf("\n");/如果是星期六,则换行/
}
}
break;
}
}
}
void date_print(int month, int year)
{
int firstday;
firstday = makesure_firstday_weekday(month, year);
print_in_turn(month, firstday, year);
printf("\n");
}
void main_month(int month, int year)
{
first_line_print(month, year);
week_print();
date_print(month, year);
printf("\n\n");
}
void main_calendar(int year)
{
int i;
for(i=1; i<=12; i++)
{
main_month(i, year);
}
}
int main()
{
int year;
printf("请输入年份:year = ");
scanf("%d",&year);
printf("\n");
while(year < 1902)
{
printf("请输入大于1901的年份\n");
printf("请输入年份:year = ");
scanf("%d",&year);
printf("\n");
}
main_calendar(year);
scanf(" ");
return 0;
}
程序直接输入年份和月份,打印对应日历。
一年12个月是固定的,我就不写单独输入年份打印月份了。你想就把我月份数组打印一遍好了。
#include<stdioh>#include<timeh>
#include<malloch>
enum MONTH{January=1,February,March,April,May,June,July,August,September,October,November,December};
struct tm getDate(int year,int mon);
void printTime(time_t theTime,int year);
int main()
{
enum MONTH mon;
time_t theTime;
struct tm date;
int year,m;
while(1)
{
printf("输入任意年份及月份:\n");
scanf("%d%d",&year,&m);
if(m<1 || m>12)
{
printf("月份超出范围,重新输入!\n");
continue;
}
mon=m;
break;
}
date=getDate(year,mon);
theTime=mktime(date);//从1900年至此的秒数
printTime(theTime,year);
return 0;
}
struct tm getDate(int year,int mon)
{
struct tm date=(struct tm )malloc(sizeof(struct tm));
date->tm_sec=0;
date->tm_min=0;
date->tm_hour=0;
date->tm_year=year-1900;
date->tm_mon=mon-1;
date->tm_mday=1;
date->tm_yday=0;
return date;
};
void printTime(time_t theTime,int year)
{
int y,m,wday,i,j;
char wd[7][7]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
struct tm date;
date =localtime(&theTime);
y=date->tm_year+1900;
m=date->tm_mon+1;
wday=date->tm_wday;
printf("\n------------------开始生成日历----------------------\n\n");
printf(" %d年%02d月\n",y,m);
i=0;
for(j=0;j<7;j++)
{
printf("%s ",wd[wday++]);
if(wday>6)
wday=0;
}
printf("\n");
while(1)
{
if(date->tm_mon+1>m)
{
printf("\n");
break;
}
printf(" %02d日 ",date->tm_mday);
if(++i==7)
{
printf("\n");
i=0;
}
theTime+=246060;
date =localtime(&theTime);
}
}
/加载头文件/
#include <stdioh>
#include <biosh>
#include <dosh>
#include <conioh>
/定义常量/
/左移键/
#define LEFT 0x4b00
/右移键/
#define RIGHT 0x4d00
/下移键/
#define DOWN 0x5000
/上移键/
#define UP 0x4800
/向上翻页移键/
#define PAGEUP 0x4900
/向下翻页移键/
#define PAGEDOWN 0x5100
/小写字母q/
#define QLOWER 0x1071
/大写字母Q/
#define QUPPER 0x1051
/空格键/
#define SPACE 0x3920
/Escape键/
#define ESC 0x011b
/定义全局变量/
struct date sysTime;
int currentYear;
int currentMonth;
int currentDay;
int n_currentMon;
int n_lastMon;
/-----------自定义函数-------------------------/
void checkDate();
int isLeapyear(int year);
int getWeek(int year,int month,int day);
void printSpace(int n);
void printSeparator();
void printUsage();
void printWeek();
void printWeek2(int week);
void showCalendar(int year,int month,int day);
void getKeyValue();
/--------------------------------------------/
/检查日期有效性函数/
void checkDate()
{
/如果给定的日期中年份部分为负数或者0/
if(currentYear<=0)
{
gotoxy(1,27);
printf("The year should be a positive number !\n");
gotoxy(1,28);
printf("Press any key to continue");
getchar();
getchar();
/以当前系统时间重新赋值/
currentYear=sysTimeda_year;
currentMonth=sysTimeda_mon;
currentDay=sysTimeda_day ;
}
/如果给定的日期中月份部分为负数,为0或者大于12/
if(currentMonth>12||currentMonth<1)
{
gotoxy(1,27);
printf("The month should be a number between 1 and 12 !\n");
gotoxy(1,28);
printf("Press any key to continue");
getchar();
getchar();
/以当前系统时间重新赋值/
currentYear=sysTimeda_year;
currentMonth=sysTimeda_mon;
currentDay=sysTimeda_day ;
}
/如果给定的日期中天数部分为负数,为0或者大于31/
if(currentDay>31||currentDay<1)
{
gotoxy(1,27);
printf("The day should be a number between 1 and 31 !\n");
gotoxy(1,28);
printf("Press any key to continue");
getchar();
getchar();
/以当前系统时间重新赋值/
currentYear=sysTimeda_year;
currentMonth=sysTimeda_mon;
currentDay=sysTimeda_day ;
}
}
/判断是否是闰年函数/
int isLeapyear(int year)
{
/闰年的判断:(1)year被4整除,并且year不被100整除
或(2)year被4整除,并且year被400整除/
if(year%4==0&&year%100||year%400==0)
return 1 ;
else
return 0 ;
}
/根据给定日期计算星期函数/
int getWeek(int year,int month,int day)
{
int leapFlag;
int week;
int i ;
/该数组用于保存每个月的天数/
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int count=0 ;
/判断给定年份是否是闰年/
leapFlag=isLeapyear(year);
/如果是闰年则2月份的日期应该29天/
if(leapFlag==1)
a[2]++;
/计算从给定年份的1月1日到给定月份的1号之间的天数/
for(i=1;i<month;i++)
{
count+=a[i];
}
/计算从给定年份的1月1日到给定日期之间的天数/
count+=day;
/计算星期/
week=(year+1+(year-1)/4+(year-1)/100+(year-1)/400+count)%7 ;
return week ;
}
/输出指定个数个空格函数/
void printSpace(int n)
{
int i ;
for(i=0;i<n;i++)
printf(" ");
}
/输出分隔线函数/
void printSeparator()
{
int i ;
for(i=0;i<38;i++)
{
printf("=");
}
printf("\n");
}
/输出使用方法函数/
void printUsage()
{
gotoxy(45,3);
/设定字体颜色/
textcolor(YELLOW);
/送格式化输出至屏幕/
cprintf("-----------Usage-----------");
gotoxy(45,5);
textcolor(YELLOW);
cprintf("YEAR");
gotoxy(50,5);
printf(" Up key( ) to increase;\n");
gotoxy(50,7);
printf(" Down key( ) to decrease\n");
gotoxy(45,9);
textcolor(YELLOW);
cprintf("MONTH:");
gotoxy(50,9);
printf(" Right key( ) to increase;\n");
gotoxy(50,11);
printf(" Left key( ) to decrease\n");
gotoxy(45,13);
textcolor(YELLOW);
cprintf("DAY");
gotoxy(50,13);
printf(" PageDown key to increase;\n");
gotoxy(50,15);
printf(" PageUp key to decrease\n" );
gotoxy(45,17);
textcolor(YELLOW);
cprintf("QUERY");
gotoxy(50,17);
printf(" Q/q key\n");
textcolor(YELLOW);
gotoxy(45,19);
cprintf("RESET");
gotoxy(50,19);
printf(" SPACE key\n");
gotoxy(45,21);
textcolor(YELLOW);
cprintf("EXIT");
gotoxy(50,21);
printf(" Esc key\n");
gotoxy(59,5);
/设置寄存器,表示在指定位置输出一次指定的字符/
_CX=01;
_AH=0xa;
/指定输出字符为向上的箭头/
_AL=24;
/产生一次中断,输出向上的箭头/
geninterrupt(0x10);
gotoxy(61,7);
_CX=01;
_AH=0xa;
/指定输出字符为向下的箭头/
_AL=25;
geninterrupt(0x10);
gotoxy(62,9);
_CX=01;
_AH=0xa;
_AL=26;
/指定输出字符为向右的箭头/
geninterrupt(0x10);
gotoxy(61,11);
_CX=01;
_AH=0xa;
/指定输出字符为向左的箭头/
_AL=27;
geninterrupt(0x10);
/还原字体颜色/
textcolor(7);
}
/根据系统日期输出星期函数/
void printWeek()
{
int day ;
/根据系统日期获得星期/
day=getWeek(currentYear,currentMonth,currentDay);
textcolor(11);
/输出星期,0表示星期天,1表示星期一6表示星期六/
if(day==0)
cprintf("%d-%d-%d,Sunday!",currentYear,currentMonth,currentDay);
if(day==1)
cprintf("%d-%d-%d,Monday!",currentYear,currentMonth,currentDay);
if(day==2)
cprintf("%d-%d-%d,Tuesday!",currentYear,currentMonth,currentDay);
if(day==3)
cprintf("%d-%d-%d,Wednesday!",currentYear,currentMonth,currentDay);
if(day==4)
cprintf("%d-%d-%d,Thursday!",currentYear,currentMonth,currentDay);
if(day==5)
cprintf("%d-%d-%d,Friday!",currentYear,currentMonth,currentDay);
if(day==6)
cprintf("%d-%d-%d,Saturday!",currentYear,currentMonth,currentDay);
textcolor(7);
}
/输出指定星期函数/
void printWeek2(int week)
{
if(week==0)
cprintf(",Sunday");
if(week==1)
cprintf(",Monday");
if(week==2)
cprintf(",Tuesday");
if(week==3)
cprintf(",Wendesday");
if(week==4)
cprintf(",Thursday");
if(week==5)
cprintf(",Friday");
if(week==6)
cprintf(",Staturday");
}
/显示日历函数/
void showCalendar(int year,int month,int day)
{
int i;
int j;
/输出的日期/
int outDay;
int leapFlag;
/本月第一个星期中,在上月的天数/
int dayLastMon;
int week;
/该数组用于保存每个月的天数/
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
outDay=0;
dayLastMon=0;
week=0;
/判断给定年份是否是闰年/
leapFlag=isLeapyear(year);
/如果是闰年则2月应该是29天/
if(leapFlag==1)
{
a[2]++;
}
/如果给定的日期中,天数大于该月的最大天数/
if(day>a[month])
{
printf("The number of this month's day is %d at most !\n",a[month]);
printf("Press any key to continue\n");
getchar();
getchar();
/以当前系统时间重新赋值/
year=sysTimeda_year;
month=sysTimeda_mon;
day=sysTimeda_day ;
currentYear=sysTimeda_year;
currentMonth=sysTimeda_mon;
currentDay=sysTimeda_day ;
}
/当前月的天数/
n_currentMon=a[month];
/上一月的天数/
n_lastMon=a[month-1];
/根据给定日期,获取给定月份1号的星期/
week=dayLastMon=getWeek(year,month,1);
/清除文本模式窗口/
clrscr();
printf("\nThe calendar of %d",year);
textcolor(10);
/显示给定年份是否是闰年/
if(leapFlag==1)
cprintf(" [leap year]",year);
if(leapFlag==0)
cprintf(" [not leap year]",year);
printf("\n");
textcolor(7);
printSeparator();
textcolor(YELLOW);
/输出月份提示,1-12分别表示1月到12月/
switch(month)
{
case 1 :
cprintf(" January 1 ");
break ;
case 2 :
cprintf(" February 2 ");
break ;
case 3 :
cprintf(" March 3 ");
break ;
case 4 :
cprintf(" April 4 ");
break ;
case 5 :
cprintf(" May 5 ");
break ;
case 6 :
cprintf(" June 6 ");
break ;
case 7 :
cprintf(" July 7 ");
break ;
case 8 :
cprintf(" August 8 ");
break ;
case 9 :
cprintf(" September 9 ");
break ;
case 10 :
cprintf(" October 10 ");
break ;
case 11 :
cprintf(" Nevember 11 ");
break ;
case 12 :
cprintf(" December 12");
break ;
}
textcolor(7);
printf("\n\n");
textcolor(13);
cprintf(" Sun Mon Tue Wed Thu Fri Sat");
textcolor(7);
printf("\n\n");
/因为一个月中最多跨度6个星期,所以循环从0到5/
for(i=0;i<6;i++)
{
/如果是该月的第一个星期/
if(i==0)
{
/第一个星期中还要7-dayLastMon天本月,有dayLastMon天在上个月,
所以输出dayLastMon4个空格符,每个日期在日历中占用4个空格/
printSpace(dayLastMon4);
/剩余在本月的第一个星期中的天数为7-dayLastMon/
for(j=0;j<7-dayLastMon;j++)
{
/到达day的前一天时,输出++outDay/
if(outDay==day-1)
{
/用**字体突出显示/
textcolor(YELLOW);
cprintf(" [%d]",++outDay);
textcolor(7);
}
/到达day当天时,并且不是星期天/
else if(outDay==day && week!=0)
{
printf("%3d",++outDay);
}
/到达day当天时,并且是星期天/
else
{
printf("%4d",++outDay);
}
/计算当天的星期,如果前一天是星期六(6),则当天是星期天(0),
其他情况则直接星期加1/
week=(week<6)week+1:0;
}
printf("\n\n");
}
/如果不是该月的第一个星期/
else
{
/则输出该星期中的7天/
for(j=0;j<7;j++)
{
/输出的天数小于该月的最大天数/
if(outDay<a[month])
{
/到达day的前一天时,输出++outDay/
if(outDay==day-1)
{
/输出一位数字/
if(outDay<9)
{
textcolor(YELLOW);
cprintf(" [%d]",++outDay);
textcolor(7);
}
/输出两位数字/
else
{
textcolor(YELLOW);
cprintf(" [%2d]",++outDay);
textcolor(7);
}
}
/到达day当天时,并且不是星期天/
else if(outDay==day && week!=0)
{
printf("%3d",++outDay);
}
/到达day当天时,并且是星期天/
else
{
printf("%4d",++outDay);
}
}
/计算当天星期/
week=(week<6)week+1:0;
}
printf("\n\n");
if(outDay==a[month])break ;
}
}
/输出分隔线/
printSeparator();
/输出当前选择的日期和星期/
printf("The day you choose is:\n\n");
printWeek();
gotoxy(1,22);
textcolor(10);
cprintf("--------------------\n");
textcolor(7);
/输出系统日期和星期/
printf("\nToday is: %d-%d-%d",sysTimeda_year,sysTimeda_mon,sysTimeda_day);
printWeek2(getWeek(sysTimeda_year,sysTimeda_mon,sysTimeda_day));
printf("\n\n");
/显示按键 *** 作/
printUsage();
gotoxy(1,25);
}
/通过键盘调整日期函数/
void getKeyValue()
{
int key ;
char ch;
/默认显示当前系统日期和星期/
currentYear=sysTimeda_year;
currentMonth=sysTimeda_mon;
currentDay=sysTimeda_day ;
showCalendar(currentYear,currentMonth,currentDay);
while(1)
{
/获取键值,根据键值调整日历输出/
key=bioskey(0);
/右移键,增加月份/
if(key==RIGHT)
{
/月份值在1-12之间,则直接加1/
if(currentMonth<12 && currentMonth>=1)
{
currentMonth++;
}
/如果月份为12,则加1后进位,即年份加1,月份变为1/
else
{
currentYear++;
currentMonth=1 ;
}
}
/左移键,减少月份/
if(key==LEFT)
{
/月份值在1-12之间,则直接减1/
if(currentMonth<=12 && currentMonth>1)
{
currentMonth--;
}
/如果月份为1,则减1后,到上一年,月份变为12/
else
{
currentYear--;
currentMonth=12 ;
}
}
/上移键,增加年份/
if(key==UP)
{
currentYear++;
}
/下移键,减少年份/
if(key==DOWN)
{
currentYear--;
}
/上移键,减少天数/
if(key==PAGEUP)
{
/当前日不是该月的第一天,则天数直接减1/
if(currentDay!=1)
{
currentDay--;
}
/当前日是该月的第一天,并且是该年的第一个月(即1月1日),
则天数减1后,变为上一年的最后一个月的最后一天(即12月31日)/
else if(currentDay==1 && currentMonth==1)
{
currentYear--;
currentMonth=12 ;
currentDay=31 ;
}
/当前日是该年中某一个月的最后一天,则天数减1后,
变为上个月的最后一天/
else
{
currentMonth--;
currentDay=n_lastMon ;
}
}
/下移键,增加天数/
if(key==PAGEDOWN)
{
/当前日不是该月的最后一天,则天数直接加1/
if(n_currentMon!=currentDay)
{
currentDay++;
}
/当前日是该年的最后一天(即12月31日),则天数加1后,
变为下一年的第一个月的第一天(即1月1日)/
else if(n_currentMon==currentDay && currentMonth==12)
{
currentYear++;
currentMonth=1 ;
currentDay=1 ;
}
/当前日是该年中某一个月的最后一天,则天数加1后,
变为下个月的第一天/
else
{
currentMonth++;
currentDay=1 ;
}
}
/Q或者q键,表示查询指定日期的星期/
if(key==QLOWER||key==QUPPER)
{
{
printf("Input date(eg,%d-%d-%d):",sysTimeda_year,sysTimeda_mon,sysTimeda_day);
scanf("%d-%d-%d",¤tYear,¤tMonth,¤tDay);
checkDate();
}
}
/空格键,重置到系统日期/
if(key==SPACE)
{
currentYear=sysTimeda_year;
currentMonth=sysTimeda_mon;
currentDay=sysTimeda_day ;
}
/Escpe键退出系统/
if(key==ESC)
{
printf("Do you really want to quit(Y/N)");
ch=getchar();
if(ch=='y'||ch=='Y')
break ;
}
showCalendar(currentYear,currentMonth,currentDay);
}
}
/主函数/
void main()
{
/清除文本模式窗口/
clrscr();
/设置屏幕显示方式/
_AL=03;
_AH=0;
geninterrupt(0x10);
getdate(&sysTime);
getKeyValue();
}
已经编译运行确认过。
#include <stdioh>
#include <stdlibh>
int leap(int); /判断是否为闰年/
int md(int m,int y); /返回本月的天数/
void prtweek(void); /输出表头/
int fw(int m,int y); /返回本月一号是星期几/
void prtmonth(int m); /输出月份表头/
int main(void)
{
int y,m,i,test,week;
printf("please import year of you want to select : ");
scanf("%d",&y);
for (m=1; m<=12; m++) {
test=1;
prtmonth(m);
prtweek();
week=fw(m,y);
if (week!=6)
for (i=0; i<=week; i++) {
putchar('\t');
test++;
}
for (i=1; i<=md(m,y); i++,test++) {
printf("%d\t",i);
if (test%7==0) {
putchar('\n');
}
}
putchar('\n');
system("pause");//暂停,以便观察输出
}
return 0;
}
int leap(int y)
{
return (y%4==0&&y%100||y%400==0)1:0;
}
int md(int m,int y)
{
int d;
switch (m) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:d=31;break;
case 4:
case 6:
case 9:
case 11:d=30;break;
case 2:d=leap(y)29:28;break;
}
return d;
}
void prtweek(void)
{
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n","Sun","Mon","Tue","Wed","Thur","Fri","Sat");
}
int fw(int m,int y)
{
int f;
if (m<3) {
m+=12;
y--;
}
f=(1+2m+3(m+1)/5+y+y/4-y/100+y/400)%7;
return f;
}
void prtmonth(int m)
{
switch (m) {
default:
case 1:puts("===January===");break;
case 2:puts("===February===");break;
case 3:puts("===March===");break;
case 4:puts("===April===");break;
case 5:puts("===May===");break;
case 6:puts("===June===");break;
case 7:puts("===July===");break;
case 8:puts("===August===");break;
case 9:puts("===September===");break;
case 10:puts("===October===");break;
case 11:puts("===November===");break;
case 12:puts("===December===");break;
}
}
以上就是关于c语言程序设计 万年历报告书全部的内容,包括:c语言程序设计 万年历报告书、用C语言编写一个万年历系统、c语言设计万年历 输入任意年份,输出该年12个月份 输入任意年份月份,输出该年月日历等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)