课程设计报告课程名称程序设计基础专周题目年历显示姓名XX班级XXXXXX学号XX指导教师XXX设计时间2015-03-02至2015-03-06成都工业学院计算机工程系成都工业学院课程设计(论文)任务书一、课程设计题目年历显示二、课程设计工作自 2015年 03月 02日至 2015年 03月 06日。
三、课程设计地点: XXXX四、课程设计内容要求:1.本课程设计的目的1) 增进对C语言各理论知识的熟练程度,2) 加强算法设计的能力,为以后的程序设计与编写打下良好基础。
3)增加对C语言的熟练程度,提高程序设计的能力,并初步接触实用程序的编写。
2.课程设计的任务及要求题目:年历显示要求:(1)输入一个年份,输出是在屏幕上显示该年的日历。
假定输入的年份在1940-2040年之间。
(2)输入年月,输出该月的日历。
(3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
3)课程设计编写要求1)详细清晰地描述个人的课程设计工作;2)要按照本模板的规格打印誊写课程报告;3)课程报告包括目录、内容提要、正文、课程设计体会、参考文献、附录等;4)课程报告装订按学校的统一要求完成4)评分标准:1)完成原理分析:20分;2)完成设计过程:40分;3)完成代码分析:20分。
4)个人创新工作:20分。
学生签名:XX2015年 3 月8 日目录目录................................................................................................................... - 1 -正文................................................................................................................... - 2 -一、需求分析............................................................................................... - 2 -二、个人工作..................................................................... 错误!未定义书签。
三、概要设计............................................................................................... - 2 -流程图……………………………………………………………….- 2-程序……………………………………………………………….- 4-四、程序结果..................................................................... 错误!未定义书签。
课程设计体会............................................................................. 错误!未定义书签。
正文一、需求分析我选择课程设计题目:年历显示日常生活当中,我们查询日期很大程度上需要用到日历。
而手动去翻纸质日历查询速度慢,而且会让人看的眼花缭乱。
因此,我们可以编写一个程序来显示某一年的日历。
①程序要能够准确输出某一年的日历;②程序要能够准确的输出某一年的某一月的月历;③程序能够详细查询某一年某一天的日期;④程序能够循环输出。
二、个人工作(1)、设计程序主题,根据输入的内容判断是否为年,月,日,然后输出对应内容;(2)、想出一个算法,排列月份,使输出年历的格式与题目要求一样;(3)、想出一个算法,计算某一天到现在时间有多少天。
(4)、编写打印年历的函数;(5)、编写打印月历的函数;(6)、编写计算日期的函数;(7)、编写主程序。
设计方法:先设计一个主程序,有特定的用户输入界面,然后根据输入的内容判断应该打印的内容。
比如输入2015,程序判断为打印2015年的年历;输入201503程序判断应该打印2015年3月的月历;输入20150305,程序判断是查询2015年3月6日的信息。
然后根据要执行的功能调用相应的函数。
然后分别设计打印日历和打印月历,以及判断日期的函数。
函数思想会在后面的概要设计里面阐述。
三、概要设计1、画出程序流程图;主程序流程图:打印年历或月历的流程图2、根据流程图设计程序首先是主程序,这个程序的主要功能是判断输入的内容并调用相应的函数。
主程序(部分):#include<stdio.h>#include<math.h>void part1(int x); //函数1~6为打印日历的函数void part2(int x);void part3(int x);void part4(int x);void part5(int x);void part6(int x);int weak(int x,int y); //计算1号对应的星期int weak2(int x,int y,int z); //计算星期,为函数day提供数据int year(int x); //打印日历的函数int mouth(int x); //打印月历的函数int day(int x); //查询天数的函数int distance(int x,int y,int z); //提供距离天数查询int main(){int a;char z;x: //位置标注printf("\n");printf("请输入一个日期(Ex:20150302或201503或2015):");scanf("%d",&a);printf("\n");if((1940<=a)&&(a<=2040))year(a);else if((194001<=a)&&(a<=204012))mouth(a);else if((19400101<=a)&&(a<=20401231))day(a);else{printf("输入错误,请重新输入!");goto x;}printf("\n");printf("\n");printf("继续查询(y),退出(n):");scanf("%s",&z);if(z=='y')goto x;else;return 0;}然后是各部分的函数,主要列出几个比较重要的函数:计算每个1日月对应星期几的函数:int weak(int x,int y) //这个函数用于计算3~12月份的第一天对应的星期{int w2,w3,a;if(x<2000) //小于两千年的一月份{a=x-19*100;w2=(19/4)-2*19+(a+a/4)+(13*(y+1)/5);while(w2<0)w2=w2+7;w3=w2%7;}if(x>=2000) //大约两千年的一月份{a=x-20*100;w2=(20/4)-2*20+(a+a/4)+(13*(y+1)/5);while(w2<0)w2=w2+7;w3=w2%7;}return w3;}这个函数是通过使用蔡勒公式来实现的;下面这个函数是计算某天距离现在还有多少天:int distance(int x,int y,int z) //查询距今时间的函数 x,y,z为查询的年月日{int monthday[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //定义12个月每个月天数int n1,y1,r1,i,temp,daytemp,x1,tempmonth1,tempmonth2,allday,t,y2;//n1,y1,r1为现在时间,通过输入t转换;tempmonth1为计算以前年份后的月份的天数,tempmonth2计算现在日期月份的天数,//temp,x1,y2,t为临时变量printf(" \n");printf("请输入今天日期(Ex:20150305):");scanf("%d",&t); //输入当前时间n1=(int)(t/10000);y2=t%10000;y1=(int)(y2/100);r1=y2%100; //分别计算出年,月,日temp=n1-x;if(temp<0) //将年份差值转换为正数temp=-temp;daytemp=temp*365; //计算相差日期x1=x;for(i=0;i<temp;i++) //计算闰年多的一天{if(x1%4==0){if(x1%100!=0)daytemp++;else if((x1%100==0)&&(x1%400==0))daytemp++;else;}。
这个函数的算法是先计算两年之间的差值,然后加上现在时间的月份和日期,再减去查询哪一年已经过了的日期。
四、程序结果1、查询主界面:2、当输入数据为年份是,比如2015,打印2015年的年历;3、当输入数据是月份时,比如:201503,打印2015年3月的月历;4、当输入数据为某一天是,比如:20100305,输出这一天的详细信息;5、退出查询课程设计体会通过这次C语言的课程设计,我明白了很多也知道了很多,更收获了很多。
在课程设计的过程中出现过困难,但我都一一去客服,去解决。
最终,终于完成了一份满意的程序。
转眼几天的课程设计已经结束了。
回想学习C语言的过程中,既有快乐又有烦恼,回顾这次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论和知识是远远不够的,只有把所学的理论知识与实际相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考能力。
在设计的过程中遇到的问题,这毕竟独立做的,难免会遇到各种各样的问题,同时在设计的过程中发现自己的不足之处,对以前所学的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识从新温故。