Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Program Calender - C program to display calendar for any year (BGI graphics)
- Sandipan Dey
- BCSE, JU, Kolkata
- 2002
- */
- #include<graphics.h>
- #include<stdio.h>
- #include<conio.h>
- #include<stdlib.h>
- #include <time.h>
- #include<string.h>
- int leapyear(int year) {
- return((year%4==0 && year%100!=0) || (year%100==0 && year%400==0));
- }
- int firstday(int cday,int cd,int cm,int cy) {
- int td=0, mo=1;
- while(mo < cm) {
- switch(mo) {
- case 2:if(leapyear(cy))td+=29;else td+=28;break;
- case 4: td+=30;break;
- case 6: td+=30;break;
- case 9: td+=30;break;
- case 11:td+=30;break;
- default:td+=31;break;
- }
- ++mo;
- }
- td+=cd;
- if(td%7==1)return(cday);
- else {
- cday+=(1-td%7);
- if(cday>=0)return(cday);
- else return(7+cday);
- }
- }
- void calender(struct tm* t,int y) {
- int i,j,k=2,cy,cd,cm,change,l,m,n,noday,cday;
- char s[15],s1[15],s2[3];
- int gd=DETECT,gm;
- initgraph(&gd,&gm,"");
- cy=t->tm_year+1900;
- cm=t->tm_mon+1;
- cd=t->tm_mday;
- cday=t->tm_wday;
- cday=firstday(cday,cd,cm,cy);
- if(y>=cy) {
- change=y-cy;
- for(i=cy;i<y;++i)
- if(leapyear(i))change++;
- cday=(cday+change)%7;
- }
- else {
- change=cy-y;
- for(i=y;i<cy;++i)
- if(leapyear(i))
- change++;
- }
- cday=(cday-change)%7;
- if(cday<0)
- cday+=7;
- }
- setcolor(14);
- rectangle(20,10,565,29);
- sprintf(s,"CALENDER %d",y);
- setcolor(12);
- outtextxy(220,15,s);
- setcolor(getmaxcolor());
- for(j=30;j<400;j+=110)
- for(i=20;i<400;i+=185) {
- l=1;
- int m=(i+10)+cday*24;
- n=j+39;
- ++k;
- setcolor(10);
- rectangle(i,j,175+i,100+j);
- setcolor(getmaxcolor());
- switch(k) {
- case 3:sprintf(s1," JANUARY");noday=31;break;
- case 4:sprintf(s1," FEBRUARY");if(leapyear(y))noday=29;else noday=28;break;
- case 5:sprintf(s1," MARCH");noday=31;break;
- case 6:sprintf(s1," APRIL");noday=30;break;
- case 7:sprintf(s1," MAY");noday=31;break;
- case 8:sprintf(s1," JUNE");noday=30;break;
- case 9:sprintf(s1," JULY");noday=31;break;
- case 10:sprintf(s1," AUGUST");noday=31;break;
- case 11:sprintf(s1," SEPTEMBER");noday=30;break;
- case 12:sprintf(s1," OCTOBER");noday=31;break;
- case 13:sprintf(s1," NOVEMBER");noday=30;break;
- case 14:sprintf(s1," DECEMBER");noday=31;break;
- }
- setcolor(13);
- outtextxy(i+30,j+10,s1);
- setcolor(getmaxcolor());
- setcolor(4);
- outtextxy(i+10,j+27,"S ");
- setcolor(getmaxcolor());
- outtextxy(i+35,j+27,"M T W T F S");
- setcolor(3);
- line(i,25+j,175+i,25+j);
- setcolor(getmaxcolor());
- while(l<=noday) {
- sprintf(s2,"%d",l);
- if(m==i+10)setcolor(4);
- outtextxy(m,n,s2);
- setcolor(getmaxcolor());
- ++l; m+=24;
- if(m>165+i){m=i+10;n+=10;}
- }
- cday=(cday+l--)%7-1;
- if(cday<0)cday+=7;
- }
- getch();
- closegraph();
- }
- int main(int argc,char* argv[]) {
- time_t timer;
- struct tm *tblock;
- char x[10];
- int y,z;
- timer = time(NULL);
- tblock = localtime(&timer);
- clrscr();
- if(!strcmp(argv[1],"\0"))
- y=tblock->tm_year+1900;
- else
- y=atoi(argv[1]);
- calender(tblock,y);
- getch();
- return(0);
- }
Add Comment
Please, Sign In to add comment