The mini-project “Calendar in C” is a console application using the C programming language. This project compiles in Code Blocks with the GCC compiler. In this console application, you can check the date for the given month and year.
In this project, we are using Zeller’s Congruence. Zeller’s congruence is an algorithm devised by Christian Zeller in the 19th century to calculate the day of the week for any Julian or Gregorian calendar date. It can be considered to be based on the conversion between Julian day and the calendar date.
Check the below C code for the calendar. The below code allows you to navigate year or month using the arrow key of your keyboard. Later I will update the explanation of the code.
#include<stdio.h> //check leap year #define IS_LEAP_YEAR(Year) ((Year%4==0 && Year%100 != 0)||Year%400==0) /*Function returns the index of the days of the given month and year using ZELLER'S ALGORITHM For e.g- Index Day 0 Sunday 1 Monday 2 Tuesday 3 Wednesday 4 Thursday 5 Friday 6 Saturday*/ int getZeller(int Month,int Year) { int Day = 1, ZMonth, ZYear, Zeller; if(Month < 3) ZMonth = Month+10; else ZMonth = Month-2; if(ZMonth > 10) ZYear = Year-1; else ZYear = Year; Zeller = ((int)((13*ZMonth-1)/5)+Day+ZYear%100+ (int)((ZYear%100)/4)-2*(int)(ZYear/100)+ (int)(ZYear/400)+77)%7; return Zeller; } /* A Function to return the number of days in a month Month Number Name Number of Days 0 January 31 1 February 28 (non-leap) / 29 (leap) 2 March 31 3 April 30 4 May 31 5 June 30 6 July 31 7 August 31 8 September 30 9 October 31 10 November 30 11 December 31 */ int getNumberOfDays(int monthNumber, int year) { int MonthDay[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; MonthDay[monthNumber-1] += (IS_LEAP_YEAR(year) && (monthNumber == 2)); return (MonthDay[monthNumber-1]); } //Align the message void printMessageCenter(const char* message) { int len =0; int pos = 0; //calculate how many space need to print len = (78 - strlen(message))/2; printf("\t\t\t"); for(pos =0 ; pos < len ; pos++) { //print space printf(" "); } //print message printf("%s",message); } // Function to print the calendar of the given year void printCalendar(int month,int year) { //get month name char * months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; char buf[32] = {0}; int j,k; sprintf(buf,"%s%d\n\n","Calendar - ",year); printMessageCenter(buf); int days; // Index of the day from 0 to 6 int current = getZeller(month,year); days = getNumberOfDays (month, year); // Print the current month name printMessageCenter(months[month-1]); printf("\n"); // Print days in the columns printf(" Sun Mon Tue Wed Thu Fri Sat\n"); // Print appropriate spaces for (k = 0; k < current; k++) printf(" "); //print days as per the month for (j= 1; j <= days; j++) { printf("%5d", j); ++k; //change new line for each week if (k > 6) { k = 0; printf("\n"); } } if (k) printf("\n"); current = k; } void headMessage(const char *message) { system("cls"); printf("\t\t\t###########################################################################"); printf("\n\t\t\t############ ############"); printf("\n\t\t\t############ C Project: Calendar For Given Month. ############"); printf("\n\t\t\t############ ############"); printf("\n\t\t\t###########################################################################"); printf("\n\t\t\t---------------------------------------------------------------------------\n"); printMessageCenter(message); printf("\n\t\t\t----------------------------------------------------------------------------"); } void welcomeMessage() { headMessage("www.aticleworld.com"); printf("\n\n\n\n\n"); printf("\n\t\t\t **-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**\n"); printf("\n\t\t\t =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="); printf("\n\t\t\t = Program ="); printf("\n\t\t\t = Shows ="); printf("\n\t\t\t = calendar of a ="); printf("\n\t\t\t = Given Month ="); printf("\n\t\t\t = ="); printf("\n\t\t\t =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="); printf("\n\t\t\t **-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**\n"); printf("\n\n\n\t\t\t Enter any key to continue....."); getchar(); system("cls"); printf("\n\tThis program shows calendar of a given month.\n\n"); } int main() { int Month, Year; welcomeMessage(); //validate input while(1) { fflush(stdin); printf("Enter the Year YYYY = "); scanf("%d",&Year); printf("Enter the Month = "); scanf("%d", &Month); if(Year < 0) { printf("\nInvalid year value..."); continue; } if(Year < 100) Year += 1900; if(Year < 1582 || Year > 4902) { printf("\nInvalid year value..."); continue; } if(Month < 1 || Month > 12) { printf("\nInvalid month value..."); continue; } break; } /*Break loop after valid input*/ //clean console system("cls"); do { printCalendar(Month,Year); //Display message printf("\n\n\t\t(*) Press Up Arrow for Next Year."); printf("\n\n\t\t(*) Press Down Arrow for Previous Year."); printf("\n\n\t\t(*) Press Right Arrow for Next Month."); printf("\n\n\t\t(*) Press Left Arrow for Previous Month."); printf("\n\n\t\t(*) Press ESC for Exit.\n\n\n\t\t"); char KeyCode = getch(); /* getting Key Code */ if(KeyCode == 72) /* Up Arrow */ Year++; if(KeyCode == 80) /* Down Arrow */ Year--; if(KeyCode == 77) /* Right Arrow */ { Month++; if(Month > 12) { Month = 1; Year++; } } if(KeyCode == 75) /* Left Arrow */ { Month--; if(Month < 1) { Month = 12; Year--; } } if(KeyCode == 27) /* Esc button */ { system("cls"); printf("\n\n\n\n\n\t\tBye Bye ..."); printf("\n\t\tThanks for reading Aticleworld\n\n\n\n\n\n"); exit(1); } system("cls"); } while(1); return (0); }
Output:
Screen 1:
This is the first welcome screen that asks you to press any key on your keyboard.
Screen 2:
After pressing the key on your keyboard a second screen will prompt. The second screen will ask you to enter the valid year and month.
Screen 3:
This screen will show the date and day according to your input. This screen also allows you to see the day and date of the next and previous year and month; you just need to press the arrow button as per the description.
For example, if you want to see the calendar for the next year you just need to press the “up arrow (↑)” button.
Recommended posts:
- Best gift for programmers.
- Hospital Management System Project in C.
- Best Courses and tutorials for the C language.
- Best electronic kits for programmers.
- Library management system project in C.
- Mouse for programmers, you must see.
- Student Record System Project in C.
- Employee Record System Project in C.
- How to use fgetc() in C?
- C program to check leap year.
- C program to check the validity of a given date.