这是原来学习C语言时编写的一个小练习,代码比较垃圾,但是运行正常.高手进来指点一下关于写入文件的操作.谢谢!
//***************************************************万年历********************************
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
void Month(int y,int n,int x);
void CALENDAR(int y);
int WEEK(int y,int m);
char *x[]={"Su","Mo","Tu","We","Th","Fr","Sa"};
int a[31]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
void main()//主函数实现主菜单循环
{
int b,Y,A,M=1,i,a[7]={0,1,2,3,4,5,6};//y是年份后两位,m是月份,d是日数。
system("COLOR 17");
printf("查询年历请输入~~~~~~~~~~~~~~~~1/n查询月历请输入~~~~~~~~~~~~~~~~2/n");
scanf("%d",&b);
switch(b)
{
case 1:
printf("请输入想查询的年份:/n");
scanf("%d",&Y);
A=WEEK(Y,M);
for(i=0;i<7;i++)
printf("%s ",x[i]);
printf("/n");
CALENDAR(Y);
break;
case 2:
printf("请输入想查询的年份和月份:/n");scanf("%d%d",&Y,&M);
A=WEEK(Y,M);
for(i=0;i<7;i++)
printf("%s ",x[i]);
printf("/n");
Month(Y,M,A);
break;
}
system("pause");
}
void Month(int y,int n,int x)//月内日期的打印
{
int *p;
int i,j,k,m;
p=a;
for (i=1;i<=x;i++)
printf("** ");
if (y/4==0&&y/100!=0||y/400==0)//判闰年分析二月
{
if(n==2)
for(i=0;i<7-x;i++)
printf("%2d ",*(p+i));
printf("/n");
j=i;
do
{
printf("%2d ",*(p+j));
if((j-i)%7==0)printf("/n");
}while(j<29);
printf("/n");
}
if(n==2)
{
for(i=0;i<7-x;i++)
printf("%2d ",*(p+i));
printf("/n");
j=i;
do
{
printf("%2d ",*(p+j++));
if((j-i)%7==0)printf("/n");
}while(j<28);
printf("/n");
}
if(n==1||n==3||n==5||n==7||n==8||n==10||n==12)//三十天的月份
{
for(i=0;i<7-x;i++)
printf("%2d ",*(p+i));
printf("/n");
j=i;
do
{
printf("%2d ",*(p+j++));
if((j-i)%7==0)printf("/n");
}while(j<31);
printf("/n");
}
if(n==4||n==6||n==9||n==11)//三十天的月份
{
for(i=0;i<7-x;i++)printf("%2d ",*(p+i));
printf("/n");
j=i;
do
{
printf("%2d ",*(p+j++));
if((j-i)%7==0)printf("/n");
}while(j<30);
printf("/n");
}
}
int WEEK(int y,int m)//每月的第一天对应的星期
{
int A,Y,M;
Y=y;
M=m;
A = Y > 0 ? (5 + (Y + 1) + (Y - 1)/4 - (Y - 1)/100 + (Y - 1)/400) % 7 : (5 + Y + Y/4 - Y/100 + Y/400) % 7;
A = M > 2 ? (A + 2*(M + 1) + 3*(M + 1)/5) % 7 : (A + 2*(M + 2) + 3*(M + 2)/5) % 7;
if (((Y%4 == 0 && Y%100 != 0) || Y%400 == 0) && M>2)
{
A = (A + 1) % 7;
}
A = (A + 1) % 7;
return A;
}
void CALENDAR(int y)//年历的打印
{
int m,n,i=0,j,M[]={1,2,3,4,5,6,7,8,9,10,11,12};
do
{
j=M[i];
n=WEEK(y,j);
if(i<12)
printf("第【%d】个月",i+1);
printf("/n");
Month(y,j,n);
if(i<11)
for(m=0;m<7;m++)
printf("%s ",x[m]);
printf("/n");
}while(i++<11);
}