1、万年历程序设计万年历一、 大赛目的本着丰富大学生学习生活的同时,为使学生学以致用,能将学习与生活中遇到的实际问题转化为计算机专业的问题,并给予合理的解决。以期培养学生专业的逻辑思维能力,以专业的知识解决问题的能力。 二、实验环境(实验设备) Window7操作系统,Visual C+三、程序的功能:用户可以通过主菜单选择不同的选项:输入1,进入万年使用说明界面;输入2,进入万年历的年查询界面,在此界面根据提示,输入需查询的年份,便可输出全年各月份的日历,并清楚地显示每天是星期几,且在每个月份日历下面提示该月份重要的国内外阳历节日;输入3,进入万年历的月查询界面,在此界面根据提示输入需查询的年月
2、份,便可直接进入该月份的日历,并提示该月份的国内外重要阳历节日;输入4,进入万年的日查询界面,根据界面的提示,输入年月日,从而清楚地显示出年月日和对应的星期,并清楚地判断南邮70周年校庆是否成功举办,若还没举办,输出距离输入的日期还有多少天;输入5,退出万年历查询系统。四、程序用到的重要算法和语句: (1)判断该年份是否为闰年:条件:if(year%4!=0|year%100=0&year%400!=0) 真,表示为平年 假,表示为闰年。(2)判断任意一年的第一个月的第一天为星期几:a=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7; y:年份(3)计算下一个月的第一天为星
3、期几:a=(a+m)%7; m:月份(4)计算任意一年的任意一月的第一天为星期几:a=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1;(5)if.;else if.;else.;(6)do.while();(7)switch(.)case 0: .;case 1: .; 五、程序的源代码:#include#include#includeint judge(int year,int month)/*定义一个函数,把月分为四类(28,29,30,31)*/ if(month=1|month=3|month=5|month=7|month=8|month=10|mon
4、th=12) return(1);/*31天的月份,返回值为1*/ else if(month=2) if(year%4!=0|year%100=0&year%400!=0) return(2);/*平年的2月份,返回值为2*/ else return(3);/*闰年的2月份,返回值为3*/ else return(4);/*30天的月份,返回值为4*/void holiday(int month)/*定义阳历节日函数*/ printf(友情提示:n); if(month=0) printf( 1月1日:元旦n);else if (month=1) printf( 2月2日:世界湿地日 2月1
5、4日:情人节n);else if(month=2) printf( 3月3日:全国爱耳日 3月5日:青年志愿者服务日 3月8日:国际劳动妇女节 n); printf( 3月9日:保护母亲河日 3月12日:植树节 3月14日:白色情人节 n); printf( 3月15日:世界消费者权益日 3月20日:邮政节 3月23日:世界气象节 n); printf( 3月22日:世界水日 3月24日:世界防治结核病日n);else if(month=3) printf( 4月1日:愚人节 4月5日:清明节 4月7日:世界卫生日 n); printf( 4月22日:世界地球日 4月26日:世界知识产权日n)
6、;else if(month=4) printf( 5月1日:国际劳动节 5月3日:世界哮喘日 5月4日:中国青年节 n); printf( 5月8日:世界红十字日 5月12日:国际护士节 5月15日:国际家庭日 n); printf( 5月17日:世界电信日 5月20日:全国学生营养日 5月23日:国际牛奶日n); printf( 5月31日:世界无烟日n);else if(month=5) printf( 6月1日:国际儿童节 6月5日:世界环境日 6月6日:全国爱眼日n); printf( 6月17日:世界防治荒漠化和干旱日 6月23日:国际奥林匹克日n); printf( 6月25日:
7、全国土地日 6月26日:国际禁毒日n);else if(month=6) printf( 7月1日:中国建筑日 7月7日:中国人民抗日战争纪念日 7月11日:世界人口日n);else if(month=7) printf( 8月1日:中国人民解放军建军节 8月12日:国际青年节n);else if(month=8) printf( 9月8日:国际扫盲日 9月10日:中国教师节 9月16日:中国脑健康日n); printf( 9月16日:国际臭氧层保护日 9月20日:全国爱牙日 9月21日:世界停火日 n); printf( 9月27日:世界旅游日n);else if(month=9) prin
8、tf( 10月1日:国庆节 10月1日:世界老年人节 10月4日:世界动物日n); printf( 10月5日:世界教师节 10月8日:全国高血压节 10月10日:世界精神卫生日n); printf( 10月15日:世界盲人节 10月16日:世界粮食日 10月17日:国际消除贫困日n); printf( 10月24日:联合国日 10月28日:中国男性健康日 10月29日:国际生物多样性日n); printf( 10月31日:万圣节n);else if(month=10) printf( 11月8日:中国记者日 11月9日:消防宣传日 11月14日:世界糖尿病日n); printf( 11月17
9、日:国际大学生日 11月25日:国际消除对妇女的暴力日n);else if(month=11) printf( 12月1日:世界艾滋病日 12月3日:世界残疾人日 12月4日:全国法制宣传日n); printf( 12月9日:世界足球日 12月25日:圣诞节n);int day1(int year,int month) int a12=31,28,31,30,31,30,31,31,30,31,30,31; if(judge(year,month)=3) a1=29; return amonth-1; int x(int year,int month,int day) if(year0|mon
10、th12|dayday1(year,month) return 0; else return 1; void explaination() int y; system(cls); printf(tttttttttttnnn); printf(一、年历:输入需查询的年份,将会显示全年的日历。n); printf(二、月历:输入需查询的年月份,注意格式年月之间用空格分开,便可以直接进入你需要查 询的月份。n); printf(三、日历:输入需要查询的年月日,注意格式年月日之间用空格分开,将会显示该天为星期 几。n四、 ); printf(此万年历显示了国内外的一些重要的阳历节日,希望给你带来方便。
11、n); printf(五、本万年历可以通过日历查询距离70周年校庆的倒计时。n); printf(六、由于我们能力不足和水平有限,没能如愿将公历显示在该日历上,会有许多不能满足你 的需求,敬请谅解。n); printf(七、欢迎老师和同学对我们的万年历提出改进的宝贵的意见和建议。 n); do printf(n是否返回目录(1.是;0.否); fflush(stdin); scanf(%d,&y); while(y!=1); return ;void nianli( ) int i,j,a,n,m,k,y,h,s; char * p; char * week=Sun,Mon,Tue,Wed,T
12、hu,Fri,Sat; char*month=January,February,March,April,May,June,July,August,September,October,November,December;system(cls); printf(nn 请输入您要查的年份:);/*给出输入提示*/ scanf(%d,&y);/*输入查询的年份*/ h=x(y,1,1); if(h=0) printf(error:请您重新输入!n);/*输入值异常时报错*/ break; /printf( please key the year:);/ scanf(%d,&year); printf(
13、n);/ printf( 欢迎使用超人和双仔的万年历,祝您愉快!); printf(n); a=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7; for(i=0;i12;i+)/*输出12个月的日历表*/ n=judge(y,i+1); p=month+i; printf( %sn,*p);/*在屏幕上输出当月的月份*/ printf(n); printf( nn); for(j=0;j7;j+) p=week+j; printf(%10s,*p); printf(n); for(k=0;ka;k+) printf( );/*10个空格*/ for(m=1;m32;m+)
14、printf(%10d,m); if(a+m)%7=0) printf(nn);/*输出七个字符(空格和数字)换行*/ if(n=1&m=31) break; else if(n=2&m=28) break; else if(n=3&m=29) break; else if(n=4&m=30) break; a=(a+m)%7;/*计算出下个月的第一天是星期几*/ printf(n); printf( nn); holiday(i); /*调用节日函数,在屏幕上输出当月的节日*/ printf(nn=); printf(n); do printf(n是否返回目录(1.是;0.否); fflus
15、h(stdin); scanf(%d,&s); while(s!=1); return ; void yueli( )int j,a,n,k,i,y,m,h,s,d=1; char * p; char * week=Sun,Mon,Tue,Wed,Thu,Fri,Sat; char*month=January,February,March,April,May,June,July,August,September,October,November,December;system(cls);printf( 请输入您要查的年和月,年月之间用空格隔开: );/*给出输入提示*/ scanf(%d%d,
16、&y,&m);/*输入需要查询的年 月*/ h=x(y,m,1); if(h=0) printf(eeror:请您重新输入!n);/ break; printf(n); printf(n); a=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1;/*计算出该月的第一天为星期几*/ n=judge(y,m); p=month+m-1;/*指针指向想输出的该月的月份名*/ printf( %sn,*p);/*输出该月份*/ printf(n);printf( nn); for(j=0;j7;j+) p=week+j; printf(%10s,*p); /*输出周日到周
17、六的名称*/ printf(n); / while(a=!7)/*需要解释一下*/ for(k=0;ka;k+) printf( );/*10个空格*/ for(i=1;i2012|(year=2012&month=4&day=20) printf( 友情提醒:南京邮电大学70周年校庆已成功举办!); else printf( 友情提醒:距离南京邮电大学70周年校庆还有); n=day;switch(month-1) case 11:n=n+30; case 10:n=n+31; case 9:n=n+30; case 8:n=n+31; case 7:n=n+30; case 6:n=n+3
18、1; case 5:n=n+30; case 4:n=n+31; case 3:n=n+30; case 2:if(year%4=0&year%100!=0|year%400=0) n=n+29; else n=n+28; case 1:n=n+31;switch(year)case 2005:n=365-n+2301;break; case 2006:n=365-n+1936;break; case 2007:n=365-n+1571;break; case 2008:n=366-n+1205;break; case 2009:n=365-n+840;break; case 2010:n=3
19、65-n+475;break; case 2011:n=365-n+110;break; case 2012:n=110-n;break;printf(%04d天! ,n); void rili( ) int a,y,m,d,s; char * week=日,一,二,三,四,五,六;system(cls);printf(nn 请输入您要查的年月日,年月日之间用空格隔开: );/*给出输入提示*/ scanf(%d%d%d,&y,&m,&d);/*输入年 月 日*/ a=x(y,m,d); if(a=0) printf(error:请您重新输入!n);/*输入植异常时报错*/ /break; p
20、rintf(n); a=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1;/*计算该天为星期几的函数*/ printf( n); printf( 今天是 %d 年 %d 月 %d 日 星期%s,y,m,d,weeka ); printf( ); printf( ); printf(nn); celebration(y,m,d); printf( n);do printf(n是否返回目录(1.是;0.否); fflush(stdin); scanf(%d,&s); while(s!=1); return ;void main() int b; do system(c
21、ls);printf(nnn); printf( n); printf( n); printf( n); printf( nn); printf( ,.,.,. n); printf( o,.,. n); printf( 田田田 ,.,. n); printf( nnn); printf(t*nn); printf( ttt欢迎进入超人和双仔设计的ttttn ); printf( ttt万年历系统,祝您使用愉快!ttttn ); printf(t*); printf(ttttt t .-. n); printf( tt _._ . n ); printf( tt .-(#)(#)-/# n);
22、 printf( tt . /# n); printf(tt1 -万年历说明书 : , # n); printf(tt* - -._.- _.-#/ n); printf(tt2 -万年历年查询 ;_: n ); printf(tt* - . n); printf(tt3 -万年历月查询 /, Main , n); printf(tt* - / Menu n); printf(tt4 -万年历日查询 -._.- n); printf(tt* - _ _. | ._ n); printf(tt0 -退出查询系统 (_|_) n); printf(ttPlease Enter Choose: ); fflush(stdin); scanf(%d,&b); switch(b) case 1: explaination(); break; case 2: nianli( ); break; case 3: yueli( ); break; case 4: rili( ); break; case 0: printf(谢谢使用,再见!); printf(nn退出nn); break; while(b!=0); 六、小结我们所选的大赛课题程序终于完成了,经历了这次程序设计的整个过程,我们才发现我们知识的贫乏和知识面的狭窄。就我个人而言,我原本以为它只是一个小小的程序设计,很容
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1