第1个回答 2011-03-29
我曾经写过一个类似的程序,要求比这个复杂(可以运行一下看效果),你可以参考一下我的源代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
const int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char number[10][5][5]={
{{'*','*','*','*','*'},{'*',' ',' ',' ','*'},{'*',' ',' ',' ','*'},{'*',' ',' ',' ','*'},{'*','*','*','*','*'}},
{{' ',' ','*','*',' '},{' ',' ',' ','*',' '},{' ',' ',' ','*',' '},{' ',' ',' ','*',' '},{' ',' ','*','*','*'}},
{{'*','*','*','*','*'},{' ',' ',' ',' ','*'},{'*','*','*','*','*'},{'*',' ',' ',' ',' '},{'*','*','*','*','*'}},
{{'*','*','*','*','*'},{' ',' ',' ',' ',' '},{'*','*','*','*','*'},{' ',' ',' ',' ','*'},{'*','*','*','*','*'}},
{{' ',' ','*','*',' '},{' ','*',' ','*',' '},{'*',' ',' ','*',' '},{'*','*','*','*','*'},{' ',' ',' ','*',' '}},
{{'*','*','*','*','*'},{'*',' ',' ',' ',' '},{'*','*','*','*','*'},{' ',' ',' ',' ','*'},{'*','*','*','*','*'}},
{{'*','*','*','*','*'},{'*',' ',' ',' ',' '},{'*','*','*','*','*'},{'*',' ',' ',' ',' '},{'*','*','*','*','*'}},
{{'*','*','*','*','*'},{' ',' ',' ',' ','*'},{' ',' ',' ',' ','*'},{' ',' ',' ',' ','*'},{' ',' ',' ',' ','*'}},
{{'*','*','*','*','*'},{'*',' ',' ',' ','*'},{'*','*','*','*','*'},{'*',' ',' ',' ','*'},{'*','*','*','*','*'}},
{{'*','*','*','*','*'},{'*',' ',' ',' ','*'},{'*','*','*','*','*'},{' ',' ',' ',' ','*'},{'*','*','*','*','*'}}
};
char ww[50]=" Sun Mon Tue Wed Thu Fri Sat";
char yue[13][10]={{""},{"Jan"},{"Feb"},{"Mar"},{"Apr"},{"May"},{"June"},
{"July"},{"Aug"},{"Sep"},{"Oct"},{"Nov"},{"Dec"}};
int year,week,total,top;
char tab[100][100];
FILE *fout;
int is_run(int x) {
if (x % 4 ==0 && x % 100 || x % 400==0) return 1;
return 0;
}
int maxx(int x,int y) {
return x>y?x:y;
}
void init()
{
bool ok;
char line[101];
printf("请输入年份xxxx: ");
while (1)
{
ok=true;
gets(line);
for (int i=0;i<strlen(line);i++)
{
if (line[i]==' ') continue;
if ( line[i]>'9' || line[i]<'0') { ok=false; break; }
}
if ( sscanf(line,"%d",&year) != 1 ) ok =false;
if (year<0 || year>9999) ok=false;
if (!ok) printf("输入不符合要求,请重新输入: ");
else break;
}
}
void printyear()
{
int a[4];
int i,j,k;
a[0]=year / 1000;
a[1]=year / 100 % 10;
a[2]=year / 10 % 10;
a[3]=year % 10;
for (i=0;i<5;i++)
{
printf(" ");
for (k=0;k<4;k++)
{
for (j=0;j<5;j++)
putchar(number[a[k]][i][j]);
printf(" ");
}
printf("\n");
}
printf("\n");
}
void printyear_to_file()
{
int a[4];
int i,j,k;
a[0]=year / 1000;
a[1]=year / 100 % 10;
a[2]=year / 10 % 10;
a[3]=year % 10;
for (i=0;i<5;i++)
{
fprintf(fout," ");
for (k=0;k<4;k++)
{
for (j=0;j<5;j++)
fprintf(fout,"%c",number[a[k]][i][j]);
fprintf(fout," ");
}
fprintf(fout,"\n");
}
fprintf(fout,"\n");
}
void printit()
{
int i,j;
int pos;
for (i=1;i<=12;i++)
{
top=(i-1)/2*9;
sprintf(tab[top] + strlen(tab[top])," %s ",yue[i]); top++;
sprintf(tab[top] + strlen(tab[top]), " ___________________________ "); top++;
sprintf(tab[top] + strlen(tab[top]), "%s ",ww); top++;
pos=week*4;
for (int ii=0;ii<week;ii++) sprintf(tab[top] + strlen(tab[top]), " ");
int mon=month[i];
if (i==2) mon += is_run(year);
for (j=1;j<=mon;j++)
{
week++;
if (week==7) week=0;
sprintf(tab[top] + strlen(tab[top]), "%4d",j);
pos+=4;
if ( pos == 28 ) { sprintf(tab[top] + strlen(tab[top])," "); top++; pos=0; }
}
if ( i % 2 )
{
for (j=pos;j<30;j++) sprintf(tab[top] + strlen(tab[top])," ");
if (top<(i-1)/2*9+8)
{
top++;
for (j=0;j<30;j++) sprintf(tab[top] + strlen(tab[top])," ");
}
}
}
printyear();
for (i=0;i<6*9;i++)
puts(tab[i]);
fout=fopen("B09060428A.txt","a+");
if (!fout)
printf("Can't open the file to store it! Sorry!\n");
else
{
printyear_to_file();
for (i=0;i<6*9;i++) fprintf(fout,"%s\n",tab[i]);
fprintf(fout,"\n\n");
fclose(fout);
}
}
int main()
{
char ch;
while (1)
{
memset(tab,0,sizeof(tab));
init();
total=0;
if (year>=2010)
{
int i;
for (i=2010;i<year;i++)
total+=365 + is_run(i);
week= (total + 5) % 7;
}else
{
int i;
for (i=2009;i>=year;i--)
total+=365 + is_run(i);
week= (14 - total % 7 -2 ) % 7;
}
printit();
printf("是否需要继续?Y(y) / N(n) :");
scanf("%s",&ch); getchar();
if (ch!='Y' && ch!='y')
{
printf("***********************Game over!*************************\n");
break;
}
}
return 0;
}