分享--------日历程序(自己打入,检验后有三个警告,但可运行,欢迎大家完善此程序)
2014-05-02 19:09
555 查看
#include "stdio.h"
const int monthDays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
const int yearBase=2000;
const int weekDayBase=6;
main()
{
void PrintIntroduction();
int IsLegal(int,int);
void Calendar(int,int);
int year;
int month;
PrintIntroduction();
while(1){
printf("please enter year:");
scanf("%d",&year);
printf("please enter month:");
scanf("%d",&month);
if(IsLegal(year,month)){
Calendar(year,month);
}
else{printf("The date that you type in is illega\n");
break;
}
}
}
void PrintIntroduction()
{
printf("*****************************************\n");
printf("The program will print the calendar of the given month\n");
printf("You can type in the year after 2000,and month between 1 and 12\n");
printf("If what you type in is illengal, the calendar will not be printed\n");
printf("*****************************************\n");
}
int IsLegal(int year,int month)
{
return(year>=2000&&month>=1&&month<=12);
}
void Calendar(int year,int month)
{
void PrintHeadline(int,int);
void printBody(int,int);
PrintHeadline(year,month);
PrintBody(year,month);
}
void PrintHeadline(int year,int month)
{
char name[10];
switch(month){
case 1:strcpy(name,"January");
break;
case 2:strcpy(name,"February");
break;
case 3:strcpy(name,"March");
break;
case 4:strcpy(name,"April");
break;
case 5:strcpy(name,"May");
break;
case 6:strcpy(name,"June");
break;
case 7:strcpy(name,"July");
break;
case 8:strcpy(name,"Aujust");
break;
case 9:strcpy(name,"September");
break;
case 10:strcpy(name,"October");
break;
case 11:strcpy(name,"November");
break;
case 12:strcpy(name,"December");
break;
}
printf("********************************\n");
printf(" %d %s\n",year,name);
printf("********************************\n");
printf(" Sun Mon Tue Wed Thu Fri Sat\n");
}
PrintBody(int year,int month)
{
int weekDay,number;
int counter;
int FirstDay(int,int);
int IsLeap(int);
weekDay=FirstDay(year,month);
number=monthDays[month];
if(IsLeap(year)&&month==2){
number++;
}
for(counter=0;counter<weekDay*5;counter++){
printf(" ");
}
for(counter=1;counter<=number;counter++){
printf("%5d",counter);
weekDay++;
if(weekDay%7==0){
printf("\n");
}
}
printf("\n");
}
int FirstDay(int year,int month){
int IsLeap(int);
int counter;
int sum;
int sumYear=0;
int sumMonth=0;
int weekDay;
for(counter=yearBase;counter<year;counter++){
if(IsLeap(counter)){
sumYear+=366;
}
else{
sumYear+=365;
}
}
for(counter=1;counter<month;counter++){
sumMonth++;
}
sum=sumYear+sumMonth;
weekDay=(sum+weekDayBase)%7;
return(weekDay);
}
int IsLeap(int year){
return(year%4==0&&year%100!=0||year%400==0);
}
#include "stdio.h"
const int monthDays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
const int yearBase=2000;
const int weekDayBase=6;
main()
{
void PrintIntroduction();
int IsLegal(int,int);
void Calendar(int,int);
int year;
int month;
PrintIntroduction();
while(1){
printf("please enter year:");
scanf("%d",&year);
printf("please enter month:");
scanf("%d",&month);
if(IsLegal(year,month)){
Calendar(year,month);
}
else{printf("The date that you type in is illega\n");
break;
}
}
}
void PrintIntroduction()
{
printf("*****************************************\n");
printf("The program will print the calendar of the given month\n");
printf("You can type in the year after 2000,and month between 1 and 12\n");
printf("If what you type in is illengal, the calendar will not be printed\n");
printf("*****************************************\n");
}
int IsLegal(int year,int month)
{
return(year>=2000&&month>=1&&month<=12);
}
void Calendar(int year,int month)
{
void PrintHeadline(int,int);
void printBody(int,int);
PrintHeadline(year,month);
PrintBody(year,month);
}
void PrintHeadline(int year,int month)
{
char name[10];
switch(month){
case 1:strcpy(name,"January");
break;
case 2:strcpy(name,"February");
break;
case 3:strcpy(name,"March");
break;
case 4:strcpy(name,"April");
break;
case 5:strcpy(name,"May");
break;
case 6:strcpy(name,"June");
break;
case 7:strcpy(name,"July");
break;
case 8:strcpy(name,"Aujust");
break;
case 9:strcpy(name,"September");
break;
case 10:strcpy(name,"October");
break;
case 11:strcpy(name,"November");
break;
case 12:strcpy(name,"December");
break;
}
printf("********************************\n");
printf(" %d %s\n",year,name);
printf("********************************\n");
printf(" Sun Mon Tue Wed Thu Fri Sat\n");
}
PrintBody(int year,int month)
{
int weekDay,number;
int counter;
int FirstDay(int,int);
int IsLeap(int);
weekDay=FirstDay(year,month);
number=monthDays[month];
if(IsLeap(year)&&month==2){
number++;
}
for(counter=0;counter<weekDay*5;counter++){
printf(" ");
}
for(counter=1;counter<=number;counter++){
printf("%5d",counter);
weekDay++;
if(weekDay%7==0){
printf("\n");
}
}
printf("\n");
}
int FirstDay(int year,int month){
int IsLeap(int);
int counter;
int sum;
int sumYear=0;
int sumMonth=0;
int weekDay;
for(counter=yearBase;counter<year;counter++){
if(IsLeap(counter)){
sumYear+=366;
}
else{
sumYear+=365;
}
}
for(counter=1;counter<month;counter++){
sumMonth++;
}
sum=sumYear+sumMonth;
weekDay=(sum+weekDayBase)%7;
return(weekDay);
}
int IsLeap(int year){
return(year%4==0&&year%100!=0||year%400==0);
}
相关文章推荐
- OK6410开发板ARM基本介绍(二)S3C6410的Booting模式
- 软考复习之路—再谈组成原理
- POJ 1042 Gone Fishing (贪心)
- 摄像头程序详解
- Android的StrictMode(严苛模式)
- Ubuntu12.04搭建Android开发环境
- SSH2下使用ajaxFileUpload控件上传附件
- C语言位运算详解
- STM32 串行通信 USART 程序例举
- 基于Mahout的电影推荐系统(MVC架构)
- 基于WebServices简易网络聊天工具的设计与实现
- 委托与事件
- 基于WebServices简易网络聊天工具的设计与实现
- poj 1113 Wall
- 解决Win 7桌面图标无法删除的问题
- OK6410开发板ARM基本介绍(一)S3C6410的地址映射
- codechef Factorial 算法 fread读入数据
- Apache Spark源码走读之5 -- DStream处理的容错性分析
- 如何通过Html网页调用本地安卓app
- Making the Grade(poj1527)