C語言實現的日歷

cwf8 9年前發布 | 1K 次閱讀 C/C++

    #include<stdio.h>

#include<stdlib.h>  
#include<conio.h>  
#include<string.h>  
int a[31]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};  
int main()  
{  
    int Leap(int );  
    int Month(int );  
    void print(int k,int t,int day);  
    int i,j=0,k,m,n,t=-6;  
    int day;  

    int total=1;  


    printf("請輸入年份:");  
    scanf("%d",&m);  
    printf("請輸入月份:");  
    scanf("%d",&n);  
    getchar();  

    do  
    {  
        system("cls");  
        printf("%d年%d月:\n",m,n);  

        total=365*(m-1);  
        for(i=1;i<m;i++)  
            if(Leap(i)==1)  
                total+=1;  

        for(i=1;i<n;i++)  
            total=total+Month(i);  
        day=Month(n);  
        if(Leap(m)==1 && n==2)  
            day++;  
        if(total>1)  
            total--;  
        if(total==0)  
            k=(total+1)%7;  
        else  
            k=(total+2)%7;  

        print(k,t,day);  
        printf("請選擇:");  

        switch(getch())  
        {  
            case '>':  
                if(n==12)  
                {  
                    m++;  
                    n=1;  
                }  
                else  
                    n++;  
                break;  
            case '<':  
                if(n==1)  
                {  
                    m--;  
                    n=12;  
                }  
                else   
                    n--;  
                break;  
            case '?':  
                printf("請輸入年份:");  
                scanf("%d",&m);  
                printf("請輸入月份:");  
                scanf("%d",&n);  
                break;  
            case '#':  
                    j=1;  
                break;  
        }  

        if(j==1)  
            break;  
        putchar(10);  
    }while(1);  

    return 0;  
    }  

int Month(int n)  
{  
    int day;  
    switch(n)  
    {  
        case 1:  
        case 3:  
        case 5:  
        case 7:  
        case 8:  
        case 10:  
        case 12:  
                day=31;  
            break;  
        case 2:  
                day=28;  
            break;  
        case 4:  
        case 6:  
        case 9:  
        case 11:  
                day=30;  
            break;  
        default:  
            printf("您輸入的月份有錯, 請重新輸入!\n");  
    }  
    return day;  
}  

int Leap(int m)  
{//閏年返回1,否則返回0。  
    int i=0;  
    if(m%4==0 && m%100!=0 || m%400==0)  
        i=1;  
    return i;  
}  

void print(int k,int t,int day)  
{  
    FILE *fp;  
    if((fp=fopen("abc.txt","w"))==0)  
    {  
        printf("打開失敗\n");  
        exit(1);  
    }  
    int i;  
    printf("\n日      一      二      三      四     五      六\n");  

    fprintf(fp,"\n日      一      二      三      四     五      六\n");  
        printf("-------------------------------------------------------------\n");  
        fprintf(fp,"---------------------------------------------------------\n");  
        for(i=1;i<=k;i++)  
        {  
            printf("        ");  
            fprintf(fp,"        ");  
        }  
        for(i=0;i<day;i++)  
        {  
            printf("%-8d",a[i]);  
            fprintf(fp,"%-8d",a[i]);  
            if(k==6)  
            {  
                printf("\n");  
                    printf("-------------------------------------------------------------\n");  
                fprintf(fp,"\n");  
                    fprintf(fp,"-----------------------------------------------------------\n");  
                t=0;  
            }  
            if(t!=0 && t%7==0)  
            {  
                printf("\n");  
                fprintf(fp,"\n");  
                printf("-------------------------------------------------------------\n");  
                fprintf(fp,"-----------------------------------------------------------\n");  
            }  
            k++;  
            t++;  
        }  
        printf("\n--------------------------\n");  
        printf("     選  項      \n");  
        printf("   >  下一個月    \n");  
        printf("   <  上一個月    \n");  
        printf("   ? 自定義年月  \n");  
        printf("   #  退出        \n");  
        printf("--------------------------\n");  
        fclose(fp);  
}  </pre> 


 本文由用戶 cwf8 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!