C语言编程万年历程序说明书

  • 格式:docx
  • 大小:22.20 KB
  • 文档页数:15

目录前言 (3)正文..............................................................................4-6 本次课程总结 (7)附录…………………………………………………………………8-16一.设计题目模仿现实生活中的挂历。

当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。

当系统日期变到下一月时,系统自动翻页到下一月。

二.要求简析根据题目要求,实现当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。

并且在系统时间变化时能够自动翻转页数。

三.实现功能与设计目的题目中要求尽量模仿生活中的挂历,在起始页显示当前的时间以及当前月的月历,目的是使使用者能够直接获取时间,月内周次显示等生活便捷信息。

在功能上有一定创新,表现在周次查询,闰年查询和全年年历查询等便捷功能,操作要求也很快捷,在起始页按下对应数字即可,实现了程序使用上的简便性和快捷性。

另外,功能界面上具有持续性,即可让使用者选择性的持续使用谋一个固定的功能,方便快速使用。

同时,实现了快速回复主菜单的功能,在每个功能菜单上,都可以通过一键快速启用主菜单,从而在功能转换方面得到了很好的提升,方便使用。

通过本程序,实现查询方便,功能持续,转换快捷等有利于方便人们生活的功能,达到了时间知识,灵活运用的目的。

一.需求分析(1)输入的形式和输入值的范围;程序输入要求包含数字输入和字母输入两个部分,回车键确定,数字输入部分主要为年份,月份,日期查询命令时使用,要求了固定的输入格式年份规定位数为四位正数,月份和日期固定为两位正数。

字母输入部分主要为功能转换和输入确定使用。

若输入出错将提示使用者“输入有错,请从新确定输入”。

(2)输出的形式;输出形式以汉字和数字结合的方式输出,输出环境汉语显示,简单明了,数字排列简明,读数方便。

(3)程序所能达到的功能;程序所能达到的功能包括五个方面:1、当前时间,精确到分钟;2、当前月的月历;3、周次查询功能;4、闰年查询功能;5、任意年全年年历查询功能。

(4)测试数据:包括正确的输入及输出结果和含有错误的输入及其输出结果;1、正确输入的数据,比如主菜单下输入“1+回车”“2010,03,26+回车”可以显示为“2010-3-26是星期六,是否继续使用该项功能(y/n)”。

在比如主菜单下输入“3+回车”“2010+回车”显示为2010年全年年历2、错误输入的数据,比如主菜单下输入“5+回车”将会出现错误提示,显示为“错误提醒:您的输入有错,请从新确定输入”二.设计概要本程序主要运用的数据结构主要为数组,类型包括字符型和整形等,程序结构上,使用了循环体结构,选择性结构,选择性结构包含switch语句,do语句,if……else语句,while语句等,算法上使用了符合逻辑语句,运用各种逻辑运算符和赋值语句,使程序简洁明了,函数调用方面,使用了数组函数的调用方式,快速简明,使用了指针调用,同时,在程序中使用了<time.h>调用系统当时时间,同时,使用了一部分结构体变量服务程序。

主函数通过switch……case语句调用了各个小函数,且通过switch……case语句逐渐展开。

三.详细设计伪代码算法概要:1、闰年算法:When year%4 is zeroAnd year%100 is not one 100Or year%400 is zeroTheThe year is leapyear!2、周次算法:A mon_day is defferentThen put it togetherThey are{31,28,31,30,31,30,31,31,30,31,30,31;If the year is leapyearThen the second number is29Else it is 28Get daySearch(int year,int month,int dayWhen day is mWhen m is one mis not bigger than monthM is m add oneAnd c add dayS is yearcut1add year cut one/4 add year cut one/100 add year cut one /400 cut 40 add c;四.调试分析(1)遇到的问题问题主要包括1、函数调用方面数组结构调用出现失误,出现调用数组但不能赋值或者是赋值后不能显示;调用系统函数是也出现了调用失误的现象,处理时提示调用失误无法显示等提示。

处理时灵活运用书本知识,分析清楚变量之间的关系。

2、字符方面特别注意符合问题和拼写问题,比如漏写“;“和“,”等一出错。

(2)经验和体会处理问题灵活分析,熟悉运用课本知识处理问题,另外,细心分析,耐心处理问题很重要。

五.用户使用说明运行程序起始界面,根据汉字提示,按需要输入相关指令前面对应的数字,以回车键确定,得出结果后,若需要继续使用该项功能,输入y,以回车键确定,否车输入n,以回车键确定,在主菜单选择其他功能,操作要求简单明了,用户只需要根据汉字提示输入相关数字或是字母,回车确定即可。

六.测试结果(1)主菜单下输入“1+回车”“2010,03,26+回车”可以显示为“2010-3-26例:是星期六,是否继续使用该项功能(y/n)”。

(2)主菜单下输入“2010+回车”显示为“2010年不是闰年,是否继续使用该项功能(y/n)”(3)主菜单下输入“3+回车”“2010+回车”显示为2010年全年年历(4)主菜单下输入“5+回车”将会出现错误提示,显示为“错误提醒:您的输入有错,请从新确定输入”本次课程设计总结C语言博大精深,是一门要求细心与耐心的课程,c语言灵活多变,但是入门要求高,取得入门时一个努力攀登的过程。

但是,使用好c语言,确能改使用者带来许多乐趣,能够在使用过程中感受创造之美和改变之美,更能领略到计算机科学的神奇之处。

而且,学习c语言不能急于求成,冰冻三尺,非一日之寒,要好好体会,多读多练,熟悉各种程序的编程技巧,计算方法,而且要在自己的程序中熟练使用,这样才能有所提高。

要熟悉生活,熟悉各种生活需要,然后运用编程的方法处理生活中的问题,学有所用,这样才能是学习更有趣味,才能有不竭的学习动力。

当然,作为一个c语言初学者,未来还有不少东西要学,希望能在以后的生活中得到更好的提高,不断提升个人能力。

附录#include<stdio.h>#include<stdlib.h> 。

#include<time.h>char* month_str[]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};char* week[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期天"};int IsLeapYear(int year){if((year%4==0&&year%100!=0)||(year%400==0))return 1;elsereturn 0;}int month_day(int year,int month){int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};if(IsLeapYear(year)&&month==2)return 29;elsereturn(mon_day[month-1]);}int DaySearch(int year,int month,int day){int c=0;float s;int m;for(m=1;m<month;m++)c=c+month_day(year,m);c=c+day;s=year-1+(float)(year-1)/4+(float)(year-1)/100+(float)(ye ar-1)/400-40+c;return ((int)s%7);}int PrintAllYear(int year){int temp;int i,j;printf("\n\n%d 全年历\n",year);for(i=1;i<=12;i++){printf("\n\n%s(%d)\n",month_str[i-1],i); printf("S M T W T F S \n\n");temp=DaySearch(year,i,1);for(j=1;j<=month_day(year,i)+temp;j++) {if(j-temp<=0)printf(" ");else if(j-temp<10)printf("%d ",j-temp);elseprintf("%d ",j-temp);if(j%7==0)printf("\n");}}return 0;}int main(){int option,da;char ch;int year,month,day;long int timer;struct tm *timenow;int i,j;intmonth_day[]={31,28,31,30,31,30,31,31,30,31,30,31}; printf("您好!!!\n\n欢迎使用万年历系统!\n");timer=time(0);timenow=localtime(&timer);printf("\n现在的时间是:%d年%d月%d日%d时%d 分",(*timenow).tm_year+1900,(*timenow).tm_mon+1,(*tim enow).tm_mday,(*timenow).tm_hour,(*timenow).tm_mi n);printf("\n\n本月月历\n");printf("\nS M T W T F S \n\n");da=DaySearch(year,month,day);for(i=1;i<=month_day[(*timenow).tm_mon];i++){j=(*timenow).tm_wday;if(((*timenow).tm_mday%7-(*timenow).tm_wday)!=0) printf(" ");elseprintf("%d ",i);if(i%7==0)//printf("\n");putchar('\n');}while(1){printf("\n请选择服务的种类:\n");printf("\n1周次查询");printf("\n2闰年查询");printf("\n3全年年历");printf("\n4退出\n");scanf("%d",&option);switch(option){case 1:while(1){printf("\n请按该格式输入年月日(XXXX,XX,XX):");scanf("%d,%d,%d,%c",&year,&month,&day);da=DaySearch(year,month,day);printf("\n%d-%d-%d 是%s,是否继续使用该项服务?(Y/N)",year,month,day,week[da]);fflush(stdin);scanf("%c",&ch);if(ch=='N'||ch=='n')break;}break;case 2:while(2){printf("\n请按格式输入查询年份(XXXX)");scanf("%d",&year);if(IsLeapYear(year))printf("\n%d 是闰年,是否继续使用该项服务?(Y/N)",year);elseprintf("\n%d 不是闰年,是否继续使用该项服务?(Y/N)?",year);fflush(stdin);scanf("%c",&ch);if(ch=='N'||ch=='n')break;}break;case 3:while(3){printf("\n请按格式输入查询年份(XXXX)"); scanf("%d",&year);PrintAllYear(year);printf("\n是否继续使用该项服务(Y/N)?"); fflush(stdin);scanf("%c",&ch);if(ch=='N'||ch=='n')break;}break;case 4:fflush(stdin);printf("确定退出?(Y/N)");scanf("%c",&ch);if(ch=='Y'||ch=='y')exit(0);break;default:printf("\n错误提醒:输入出错,请从新确定输入!\n"); break;}}return 0;}。