Signup/Sign In

Calendar Application Project Using C Language

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.
	// 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.


#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[]=
	" ",

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;
		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("   " );
				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);
	calendar(year, daycode);


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.



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.

About the author:
Adarsh Kumar Singh is a technology writer with a passion for coding and programming. With years of experience in the technical field, he has established a reputation as a knowledgeable and insightful writer on a range of technical topics.