1、攀枝花学院课程设计(论文)攀枝花学院学生课程设计(论文) 题 目: 日历系统设计 学生姓名: 朱鑫平 学 号: 201410801049 所在院(系): 数学与计算机学院 专 业: 计算机科学与技术 班 级: 2014级1班 指 导 教 师: 刘小英 职称: 讲师 2016年 6 月 25 日攀枝花学院教务处制2攀枝花学院本科学生课程设计任务书题目日历系统设计1、课程设计的目的1) 使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。2) 使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。3) 使学生掌握
2、使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等) 1)输入任一年将显示出该年的所有月份日期,对应的星期2)注意闰年情况其显示格式要求如下:1)份:中文英文都可以,2)下一行显示星期,从周日到周六,中英文都可以3)下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐当输入2004显示如下:Input the year:2004Input the file name:aThe calendar of the year 2004. Januray 1 February 2 Sun Mon Tue We
3、d Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 1 2 3 1 2 3 4 5 6 7 4 5 6 7 8 9 10 8 9 10 11 12 13 14 11 12 13 14 15 16 17 15 16 17 18 19 20 21 18 19 20 21 22 23 24 22 23 24 25 26 27 28 25 26 27 28 29 30 31 29 = = March 3 April 4 Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 1 2 3 7
4、8 9 10 11 12 13 4 5 6 7 8 9 10 14 15 16 17 18 19 20 11 12 13 14 15 16 17 21 22 23 24 25 26 27 18 19 20 21 22 23 24 28 29 30 31 25 26 27 28 29 30 = =3、主要参考文献1刘大有等,数据结构(C语言版),高等教育出版社2严蔚敏等,数据结构(C语言版),清华大学出版社3William Ford,William Topp,Data Structure with C+清华大学出版社4苏仕华等,数据结构课程设计,机械工业出版社4、课程设计工作进度计划第1天 完成
5、方案设计与程序框图 第2、3天 编写程序代码第4天 程序调试分析和结果第5天 课程设计报告和总结指导教师(签字)日期年 月 日教研室意见:年 月 日学生(签字): 接受任务时间: 年 月 日注:任务书由指导教师填写。课程设计(论文)指导教师成绩评定表题目名称日历系统设计评分项目分值得分评价内涵工作表现20%01学习态度6遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。02科学实践、调研7通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。03课题工作量7按期圆满完成规定的任务,工作量饱满。能力水平35%04综合运用知识的能力10能运用所学知识和技能去发现与解决实际问题,能
6、正确处理实验数据,能对课题进行理论分析,得出有价值的结论。05应用文献的能力5能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。06设计(实验)能力,方案的设计能力5能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。07计算及计算机应用能力5具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。08对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)10具有较强的数据收集、分析、处理、综合的能力。成果质量45%09插图(或图纸)质量、篇幅、设计(论文)规范化
7、程度5符合本专业相关规范或规定要求;规范化符合本文件第五条要求。10设计说明书(论文)质量30综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。11创新10对前人工作有改进或突破,或有独特见解。成绩指导教师评语指导教师签名: 年月日攀枝花学院课程设计(论文) 摘要摘要本课程设计采用VC+语言编程软件功能和相关数据结构的知识实现的,采用 Visual C+6.0工具为开发环境,运用了C+中基于面向对象的编程,设计了一个万年历查询系统,能根据用户的选择,显示日历和查询日历,并进行闰年和平年的判断。 关键字:万年历,查询,闰年。平年II攀枝花学院课程设计(论文) 目录攀
8、枝花学院课程设计(论文) 课程设计目的及意义目 录摘要II1 课程设计目的及意义11.1课程设计目的11.2课程设计意义12 需求分析23 整体设计33.1算法设计33.2程序操作流程图54 详细设计74.1程序块涉及代码74.1.1闰年函数的定义74.1.2星期判断74.1.3月份计算(switch语句实现)74.1.4日期的输出84.2程序详细代码95 程序测试及运行135.1程序结果135.2结果分析136 总结14参考文献151 课程设计目的及意义1.1课程设计目的数据结构是计算机专业的教学计划中的核心课程之一,数据结构在计算机科学中是一门综合性的专业基础课。“数据结构”的研究不仅涉及
9、到计算机硬件(特别是编码理论,储存装置和存取方法等)的研究范围,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在储存器中的分配问题。在研究信息检索时也必须考虑如何组织数据,以便查找和存取数据元素更为方便。因此,可以认为“数据结构”是介于数学,计算机硬件和计算机软件三者之间的一门核心课程。在计算机科学中,“数据结构”不仅是一般程序设计(特别是非数值计算的程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。本项课程设计,可以培养独立思考、 综合运用所学有关相应知识的能力,能更好的巩固数据结构课程学习的内容,掌
10、握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性15攀枝花学院课程设计(论文) 需求分析1.2课程设计意义通过数据结构课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础2 需求分析现代化社会中,人们的日期和时间观念日益加强;但是目前流行的计算机日历程序,大多是局限于1980年至2099年这一范围,但是很
11、多情况下,特别是在研究领域中,一个时间跨度很大的日历程序是很有参考价值的。本次课程设计是制作一个小巧而精确的万年历,有助于帮助人们对于日程管理的安排。这个万年历系统就是为此而为各类人群而诞生的。攀枝花学院课程设计(论文) 整体设计3 整体设计3.1算法设计万年历具有以下特点1).平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。 2).每400年整一闰,或每4年且不为百年的一闰。(原因:地球绕太阳一周的时间是365天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年
12、的二月而成29天,该年称为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。因此400年中只能有97个闰年,所以凡能被400整除,或不能被100整除但能被4整除的年份为闰年。)3).每 4年(3个平年+1个闰年)共208周+5天注意这个“5天”4).每百年共100*(208周+5天)-1天=5217周+5天注意这个“5天”(整百年暂设为平年)5).每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天注意这个“0天”和“1天”(4个整百年只有一个闰年) 即400年一轮回!(原来万年历400年前是一家)根据万年历以上特点进行编写1)首先对万
13、年历年、月、日进行编写,编写程序先定义每月的天数为28天,如月份为1、3、5、7、8、10、12就定义天数为31天反之如果月份为4、6、9、11就输出天数为30天,由上可见2月份为28天但是如果为闰年就有29天就要定义一个数组存放天数,用while循环控制。2)再对其中的星期进行编写:由于公元1月1日设为星期六,故3月1日为星期三,可以用万年3月1日星期算法(特别是那个三)其公式为:某年3月1日星期几=(3天+百年%4*5天+年/4*5天+年%4+月星期表+日-1天)%7某年3月1日星期几=(百年%4*5天+年/4*5天+年%4+月星期表+日+2天)%7或某年3月1日星期几=(百年%4*5天+
14、年+年/4+月星期表+日+2天)%7其中,闰4百年3月1日星期算法(百年%4=0)其公式为:某年3月1日星期几=(年+年/4+月星期表+日+2天)%7例:1600年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三2000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三2001年3月1日星期几=(1+1/4+0+1+2)%7=4%7=星期四2004年3月1日星期几=(4+4/4+0+1+2)%7=8%7=星期一2008年3月1日星期几=(8+8/4+0+1+2)%7=13%7=星期六2042年3月1日星期几=(42+42/4+0+1+2)%7=55%7=星期六其中,
15、平4百年3月1日星期算法(百年%40)其公式为:某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7例:1700年3月1日星期几=(17%4*5+0+0/4+0+1+2)%7=8%7=星期一(注意:1700年是平年)1800年3月1日星期几=(18%4*5+0+0/4+0+1+2)%7=13%7=星期六(注意:1800年是平年)1900年3月1日星期几=(19%4*5+0+0/4+0+1+2)%7=18%7=星期四(注意:1900年是平年)1999年3月1日星期几=(19%4*5+99/4*5+99%4+3)%7=(15+120+3+3)%7=141%7=星期一2100年
16、3月1日星期几=(21%4*5+0/4*5+0%4+3)%7=(5+0+0+3)%7=8%7=期一(注意:2100年是平年)2101年3月1日星期几=(21%4*5+1/4*5+1%4+3)%7=(5+0+1+3)%7=9%7=星期二2102年3月1日星期几=(21%4*5+2/4*5+2%4+3)%7=(5+0+2+3)%7=10%7=星期三2103年3月1日星期几=(21%4*5+3/4*5+3%4+3)%7=(5+0+3+3)%7=11%7=星期四2104年3月1日星期几=(21%4*5+4/4*5+4%4+3)%7=(5+1+0+3)%7=9%7=星期二(注意:2104年是闰年)999
17、9年3月1日星期几=(99%4*5+99/4*5+99%4+3)%7=(120+15+3+3)%7=141%7=星期一 注:按400年一轮回!(400年前是一家)的说法 1600年,2000年是一样的; 1700年,2100年是一样的;1800年,2200年是一样的;1900年,2300年是一样的。其中万年某日星期算法 其公式为:某日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7通同星期偏差表如下:闰年1月2月3月4月5月6月7月8月9月10月11月12月天数312931303130313130313031星期360351362402平年1月2月3月4月5月6月7月8月9月10
18、月11月12月天数312831303130313130313031星期400351362402表2.1星期偏差表为对以上的万年历星期的算法是正确的对其进行了以下的计算:对于二十世纪任意日期可以用公式某日星期几=(百年%4*5天+年+年/4+平年月星期表+日+2天)%7=(19%4*5天+年+年/4+平年月星期表+日+2天)%7=(15天+年+年/4+平年月星期表+日+2天)%7以下就是根据上面对其进行的计算: 1900年元旦 1日=(0/4*5+0%4+1+3)%7=(0+0+4)%7=4 1月表=4(平年) 故 4+4=1 即1900年元旦是星期一1949年国庆 1日=(49/4*5+49%
19、4+1+3)%7=(60+1+4)%7=2 10月表=4(平年) 故 4+2=6 即1949年国庆是星期六1999年12月31日 31日=(99/4*5+99%4+31+3)%7=(120+3+34)%7=3 12月表=2(平年) 故 2+3=5 即1999年12月31日是星期五对于二十一世纪新前年虫算法(20%4*5=0)可以用公式:某日星期几=(百年%4*5天+年+年/4+闰年月星期表+日+2天)%7 =(20%4*5天+年+年/4+闰年月星期表+日+2天)%7以下就是根据上面对其进行的计算:2000年元旦 1日=(0+0/4+1+2)%7=(0+0+1+2)%7=3 1月表=3(闰年)
20、故 3+3-6 即2027年元旦是星期六2018年春节 16日=(18+18/4+16+2)%7=(18+4+16+2)%7=5 2月表=0(平年) 故 0+5=5 即2018年春节是星期五2099年12月31日 31日=(99/4*5+99%4+31+2)%7=(120+3+33)%7=2 12月表=2(平年) 故 2+2=4 即2099年12月31日是星期四最后,根据日期是紧挨顺序的,可用顺序存储结构存储,对年、月、星期的算法清晰之后,即可用C语言的形式及C+语言的形式编程。3.2程序操作流程图如图2.1所示图3.1程序流程图攀枝花学院课程设计(论文) 详细设计4 详细设计4.1程序块涉及
21、代码4.1.1闰年函数的定义:此程序块用于判断输入的年份是否为闰年,然后根据结果转入相应的程序块进行日历的计算,代码如下:int IsLeapYear( int year )if (year %4 = 0) & (year % 100 != 0) |(year % 400 = 0) )return 1;elsereturn 0;4.1.2星期判断:次此程序实现对星期的判断,代码如下:i = Year_days % 7;printf(Mon Tue Wed Thu Fri Sat Sunn);if( i != 0 )for( temp_i = 0; temp_i i; temp_i+)print
22、f( );day = 1;4.1.3月份计算(switch语句实现)此部分程序实现根据输入年份计算月份,代码如下:switch( temp )case 1:printf(January(%d)n,year);break;case 2:printf(Febrary(%d)n,year);break;case 3:printf(March(%d)n,year);break;case 4:printf(April(%d)n,year);break;case 5:printf(May(%d)n,year);break;case 6:printf(June(%d)n,year);break;case 7
23、:printf(July(%d)n,year);break;case 8:printf(Augest(%d)n,year);break;case 9:printf(September(%d)n,year);break;case 10:printf(October(%d)n,year);break;case 11:printf(November(%d)n,year);break;case 12:printf( December(%d)n,year);break;4.1.4日期的输出(分闰年及平年,用if语句和while循环实现):if( IsLeapYear(year) & temp = 2)w
24、hile( day 1 )if( Year_days % 7 = 0 )printf( n);if( day = 10 )printf(%3d ,day);elseprintf(%3d ,day);Year_days+;day+;elsewhile (day 1 )if( Year_days % 7 = 0 )printf(n);if( day =10 )printf(%3d ,day);elseprintf(%3d ,day);Year_days+;day+;printf(n);if( getch() = q )exit(0);getch();4.2程序详细代码#include /标准输入输
25、出头文件,包含getch()、scanf()、printf()等语句#include /I/O流控制头文件,含有%d(dec 置基数为10) 函数 #include /标准的输入输出流头文件包含scanf()、printf()、cin 、cout函数#include /控制台输入输出含有getch()函数#include /包含了的C语言标准库函数如exit()、malloc()、free()int IsLeapYear(int); /整型 闰年 的定义 void main() /主程序int i;int day;int year;int temp;int temp_i;long int Ye
26、ar_days = 0;int Year_Start = 1; /万年历的起始时间为公元1年int Per_Year_Days;int month_day=31,28,31,30,31,30,31,31,30,31,30,31,29; /定义用于存放每月天数的数组,一三五七八十腊为31天,二月分28天和29天printf(Please input the year: );scanf(%d,&year);printf(the calender of the year %dn,year); /输入年份,year用引用类型,年数不同时输出随着改变while(Year_Start year)if( I
27、sLeapYear( Year_Start ) ) /闰年为366天Per_Year_Days = 366;elsePer_Year_Days = 365; /平年为365天Year_days = Year_days + Per_Year_Days;Year_Start+;for( temp = 1; temp =12; temp+ ) /switch( temp ) /计算temp表达式的值case 1:printf(January 1n,year);/一月break;case 2:printf(February 2n,year);/二月break;case 3:printf(March 3
28、n,year);/三月break;case 4:printf(April 4n,year);/四月break;case 5:printf(May 5n,year);/五月break;case 6:printf(June 6n,year);/六月break;case 7:printf(July 7n,year);/七月break;case 8:printf(August 8n,year);/八月break;case 9:printf(September 9n,year);/九月break;case 10:printf(October 10n,year);/十月break;case 11:prin
29、tf(November 11n,year);/十一月break;case 12:printf( December 12n,year);/十二月break;i = Year_days % 7; /闰年为366天年数除以7的余数printf(Mon Tue Wed Thu Fri Sat Sunn);if( i != 0 )for( temp_i = 0; temp_i i; temp_i+)printf( );day = 1;if( IsLeapYear(year) & temp = 2) /*此程序的核心,当为闰年时,二月有29天执行while循环,实现星期的换行while( day 1 )i
30、f( Year_days % 7 = 0 ) /控制每月第一天的位置,满足余数为0时,另起一行printf( n);if( day = 10 )printf(%3d ,day); /*C语言域宽的设置 %3d表示相邻天数的域宽为3,星期的排列整齐elseprintf(%3d ,day);Year_days+;day+;elsewhile (day 1 )if( Year_days % 7 = 0 ) /与闰年时执行条件一样printf(n);if( day =10 )printf(%3d ,day);elseprintf(%3d ,day);Year_days+;day+;printf(n);
31、printf(=n);if( getch() = q )exit(0); /满足条件时退出getch(); /不满足条件时执行getch()语句int IsLeapYear( int year ) /闰年的定义if (year %4 = 0) & (year % 100 != 0) |(year % 400 = 0) )return 1;elsereturn 0;攀枝花学院课程设计(论文) 程序测试及运行5 程序测试及运行5.1程序结果该程序运行界面如图5.1所示,输入需要查询的年份。图5.1 运行界面例如:2004,敲击回车运行,结果如图5.2所示 图5.2程序运行结果5.2结果分析1).
32、日历的形式为阳历,输出范围为公元1年至公元9999年;2). 输出结果满足设计要求,可以输出月份,星期,日期且以现在日历的形式输出;3). 结果能有效区分闰年及平年,每一天的具体天数;4). 每月前的空格及数字之间的域宽都满足要求;攀枝花学院课程设计(论文) 总结6 总结1).经过一个学期对数据结构的学习,我们学习了理论知识,了解了C语言程序设计的思想,这些知识都为我们的下一步学习打下了坚实的基础。通过课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。通过对万年历的设计进一步的巩固了用c
33、语言和C+编写程序,并且有利于更好的掌握程序设计语言2).通过本项课程设计也培养了我独立思考、 综合运用所学有关相应知识的能力,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关3).由于程序设计语言是近年在国内外得到迅速推广应用的一种语言。它功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。通过这次的程序设计更加了解了语言设计的好处和其可用性4).在课程设计的过程中也知道了自己在以前的学习中有很大的不足导致在设计过程中出现了很多的问题,有些地方看不懂也不知道怎么去设计,但是在设计过程中也学习了
34、很多,掌握了自己以前没有学好的知识,虽然一时可以掌握完以前没有学好的知识,不过也给自己敲响了警钟,在学习中不可以伏于表面,要想学好每一门课程都要踏踏实实,做什么都不是给别人看的!都是要更好的掌握该门知识,提高自己的自身的修养,提高自己的能力!为以后的工作打下良好的知识基础和技能基础攀枝花学院课程设计(论文) 参考文献参考文献1.严蔚敏,吴伟民.数据结构【】.北京:清华大学出版社,2011年2.郑莉,董渊,河江舟.C语言程序设计【】.北京:清华大学出版社,2011年3刘大有等.数据结构(C语言版),高等教育出版社4严蔚敏等.数据结构(C语言版),清华大学出版社5William Ford,William Topp.Data Structure with C+,清华大学出版社