当前位置:文档之家› C语言课程设计万年历 完整版

C语言课程设计万年历 完整版

目录一引言 (2)二系统功能和数据说明 (3)一)功能简介 (3)二)程序中的数据说明 (3)三程序总体设计及流程图 (4)一)应用到的c语言 (4)二)程序的总框架 (5)四功能模块设计及调试 (5)一)算法说明 (5)1.总天数的算法 (5)2.计算输入日期是星期几 (6)3.对输入信息的汇总 (8)4..界面的控制 (10)二)调试结果 (11)五程序清单 (12)六结束语 (17)一引言通过大一上学期对C语言的学习,了解到了很多C语言的相关知识。

学习的过程有很多困惑但是当自己能够独立的看懂,能过独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。

我可以里哟哦那个它看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对探究的兴趣。

C语言是近年在国内外得到迅速推广应用的一种语言。

C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。

因此,C语言特别适合于编写各种软件。

在这次的课程设计中我将把日常生活中最经常接触的——日期的查询利用C语言的程序编成一个简单的日历。

通过这个小小的日历可以实现很多功能。

在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。

在不断的调试中最终才获得最为完整的程序。

接下来就是我的C 语言课程设计的具体内容来了二系统功能和数据说明(一)功能简介在我们的日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简介明了的给我们最想要的日期信息。

在我的万年历当中,就是将日历,月历做的简单明了,很方便我们的使用。

下面是它要实现的一些基本功能:用C语言编写万年历1、输入年份,判断是否为闰年2、输入年月日,判断改日为星期几3、输入年份,打出12个月历,输入月份,打出该月的日历4、要求用多个函数实现[名称]万年历[修改]1、对输入的日期进行容错处理2、增加和修改为英文的月份和星期显示3、采用指针形式的weeks和month数组(二)程序中的数据说明①int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};这是定义的关于每个月天数的数组,根据大小月以及二月分的特殊情况将每个月的天数最为数组中的元素存入数组当中。

其中days[1]=28,是将闰年二月的天数28天作为初始元素存入。

在经过theWeek函数后就可以给days[1]中存入正确的月天数。

②char *weeks[7] ={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};char *months[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November","DeCember"};这两组数据都设计利用了指针定义的。

这两个数组的作用是存入每个月,每个星期的地址。

利用指针可以提高程序的可读性,可以更方便使用。

三程序总体设计及流程图(一)应用到的C语言头文件:stdio.h /**/conio.h /**/stdlib.h /**/采用指针形式定义了*weeks和*months两组数组指针变量在程序中运用了大量的自定义函数,都涉及为了使程序更简介明了。

其中有:isLeap/*判断是否为闰年*/theLeap/*输入输出改年是否为闰年的信息*/Zeller/*判断星期的自定义函数*/theWeek()/*对于输入的日期输出该天是星期几*/printCalendar()/*输出日期详情及表格*/details /*月历详情函数*/theCalendar/*打开相应的详情*/Menu()/*程序的主菜单*/Select()/*按键的控制函数*/这些函数的定义极其相应的内部程序共同构筑起了这个万年历总程序。

其中的isLeap函数是用来判断输入的年份是否为闰年,实现了预计功能的第一个方面;theWeek函数则是为了实现判断星期而编写的;printCalendar , details ,theCalendar这三个函数的共同使用就能够完成第三个功能。

(二)程序的总框架四功能模块函数设计和调试一).算法说明1. 总天数的算法:isLeap和theLeap函数的共同使用,一起判断出了输入年份是否为闰年的信息。

判断一年是否为闰年的方法是:该年分而能被四整除但不能被100整除,或者是能被400整除。

流程图二:是否为闰年的判断2. 计算输入日期是星期几:利用Zeller函数可以判断出星期,然后对于输入的日期可以通过theWeek()函数对Zeller进行一次调用然后就可以输出相应的星期数。

①int Zeller(int year, int month, int day) //by theWeek(); printCalendar();/*判断星期的函数*/{int C, y, m, d, w;if( month < 3) { year -= 1; month += 12; }c = year / 100;y = year % 100;m = month;d = day;w = y + y/4 + C/4 - 2*C + 26*(m+1)/10 + d - 1;w %= 7;return (w >= 0 ? w : w+7);}②void theWeek() //by Select();/*对于输入的日期输出该天是星期几*/{int year, month, day, w;printf("\n");do{printf("Please input the date(YYYY-MM-DD): ");scanf("%d-%d-%d", &year, &month, &day);if( isLeap( year ) ) days[1] = 29; //是否闰年else days[1] = 28;}while(!( (month > 0 && month < 13) && (day > 0 && day <= days[month - 1]) ) );w = Zeller(year, month, day);printf("\nThis day %d-%02d-%02d is %s.", year, month, day,weeks[w]);getch();}3. 对输入信息的汇总:theCalendar/*打开相应的详情*/ ,details /*月历详情函数*/ ,printCalendar /*输出日期详情及表格*/,通过这三个函数可以将输入数据的具体信息通过完整日历的形式表示出来。

①void printCalendar(int year, int month) //by details(); theCalendar();/*输出日期详情及表格*/{int w, d;w = Zeller(year, month, 1);printf("%28s", months[month - 1]);printf("\n -%02d-\n", month);printf(" SUN MON TUE WED THU FRI SAT\n");for(d = 0; d < w; d++) { printf(" "); }for(month--, d = 1; d <= days[month]; d++){printf("%4d", d);if( (d + w)%7 == 0 && d != days[month]) printf("\n");}printf("\n============================\n");}例:1946, JanuarySUN MON JUE WED THU FRI SAT1 2 3 4 56 7 8 9 10 11 1213 14 15 16 17 18 1920 21 22 23 24 25 2627 28 29 30 31============================================②void details(int year) //by theCalendar();/*月历详情函数*/{int month;while(true){do{system("cls");printf("Press '0' to exit.\n");printf("Please input the month: ");scanf("%d", &month);}while(!(month >=0 && month <= 12));if(month != 0){printf("\n");printf("Calendar %d\n", year);printCalendar(year, month);if( getch() == '0') break;}else break;}}③void theCalendar() //by Select();{int year, month;printf("\nPlease input the year: "); scanf("%d", &year);if( isLeap( year ) ) days[1] = 29; //是否闰年 else days[1] = 28; system("cls");printf("Calendar %d\n", year); for(month = 1; month <= 12; month++) {printCalendar(year, month); }printf("More details of each month ?[Y/N]"); if( tolower(getch()) == 'y' ) details( year ); }4.界面的控制:主要体现在主菜单的选择功能上。

相关主题