c语言程序设计 万年历报告书

c语言程序设计 万年历报告书,第1张

#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",&currentYear,&currentMonth,&currentDay);

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个月份 输入任意年份月份,输出该年月日历等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9347152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存