C语言程序设计万年历.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C语言程序设计万年历.pdf》由会员分享,可在线阅读,更多相关《C语言程序设计万年历.pdf(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、综合性程序设计报告设计题目:万年历_ _ _ _ _指导教师:_ _ _ _ _ _ _ _ _ _ _ _班 级:学 号:设 计 者:_ _ _ _ _ _ _ _ _ _ _成 绩:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _设计时间:2012年6月8日 题目描述用于利用计算机实现万年历功能,包括日期对星期的转换,根据指定日期对N天后是什么日期的计算。和显示当前日期,纪念日提醒等功能。主要功能:1.日期推算2 .日期显示3.纪念日提醒 功能模块分解及说明根据题目要求,可以用结构体实现,这个系统可以分为:年历显示、月历查询、I I期查询和日期推算四个部分。其中在日期查询中包
2、括纪念日提醒。(1)主函数m a in ()主函数利用whil e (1)循环使得执行完每个部分之后还能回到主菜单,并利用s wit c h函数当输入不同的值时调用不同的模块。主函数如下:vo id m a in ()/*主函数*/in t ye a r,m o n t h,d a y,s e l e c t;whil e d u s hi jia n();p r in t f(n);g e t m e n u ();p r in t f C 请输入相应数字:);s c a n f(%d,&s e l e c t);s ys t e m(,c l s,/);s wit c h(s e l e
3、c t)/*菜单选择*/c a s e 1:/*当选择为1时显示年历*/p r in t f C 年历显示:输 入 年(如2 011)s c a n f(d,f t ye a r);if(ye a r O&ye a r 0&ye a r =l&m o n t h 0&ye a r zzl&m o n t h:zl&d a yzzm a xD a y(ye a r,m o n t h)(d is p l a y3(ye a r,m o n t h,d a y);p r in t f (提示 按 P a g e Up:前一天 按 P a g e D o wn:后一天 按其他键:返回菜单 n n);
4、s e t D a y3(ye a r,m o n t h,d a y);)e l s es ys t e m(,zc l s/z);p r in t f (输入无效,重新输入!n);b r e a k;c a s e 4:/*当选择4 时为日期推算*/r iq it u is u a n ();b r e a k;c a s e 5:e xit (0);d e f a u l t:/*当输入其他数字时,输入无效,重新输入*/s ys t e m (c l s);p r in t f (输入无效,重新输入!n);I(2)年历显示用来显示某一年的日历。vo id d is p l a yl (i
5、n t ye a r)/*输出年历*/in t i;p r in t f(n);f o r(i=l;i=12;i+)p r in t f (,z%d 年%d 月 n n ”,ye a r,i);d is p l a y(ye a r,i);)vo id d is p l a y(in t ye a r ,in t m o n t h)/*输出年月*/(in t m a x,n u m b e r,i,j=l;m a x=m a xD a y(ye a r,m o n t h);n u m b e r=we e k(ye a r,m o n t h,1);p r in t f (%4s%4s%4
6、s%4s%4s%4s%4s n ,Su n”,Mo n ,“Tu e ,We d ,r hu ,r n ,s a t );f o r(i=0;i n u m b e r;i+)p r in t f C );/*1号前的星期补空格*/whil e(j=m a x)(p r in t f(/6 d ,j);if (i%7=6)p r in t f (n );/*每 7 格换一行*/i+;j+;)p r in t f(n n);)(3)输出月历vo id d is p l a y2(in t ye a r,in t m o n t h)/*输出月历*/(p r in t f (,z n%d 年%d
7、月 口 ,z,ye a r,m o n t h);d is p l a y(ye a r,m o n t h);)vo id d is p l a y(in t ye a r ,in t m o n t h)/*输出年月*/in t m a x,n u m b e r,i,j=l;m a x=m a xD a y(ye a r,m o n t h);n u m b e r=we e k(ye a r,m o n t h,1);p r in t f (z/%4s%4s%4s%4s%4s%4s%4s n ,Su n ,Mo n ,Tu e ,We d ,E 1 八 .I hu ,r n ,s a
8、t );f o r(i=0;i n u m b e r;i+)p r in t f C );Al号前的星期补空格*/whil e(j t m _ ye a r);m o n t hl=(l+p-t m _ m o n);d a y 1=(p-t m _ m d a y);/*获取系统时间 ye a r l y m o n t hl、d a yl 分别为年、月、日*/d a ys 0=(ye a r-1)*36 5+(ye a r-1)/4-(ye a r-1)/100+(ye a r-1)/400+e a c hye a r t o t a l(ye a r,m o n th,d a y);d
9、 a ys 1二(ye a r l-1)*36 5+(ye a r 1-1)/4-(ye a r 1-1)/100+(ye a r 1-1)/400+e a c hye a r t o t a l (ye a r l,m o n t hl,d a yl);d a ys=d a ys O-d a ys l;/*计算出两个日期之间的时间差*/p r in t f (/z n 今天距 d 年%(1 月 d 日还有%d 天 n n,ye a r,m o n t h,d a y,d a ys);r e t u r n d a ys;vo id wha t we e k(in t ye a r,in t
10、m o n t h,in t d a y)(in t n u m b e r;/*判断是星期几*/n u m b e r=(ye a r-1)+(ye a r-1)/4-(ye a r-1)/100+(ye a r-1)/400+e a c hye a r t o t a l(ye a r,m o n t h,da y);n u m b e r=n u m b e r%7 ;s wit c h(n u m b e r)c a s e 0:p r in t f(nc a s e 1:p r in t f(nc a s e 2:p r in t f(nc a s e 3:p r in t f(nc
11、 a s e 4:p r in t f(nc a s e 5:p r in t f(nc a s e 6:p r in t f(n%d 年%(1 月 (3 日是星期日“,ye a r,m o n t h,d a y);b r e a k;%d 年%(1 月 (1 日是星期一”,ye a r,m o n t h,d a y);b r e a k;%d 年%(1 月 d 日是星期二“,ye a r,m o n t h,d a y);b r e a k;%d 年%d 月%d 日是星期三”,ye a r,m o n t h,d a y);b r e a k;%d 年%d 月%d 日是星期四”,ye a
12、 r,m o n t h,d a y);b r e a k;%d 年%d 月%d 日是星期五”,ye a r,m o n t h,d a y);b r e a k;%d 年%d 月%d 日是星期六”,ye a r,m o n t h,d a y);b r e a k;d e f a u l t:s ys t e m(z,c l sz/);p r in t f (出现错误!n );)vo id jie r i(in t m o n t h,in t d a y)(if(m o n t h=l)s wit c h(d a y)(c a s e 1:p r in t f (z,,这天是元旦“);/*
13、判断是否公历节I I*/if(m o n t h=2)s wit c h(d a y)c a s e 14:p r in t f(,这天是情人节);)if(m o n t h=3)s wit c h(d a y)(c a s e 8:p r in t f C,这天是妇女节);b r e a k;c a s e 12:p r in t f C,这天是植树节);)if(m o n t h=4)s wit c h(d a y)(c a s e 1:p r in t f(,这天是愚人节);)if(m o n t h=5)s wit c h(d a y)(c a s e 1:p r in t f (z/
14、,这天是劳动节);b r e a k;c a s e 4:p r in t f (,这天是青年节);)if(m o n t h=6)s wit c h(d a y)(c a s e 1:p r in t f (,这天是儿童节);)if(m o n t h=7)s wit c h(d a y)(c a s e 1:p r in t f (,这天是建党节);)if(m o n t h=8)s wit c h(d a y)c a s e 1:p r in t f C,这天是建军节”);)if(m o n t h=9)s wit c h(d a y)(c a s e 10:p r in t f(,这天
15、是教师节);)if(m o n t h=10)s wit c h(d a y)(c a s e 1:p r in t f(,这天是国庆节);)(5)日期推算if (in f o/10000000)0)Ixye a r =in f o/10000;xm o n t h=(in f o -xye a r*10000)/100;xd a y=in f o -xye a r*10000-xm o n t h*100;p r in t f (您要查询的是%d 年%d 月%d I I。n”,xye a r,xm o n t h,xd a y);c o u n t e r =g e t wD a y(xye
16、 a r,xm o n t h,xd a y);p r in t f (,z%d 年 久d 月9 6 d 日是星期,xye a r,xm o n t h,xd a y);if (c o u n t e r =0)c o u n t e r =7;p r in t f(d n,c o u n t e r);d a y_ d if f e r =The _ d a y(xye a r,xm o n t h,xd a y);p r in t f (距离今天相差 d 天 n,d a y_ d if f e r);)in t The _ d a y(in t ye a r,in t m o n t h,
17、in t d a y)/*判断要查询的”期据今天的时间*/in t Y e a r,Mo n t h,D a y,f l a g,i,q;l o n g s u m=0;s t r u c t t m *g m t=g e t D a y();Y e a r =ye a r+19 00;/*系统当前年*/Mo n t h=g m t-t m _ m o n+l;/*系统的当前月份*/D a y=m d a y;if(ye a r!=Y e a r)(/*系统当前天*/if (ye a r Y e a r)(q=ye a r;ye a r=Y e a r;Y e a r=q;q二m o n t
18、h;m o n t h=Mo n t h;Mo n t h二m o n t h;q=d a y;d a y=D a y;D a y=d a y;)f o r(i=ye a r;i Y e a r;i+)(f l a g =c he c k Y e a r (i);if (f l a g l)s u m=s u m+3 6 6;)e l s e(s u m=s u m+3 6 5;)f l a g =c h e c k Y e a r(y e a r);f o r (i=l;i=l;i-)(s u m=s u m+d a y s Of M o n t h f l a g i-l ;)s u m
19、=s u m+D a y;)e l s e if(y e a r=Y e a r)(f l a g =c h e c k Y e a r(y e a r);if (m o n t h!=M o n t h)(if(m o n t h M o n t h)(q=m o n t h;m o n t h=M o n t h;M o n t h二q;q二d a y;d a y二D a y;D a y=d a y;)f o r(i=m o n t h+l;i=M o n t h;i+)(s u m=s u m+d a y s Of M o n t h f l a g i-l ;)s u m=s u m+
20、d a y s Of M o n t h f l a g m o n t h-1 -d a y;s u m =s u m+D a y;)e l s e if(m o n t h=M o n t h)(s u m -D a y -d a y;)if(s u m 0)s u m =-s u m;)r e t u r n s u m;)s t r u c t t m*g e t D a y()(t im e _ t t im e r;s t r u c t t m*g m t;t im e(&t im e r);g m t=l o c a l t im e(&t im e r)r e t u r n
21、 g m t;)/*从系统取得当前时间*/in t c h e c k Y e a r(in t y e a r)/*判断是否是闰年*/in t f l a g=O;if (y e a r%4 0 0-0|(y e a r%4=0&y e a r%1 0 0 !=0)f l a g=l;)r e t u r n f l a g;)in t g e t wD a y (in t y e a r,in t m o n t h,in t d a y)/*取得某年某月某日是星期几*/(in t n d a y=0,n D a y,i,w;f o r (i=0;i m o n t h-l;i+)(n d
22、 a y+=d a y s Of M o n t h c h e c k Y e a r(y e a r)i;)n d a y+=d a y;n D a y=y e a r-l+(y e a r-1)/4-(y e a r-1)/1 0 0+(y e a r-1)/4 0 0+n d a y;w=n D a y%7;r e t u r n w;/*返回星期几*/(6)菜单显示v o id g e t m e n u ()/*显示菜单选择*/p r in t f(*主菜单*n n)p r in t f(*欢迎进入万年历系统*n n)p r in t f(*1、年历显示*n n)p r in t
23、f(*2、月历查询*n n)p r in t f(*3、日期查询*n n)p r in t f (,z*4、日期推算*n n)p r in t f(*5、退出系统*n n)p r in t f(*n n)(7)通 过“t,”,”一,“f”和“p g u p”“p g d n”控制年历,月历以及日期的翻页。v o id s e t D a y l(in t y e a r,in t m o n t h,in t d a y)/*通过键盘 f I 控制年历的变换*/c h a r k;g e t c h ();k=g e t c h ();s wit c h(k)c a s e K E Y N U
24、M Up:/*t 年份减小*/if (y e a r 2)(s y s t e m(c l s);p r in t f (z/警告!超出范围!n);br e a k;)y e a r ;d is p l a y l(y e a r);s e t D a y l(y e a r,m o n t h,d a y);br e a k;c a s e K E Y N UM D o wn:/*I 年份变大*/y e a r+;d is p l a y l(y e a r);s e t D a y l(y e a r,m o n t h,d a y);br e a k;d e f a u l t:s y
25、s t e m(z,c l s,z);v o id s e t D a y 2(in t y e a r,in t m o n t h,in t d a y)/*通过键盘 一 f 控制月历的变换*/(c h a r k;g e t c h ();k=g e t c h ();s wit c h(k)(c a s e K E Y N UM L e f t:/*一月份变小*/if (m o n t h 2)(m o n t h+=1 2;y e a r;)if(y e a r l 1)(m o n t h-=1 2;y e a r+;)if (y e a r 9 9 9 9)m o n t h+;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 万年历
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内