Calendar Application Project Using C Language
Leap Years and the Gregorian Calendar
The Gregorian calendar is the most widely used calendar in the world. There are leap years in the Gregorian calendar. There are 303 regular years and 97 leap years in a four-hundred-year span. The majority of people believe that every fourth year is a leap year, although this is not the case.
How can you figure out which years are leap years?
A leap year is one in which the year is divisible by four. It is not a leap year, however, if the year is divisible by 100. It is, nevertheless, a leap year if the year is also divisible by 400. As a result, we may form the following statement:
if(year% 4 == FALSE && year%100 != FALSE || year%400 == FALSE)
{
// It is a leap year and February has 29 days.
}
else
{
// It is not a leap year, so February has 28 days.
}
Source Code for Calendar Application Project Using C Language
The whole calendar example may be seen below. The user is asked to input a year, such as 2010, in the example.
#include<stdio.h>
#define TRUE 1
#define FALSE 0
int days_in_month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char *months[]=
{
" ",
"\n\n\nJanuary",
"\n\n\nFebruary",
"\n\n\nMarch",
"\n\n\nApril",
"\n\n\nMay",
"\n\n\nJune",
"\n\n\nJuly",
"\n\n\nAugust",
"\n\n\nSeptember",
"\n\n\nOctober",
"\n\n\nNovember",
"\n\n\nDecember"
};
int inputyear(void)
{
int year;
printf("Please enter a year (example: 1999) : ");
scanf("%d", &year);
return year;
}
int determinedaycode(int year)
{
int daycode;
int d1, d2, d3;
d1 = (year - 1.)/ 4.0;
d2 = (year - 1.)/ 100.;
d3 = (year - 1.)/ 400.;
daycode = (year + d1 - d2 + d3) %7;
return daycode;
}
int determineleapyear(int year)
{
if(year% 4 == FALSE && year%100 != FALSE || year%400 == FALSE)
{
days_in_month[2] = 29;
return TRUE;
}
else
{
days_in_month[2] = 28;
return FALSE;
}
}
void calendar(int year, int daycode)
{
int month, day;
for ( month = 1; month <= 12; month++ )
{
printf("%s", months[month]);
printf("\n\nSun Mon Tue Wed Thu Fri Sat\n" );
// Correct the position for the first date
for ( day = 1; day <= 1 + daycode * 5; day++ )
{
printf(" ");
}
// Print all the dates for one month
for ( day = 1; day <= days_in_month[month]; day++ )
{
printf("%2d", day );
// Is day before Sat? Else start next line Sun.
if ( ( day + daycode ) % 7 > 0 )
printf(" " );
else
printf("\n " );
}
// Set position for next month
daycode = ( daycode + days_in_month[month] ) % 7;
}
}
int main(void)
{
int year, daycode, leapyear;
year = inputyear();
daycode = determinedaycode(year);
determineleapyear(year);
calendar(year, daycode);
printf("\n");
}
Explanation
To begin, we'll create two arrays: one with the number of days in each month, and another with all of the month names. Note that the first position in both arrays is intentionally left empty; we want to keep things simple by using 1 to 12.
The user input is obtained via the first function inputyear(). The user is asked to enter a year. Note that no input validation or error handling is done in order to keep things basic.
The following method, determinedaycode(), is used to get the day number of the first day of that year, allowing us to display the date in the proper location. (As a result, it's just utilized for output.)
The determineleapyear() method is used to see whether the user's input is a leap year. If this is the case, the number of days in February is increased to 29.
Each month is printed on the screen using the final function calendar(). To loop across all months, use the first for loop. The month's name and all of the days of the week are then printed. The daycode is then used to place the prompt under the correct weekday. Then we print a month's worth of dates. The final step is to place the prompt in the proper weekday position.
Output
Final Thoughts
This concludes the C programming lesson. We hope you now know how to find days-names or dates in a year, month, or week, and that you can utilize the calendar example to develop your own date/days-names functions.