¡Urgente! ~~~~ Utilice C o C++ para escribir un programa para imprimir el calendario perpetuo. Los requisitos son los siguientes:
Se han implementado funciones básicas:
/****************************** * *********************************** *¿Autor?: wacs5 *FECHA: 20101110 (AAAAMMDD) *Correo electrónico : wacs5@126.com *¿Función?: Usar C para escribir e imprimir el calendario perpetuo *Targe:/question/195084859.html *¿Compilador?: TC2.0, Gcc pasó (si es VC, elimine #include?lt; conio.hgt; ) **Además, la función getch() puede ser reemplazada por la declaración system("pause") **********************. ********* *************************************/
#include?lt;time.hgt ;
#include?lt;math.hgt;
#include?lt;stdio.hgt;
#include?lt;conio.hgt;
int?DaysInMonth[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int? DíasEnAño[13]={0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
char?MonthInfo[13][4]= {"","ene","feb","mar","abr","may","jun","jul","ago","sep" ,"Oct","Nov","Dic "};
char?WeekInfoEng[8][4]={"Dom", "Lunes", "Martes", "Miércoles", "Jueves" ", "Viernes", "Sábado"};
char?WeekInfoChs[8][3]={"天","一","二","三","四","五","六"};
int?main()
{ int?año, mes, día; int?flag=1;?/*Si se debe enviar al archivo, 1 significa salida, 0 significa sin salida*/ long ?date1; int?IsLoopYear(int?year); int?CheckDay(int?year, int?month, int?day2Long(int?year, int?mes, int?día); int?semana(largo?día); int?printnow(int?indicador); int?mescalendario(int?año, int?mes, int?indicador); año, int?flag); int?PrintNumMask(int? año, char?ch, FILE?*fp);?/*Generar el calendario del mes actual y generar la hora, flag=1 significa enviar al archivo*/? printf("año="); scanf("d" ,amp;año);AñoCalenda
r(año, bandera);?/*Generar el calendario 2010, flag=1 significa enviar al archivo*/ getch();
}
/*Juzgar el año bisiesto* /
int?IsLoopYear(int?año)
{ return?año400==0?||?(año100?amp;amp;?año4==0); p>
}
/*Comprueba la legalidad de la fecha*/
int?CheckDay(int?año, int?mes, int?día)
{ int?IsLoopYear(int?year); /*El año, mes y día son mayores que cero, el mes es del 1 al 12, la fecha es del 1 al mayor número de días del mes, preste atención al mes bisiesto de febrero*/ if?(yeargt;=0?amp; amp;?monthgt;0?amp;amp;?monthlt;=12?amp;amp;?daygt;0?amp;amp;?\ daylt;=(?DaysInMonth[mes] (mes==2amp;amp;IsLoopYear (año))?)?) return?1; else return?0;
}
/* Devuelve año, mes, día hasta el 0 de enero de 0000 (tiempo abstracto)*/
long?Date2Long(int?year, int?month, int?day)
{ long?days=year*365l año/4 -año/100 año/400?(yeargt; 0 /*El número de días experimentados el 0 de enero del año, el año 0 es un año bisiesto*/ días =); DaysInYear[month-1] ?(monthgt; 2amp; amp; IsLoopYear (year))? ?day;?/*Agregar el mes y el número de días*/ return?days;
}
/*Calcular el día de la semana*/
int?Week(long?days)
{ return?(days 5)7;?
} /*Muestra la hora actual y el calendario del mes actual*/
int?PrintNow(int?flag)?
{ time_t?now; tm_1;? int?Semana(long?día); int?CheckDay(int?año, int?mes, int?día); int? año, int? mes, int? bandera); hora (amp; ahora); tm_1-gt; hora local (amp; ahora); "Hoy es: 4d año 02d mes 02d día, semana s\n", tm_1-gt; tm_year 1900, tm_1-gt; tm_wday]); La hora actual es: 02d hora 02d minuto 02d segundo\n", tm_1-gt; tm
_hora, tm_1-gt; tm_min, tm_1-gt; tm_sec); retorno?1;
}
/*Salida del calendario mensual*/
int? MonthCalendar (int?año, int?mes, int?flag)?/*Cuando bandera=1, escribe archivo*/
{ int?i, k, día, semana; nombre de archivo [80]; int?Semana(long?día); int?CheckDay(int?año, int?mes, int?día); * fp; si?(bandera) { sprintf(nombre de archivo, "04d_02d.txt", año, mes) {
printf("¿Archivo?Abrir?Error?en?Función:CalendarioMes\nPresione?cualquier?tecla?para?salir:");
getch();
salir(- 1 ); }? } día=1; if?(!CheckDay(año, mes, día)) { printf("Formato: d-d-1(AAAA-MM-DD)?is?inválido?en?Función: MonthCalendar\ n ", año, mes); return?0; } días=Fecha2Largo(año, mes, día); semana=Semana(días); k=(4*7-9)/2; para?(i=0; ilt ; k; i ) nombre de archivo[i]='?'; nombre de archivo[k]='\0'; printf("CalendarioMes:\nsd--s\n", nombre de archivo, año, Información del mes); ? (bandera) fprintf(fp, "sd--s\n", nombre de archivo, año, MonthInfo[mes]); i ]); si?(bandera) fprintf(fp, "s?", WeekInfoEng[i] } printf("\n");? si?(bandera) fprintf(fp, "\n"); ? (i=0;ilt;semana;i) { printf(""); si?(bandera) fprintf(fp,"" } para?(i=día;ilt;=DíasEnMes] (mes= = 2)*(IsLoopYear(year)); i )?/*En febrero de un año bisiesto, agregue uno*/ { printf("3d?", i); if?(flag) fprintf(fp, "3d? ", i); si?((i semana)7==0) {
printf("\n");
si?(bandera);
fprintf(fp, "\n");
} printf("\n"); si?(bandera) { fprintf(fp, "\n"); fclose(fp } retorno?1; /*Calendario anual de salida*/
int?YearCalendar(int?year, int?flag)
{ int?month_col=2;?/*Cuántos meses por fila*/ int ?space_col=4;?/*Número de espacios en dos calendarios*/ int?month_row=(int)ceil(12.0/month_col); int?line, end_day[13], keepgoing[13]={1}; ? i, j, k, mes, día[13], semana[13]; días largos[13]; char?espacio[3][80]; ? año, int?mes, int?día); long?Date2Long(int?año, int?mes, int?day); fp ; if?(bandera) { char?filename[80]; sprintf(filename, "04d.txt", año); fp=fopen(filename, "w"); if?(fp==NULL) { p >
printf("¿Archivo? ¿Abrir? ¿Error? En? Función: AñoCalendario\nPresione? ¿cualquier? tecla? para? salir: ");
getch();
salir(-1); }? } para?(mes=1;meslt;=12;mes) { día[mes]=1; si?(!CheckDay(año,mes,día[mes])) {< / p>
printf("Formato: d-d-1(AAAA-MM-DD)?is?invaild?in?Función: YearCalendar\n", año, mes);
return?0 } días[mes]=Fecha2Long(año, mes, día[mes]); semana[mes]=Semana(días[mes]); 2 ; for?(i=0;ilt;k;i)?/*espacio antes de la marca del mes*/ space[0][i]='?'; space[0][i]='\0';? for ?(i=0;ilt;7*4-3-k;i)?/*espacio después de la marca del mes*/ space[1][i]='?'; 0 '; for?(i=0;ilt;space_col;i)?/*Espacio entre dos columnas*/ space[2][i]='?'; PrintNumMask(año,'*',stdout); PrintNumMask(año,'*',mes=1;
ilt;month_row;i) { for?(j=0;jlt;month_col;j)?/*Ingrese la abreviatura del mes*/ {
printf("sss", space[0], MonthInfo[ mes j], espacio[1]);?/*Espacio inicial, abreviatura del mes, espacio final*/
if?(bandera)
fprintf(fp, "sss " , espacio[0], MonthInfo[mes j], espacio[1]);
if?(jlt;month_col-1)?/*Espacio entre columna de mes y columna*/
{
printf("s", espacio[2]);
si?(bandera)
fprintf(fp, "s" , espacio[2]);
} } printf("\n");?/*Nueva línea*/ if?(flag) fprintf(fp,"\n");? 0; jlt; mes_col; j )? {
para?(k=0; klt; 7; k )/*Abreviatura de semana*/
{
printf("s?", WeekInfoEng[k]);
si?(bandera)
fprintf(fp, "s?", WeekInfoEng[k]); /p>
}
if?(jlt;month_col-1)?/*Espacio entre columna de mes y columna*/
{
printf ("s", espacio[2]);
si?(bandera)
fprintf(fp, "s", espacio[2]);
} } printf("\n");?/*Nueva línea*/ if?(flag) fprintf(fp,"\n");? para?(j=0;jlt;month_col;j)? línea*/ {
for?(k=0;klt;7;k)/*Línea horizontal*/
{
printf( "____" , WeekInfoEng[k]);
if?(bandera)
fprintf(fp, "____", WeekInfoEng[k]);
} p>
if?(jlt;month_col-1)?/*Espacio entre columna de mes y columna*/
{
printf("s" , espacio[2] );
si?(bandera)
fprintf(fp, "s", espacio[2]);
} } printf ("\n" );?/*Salto de línea*/ if?(flag) fprintf(fp,"\n");? for?(j=0;jlt;month_col;j)/*Primera línea*/ {
for?(k=0;klt;semana[mes j];k)?/*Venta en corto antes del n.º 1*/
{
printf ("") ;
si?(bandera)
fprintf(fp, "");
}
para?( k=1; klt;=7;k )?
{
printf("3d?",k);
si?(bandera)
fimprimir
f(fp,"3d?",k);
if?((k semana[mes j])7==0)
{ end_day[mes j]=k 1; printf("s", espacio[2]); si?(bandera) fprintf(fp, "s", espacio[2]); } } printf("\n");?/*salto de línea*/ if?(bandera) fprintf(fp,"\n");?(line=0;linelt;5;line) {
for?(j=0;jlt;month_col;j)
{
if?(keepgoing[month j]==0)?/*Rellena un línea en blanco */ for?(k=0;klt;7;k) { printf(""); if?(bandera) fprintf(fp, "");
{ for?(k=end_day[mes j];klt;=DaysInMonth[mes j] (mes==2)*(IsLoopYear(año));k) { printf("3d?",k); if? (bandera) fprintf(fp, "3d?", k); if?((k semana[mes j])7==0) {
end_day[mes j]=k 1;
p>romper; } } if?(kgt;=DaysInMonth[mes j] (mes==2)*(IsLoopYear(año))) seguir[mes j]=0;?( kgt;DaysInMonth[ mes j] (mes==2)*(IsLoopYear(año)))?/*Rellene espacios*/? { for?(;klt;100;k) {
printf ("");
si?(bandera)
fprintf(fp, "");
si?((k semana[mes j]) 7==0)
break; } }
}
if?(jlt;month_col-1)?/*Espacio entre columnas de mes*/< / p>
{ printf("s", espacio[2]); si?(bandera) fprintf(fp, "s", espacio[2]);
}
printf("\n");?/*Salto de línea*/
if?(bandera)
fprintf(fp," \n ");?
/*¿Se han generado todos los meses de cada fila?*/
k=0;
for?(j= 0; jlt; mes_col; j )
k =continuar[mes j];
si?(k==0)
descanso; =? mes_col; printf("\n");?/*Salto de línea*/ if?(bandera) fprintf(fp, "\n");? } if?(bandera) fclose(fp);
}
>
/*Salida analógica digital*/
int?PrintNumMask(int?year, char?ch, FILE?*fp)
{ /*5*5 analógica digital */ int?máscara[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; mientras(año) { dígito[n]=año10; } for?(i=0;ilt;5;i)?/*fila*/ { for?(k=0;klt;n;k)?/*la i-ésima fila de la palabra*/ {
for?(j=0;jlt;5;j)?/*columna*/
{
si?(?mask[digit[n -1- k]][i]?amp;?(1lt;lt;(4-j))?)
fprintf(fp, "c", ch);
else
fprintf(fp, "c", espacio);
}
fprintf(fp, "c", espacio); n"); } return?1;
}
Resultados de salida:
Calendario mensual para el mes actual y calendario anual para 2010