c语言万年历设计
经过这几天的突击,我的课程设计终于落下帷幕了,我编写了一个万年历,在这几天的设计中我深深的体会到了c语言的魅力,它深不可测,虽然我们已经学习了一个学期的c语言,但是我们几乎没有学到什么东西。
感慨就不抒发了,下面把我这几天来的成果,发布上来,有兴趣的同学,朋友,路人,都可以粘贴下去运行一下看看呵呵,当然我这个没有百度里搜到的好,但是毕竟是自己的心血。
说明:把下面这些源代码复制到vc6.0下就可以运行,tc下不能运行。
程序源代码如下:
#include<stdio.h>
#include <stdlib.h>
#include <windows.h>
#include<time.h>
#include <process.h>
#include<conio.h>
#include <ctype.h>
#define CURU 72
#define CURD 80
#define CURL 75
#define CURR 77
#define ESC 27
int getWeek(int year,int month,int day);
int runyear(int year);
void shuchu(int year,int month,int day);
int pd(int year,int month,int day);
void gettime(int *py,int *pm,int *pr);
void chaxun(int*pb);
void cxshuom(int *pc);
void about(int *pc);
void logo(int*pc);
void entrance();
void changet(int*pb);
void today(int*pb);
void main() /*主函数*/
{int year,month, day,b,c;
b=0;
c=0;
logo(&c);
entrance();
gettime(&year,&month,&day);
printf(" *******以下是系统显示的今日日期********\n\n");
shuchu(year,month,day);
system("cls");
while(b==0)
{printf("本程序支持以下功能:\n(1)万年历查询。(支持输入日期格式检查,不合法日期自动报错,\n 闰年会在左上角给出提示。)\n(2)修改系统日期和时间。\n(3)回到今日。\n(4)退出。\n请您选择入口,(输入相应的数字后按enter键即可)。");
scanf("%d",&b);
system("cls");
while(!(b==1||b==2||b==3||b==4))
{printf("您的指令有误请重新输入:\n\n");
printf("本程序支持以下功能:\n\n(1)万年历查询。(支持输入日期格式检查,不合法日期自动报错,\n 闰年会在左上角给出提示。)\n\n(2)修改系统日期和时间。\n\n(3)回到今日。\n\n(4)退出。\n\n请您选择入口,(输入相应的数字后按enter键即可)。");
scanf("%d",&b);
system("cls");
}
while(b==1)
chaxun(&b);
while(b==2)
changet(&b);
while(b==3)
today(&b);
if(b==4)
break;
}
}
void chaxun(int*pb) /*此函数用于查询日期*/
{int year,month,day,a;
printf("请输入您要查询的日期:例如2008 8 8\n");
scanf("%d%d%d",&year,&month,&day);
system("cls");
printf("正在进行合法性检查请稍后。。。。\n");
Sleep (1000);
system("cls");
a=pd(year,month,day);
while(a==1)
{ scanf("%d%d%d",&year,&month,&day);
system("cls");
printf("正在进行合法性检查请稍后。。。。");
Sleep (1000);
system("cls");
a=pd(year,month,day);
}
printf("查询结果如下:\n\n\n");
shuchu(year,month,day);
printf("您还想继续查询吗?是的话请按数字1,否则请按0.\n");
scanf("%d",pb);
system("cls");
while(!(*pb==1||*pb==0))
{printf("您的指令有误请重新输入:\n\n");
printf("您还想继续查询吗?是的话请按数字1,否则请按0.\n");
scanf("%d",pb);
system("cls");}
}
int getWeek(int year,int month,int day) /*此函数用于获取给定日期的星期*/
{
int b;
int week;
int i ;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int count=0 ;
b=runyear(year);
if(b==1)
a[2]++;
for(i=1;i<month;i++)
{
count+=a;
}
count+=day;
week=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+count)%7 ;
return week ;
}
int runyear(int year) /*此函数用于判断闰年*/
{
if(year%4==0&&year%100!=0||year%400==0)
return 1 ;
else
return 0 ;
}
void shuchu(int year,int month,int day)/*此函数用于输出月历*/
{int tian ,b,i,week,week1,j;
char ch;
i=1;
j=1;
b=runyear(year) ;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
tian=31;
if(month==4||month==6||month==9||month==11)
tian=30;
if(b==1&&month==2)
tian=29;
if(b==0&&month==2)
tian=28;
week=getWeek(year,month,1);
week1=getWeek(year,month,day);
if(b==1)
printf(" %d年%d月%d日(闰年) ",year,month,day);
else printf(" %d年%d月%d日 ",year,month,day);
if(week1==0) printf("星期日\n");
if(week1==1) printf("星期一\n");
if(week1==2) printf("星期二\n");
if(week1==3) printf("星期三\n");
if(week1==4) printf("星期四\n");
if(week1==5) printf("星期五\n");
if(week1==6) printf("星期优\n");
printf("------------------------------------------------------\n");
printf("星期日 星期一 星期二 星期三 星期四 星期五 星期优 \n");
for(i=1;i<week+1;i++)
printf(" ");
printf(" ");
for(;i<week+tian+1;i++,j++)
{ if((j>day-1)&&(j<=day))
break;
printf("%-8d",j);
if(i%7==0) {printf("\n\n");
printf(" ");}
}
printf("[%-2d] ",day);
i=i+1;
j=j+1;
if((i-1)%7==0) {printf("\n\n");
printf(" ");}
for(;i<week+tian+1;i++,j++)
{ printf("%-8d",j);
if(i%7==0) {printf("\n\n");
printf(" ");}
}
printf("\n");
printf("您已经进入了快捷模式,\n温馨提示:【←】减年【→】加年【↑】加月【↓】减月【ESC】退出快捷模式\n");
ch = getch();
if(ch !=ESC)
{ch = getch();
if(ch==CURU)
{ month++;
if(month==13)
{month=1;
year++;
}
system("cls");
printf("请稍后。。。。。\n\n");
Sleep(1000);
system("cls");
printf("查询结果如下:\n\n");
shuchu(year,month,day);
}
if(ch==CURD)
{ month--;
if(month==0)
{month=12;
year--;
}
system("cls");
printf("请稍后。。。。。\n\n");
Sleep(1000);
system("cls");
printf("查询结果如下:\n\n");
shuchu(year,month,day);
}
if(ch==CURL)
{ year--;
if(year==0)
printf("error\n");
else
system("cls");
printf("请稍后。。。。。\n\n");
Sleep(1000);
system("cls");
printf("查询结果如下:\n\n");
shuchu(year,month,day);
}
if(ch==CURR)
{year++;
system("cls");
printf("请稍后。。。。。\n\n");
Sleep(1000);
system("cls");
printf("查询结果如下:\n\n");
shuchu(year,month,day);
}
}
}
int pd(int year,int month,int day) /*此函数用于检查输入日期的合法性*/
{ int a,b,c;
a=0;
c=0;
b=month;
if(year<1)
{printf("error,您输入的日期的年份不能为负数,请重新输入:\n例如2008 8 8\n");
c=1;}
if((year%100!=0&&year%4==0)||year%400==0)
a=1;
if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)
if(day<1||day>31)
{printf("error,您输入的日期的天数不能为负数或者大于31,请重新输入:\n例如2008 8 8\n");
c=1;}
if(b==4||b==6||b==9||b==11)
if(day<1||day>30)
{printf("error,您输入的日期天数不能为负数或者大于30,请重新输入:\n例如2008 8 8\n");
c=1;}
if(a==0&&b==2)
if(day<1||day>28)
{ printf("error,您输入的日期是平年二月,天数不能为负数或者大于28,请重新输入:\n例如2008 8 8\n");
c=1;}
if(a==1&&b==2)
if(day<1||day>29)
{ printf("error,您输入的日期是闰年二月,天数不能为负数或者大于29,请重新输入:\n例如2008 8 8\n");
c=1;}
if(b<1||b>12)
{printf("error,您输入的月份不能为负数或者大于12,请重新输入:\n例如2008 8 8\n");
c=1;}
return c;
}
void gettime(int *py,int *pm,int *pr) /*次函数用于获取系统日期*/
{ struct tm *date;
time_t now;
now =time(NULL);
date =localtime(&now);
*py=date->tm_year+1900;
*pm=date->tm_mon+1;
*pr=date->tm_mday;
}
void logo(int *pc) /*主界面*/
{ printf("\t ***********课程设计**********\n\n");
Sleep(500);
printf("\t电0905-6\t\t\t\t张宝杰(boy杰)\n\n");
Sleep(500);
printf("------------------------------------------------------------------------------");
Sleep(250);
printf(" ");
Sleep(250);
printf(" ");
printf("\n\n");
printf("\t\t\t(1)程序说明;\n\n");
printf("\t\t\t(2)关于作者;\n\n");
printf("\t\t\t(3)进入程序;\n\n");
printf("\t请您选择入口(输入相应的数字后按enter键即可)。\n\n");
scanf("%d",pc);
system("cls");
while(!(*pc==1||*pc==2||*pc==3))
{printf("您的指令有误请重新输入:\n");
printf("\t\t\t(1)程序说明;\n\n");
printf("\t\t\t(2)关于作者;\n\n");
printf("\t\t\t(3)进入程序;\n\n");
printf("\t请您选择入口(输入相应的数字后按enter键即可)。\n\n");
scanf("%d",pc);
system("cls");
}
while(*pc!=3)
{if(*pc==1)
cxshuom(pc);
if(*pc==2)
about(pc);}
if(*pc==3);
}
void cxshuom(int *pc) /*程序说明*/
{char *shm="本程序由张宝杰编写,由于时间仓促且能力有限,本软件只能在dos窗口下完成,应课程设计的要求本程序支持以下功能:\n\n1.日历显示功能。该日历能够根据系统日期进行初始化,如果没有任何的输入,则会显示系统日期所在月份的月历,并能突出显示当前日期(会用括号把当天日期括起来)。\n\n2.日期查询、闰年判断功能。输入日期进行查询,查询后将显示查询日期所在月份的月历,并突出显示查询日期。如果是闰年,则给出提示。并支持【←】减年【→】加年【↑】加月【↓】减月【ESC】退出快捷模式。\n\n3.日期合法性检查功能。程序还设置有对输入的日期进行合法性检查功能,如果年份、月份或者天数不合法,查询将被拒绝,并显示提示信息。\n\n4.修改系统日期和时间。\n\n";
printf("\t\t\t(1)程序说明;\n\n");
while (*shm!= '\0')
{
printf("%c",*shm);
shm++;
Sleep(30);
}
printf("\t\t\t(2)关于作者;\n\n");
printf("\t\t\t(3)进入程序;\n\n");
printf("\t请您选择入口(输入相应的数字后按enter键即可)。\n\n");
scanf("%d",pc);
system("cls");
while(!(*pc==2||*pc==3))
{printf("您的指令有误请重新输入:\n");
printf("\t\t\t(2)关于作者;\n\n");
printf("\t\t\t(3)进入程序;\n\n");
printf("\t请您选择入口(输入相应的数字后按enter键即可)。\n\n");
scanf("%d",pc);
system("cls");
}
}
void about(int *pc) /*关于作者*/
{char *zuozhe="作者姓名:张宝杰\n\n作者职业:学生\n\n作者就读学校:石家庄铁道大学\n\n作者邮箱:zhangboyjie@163.com\n\n(欢迎大家使用并提交bug.)\n\n";
printf("\t\t\t(2)关于作者;\n\n");
while (*zuozhe!= '\0')
{ printf("%c",*zuozhe);
zuozhe++;
Sleep(30);}
printf("\t\t\t(1)程序说明;\n\n");
printf("\t\t\t(3)进入程序;\n\n");
printf("\t请您选择入口(输入相应的数字后按enter键即可)。\n\n");
scanf("%d",pc);
system("cls");
while(!(*pc==1||*pc==3))
{printf("您的指令有误请重新输入:\n");
printf("\t\t\t(1)程序说明;\n\n");
printf("\t\t\t(3)进入程序;\n\n");
printf("\t请您选择入口(输入相应的数字后按enter键即可)。\n\n");
scanf("%d",pc);
system("cls");
}
}
void entrance() /*欢迎界面*/
{int i=1,k,j,m;
for(i=1;i<20;i++)
{ printf("本程序由:\n\n");
for(k=9;k<i;k++)
printf("\n");
if(i>=9)
printf("-----| | / | | \n");
if(i>=8)
printf(" | | / |-------------| | \n");
if(i>=7)
printf("_____| | / __________ _______|________ ");
if(i>=6)
printf("| |/ | / | \\ \n");
if(i>=5)
printf("| ---|----- _____|____ / | \\ \n");
if(i>=4)
printf("|----| | \\ | / | \\ \n");
if(i>=3)
printf(" | | /\\ | \\ / | \\ \n");
if(i>=2)
printf(" \\| |/ \\ _____|______ | | | | 编写!\n\n\n");
for(j=1;j<=i;j++)
printf(" "); 毕业论文http://www.youerw.com
printf("***欢迎使用***\n");
for(m=19;m>i;m--)
printf(" ");
printf(" ***欢迎使用***\n");
Sleep(300);
system("cls");
}
}
void changet(int*pb) /*修改系统日期和时间*/
{ struct tm *date;
time_t curr;
printf("请您输入您要修改为的日期,例如:2008-8-8(如果不想修改的话请按enter键跳过)\n");
system("date");
printf("\n\n请您输入您要修改为的时间,例如:8:8:8(如果不想修改的话请按enter键跳过)\n");
system("time");
printf("\n\n操作成功,当前您计算机的日期和时间为:") ;
curr =time(NULL);
date =localtime(&curr);
printf("%d/%d/%d %d:%d:%d\n",date->tm_year+1900,date->tm_mon+1,date->tm_mday,date->tm_hour,date->tm_min,date->tm_sec);
printf("\n您还想继续修改吗?是的话请按数字2,否则请按0.\n");
scanf("%d",pb);
system("cls");
while(!(*pb==2||*pb==0))
{ printf("您的指令有误请重新输入:\n\n");
printf("您还想继续修改吗?是的话请按数字2,否则请按0.\n");
scanf("%d",pb);
system("cls");
}
}
void today(int*pb)
{int year,month,day; 毕业论文http://www.youerw.com
gettime(&year,&month,&day);
printf(" *******以下是系统显示的今日日期********\n\n");
shuchu(year,month,day);
printf("友情提示:请输入数字0后按enter键回到主菜单。\n");
scanf("%d",pb);
system("cls");
while(*pb!=0)
{printf("您输入的指令有误请重新输入:\n友情提示:请输入数字0后按enter键回到主菜单。\n");
scanf("%d",pb);
system("cls"); } }