Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/articles/c-tutorials/)
-   -   Month calender in plain C (http://www.go4expert.com/articles/month-calender-plain-c-t4074/)

shabbir 29Apr2007 18:46

Month calender in plain C
 
Program prints the month without using any system related information but just making some simple calculations of days from the reference day 1/1/1900 as Monday.
Code: C

#include<stdio.h>
#include<conio.h>
#define Y 1900             /*1/1/1900 Monday*/

void days(int ,int );
void display(int , int );

// Almost constant but we modify the month[1] i.e. Feb for leap year
int month[]={{31},{28},{31},{30},{31},{30},{31},{31},{30},{31},{30},{31}};

int main()
{
    int m,yr;
    int i = 0;
    do
    {
        i++;
        if(i > 1)
        {
            printf("\nWhat kind of month that was please re-enter\n");
        }
        printf("Enter the month [1-12]\t");
        scanf("%ld",&m);
    }while(m>12 || m<0);
    i = 0;
    do
    {
        i++;
        if(i > 1)
        {
            printf("\nPlease enter year of this century i.e. 1900 or above\n");
        }
        printf("Enter the year\t");
        scanf("%ld",&yr);
    }while(yr<1900);

    if((yr%4==0)&&((yr%100!=0)||(yr%400==0)))
    {
        // We did not had the month as const because of this.
        month[1]=29;
    }

    days(m,yr);
    printf("\n\n");
    return 0;
}

void days(int m,int yr)
{
    int i,md=0,leap=0,track;
    unsigned int d,yrd;
    for(i=Y;i<yr;i++)
    {
        if((i%4==0)&&((i%100!=0)||(i%400==0)))
            leap++;
    }
    for(i=0;i<(m-1)&&(i<11);i++)
        md=md+month[i];
    yrd=(yr-Y)*365;
    d=yrd+leap+md;
    track=d%7;
    display(m,track);
}

void display(int m, int track)
{
    int dt,loop;
    printf("\n\n\t");
    printf("Mon\tTues\tWed\tThurs\tFri\tSat\tSun\n\n");
    for(loop=0;loop<=track;loop++)
        printf("\t");
    for(dt=1;dt<=month[m-1];dt++)
    {
        if(track%7==0 && track!=0)
            printf("\n\n\t");
        printf("%d\t",dt);
        track++;
    }
}

Output
Code:

Enter the month [1-12]  4
Enter the year  2007


    Mon    Tues    Wed    Thurs  Fri    Sat    Sun

                                                    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



All times are GMT +5.5. The time now is 08:26.