<stdio.h>
<conio.h>
int calend[7][8]={0};
char shift[7][8]={0};
int month_data(char x[]);
int month_days(int a,int b);
int yoobi_keesan(int year,int month);
int urudosi (int year);
void make_calender(int days,int yoobi);
void print_calender(int seheF,int year,int month);
void main (void)
{
int c=0,c2=0,year,month,days,heseF=0,yoobi;
printf("シフト作成プログラム ver 1.00\n");
while(1)
{
year = month_data("年"); //年の入力
if(2012 <= year && year <= 2030)
{
break;
}
else if(24 <= year && year <= 40)
{
heseF=1;
year = year + 1988;
break;
}
else
{
printf("ERROR!!\n");
}
}
while(1)
{
month = month_data("月"); //月の入力
if(1 <= month && month <= 12)
{
break;
}
else
{
printf("ERROR!!\n");
}
}
days = month_days(month,year); //日数の計算
yoobi = yoobi_keesan(year,month); //曜日計算
make_calender(days,yoobi); //表作る。(配列)
print_calender(heseF,year,month);
getch();
//時間入れる。
//'Z' = 空白 =もう一つ配列を作る。
}
int month_data(char x[])
{
int a;
printf("%sを入力...",x);
scanf("%d",&a);
return a;
}
int month_days(int a, int b) //a=month b=year
{
if( a==1 || a==3 || a==5 || a==7 || a==8 || a ==10 || a==12)
{
return 31;
}
else if( a==2 )
{
return (urudosi(b)+28);
}
else
{
return 30;
}
}
int yoobi_keesan(int year ,int month) //2012/01/01 =sun
{
int x,ycnt,mcnt=1,dcnt=0,tmp[13]={31,28,31,30,31,30,31,31,30,31,30,31};
ycnt=2012;
while(ycnt<year)
{
x=urudosi(ycnt);
dcnt=dcnt+x+1;
++ycnt;
}
while(mcnt<month)
{
if(mcnt==2)
{
dcnt=dcnt+urudosi(year);
++mcnt;
}
else
{
dcnt=dcnt+(tmp[mcnt-1]);
++mcnt;
}
}
dcnt = dcnt % 7;
return dcnt;
}
int urudosi (int year)
{
if((year%4==0&&year%100!=0) || year%400==0)//うるう年の計算をする。
{
return 1;
}
else
{
return 0;
}
}
void make_calender(int days ,int yoobi)
{
int dayscnt=1,x=0,y=0;
while(x <yoobi) //一行目の空白を配列に格納
{
calend[y][x]=0;
++x;
}
while(dayscnt<=days) //配列に格納
{
if(x==7)
{
calend[y][x]=0;
x=0;
++y;
}
else
{
calend[y][x]=dayscnt;
++dayscnt;
++x;
}
}
while(x < 7)
{
calend[y][x]=0;
++x;
}
calend[y][x]=-1;
return;
}
void print_calender(int heseF,int year,int month)
{
int x=0,y=0,mspace=0;
printf("\n\n\n\n\n ");
if(heseF==1)
{
year = year - 1988;
printf("H");
}
printf("%d %d月\n\n",year,month);
printf(" ______________________________________ \n");
printf("| 日 | 月 | 火 | 水 | 木 | 金 | 土 |\n");
printf("  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ \n");
while(calend[y][x]!=-1)
{
if(x==7) //右側の縦線を出力&メモ枠の確保。
{
while(mspace<3)
{
printf("|\n"); //右側の縦線を出力
x=0;
while(x!=7) //メモ枠の確保。
{
printf("| ");
++x;
}
++mspace;
}
printf("|\n");
x=0;
++y;
mspace=0;
printf("  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ \n");
}
else if(calend[y][x]!=0) //日付がある日を出力
{
printf("|");
if(calend[y][x]<=9)
{
printf(" ");
}
printf("%d ",calend[y][x]);
++x;
}
else if(calend[y][x]==0) //日付のない日を出力
{
printf("| ");
++x;
}
}
printf("|");
if(x==7) //右側の縦線を出力&メモ枠の確保。
{
while(mspace<3)
{
printf("|\n"); //右側の縦線を出力
x=0;
while(x!=7) //メモ枠の確保。
{
printf("| ");
++x;
}
++mspace;
}
printf("|\n");
x=0;
++y;
mspace=0;
printf("  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ \n");
}
return;
}
最終更新:2012年09月18日 05:09