1、C语言编程万年历程序说明书目录前言3正文4-6本次课程总结7附录8-16前言一 设计题目模仿现实生活中的挂历。当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。当系统日期变到下一月时,系统自动翻页到下一月。二 要求简析根据题目要求,实现当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。并且在系统时间变化时能够自动翻转页数。三 实现功能与设计目的题目中要求尽量模仿生活中的挂历,在起始页显示当前的时间以及当前月的月历,目的是使使用者能够直接获取时间,月内周次显示等生活便捷信息。在功能上有一定创新,表现在周次查询,闰年查询和全年年历查询等便捷功能,
2、操作要求也很快捷,在起始页按下对应数字即可,实现了程序使用上的简便性和快捷性。另外,功能界面上具有持续性,即可让使用者选择性的持续使用谋一个固定的功能,方便快速使用。同时,实现了快速回复主菜单的功能,在每个功能菜单上,都可以通过一键快速启用主菜单,从而在功能转换方面得到了很好的提升,方便使用。通过本程序,实现查询方便,功能持续,转换快捷等有利于方便人们生活的功能,达到了时间知识,灵活运用的目的。正文一 需求分析(1) 输入的形式和输入值的范围;程序输入要求包含数字输入和字母输入两个部分,回车键确定,数字输入部分主要为年份,月份,日期查询命令时使用,要求了固定的输入格式年份规定位数为四位正数,月
3、份和日期固定为两位正数。字母输入部分主要为功能转换和输入确定使用。若输入出错将提示使用者“输入有错,请从新确定输入”。(2) 输出的形式;输出形式以汉字和数字结合的方式输出,输出环境汉语显示,简单明了,数字排列简明,读数方便。(3) 程序所能达到的功能;程序所能达到的功能包括五个方面:1、 当前时间,精确到分钟;2、 当前月的月历;3、 周次查询功能;4、 闰年查询功能;5、 任意年全年年历查询功能。(4) 测试数据:包括正确的输入及输出结果和含有错误的输入及其输出结果;1、 正确输入的数据,比如主菜单下输入“1+回车”“2010,03,26+回车”可以显示为“2010-3-26是星期六,是否
4、继续使用该项功能(y/n)”。在比如主菜单下输入“3+回车”“2010+回车”显示为2010年全年年历2、 错误输入的数据,比如主菜单下输入“5+回车”将会出现错误提示,显示为“错误提醒:您的输入有错,请从新确定输入”二 设计概要本程序主要运用的数据结构主要为数组,类型包括字符型和整形等,程序结构上,使用了循环体结构,选择性结构,选择性结构包含switch语句,do语句,ifelse语句,while语句等,算法上使用了符合逻辑语句,运用各种逻辑运算符和赋值语句,使程序简洁明了,函数调用方面,使用了数组函数的调用方式,快速简明,使用了指针调用,同时,在程序中使用了调用系统当时时间,同时,使用了一
5、部分结构体变量服务程序。主函数通过switchcase语句调用了各个小函数,且通过switchcase语句逐渐展开。三 详细设计 伪代码算法概要:1、 闰年算法:When year%4 is zeroAnd year%100 is not one 100Or year%400 is zero The The year is leapyear!2、 周次算法:A mon_day is defferentThen put it togetherThey are31,28,31,30,31,30,31,31,30,31,30,31; If the year is leapyearThen the s
6、econd number is29Else it is 28Get daySearch(int year,int month,int dayWhen day is mWhen m is one mis not bigger than month M is m add one And 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、 函数调用方面数组结构调用出现失误,出现调用数组但不能赋值或者是赋值后不能
7、显示;调用系统函数是也出现了调用失误的现象,处理时提示调用失误无法显示等提示。处理时灵活运用书本知识,分析清楚变量之间的关系。2、 字符方面特别注意符合问题和拼写问题,比如漏写“;“和“,”等一出错。(2) 经验和体会处理问题灵活分析,熟悉运用课本知识处理问题,另外,细心分析,耐心处理问题很重要。五 用户使用说明运行程序起始界面,根据汉字提示,按需要输入相关指令前面对应的数字,以回车键确定,得出结果后,若需要继续使用该项功能,输入y,以回车键确定,否车输入n,以回车键确定,在主菜单选择其他功能,操作要求简单明了,用户只需要根据汉字提示输入相关数字或是字母,回车确定即可。六 测试结果例:(1)主
8、菜单下输入“1+回车”“2010,03,26+回车”可以显示为“2010-3-26是星期六,是否继续使用该项功能(y/n)”。(2)主菜单下输入“2010+回车”显示为“2010年不是闰年,是否继续使用该项功能(y/n)”(3)主菜单下输入“3+回车”“2010+回车”显示为2010年全年年历(4)主菜单下输入“5+回车”将会出现错误提示,显示为“错误提醒:您的输入有错,请从新确定输入”本次课程设计总结C语言博大精深,是一门要求细心与耐心的课程,c语言灵活多变,但是入门要求高,取得入门时一个努力攀登的过程。但是,使用好c语言,确能改使用者带来许多乐趣,能够在使用过程中感受创造之美和改变之美,更
9、能领略到计算机科学的神奇之处。而且,学习c语言不能急于求成,冰冻三尺,非一日之寒,要好好体会,多读多练,熟悉各种程序的编程技巧,计算方法,而且要在自己的程序中熟练使用,这样才能有所提高。要熟悉生活,熟悉各种生活需要,然后运用编程的方法处理生活中的问题,学有所用,这样才能是学习更有趣味,才能有不竭的学习动力。当然,作为一个c语言初学者,未来还有不少东西要学,希望能在以后的生活中得到更好的提高,不断提升个人能力。附录#include #include 。#includechar* month_str=一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月; char* week
10、=星期一,星期二,星期三,星期四,星期五,星期六,星期天; int IsLeapYear(int year) if(year%4=0&year%100!=0)|(year%400=0) return 1; else return 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; else return(mon_daymonth-1); int DaySearch(int year,int mon
11、th,int day) int c=0; float s; int m; for(m=1;mmonth;m+) c=c+month_day(year,m); c=c+day; s=year-1+(float)(year-1)/4+(float)(year-1)/100+(float)(year-1)/400-40+c; return (int)s%7); int PrintAllYear(int year) int temp; int i,j; printf(nn%d 全年历n,year); for(i=1;i=12;i+) printf(nn%s(%d)n,month_stri-1,i);
12、printf(S M T W T F S nn); temp=DaySearch(year,i,1); for(j=1;j=month_day(year,i)+temp;j+) if(j-temp=0) printf( ); else if(j-temp10) printf(%d ,j-temp); else printf(%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,
13、j;int month_day=31,28,31,30,31,30,31,31,30,31,30,31;printf(您好!nn欢迎使用万年历系统!n); timer=time(0);timenow=localtime(&timer);printf(n现在的时间是:%d年 %d月 %d日 %d时 %d分,(*timenow).tm_year+1900,(*timenow).tm_mon+1,(*timenow).tm_mday,(*timenow).tm_hour,(*timenow).tm_min);printf(nn本月月历n);printf(nS M T W T F S nn);da=D
14、aySearch(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( );else printf(%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,&
15、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,weekda); fflush(stdin); scanf(%c,&ch); if(ch=N|ch=n) break; break; case 2: while(2) printf(n请按格式输入查询年份(
16、XXXX); scanf(%d,&year); if(IsLeapYear(year) printf(n%d 是闰年,是否继续使用该项服务?(Y/N),year); else printf(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;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1