C语言万年历课程设计报告书Word格式文档下载.docx

上传人:b****6 文档编号:18562979 上传时间:2022-12-28 格式:DOCX 页数:12 大小:52.47KB
下载 相关 举报
C语言万年历课程设计报告书Word格式文档下载.docx_第1页
第1页 / 共12页
C语言万年历课程设计报告书Word格式文档下载.docx_第2页
第2页 / 共12页
C语言万年历课程设计报告书Word格式文档下载.docx_第3页
第3页 / 共12页
C语言万年历课程设计报告书Word格式文档下载.docx_第4页
第4页 / 共12页
C语言万年历课程设计报告书Word格式文档下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C语言万年历课程设计报告书Word格式文档下载.docx

《C语言万年历课程设计报告书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言万年历课程设计报告书Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。

C语言万年历课程设计报告书Word格式文档下载.docx

【系统总体功能设计框架】

Y,y

N

【系统功能模块图】

主要功能模块1:

输入year,month,day

计算month与当年的1月间隔了多少天r

r=r+(year/4)*1461+(year%4)*365+day

r=r%7

r==0

r==1

r==2

r==3

r==4

r==5

r==6

Sat

Sun

Mon

Tue

Wed

Thu

Fir

Y或y返回菜单

其他输入均退出

程序代码:

{printf("

pleaseinputthedayyouwant(2100,1,1>

****,**,**>

1970,1,1):

"

);

scanf("

%d,%d,%d"

&

year,&

month,&

day);

for(b=0,r=0;

b<

month;

b++)

{

r=a[b]+r;

}

year=year-1972;

r=r+(year/4)*1461+(year%4)*365+day;

if(r%7==0)printf("

TodayisSaturday.\n"

elseif(r%7==1)printf("

TodayisSunday.\n"

elseif(r%7==2)printf("

TodayisMonday.\n"

elseif(r%7==3)printf("

TodayisTuesday.\n"

elseif(r%7==4)printf("

TodayisWednesday.\n"

elseif(r%7==5)printf("

TodayisThursday.\n"

elseprintf("

TodayisFirday.\n"

choose=getchar();

printf("

Continue(y/n):

\n"

%c"

choose);

if(choose=='

y'

||choose=='

Y'

)main();

主要功能模块2:

输入的年月

判断输入年是否为定义年

是否

总天数S=1

总天数S为定义年到输入年的总天数

把S加上该年一月到输入月份的天数,再加1

判断输入的月份是否

为闰年中的月份

是否

该月是否大于二月

把S加上该年一月

到输入月份的天数

把S再加上该把S加上该年年一月到输入一月到输入月

的月份的天数份的天数

再加1

总天数为S

判断S的最后一天为星期几

从这一天起依次输出输入月份的天数直到该月底为止

{

staticintt[12]={31,0,31,30,31,30,31,31,30,31,30,31};

inti,y,weekday=0;

longdays=0;

if(leap_year(year))t[1]=29;

elset[1]=28;

y=t[month-1];

if(year>

2006)

days=(year-2006)*365+count_leap(year)+monthdays(month,year);

weekday=days%7;

elseif(year<

{days=(2005-year)*365+count_leap(year)+monthdays(month,year);

weekday=7-days%7;

else

{days=monthdays(month,year);

weekday=days%7;

}

for(i=1;

i<

weekday+2;

i++)

printf("

\t"

=y;

i++)

{if((i+weekday-1)%7==0)printf("

\n\t%3d\t"

i);

elseprintf("

%3d\t"

};

主要功能模块3:

输入的年份

判断从定义年到输入的年份中

每个年份是否为闰年

闰年

每年为366天

平年

每年为365天

返回该年的天数

{inti;

if(year%4==0&

&

year%100!

=0||year%400==0)i=1;

elsei=0;

returni;

【用到的语句】

1.<

stdio.h>

<

conio.h>

/*头文件*/

2.main()/*主函数*/

3.printf(),

4.scanf()

5.a[]/*数组*/

6.if语句

7.for语句

8.void/*要调用到的函数*/

【源程序代码】

#include<

#include<

intmain()//主函数

{intleap_year(inty);

intcount_leap(intyear);

intmonthdays(intmonth,intyear);

voidmonthprint(intyear,intmonth);

intyear,month,day,b,r,number;

//定义变量

charchoose;

inta[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

printf("

*********************************mainMeun***********************************\n"

1:

riqi>

>

xingqiji.\n"

2:

yueli.\n"

3:

rili.\n"

4:

runnianpanduan.\n"

5:

exit\n"

*****************************************************************************\n"

printf("

pleaseinputthenumber:

scanf("

%d"

number);

if(number==1)

{printf("

//输入要查询的日期

b++)//计算输入月份与但年月份间隔了多少天

{r=a[b]+r;

//计算输入日期与1970,1,1间隔了多少天

if(r%7==0)printf("

elseif(r%7==1)printf("

elseif(r%7==2)printf("

elseif(r%7==3)printf("

elseif(r%7==4)printf("

elseif(r%7==5)printf("

elseprintf("

//选择是否继续

//主函数调用主函数本身

elseif(number==2)

{printf("

pleaseinputtheyear(5000>

****>

0):

scanf("

year);

//输入要查询的年份

for(month=1;

month<

13;

month++)//循环输出12个月份的月历

{printf("

%dyear%dmonth\n"

year,month);

printf("

****************************************************************************\n"

SunMonTueWenThuFriSat\n"

monthprint(year,month);

printf("

choose=getchar();

\n\n"

elseif(number==3)

pleaseinputtheyearandmonth(2100,1>

****,**>

1970,1):

scanf("

%d,%d"

month);

//输入要查询的年,月

************************************************************************\n"

//

if(choose=='

elseif(number==4)

pleaseinputayear5000>

0:

if(leap_year(year))

Thisisrunyear.\n"

elseprintf("

Thisispingyear.\n"

else//选择其他则退出

return0;

intleap_year(intyear)//判断是否闰年

if(year%4==0&

elsei=0;

returni;

intcount_leap(intyear)

{inti=0,j,min,max;

2006){min=2006;

max=year;

else{min=year+1;

max=2006;

for(j=min;

j<

max;

j++)

if(leap_year(j))i++;

intmonthdays(intmonth,intyear)//该月的天数

{intsum=0,i,j;

if(year>

=2006)

{staticintt[12]={31,0,31,30,31,30,31,31,30,31,30,31};

j=month-1;

if(leap_year(year))t[1]=29;

for(i=0;

j;

sum=sum+t[i];

}

else

{staticintt1[12]={31,30,31,30,31,31,30,31,30,31,0,31};

j=12-month;

if(leap_year(year))t1[10]=29;

elset1[10]=28;

for(i=0;

=j;

sum=sum+t1[i];

returnsum;

voidmonthprint(intyear,intmonth)//输出该月的月历

{staticintt[12]={31,0,31,30,31,30,31,31,30,31,30,31};

{days=(year-2006)*365+count_leap(year)+monthdays(month,year);

i++)//输出该月第一天所在位置之前的空格

i++)//输出该月的月历

【调试及分析过程】

在代码编辑器上输入以上程序代码后,保存并f9到tc3.0上运行

结果输出:

分析:

运行后出现“菜单”,选项意思是:

输入1,则确定一个日期是星期几。

输入2,则是查询某年的12个月历。

输入3,则是查询某年某月的月历。

4,则是判断输入年是闰年还是平年。

5,退出。

选择1后,再根据提示输入****,**,**:

2011,10,28

输入你要查询的年月日后,程序会经过计算输出该日的星期号。

然后,输出结果后,系统会询问你是否继续,输入y或Y,继续;

输入N或n或其他字母都会直接退出。

选择y后

选择2后,再根据提示输入你想查询的年份****:

2012

输入你要查询的年份后,系统会经过计算得出每月的月历,然后输出。

但因为输出窗口限制,结果只能看到部分。

同样的,输出结果后,系统仍然会询问是否继续。

选择3后,再根据提示输入你要查询的月份****,**:

2012,6

输入你要查询的月份后,系统会经过计算得出该月的月历图,然后输出。

同样的系统依然会询问是否继续。

选择4后,再根据提示输入你要查询的年份****:

2100

7:

在程序成功测试之前出现主要的问题是:

错误:

程序经计算后得出的月历的开头第一行对不上下面的。

原因是在给每月的第一天的前面空格时多空了一个位

只要将“i<

=weekday;

”改为“i<

weekday;

”即可。

【总结】

经历了这次课程设计的设计和制作的整个过程,我才发现我知识的贫乏和知识面的狭窄,真实的感受到程序设计的困难性,只说时间上面,我总共花了二十几个小时。

这次作课程设计我也是收获很大,首先,我对C语言有了更深的了解,使用起来也更加的熟练,原来有一些不知道和不熟悉的函数,我学会用了。

其次,我这一次找了不少的资料,找专业的书籍、上网找各方面的资料,也使我学到了一些书本中学不到的知识,让我长了见识。

同时我们同学之间也互相的探讨,也增进了我们同学之间的感情。

这次作的这一个设计,虽然我自己觉的很有的成就感,但是这必竟是我第一次作C语言的课程设计,必然会有很多的不足之处有待改进,相信以后我一定会做的更好。

对C语言在编写程序时的用处有了更明确的认识,懂得了编写C程序的一般法方步骤。

最大的收获是,编写程序时一定要有信心和勇气,要相信自己一定可以把这个程序编写出来。

分析问题做出算法,想好思路,在心里有个大致的框架,然后按部就班的记下自己想到的每一点内容,把写下的东西认真整理,查缺补漏,把一些细节的地方补上,就这样一个貌似很难的程序就写出来了。

其实编程并不难,关键是要投入,要钻到里面去。

下一步就是读程序了,读程序时一定要小心仔细,一条语句一条语句的读,看是否能输出自己想要输出的结果,如果发现错误要马上改过来,再接着向下读,直到把程序调试的完美无缺为止。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1