C语言编程万年历程序说明书.docx
《C语言编程万年历程序说明书.docx》由会员分享,可在线阅读,更多相关《C语言编程万年历程序说明书.docx(11页珍藏版)》请在冰豆网上搜索。
C语言编程万年历程序说明书
目录
前言……………………………………………………………………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语句等,算法上使用了符合逻辑语句,运用各种逻辑运算符和赋值语句,使程序简洁明了,函数调用方面,使用了数组函数的调用方式,快速简明,使用了指针调用,同时,在程序中使用了调用系统当时时间,同时,使用了一部分结构体变量服务程序。
主函数通过switch……case语句调用了各个小函数,且通过switch……case语句逐渐展开。
三.详细设计
伪代码算法概要:
1、闰年算法:
Whenyear%4iszero
Andyear%100isnotone100
Oryear%400iszero
The
Theyearisleapyear!
2、周次算法:
Amon_dayisdefferent
Thenputittogether
Theyare{31,28,31,30,31,30,31,31,30,31,30,31;
Iftheyearisleapyear
Thenthesecondnumberis29
Elseitis28
GetdaySearch(intyear,intmonth,intday
Whendayism
Whenmisonemisnotbiggerthanmonth
Mismaddone
Andcaddday
Sisyearcut1addyearcutone/4addyearcutone/100addyearcutone/400cut40addc;
四.调试分析
(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
#include。
#include
char*month_str[]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
char*week[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期天"};
intIsLeapYear(intyear)
{
if((year%4==0&&year%100!
=0)||(year%400==0))
return1;
else
return0;
}
intmonth_day(intyear,intmonth)
{
intmon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(IsLeapYear(year)&&month==2)
return29;
else
return(mon_day[month-1]);
}
intDaySearch(intyear,intmonth,intday)
{
intc=0;
floats;
intm;
for(m=1;mc=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);
}
intPrintAllYear(intyear)
{
inttemp;
inti,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("SMTWTFS\n\n");
temp=DaySearch(year,i,1);
for(j=1;j<=month_day(year,i)+temp;j++)
{
if(j-temp<=0)
printf("");
elseif(j-temp<10)
printf("%d",j-temp);
else
printf("%d",j-temp);
if(j%7==0)
printf("\n");
}
}
return0;
}
intmain()
{
intoption,da;
charch;
intyear,month,day;
longinttimer;
structtm*timenow;
inti,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,(*timenow).tm_mday,(*timenow).tm_hour,(*timenow).tm_min);
printf("\n\n本月月历\n");
printf("\nSMTWTFS\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("");
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",&option);
switch(option)
{
case1:
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;
case2:
while
(2)
{
printf("\n请按格式输入查询年份(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;
case3:
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;
case4:
fflush(stdin);
printf("确定退出?
(Y/N)");
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
exit(0);
break;
default:
printf("\n错误提醒:
输入出错,请从新确定输入!
\n");
break;
}
}
return0;
}