C程序设计万年历说明书.doc
- 文档编号:230147
- 上传时间:2022-10-07
- 格式:DOC
- 页数:12
- 大小:80.50KB
C程序设计万年历说明书.doc
《C程序设计万年历说明书.doc》由会员分享,可在线阅读,更多相关《C程序设计万年历说明书.doc(12页珍藏版)》请在冰豆网上搜索。
C++程序设计说明书
题目:
万年历
班级学号:
学生姓名:
目录
一.应用程序的名称
二.应用程序的主题、设计目的
三.应用程序简介
1.程序的基本结构及内容
2.程序的运行环境
四.主要运行界面的介绍
五.程序亮点
六.课程设计中存在的问题及解决方法
一.课程设计名称
万年历
二.应用程序要求、目的
主题:
万年历
目的:
实现对年月的查询
三.应用程序简介
(1)基本结构:
整个程序有cls_screen(清屏)、judgement(判断是否为闰年)、show_week(记录周几)、print_year(查询某年)、print_year_month(查询某年某月)等自定义函数,程序中涉及到switch语句、for语句、if语句等和多次函数调用语句,开头定义了day_of_month[]数组,主要目的是将12个月每个月有多少天依次排出,在后面又用if语句判断二月的天数是28还是29。
在主函数中运用while语言与switch语句的嵌套,是程序拥有了循环的功能。
用fflush(stdin);语句清除输入缓存,使程序在使用过程中不会太过眼花缭乱。
万年历的编程,需要两个方面的讨论和研究,一是要在用户输入年份的时候,判断该年是否为闰年,而对于闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。
所以会改变day_of_month[]数组中的二月份的数值。
二是在用户输入年月份的时候,判断该年该月的第一天是周几,从来好排列。
而对于判断周几,需要运用公式:
w=(y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1)%7并用if语句使用判断。
通过这两个方面的讨论和实现,才能合理的编程出万年历的基本程序代码。
(2)源程序代码:
#include
#include
#include
#include
#include
intyear,month,day;
intday_of_month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
intcurrent_year,current_month,current_day;
voidcls_screen()
{
printf("请按任意键返回!
\n");
getchar();
getchar();
system("cls");
}
intjudgement(inty)
{
if(y%400==0||(y%100!
=0&&y%4==0))
return1;
elsereturn0;
}
intshow_week(intyear,intmonth,intday)
{
/*公式:
w=(y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1)%7*/
intw,k;
intyear_last=year%100,c=year/100,m=month;
if(month==1)
{
year_last-=1;
}
elseif(month==2)
{
year_last-=1;
}
w=(year_last+year_last/4+c/4-2*c+26*(m+1)/10+day-1);
if(w<0)
{
k=(w%7+7)%7;
}
elsek=w%7;
returnk;
}
voidprint_year(intyear)
{
inti,k,x,first_week;
printf("请输入想要查询的年份(格式如2012):
");
scanf("%d",&year);
printf("=======================%d年===========================\n",year);
printf("\n");
if(judgement(year))
{
day_of_month[1]=29;
}
elseday_of_month[1]=28;
for(i=1;i<13;i++)
{
first_week=show_week(year,i,1);
printf("=====================%d月日历如下========================\n",i);
printf("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");
for(x=1;x<=first_week;x++)
{
printf("\t");
if(x%7==0)printf("\n");
}
for(k=1;k<=day_of_month[i-1];k++)
{
printf("%d\t",k);
if(x%7==0)printf("\n");
x++;
}
printf("\n");
printf("\n");
printf("\n");
}
}
voidprint_year_month()
{
intk,x,first_week;
printf("请输入想要查询的年月(格式如201212):
");
do
{
scanf("%d%d",&year,&month);
if(month<1||month>12)
{
printf("您输入的月份有误哦~请输入正确的月份\n");
printf("请输入想要查询的年月(格式如201212):
");
}
}while(1>month||month>12);
printf("=====================%d年%d月======================\n",year,month);
if(judgement(year))
{
day_of_month[1]=29;
}
elseday_of_month[1]=28;
first_week=show_week(year,month,1);
printf("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");
for(x=1;x<=first_week;x++)
{
printf("\t");
if(x%7==0)printf("\n");
}
for(k=1;k<=day_of_month[month-1];k++)
{
printf("%d\t",k);
if(x%7==0)printf("\n");
x++;
}
printf("\n");
}
voidmain()
{
intchoice,year,month,day,flag=1,option;
charc,k,ch;
while
(1)
{
printf("===========================欢迎来到XXX的万年历============================\n");
printf("请选择:
\n");
printf("********1.查找某一年的年历********\n");
printf("********2.查找某一月的月历********\n");
printf("********0.退出********\n");
printf("==============================================================================\n");
printf("请输入您的选择:
");
scanf("%d",&option);
switch(option)
{
case1:
while
(1)
{
print_year(year);
cls_screen();
printf("doyouwanttocontinue?
(Y/N)");
fflush(stdin);
scanf("%c",&ch);
if(ch=='N'||ch=='n')
break;
}
break;
case2:
while
(1)
{
print_year_month();
cls_screen();
printf("doyouwanttocontinue?
(Y/N)");
fflush(stdin);
scanf("%c",&ch);
if(ch=='N'||ch=='n')
break;
}
break;
case0:
break;
}}}
2:
程序的运行环境
本程序运行环境为VC
四.主要运行界面的介绍
选择“1”并查询2012年的日历。
显示2012年的日历:
可以按任意键返回。
出现“是否继续的提示语”按y可继续查询某年的日历。
按n可返回开始时的画面,再继续选择。
选择“2”,查询2012年9月的月历。
五.程序亮点
此程序开始有提示语问候,使用户使用时亲切便捷,并实现了循环的过程,可以无限循环的查询你想知道年份月份的日历,在循环的过程中加有清屏的效果。
六.课程设计中存在的问题及解决方法
在编译程序时,对蔡勒公式的不熟悉,导致程序在年月之间的错误,但在之后的调试中逐步掌握了这个公式,并解决了这一系列的问题。
12
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 万年历 说明书