#include <stdio.h>
#include<math.h>
#include "time.h"
int head() //显示欢迎界面,返回功能值
{int select;
printf("\n\n");
printf("\t\t\t<--欢迎使用万年历-->\n\n");
printf("\t\t****************************************\n");
printf("\t\t请选择要使用的功能:\n\n");
printf("\t\t\t1.查看当年年历或当月月历\n");
printf("\t\t\t2.搜素某年的年历或某月的日历\n");
printf("\t\t\t3.查询历史上某日为星期几\n");
printf("\t\t\t4.判断历史上某年是否为闰年\n");
printf("\t\t\t5.查询历史上某天是该年的第几天\n");
printf("\t\t\t6.退出\n");
printf("\t\t****************************************\n");
printf("\t\t\t请选择<1,2,3,4,5,6>:");
scanf("%d",&select) ;
printf("\n");
return(select);
}
void searchhead(int year,int month) //月历的表头
{printf("\t%d年%d月\n",year,month);
printf("\t***************************************************\n") ;
printf("\t日\t一\t二\t三\t四\t五\t六\n");
}
int monthnum(int year,int month) //返回月份多少天
{int a1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int a2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
if(leapyear(year)==1)
{
return(a2[month]);
}
else
{
return(a1[month]);
}
}
int leapyear(int year) //判断是否为闰年
{
if(year%4==0&&year%100!=0||year%4==0&&year%400==0)
{
return(1);
}
else
{
return(0);
}
}
int week(int year,int month,int day) //根据蔡勒公式计算星期几
{int w ,c,y;
if(month==1)
{
month=13;
year=year-1;
}
if(month==2)
{
month=14;
year=year-1;
}
y=year%100;
c=(year/1000)*10+(year/100%10);
if(y==0)
{
c=c-1;
}
w=y+floor(y/4)+floor(c/4)-2*c+floor(26*(month+1)/10.0)+day-1;
while(w<0)
{
w=w+7;
}
if(w%7==0)
{
return(7);
}
return(w%7);
}
int function3() //第三个功能查询历史上某日为星期几的模块
{int year=0,month=1,day=1;
printf("-----查询历史上某日为星期几-----\n");
printf("\n");
do
{if(year<0)
{
printf("\t系统提示:您输入了错误的年份请从新输入...\n");
}
printf("\t请输入要查询的年份:");
scanf("%d",&year);
printf("\n");
} while(year<0);
do
{if(month<1||month>12)
{
printf("\t系统提示:您输入了错误的月份请从新输入...\n");
}
printf("\t请输入%d年的第几月:",year);
scanf("%d",&month);
printf("\n");
} while(month<1||month>12);
do
{if(day<1||day>31)
{
printf("\t系统提示:您输入了错误的日期请从新输入...\n");
}
printf("\t请输入%d年%d月的第几天:",year,month);
scanf("%d",&day);
printf("\n");
} while(day<1||day>31);
printf("\t您查询的%d年%d月%d号是星期%d\n\n",year,month,day,week(year,month,day));
}
void function4() //功能四判断历史上某年是否为闰年模块
{int year=0;
printf("-----判断历史上某年是否为闰年-----\n");
do
{if(year<0)
{
printf("\t系统提示:您输入了错误的年份请从新输入...\n");
}
printf("\t请输入要查询的年份:");
scanf("%d",&year);
printf("\n");
} while(year<0);
if(leapyear(year)==1)
{
printf("\t您查询的%d年是闰年\n\n",year);
}
else
{
printf("\t您查询的%d年不是闰年\n\n",year);
}
}
int function2() //模块二:搜素某年的年历或某月的日历模块
{int year=0,month=1,i,j,spacenum,count;
printf("-----搜素某年的年历或某月的日历-----\n\n");
do
{if(year<0)
{
printf("\t系统提示:您输入了错误的年份请从新输入...\n");
}
printf("\t请输入要查看的年份:");
scanf("%d",&year);
printf("\n");
} while(year<0);
do
{if(month<0||month>12)
{
printf("\t系统提示:您输入了错误的月份请从新输入...\n");
}
printf("\t请输入查看%d年的第几月,若想查看%d年年历请输入零:",year,year);
scanf("%d",&month);
printf("\n");
} while(month<0||month>12);
if(month!=0)
{
searchhead(year,month) ;
spacenum=week(year,month,1);
if(spacenum!=7) //输出空格
{
for(i=1;i<=spacenum;i++)
{
printf("\t ");
}
}
count=spacenum;
for(i=1;i<=monthnum(year,month);i++)
{
printf("\t%d ",i);
count++;
if(count%7==0)
{
printf("\n");
}
}
}
if(month==0)
{
for(j=1;j<=12;j++)
{
searchhead(year,j) ;
spacenum=week(year,j,1);
if(spacenum!=7) //输出空格
{
for(i=1;i<=spacenum;i++)
{
printf("\t ");
}
}
count=spacenum;
for(i=1;i<=monthnum(year,j);i++)
{
printf("\t%d ",i);
count++;
if(count%7==0)
{
printf("\n");
}
}
printf("\n\n");
}
}
}
int nowyear() //获取系统的年份
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
return( timeinfo->tm_year+1900) ;
}
int nowmonth() //获取系统的月份
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
return(timeinfo->tm_mon+1 ) ;
}
int function1() //模块一:查看当年年历或当月月历
{int k,i,j,spacenum,count;
printf("-----查看当年年历或当月月历-----\n\n");
printf("\t您想查看今年的年历还是当月的月历,请输入1【年历】或0【月历】:");
scanf("%d",&k);
printf("\n");
if(k==0)
{
searchhead(nowyear(),nowmonth()) ;
spacenum=week(nowyear(),nowmonth(),1);
if(spacenum!=7) //输出空格
{
for(i=1;i<=spacenum;i++)
{
printf("\t ");
}
}
count=spacenum;
for(i=1;i<=monthnum(nowyear(),nowmonth());i++)
{
printf("\t%d ",i);
count++;
if(count%7==0)
{
printf("\n");
}
}
}
if(k==1)
{
for(j=1;j<=12;j++)
{
searchhead(nowyear(),j) ;
spacenum=week(nowyear(),j,1);
if(spacenum!=7) //输出空格
{
for(i=1;i<=spacenum;i++)
{
printf("\t ");
}
}
count=spacenum;
for(i=1;i<=monthnum(nowyear(),j);i++)
{
printf("\t%d ",i);
count++;
if(count%7==0)
{
printf("\n");
}
}
printf("\n\n");
}
}
}
void function5() //功能五:查询历史上某天是该年的第几天
{int year=0,month=1,day=1,i,s=0;
int a[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int b[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("-----查询历史上某天是该年的第几天-----\n");
printf("\n");
do
{if(year<0)
{
printf("\t系统提示:您输入了错误的年份请从新输入...\n");
}
printf("\t请输入要查询的年份:");
scanf("%d",&year);
printf("\n");
} while(year<0);
do
{if(month<1||month>12)
{
printf("\t系统提示:您输入了错误的月份请从新输入...\n");
}
printf("\t请输入%d年的第几月:",year);
scanf("%d",&month);
printf("\n");
} while(month<1||month>12);
do
{if(day<1||day>31)
{
printf("\t系统提示:您输入了错误的日期请从新输入...\n");
}
printf("\t请输入%d年%d月的第几天:",year,month);
scanf("%d",&day);
printf("\n");
} while(day<1||day>31);
s=s+day;
if(leapyear(year)==1)
{
for(i=1;i<month;i++)
{
s=s+a[i];
}
}
else
{
for(i=1;i<month;i++)
{
s=s+b[i];
}
}
printf("\t您查询的%d年%d月%d号是该年的第%d天\n",year,month,day,s);
}
main()
{int select;
char ch;
while(1)
{ select=head();
if(select==1)
{
function1();
}
if(select==2)
{
function2();
}
if(select==3)
{
function3();
}
if(select==4)
{
function4();
}
if(select==5)
{
function5();
}
if(select==6)
{
break;
}
}
}
c语言实现万年历程序 (附源文件和应用文件)
5星 · 超过95%的资源 需积分: 50 185 浏览量
2014-06-04
23:46:43
上传
评论 10
收藏 118KB RAR 举报
nceuaprsf
- 粉丝: 45
- 资源: 2
最新资源
- 基于Python Flask框架的金融项目设计源码
- Campus一款简单的后台管理系统,RuoYi-Vue简单版,快速开发框架,适合大学生开发毕设,或其他小项目。使用Spring
- 一个Vue3 Ts Node.js的通用后台管理系统后端
- 1.实现定义学生成绩记录,记录包括字段有:序号、学生姓名、学号、课程名称、成绩。 2.实现学生成绩管理系统的菜单管理功能,允许
- 基于Java的WebBase业务系统框架设计源码
- app.revanced.android.gms.0.3.1.4.240913.23b92906231cf22e7c81ac50707854e2.apk
- 基于ThinkPHP的API文档自动生成系统设计源码
- 基于Spring Boot的健身房管理系统设计源码
- 基于Bootstrap的响应式静态网站设计源码
- 基于SSM框架和MySQL的数据库学生信息管理系统设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈