Thursday 26 May 2011

Create a Calender


#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <ctype.h>


unsigned long days=0;
//stores the days elapsed since 01.01.1899
void display(int n)
//contains the number of days to display
{
int i, column, k, flag=0, j;
printf("Sun   Mon   Tues  Wed   Thur  Fri  Sat
");
for(i=1; i<=n; i++)
{
k=days%7;//remainder gives the starting day of each month
if(flag==0)
{
for(j=1; j<=k; j++)//controls tabs of first week
printf(" ");
flag=1;//ensures that block is only executed once
column=k;
}
printf("%d ", i);
column++;
if(column%7==0)//prints new line at the end of each week
printf("
");
}
printf("
Press any key to continue


");
getch();
}


void calculate(int year)
//function calculates no. of days elapsed since 1899
{
int i, month;
for(i=1899; i<year; i++)
        //1899 chosen because Jan 1, 1899 is a Sunday
{
if((i%400==0)?1:((i%100==0)?0:((i%4==0)?1:0)))


/*This is because a leap year does not strictly fall on every
fourth year.  If a year is divisible by 4, then it is a leap
year, but if that year is divisible by 100, then it is
not a leap year.  However, if the year is also divisible by
400, then it is a leap year.  Eg: 1900 is not a leap year*/


days+=366;
else
days+=365;
}
for(month=1; month<=12; month++)
{
printf("




");
switch(month)
        /*switch case used to display each month and
increment no. of days*/
{
case 1: printf(" JANUARAY %d


", year);
display(31);
days+=31;
break;
case 2: printf(" FEBURARY %d


", year);
if((year%400==0)?1:((year%100==0)?0:((year%4==0)?1:0)))
{
display(29);
days+=29;
}
else
{
display(28);
days+=28;
}
break;
case 3: printf(" MARCH %d


", year);
display(31);
days+=31;
break;
case 4: printf(" APRIL %d


", year);
display(30);
days+=30;
break;
case 5: printf(" MAY %d


", year);
display(31);
days+=31;
break;
case 6: printf(" JUNE %d


", year);
display(30);
days+=30;
break;
case 7: printf(" JULY %d


", year);
display(31);
days+=31;
break;
case 8: printf(" AUGUST %d


", year);
display(31);
days+=31;
break;
case 9: printf(" SEPTEMBER %d


", year);
display(30);
days+=30;
break;
case 10: printf(" OCTOBER %d


", year);
display(31);
days+=31;
break;
case 11: printf(" NOVEMBER %d


", year);
display(30);
days+=30;
break;
case 12: printf(" DECEMBER %d


", year);
display(31);
days+=31;
break;
}
}
}


void main()
{
char ch[10];
int i, year, choice;
do
{
clrscr();
days=0;
printf("Enter the year in 'yyyy' format:
");
scanf("%s", ch);//stores input first as a string
for(i=0; i<strlen(ch); i++)
if(ch[i]<'0' || ch[i]>'9')//checks for invalid inputs
{
printf("


Invalid Year!");
printf("


END OF PROGRAM");
getch();
exit(0);
}
year = atoi(ch);
        //converts the year from string to integer datatype
clrscr();
printf("


Calender for Year %d", year);
printf("
**********************


");
calculate(year);
        //calls function to calculate no. of days elapsed

        printf("
*******************************************
");
printf("


Press 1 to continue, 2 to exit
");
scanf("%d", &choice);
}while(choice==1);
clrscr();
printf("


END OF PROGRAM");
getch();
}

0 comments:

Post a Comment