sandipan

C program to display calendar for any year (BGI graphics)

Sep 6th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.06 KB | None | 0 0
  1. /*
  2.  Program Calender - C program to display calendar for any year (BGI graphics)
  3.  Sandipan Dey
  4.  BCSE, JU, Kolkata
  5.  2002
  6. */
  7.  
  8. #include<graphics.h>
  9. #include<stdio.h>
  10. #include<conio.h>
  11. #include<stdlib.h>
  12. #include <time.h>
  13. #include<string.h>
  14.  
  15. int leapyear(int year) {
  16.     return((year%4==0 && year%100!=0) || (year%100==0 && year%400==0));
  17. }
  18.  
  19. int firstday(int cday,int cd,int cm,int cy) {
  20.     int td=0, mo=1;
  21.     while(mo < cm) {
  22.         switch(mo) {
  23.             case 2:if(leapyear(cy))td+=29;else td+=28;break;
  24.             case 4: td+=30;break;
  25.             case 6: td+=30;break;
  26.             case 9: td+=30;break;
  27.             case 11:td+=30;break;
  28.             default:td+=31;break;
  29.         }
  30.         ++mo;
  31.     }
  32.     td+=cd;
  33.     if(td%7==1)return(cday);
  34.     else {
  35.         cday+=(1-td%7);
  36.         if(cday>=0)return(cday);
  37.         else return(7+cday);
  38.     }
  39. }
  40.  
  41. void calender(struct tm* t,int y) {
  42.    
  43.     int i,j,k=2,cy,cd,cm,change,l,m,n,noday,cday;
  44.     char s[15],s1[15],s2[3];
  45.     int gd=DETECT,gm;
  46.     initgraph(&gd,&gm,"");
  47.     cy=t->tm_year+1900;
  48.     cm=t->tm_mon+1;
  49.     cd=t->tm_mday;
  50.     cday=t->tm_wday;
  51.     cday=firstday(cday,cd,cm,cy);
  52.     if(y>=cy) {
  53.         change=y-cy;
  54.         for(i=cy;i<y;++i)
  55.             if(leapyear(i))change++;
  56.         cday=(cday+change)%7;
  57.     }
  58.     else {
  59.         change=cy-y;
  60.         for(i=y;i<cy;++i)
  61.             if(leapyear(i))
  62.                 change++;
  63.     }
  64.     cday=(cday-change)%7;
  65.     if(cday<0)
  66.         cday+=7;
  67.     }
  68.     setcolor(14);
  69.     rectangle(20,10,565,29);
  70.     sprintf(s,"CALENDER %d",y);
  71.     setcolor(12);
  72.     outtextxy(220,15,s);
  73.     setcolor(getmaxcolor());
  74.     for(j=30;j<400;j+=110)
  75.         for(i=20;i<400;i+=185) {
  76.             l=1;
  77.             int m=(i+10)+cday*24;
  78.             n=j+39;
  79.             ++k;
  80.             setcolor(10);
  81.             rectangle(i,j,175+i,100+j);
  82.             setcolor(getmaxcolor());
  83.             switch(k) {
  84.                 case 3:sprintf(s1,"  JANUARY");noday=31;break;
  85.                 case 4:sprintf(s1," FEBRUARY");if(leapyear(y))noday=29;else noday=28;break;
  86.                 case 5:sprintf(s1,"    MARCH");noday=31;break;
  87.                 case 6:sprintf(s1,"    APRIL");noday=30;break;
  88.                 case 7:sprintf(s1,"      MAY");noday=31;break;
  89.                 case 8:sprintf(s1,"     JUNE");noday=30;break;
  90.                 case 9:sprintf(s1,"     JULY");noday=31;break;
  91.                 case 10:sprintf(s1,"   AUGUST");noday=31;break;
  92.                 case 11:sprintf(s1," SEPTEMBER");noday=30;break;
  93.                 case 12:sprintf(s1,"  OCTOBER");noday=31;break;
  94.                 case 13:sprintf(s1," NOVEMBER");noday=30;break;
  95.                 case 14:sprintf(s1," DECEMBER");noday=31;break;
  96.             }
  97.             setcolor(13);
  98.             outtextxy(i+30,j+10,s1);
  99.             setcolor(getmaxcolor());
  100.             setcolor(4);
  101.             outtextxy(i+10,j+27,"S  ");
  102.             setcolor(getmaxcolor());
  103.             outtextxy(i+35,j+27,"M  T  W  T  F  S");
  104.             setcolor(3);
  105.             line(i,25+j,175+i,25+j);
  106.             setcolor(getmaxcolor());
  107.             while(l<=noday) {
  108.                 sprintf(s2,"%d",l);
  109.                 if(m==i+10)setcolor(4);
  110.                 outtextxy(m,n,s2);
  111.                 setcolor(getmaxcolor());
  112.                 ++l; m+=24;
  113.                 if(m>165+i){m=i+10;n+=10;}
  114.             }
  115.             cday=(cday+l--)%7-1;
  116.             if(cday<0)cday+=7;
  117.         }
  118.     getch();
  119.     closegraph();
  120. }
  121.  
  122. int main(int argc,char* argv[]) {
  123.     time_t timer;
  124.     struct tm *tblock;
  125.     char x[10];
  126.     int y,z;
  127.     timer = time(NULL);
  128.     tblock = localtime(&timer);
  129.     clrscr();
  130.     if(!strcmp(argv[1],"\0"))
  131.         y=tblock->tm_year+1900;
  132.     else
  133.         y=atoi(argv[1]);
  134.     calender(tblock,y);
  135.     getch();
  136.     return(0);
  137. }
Add Comment
Please, Sign In to add comment