《C语言课程设计万年历--完整版(共17页).doc》由会员分享,可在线阅读,更多相关《C语言课程设计万年历--完整版(共17页).doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上目 录一 引言.2二 系统功能和数据说明.3一)功能简介3二)程序中的数据说明3三 程序总体设计及流程图.4一)应用到的c语言4二)程序的总框架5四 功能模块设计及调试.5 一)算法说明51. 总天数的算法.52. 计算输入日期是星期几.63. 对输入信息的汇总.84. .界面的控制.10二)调试结果.11五 程序清单12六 结束语17一 引言通过大一上学期对C语言的学习,了解到了很多C语言的相关知识。学习的过程有很多困惑但是当自己能够独立的看懂,能过独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。我可以里哟哦那个它看懂一些简单的程序,编写一些简单的计算程
2、序,更多的是学会了一种思想编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对探究的兴趣。C语言是近年在国内外得到迅速推广应用的一种语言。C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。因此,C语言特别适合于编写各种软件。在这次的课程设计中我将把日常生活中最经常接触的日期的查询利用C语言的程序编成一个简单的日历。通过这个小小的日历可以实现很多功能。在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。在不断的调试中最终才获得最为完整的程序。接下来就是
3、我的C语言课程设计的具体内容来了二 系统功能和数据说明(一)功能简介 在我们的日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简介明了的给我们最想要的日期信息。在我的万年历当中,就是将日历,月历做的简单明了,很方便我们的使用。下面是它要实现的一些基本功能:用C语言编写万年历 1、输入年份,判断是否为闰年 2、输入年月日,判断改日为星期几 3、输入年份,打出12个月历,输入月份,打出该月的日历 4、要求用多个函数实现 名称万年历 修改1、对输入的日期进行容错处理 2、增加和修改为英文的月份和星期显示 3、采用指针形式的weeks和month数组(二)程序中的数据说明int days
4、12 = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; 这是定义的关于每个月天数的数组,根据大小月以及二月分的特殊情况将每个月的天数最为数组中的元素存入数组当中。其中days1=28,是将闰年二月的天数28天作为初始元素存入。在经过theWeek函数后就可以给days1中存入正确的月天数。char *weeks7 =Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday; char *months12 = January, February, March, April, Ma
5、y, June, July, August, September, October, November, DeCember; 这两组数据都设计利用了指针定义的。这两个数组的作用是存入每个月,每个星期的地址。利用指针可以提高程序的可读性,可以更方便使用。三 程序总体设计及流程图(一)应用到的C语言头文件:stdio.h /*/ conio.h /*/ stdlib.h /*/采用指针形式定义了*weeks和*months两组数组指针变量在程序中运用了大量的自定义函数,都涉及为了使程序更简介明了。其中有:isLeap/*判断是否为闰年*/theLeap/*输入输出改年是否为闰年的信息*/ Zell
6、er/*判断星期的自定义函数*/ theWeek()/*对于输入的日期输出该天是星期几*/ printCalendar()/*输出日期详情及表格*/ details /*月历详情函数*/ theCalendar/*打开相应的详情*/ Menu()/*程序的主菜单*/ Select()/*按键的控制函数*/这些函数的定义极其相应的内部程序共同构筑起了这个万年历总程序。其中的isLeap函数是用来判断输入的年份是否为闰年,实现了预计功能的第一个方面;theWeek函数则是为了实现判断星期而编写的;printCalendar , details , theCalendar这三个函数的共同使用就能够完
7、成第三个功能。(二)程序的总框架开始计算是否为闰年计算星期数按键1?按键2?按键3?输出是否为闰年输出星期数计算编辑接收到的数据输出具体月历按键0?是是是是计算是否为闰年计算星期数按键1?按键2?按键3?是是是计算是否为闰年计算星期数按键1?按键2?按键3?是是计算是否为闰年计算星期数按键1?按键3?是是结束 退出四 功能模块函数设计和调试一).算法说明1. 总天数的算法:isLeap和theLeap函数的共同使用,一起判断出了输入年份是否为闰年的信息。判断一年是否为闰年的方法是:该年分而能被四整除但不能被100整除,或者是能被400整除。流程图二:是否为闰年的判断2. 计算输入日期是星期几:
8、利用Zeller函数可以判断出星期,然后对于输入的日期可以通过theWeek() 函数对Zeller进行一次调用然后就可以输出相应的星期数。int Zeller(int year, int month, int day) /by theWeek(); printCalendar();/*判断星期的函数*/ int C, y, m, d, w; if( month = 0 ? w : w+7);void theWeek() /by Select();/*对于输入的日期输出该天是星期几*/ int year, month, day, w; printf(n); do printf(Please i
9、nput the date(YYYY-MM-DD): ); scanf(%d-%d-%d, &year, &month, &day); if( isLeap( year ) ) days1 = 29; /是否闰年 else days1 = 28; while(!( (month 0 & month 0 & day = daysmonth - 1) ) ); w = Zeller(year, month, day); printf(nThis day %d-%02d-%02d is %s., year, month, day, weeksw); getch();3. 对输入信息的汇总:theCa
10、lendar/*打开相应的详情*/ ,details /*月历详情函数*/ ,printCalendar /*输出日期详情及表格*/,通过这三个函数可以将输入数据的具体信息通过完整日历的形式表示出来。void printCalendar(int year, int month) /by details(); theCalendar();/*输出日期详情及表格*/ int w, d; w = Zeller(year, month, 1); printf(%28s, monthsmonth - 1); printf(n -%02d-n, month); printf( SUN MON TUE WE
11、D THU FRI SATn); for(d = 0; d w; d+) printf( ); for(month-, d = 1; d =0 & month = 12); if(month != 0) printf(n); printf(Calendar %dn, year); printCalendar(year, month); if( getch() = 0) break; else break; void theCalendar() /by Select(); int year, month; printf(nPlease input the year: ); scanf(%d, &
12、year); if( isLeap( year ) ) days1 = 29; /是否闰年 else days1 = 28; system(cls); printf(Calendar %dn, 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.界面的控制:主要体现在主菜单的选择功能上。用到的是 Menu(), Select()两个自定义函
13、数。主菜单功能1 这年是否是闰年0 退出2 这一天天的星期数3 这一年的月历二)调试结果五 程序清单*/#include #include /getch(); tolower(); exit();#include /system();int days12 = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31;char *weeks7 =Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday;char *months12 = January, February, March, Apr
14、il, May, June, July, August, September, October, November, December;bool isLeap(int year) /by theLeap(); theCalendar();/*判断是否为闰年*/ if(year%4 = 0 & year%100 != 0 | year%400 = 0) return 1; else return 0; void theLeap() /by Select();/*输入输出改年是否为闰年的信息*/ int year; printf(nPlease input the year: ); scanf(%
15、d, &year); if( isLeap( year ) ) printf(nThe year %d is leap year., year); else printf(nThe year %d is not leap year., year); getch();int Zeller(int year, int month, int day) /by theWeek(); printCalendar();/*判断星期的自定义函数*/ int c, y, m, d, w; if( month = 0 ? w : w+7);void theWeek() /by Select();/*对于输入的日
16、期输出该天是星期几*/ 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 ) ) days1 = 29; /是否闰年 else days1 = 28; while(!( (month 0 & month 0 & day = daysmonth - 1) ) ); w = Zeller(year, month, day); printf(nThis day %d-%02d
17、-%02d is %s., year, month, day, weeksw); getch();void printCalendar(int year, int month) /by details(); theCalendar();/*输出日期详情及表格*/ int w, d; w = Zeller(year, month, 1); printf(%28s, monthsmonth - 1); printf(n -%02d-n, month); printf( SUN MON TUE WED THU FRI SATn); for(d = 0; d w; d+) printf( ); for
18、(month-, d = 1; d =0 & month = 12); if(month != 0) printf(n); printf(Calendar %dn, 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 ) ) days1 = 29; /是否闰年 else
19、days1 = 28; system(Cls); printf(Calendar %dn, year); for(month = 1; month = 12; month+) printCalendar(year, month); printf(More details of each month ?Y/N); if( tolower(getch() = y ) details( year );void Menu() /by main();/*程序的主菜单*/ system(cls); printf(1 -This year is leap year or notn); printf(2 -T
20、his day is which day of the weekn); printf(3 -The Calendar of this yearn); printf(0 -Exitnn); printf(Please select the options:);void Select() /by main();/*按键的控制函数*/ char key; bool v = true; while( v ) key = getch(); switch( key ) Case 1: theLeap(); v = false; break; Case 2: theWeek(); v = false; br
21、eak; Case 3: theCalendar(); v = false; break; Case 0: exit(1); void main() while(true) Menu(); Select(); 六 小结经历了这次课程设计的设计和制作的整个过程,我才发现我知识的贫乏和知识面的狭窄,原本以为不就是一个小小的课程设计,很容易就可以搞定,可是到了后来实际的操作的时候可是花费了我九牛二虎之力,不说其他的,只说时间上面,我在宿舍里面熬了三个通宵,更不用说白天的时间了。这次作课程设计我也是收获很大,首先,我对C语言有了更深的了解,使用起来也更加的熟练,原来有一些不知道和不熟悉的函数,我学会用了。其次,我这一次找了不少的资料,找专业的书籍、上网找各方面的资料,也使我学到了一些书本中学不到的知识,让我长了见识。同时我们同学之间也互相的探讨,也增进了我们同学之间的感情。这次作的这一个设计,虽然我自己觉的很有的成就感,但是这必竟是我第一次作C语言的课程设计,必然会有很多的不足之处有待改进,相信以后我一定会做的更好。参考资料:1谭浩强。C程序设计(第三版).北京:清华大学出版社,2005 2谭浩强.C程序设计题解与上机指导(第三版)。北京:清华大学出版社,2005专心-专注-专业