急!~~~~ 用c或者c++编写 打印万年历 的程序 要求如下
基本功能已经实现:
/*****************************************************************
*author :wacs5
*date :**(yyymmdd)
*email :wacs5@126.com
*function :用c编写、打印万年历
*targe :http://
*compiler :tc2.0、gcc通过(如果是vc++的话,去掉#include <conio.h>)
* *另外getch()函数可以换成system("pause")语句.
*****************************************************************/
#include <time.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
int daysinmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int daysinyear[13]={0,31,59,90,120,151,181,212,243,273,304,334,365};
char month**[13][4]={"","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"};
char week**eng[8][4]={"sun","mon","tue","wed","thu","fri","sat"};
char week**chs[8][3]={"天","一","二","三","四","五","六"};
int main()
{
int year,month,day;
int flag=1; /*是否输出到文件,1为输出,0为不输出*/
long date1;
int **loopyear(int year);
int checkday(int year,int month,int day);
long date2long(int year,int month,int day);
int week(long day);
int printnow(int flag);
int monthcalendar(int year,int month,int flag);
int yearcalendar(int year,int flag);
int printnummask(int year,char ch,file *fp);
printnow(flag); /*输出当月月历并输出时间,flag=1代表输出到文件*/
printf("year=");
scanf("%d",&year);
yearcalendar(year,flag); /*输出2010年年历,flag=1代表输出到文件*/
getch();
}
/*判断闰年*/
int **loopyear(int year)
{
return year%400==0 || (year%100 && year%4==0);
}
/*检查日期的合法性*/
int checkday(int year,int month,int day)
{
int **loopyear(int year);
/*年月日大于零,月份为1-12,日期为1至当月最大的天数,注意二月份的闰月*/
if (year>=0 && month>0 && month<=12 && day>0 && \
day<=( daysinmonth[month]+(month==2&&**loopyear(year)) ) )
return 1;
else
return 0;
}
/*返回year年month月day日到0000年1月0日(抽象的时间)的天数*/
long date2long(int year,int month,int day)
{
long days;
days=year*365l+year/4-year/100+year/400 + (year>0); /*year年1月0日经历的天数,0年是闰年*/
days+=daysinyear[month-1]+ (month>2&&**loopyear(year)) + day; /*加上月份以及天数*/
return days;
}
/*计算星期*/
int week(long days)
{
return (days+5)%7;
}
/*输出现在时刻,并输出当月日历*/
int printnow(int flag)
{
time_t now;
struct tm *tm_1;
int week(long day);
int checkday(int year,int month,int day);
long date2long(int year,int month,int day);
int monthcalendar(int year,int month,int flag);
time(&now);
tm_1=localtime(&now);
monthcalendar(tm_1->tm_year+1900,tm_1->tm_mon+1,flag);
printf("今天是:%4d年%02d月%02d日,星期%s\n",tm_1->tm_year+1900,tm_1->tm_mon+1,tm_1->tm_mday,week**chs[tm_1->tm_wday]);
printf("当前时间是:%02d时%02d分%02d秒\n",tm_1->tm_hour,tm_1->tm_min,tm_1->tm_sec);
return 1;
}
/*输出月历*/
int monthcalendar(int year,int month,int flag) /*flag=1时,写文件*/
{
int i,k,day,week;
long days;
char filename[80];
int week(long day);
int checkday(int year,int month,int day);
long date2long(int year,int month,int day);
file *fp;
if (flag)
{
sprintf(filename,"%04d_%02d.txt",year,month);
fp=fopen(filename,"w");
if (fp==**)
{
printf("file open error in function:monthcalendar\npress any key to exit:");
getch();
exit(-1);
}
}
day=1;
if (!checkday(year,month,day))
{
printf("format:%d-%d-1(yyyy-mm-dd) ** invaild in function:monthcalendar\n",year,month);
return 0;
}
days=date2long(year,month,day);
week=week(days);
k=(4*7-9)/2;
for (i=0;i<k;i++)
filename[i]=' ';
filename[k]='\0';
printf("monthcalendar:\n%s%d--%s\n",filename,year,month**[month]);
if (flag)
fprintf(fp,"%s%d--%s\n",filename,year,month**[month]);
for (i=0;i<7;i++)
{
printf("%s ",week**eng[i]);
if (flag)
fprintf(fp,"%s ",week**eng[i]);
}
printf("\n");
if (flag)
fprintf(fp,"\n");
for (i=0;i<week;i++)
{
printf(" ");
if (flag)
fprintf(fp," ");
}
for (i=day;i<=daysinmonth[month]+(month==2)*(**loopyear(year));i++) /*闰年的2月份,要加一*/
{
printf("%3d ",i);
if (flag)
fprintf(fp,"%3d ",i);
if ((i+week)%7==0)
{
printf("\n");
if (flag);
fprintf(fp,"\n");
}
}
printf("\n");
if (flag)
{
fprintf(fp,"\n");
fclose(fp);
}
return 1;
}
/*输出年历*/
int yearcalendar(int year,int flag)
{
int month_col=2; /*每行几个月历*/
int space_col=4; /*两个月历的空格数*/
int month_row=(int)ceil(12.0/month_col);
int line,end_day[13],keepgoing[13]={1};
int i,j,k,month,day[13],week[13];
long days[13];
char space[3][80];
int week(long day);
int checkday(int year,int month,int day);
long date2long(int year,int month,int day);
int printnummask(int year,char ch,file *fp);
file *fp;
if (flag)
{
char filename[80];
sprintf(filename,"%04d.txt",year);
fp=fopen(filename,"w");
if (fp==**)
{
printf("file open error in function:yearcalendar\npress any key to exit:");
getch();
exit(-1);
}
}
for (month=1;month<=12;month++)
{
day[month]=1;
if (!checkday(year,month,day[month]))
{
printf("format:%d-%d-1(yyyy-mm-dd) ** invaild in function:yearcalendar\n",year,month);
return 0;
}
days[month]=date2long(year,month,day[month]);
week[month]=week(days[month]);
keepgoing[month]=1;
}
k=(7*4-3)/2;
for (i=0;i<k;i++) /*月份标识前空格*/
space[0][i]=' ';
space[0][i]='\0';
for (i=0;i<7*4-3-k;i++) /*月份标识后空格*/
space[1][i]=' ';
space[1][i]='\0';
for (i=0;i<space_col;i++) /*两列之间的空格*/
space[2][i]=' ';
space[2][i]='\0';
printnummask(year,'*',stdout);
printnummask(year,'*',fp);
month=1;
for (i=0;i<month_row;i++)
{
for (j=0;j<month_col;j++) /*输出月份的缩写*/
{
printf("%s%s%s",space[0],month**[month+j],space[1]); /*前导空格,月份缩写,后导空格*/
if (flag)
fprintf(fp,"%s%s%s",space[0],month**[month+j],space[1]);
if (j<month_col-1) /*月份列与列之间的空格*/
{
printf("%s",space[2]);
if (flag)
fprintf(fp,"%s",space[2]);
}
}
printf("\n"); /*换行*/
if (flag)
fprintf(fp,"\n");
for (j=0;j<month_col;j++)
{
for (k=0;k<7;k++) /*星期的缩写*/
{
printf("%s ",week**eng[k]);
if (flag)
fprintf(fp,"%s ",week**eng[k]);
}
if (j<month_col-1) /*月份列与列之间的空格*/
{
printf("%s",space[2]);
if (flag)
fprintf(fp,"%s",space[2]);
}
}
printf("\n"); /*换行*/
if (flag)
fprintf(fp,"\n");
for (j=0;j<month_col;j++) /*横线*/
{
for (k=0;k<7;k++) /*横线*/
{
printf("____",week**eng[k]);
if (flag)
fprintf(fp,"____",week**eng[k]);
}
if (j<month_col-1) /*月份列与列之间的空格*/
{
printf("%s",space[2]);
if (flag)
fprintf(fp,"%s",space[2]);
}
}
printf("\n"); /*换行*/
if (flag)
fprintf(fp,"\n");
for (j=0;j<month_col;j++)/*第一行*/
{
for (k=0;k<week[month+j];k++) /*1号之前的放空*/
{
printf(" ");
if (flag)
fprintf(fp," ");
}
for (k=1;k<=7;k++)
{
printf("%3d ",k);
if (flag)
fprintf(fp,"%3d ",k);
if ((k+week[month+j])%7==0)
{
end_day[month+j]=k+1;
printf("%s",space[2]);
if (flag)
fprintf(fp,"%s",space[2]);
break;
}
}
}
printf("\n"); /*换行*/
if (flag)
fprintf(fp,"\n");
for (line=0;line<5;line++)
{
for (j=0;j<month_col;j++)
{
if (keepgoing[month+j]==0) /*补一行空格行*/
for (k=0;k<7;k++)
{
printf(" ");
if (flag)
fprintf(fp," ");
}
else
{
for (k=end_day[month+j];k<=daysinmonth[month+j]+(month==2)*(**loopyear(year));k++)
{
printf("%3d ",k);
if (flag)
fprintf(fp,"%3d ",k);
if ((k+week[month+j])%7==0)
{
end_day[month+j]=k+1;
break;
}
}
if (k>=daysinmonth[month+j]+(month==2)*(**loopyear(year)))
keepgoing[month+j]=0;
if (k>daysinmonth[month+j]+(month==2)*(**loopyear(year))) /*补空格*/
{
for (;k<100;k++)
{
printf(" ");
if (flag)
fprintf(fp," ");
if ((k+week[month+j])%7==0)
break;
}
}
}
if (j<month_col-1) /*月份列与列之间的空格*/
{
printf("%s",space[2]);
if (flag)
fprintf(fp,"%s",space[2]);
}
}
printf("\n"); /*换行*/
if (flag)
fprintf(fp,"\n");
/*每行中各个月份是否都已经输出完毕*/
k=0;
for (j=0;j<month_col;j++)
k+=keepgoing[month+j];
if (k==0)
break;
}
month += month_col;
printf("\n"); /*换行*/
if (flag)
fprintf(fp,"\n");
}
if (flag)
fclose(fp);
return 1;
}
/*数字模输出*/
int printnummask(int year,char ch,file *fp)
{
/*5*5数字模*/
int mask[10][5]={ {31,17,17,17,31},{ 1, 1, 1, 1, 1},\
{31,1 ,31,16,31},{31, 1,31, 1,31},\
{17,17,31, 1, 1},{31,16,31, 1,31},\
{31,16,31,17,31},{31, 1, 1, 1, 1},\
{31,17,31,17,31},{31,17,31, 1,31}};
int digit[16]={0};
char space=' ';
int i,j,k,n;
n=0;
while(year)
{
digit[n++]=year%10;
year/=10;
}
for (i=0;i<5;i++) /*行*/
{
for (k=0;k<n;k++) /*字的第i行*/
{
for (j=0;j<5;j++) /*列*/
{
if ( mask[digit[n-1-k]][i] & (1<<(4-j)) )
fprintf(fp,"%c",ch);
else
fprintf(fp,"%c",space);
}
fprintf(fp,"%c",space);
}
fprintf(fp,"\n");
}
return 1;
}
输出结果:
当月月历以及2010年年历
-
佚名2024-06-08 22:40:03
问c语言 万年历的程序设计
答#include <windows.h> #include <winnt.h> #include<iostream>#include<i...
-
佚名2024-06-08 02:52:48
问谁能用c++编写计算万年历程序啊?
答说实话,编写这样一个东东有点麻烦,况且lz只用零分~参考http://我去年编写的,里面没有“显示某一年某一个月的日历”的功能,但是你参考其他功能自己写一下吧。...
-
佚名2024-06-08 08:00:00
问用c语言编写万年历
答#include <stdio.h>#include <process.h>int day_s();int year_s();int week_s(...
-
佚名2024-06-08 08:00:00
问c语言万年历程序
答出现无限递归的问题,我提供的头文件是不会有这样的问题的,请查看是否有递归调用的问题,同时,检查项目设置属性是否正确。另附原始头文件如下:#ifndef _hel...
-
佚名2024-06-08 08:00:00
问万年历c语言编程
答#include<iostream> using namespacestd; const intmon_day[2][12]={31,28,31,...
-
佚名2024-06-08 08:00:00
问使用c语言编写万年历
答#include<iostream>#include<windows.h>#include<ctime>using namespace std...
-
佚名2024-06-08 08:00:00
问求高手编写一个万年历的c语言程序
答#include<stdio.h> #include<stdlib.h> char* month_str[]={"january","februar...
-
佚名2024-06-08 08:00:00
问求用c语言编写打印万年历的程序代码
答#include<stdio.h>int monthday(int,int);int **leapyear(int);main(){ int d...
-
佚名2024-06-08 08:00:00
问编写一个万年历,用c++编写。
答#include<iostream.h>#include<iomanip.h>static char *title=" sun mon tue...
-
佚名2024-06-08 08:00:00
问用c++程序编写打印一份万年历?急急急
答http://
风水
起名
网名
- 1 神一样网名
- 2 网名2字情侣网名
- 3 青年创业的网名
- 4 空白网名用手机怎么打
- 5 花舞月夕相似四字网名
- 6 雪诺情侣网名
- 7 微信个性英语网名男生
- 8 网名矿泉水的意思
- 9 微信群昵称乱码
- 10 该群成员昵称
说说
- 1 个性签名女悲伤
- 2 闺蜜三人霸气个性签名
- 3 五字名字个性签名
- 4 最新女生霸气签名2015最新版
- 5 想处个对象的说说
- 6 联系全书 说说祥子为什么要咒骂刘四
- 7 闯娱乐圈的说说
- 8 七月新的一个月开始的说说
- 9 表示心情突然不好的说说
- 10 不想谈恋爱说说