C语言课程设计报告3马杰.docx
- 文档编号:12884387
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:22
- 大小:38.83KB
C语言课程设计报告3马杰.docx
《C语言课程设计报告3马杰.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告3马杰.docx(22页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告3马杰
C语言课程设计报告(3)
题目万年历系统
设计者马杰(11数学)
学号2011061030
●问题的提出:
在现代的社会生活中,拥有准确的时间变得十分重要,所以,日历是人类社会生产时不可缺少的一个东西。
当然,日历并非仅仅具有查阅日期的功能,它还可以具有查阅星期、星座,判断闰年等等的功能。
以前的日历都是纸质版的,人们携带不是太方便,而且人手翻起来很麻烦,还浪费时间。
其次,以前的日历功能简单,只能查阅当年的日期、星期以及农历,如果人们想知道该年是否为闰年,该年的属相以及星座,他必须自己动脑子判断或算。
这就大大浪费了人们的时间,也就间接的降低了人们的工作效率。
而且如果一个人不懂得怎样去判断或算,那他最终也就不会知道他应该知道的一些信息。
所以,编写一个快捷、准确、方便、功能多样化的日历系统,即“万年历系统”是我们现在必须要学会的。
虽然编写的过程中会遇到各种各样的困难,但是,这是一次我锻炼和检验自己的最好机会。
所以,不管失败与否,我都要参与编写的过程。
●功能介绍:
该万年历系统是以现实生活中的挂历为基础,又增加一些新的功能。
在系统中随便输入日期,不管是公历的某年某月某日,就可以输出该日是星期几、什么星座、该年的属相以及该日所属哪个支干和对应的农历日期。
如果输入的数据与现实情况不符合,比如:
在输入2012年5月20日,我们输成了2012年15月32日,系统就会自动提醒我们数据输入错误,并且让我们检查并重新输入数据。
在输入正确的数据后按回车,系统就会输出你想要的信息。
在一次查询结束之后,系统就会自动询问,我们是否要继续查询,然后我们就可以根据自己的需要选择了是继续还是退出。
●本系统所涉及的知识点:
本系统所涉及的知识点以《C程序设计(第三版)》为准:
1.程序的三种基本结构:
顺序、结构、循环。
2.函数的定义、声明、调用以及函数的返回值。
3.赋值语句的使用。
4.输入和输出语句的使用。
5.算数运算符、关系运算符以及逻辑运算符的应用。
6.定义整型、字符型、指针变量、字符型数组以及指针数组。
数组初始化和引用和指针的使用。
7.主要是函数的应用。
8.在流程图中,主要运用了判断语句。
●算法设计
Ⅰ.用switch语句设计主菜单:
1.输入当前日期;
2.判断是否为闰年;
3.求星期几;
4.求星座;
5.求该日对应的农历日期;(该功能失败)
6.求该日支干;
7.求该年属相;
8.查询;
9.输出;
10.如果继续查询返回1;
11.否则退出。
万年历系统总的流程图:
Ⅱ.选择2,用if语句判断是否为闰年:
Ⅲ.选择3,用switch函数求星期几:
Ⅴ.选择5,求该年的星座:
Ⅵ.选择6,求该日对应的农历日期:
(该功能失败)
Ⅶ.选择7,求该日支干:
Ⅷ.选择8,求该年属相:
●总结与感想:
在这次的程序设计过程中,对我的考验相当大:
第一个是怎样充分的运用到书本上的知识,这就要求要对书本上的只是要十分熟悉,所以下课后就要大量的看书。
在开始学习了一些知识后,可以简单的并编写一些程序了,但是在此次报告中,不知道要选哪种程序来编写我的程序,所以在选择上有了不稳定性;第二是怎样去连接这些分散的知识点。
因为每个功能都是单独的、互不联系的,所以刚开始处理时有点困难,但是在学习了第八章,即函数后,一下子豁然开朗了;最后,因为自己的能力不足,对第五个功能,即“求该日对应的农历日期”这项功能不能设计出来,导致《万年历》系统的效果与开始时的设想差了好多。
(注:
有超出该书知识范围的为询问师兄(姐)或查阅资料所得。
)
附录:
源代码:
#include
intjudgeday(int,int,int);
intjudgerun_y(int);
intrun(int);
intmonth_day(int,int);
intgetmonth(int);
intGetyear(int);
intgetyear(int);
voidprintjudgeday(int,int,int);
voidprintrun(int);
voidweek(int,int,int);
voidjudge_week(int);
voidprintxingzuo(int);
voidjudgexingzuo(int,int);
//voidnongli(int,int);
voidshuxiang(int,int);
voidjudgeshuxiang(int,int);
voidTGDZ(int);
voidjudgeTG(int);
main()
{
intyear,month,day;
charch;
do{
do{
printf("请输入年:
");
scanf("%d",&year);
printf("请输入月:
");
scanf("%d",&month);
printf("请输入日:
");
scanf("%d",&day);
printjudgeday(year,month,day);
}while(judgeday(year,month,day));
printf("%d年%d月%d日是",year,month,day);
printrun(judgerun_y(year));
printf("本月有%d天,",month_day(year,month));
week(year,month,day);
judgexingzuo(month,day);
shuxiang(year,1);
TGDZ(year);
printf("请问你要继续查询吗?
是(Y/y)否(N/n):
");
scanf("%c",&ch);
}while(ch=='Y'||ch=='y');
}
voidprintjudgeday(intyear,intmonth,intday)
{
if(judgeday(year,month,day))
printf("您输入的数据有误,请重新输入!
\n");
}
intjudgeday(intyear,intmonth,intday)
{
intflag;
if(month<1||month>12)
flag=1;
elseif(day<1||day>month_day(year,month))
flag=1;
else
flag=0;
returnflag;
}
intjudgerun_y(intyear)
{
intflag;
if((year%4==0&&year%100!
=0)||(year%400==0))
flag=1;
else
flag=0;
returnflag;
}
voidprintrun(intflag)
{
if(flag)
printf("闰年,");
else
printf("不是闰年,");
}
intrun(intflag)
{
intdays;
if(flag==1)
days=29;
elseif(flag==0)
days=28;
returndays;
}
intmonth_day(intyear,intmonth)
{
intdays;
switch(month)
{
case2:
days=run(judgerun_y(year));
break;
case4:
case6:
case9:
case11:
days=30;
break;
case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;
break;
}
returndays;
}
voidweek(intyear,intmonth,intday)
{
intsum=0;
if(year>2000)
sum=Getyear(year)+getmonth(month)+day+judgerun_y(year);
elseif(year<2000)
sum=getyear(year)+getmonth(month)+day+judgerun_y(year);
elseif(year==2000)
sum=getmonth(month)+day+judgerun_y(year)+4;
judge_week(sum);
}
intgetmonth(intmonth)
{
intn;
switch(month)
{
case1:
n=1;
break;
case2:
n=4;
break;
case3:
n=4;
break;
case4:
n=7;
break;
case5:
n=2;
break;
case6:
n=5;
break;
case7:
n=7;
break;
case8:
n=3;
break;
case9:
n=6;
break;
case10:
n=1;
break;
case11:
n=4;
break;
case12:
n=6;
break;
}
returnn;
}
intGetyear(intyear)
{
intcha,shang,yushu,y;
cha=year-2000;
shang=cha/4;
yushu=cha%4;
if(judgerun_y(year))
y=4-2*shang+yushu;
else
y=4-2*shang+yushu+1;
returny;
}
intgetyear(intyear)
{
intcha,shang,yushu,y;
cha=year-2000;
shang=cha/4;
yushu=cha%4;
if(judgerun_y(year))
y=4+2*shang-yushu+1;
else
y=4+2*shang-yushu;
returny;
}
voidjudge_week(intsum)
{
intn;
n=sum%7;
switch(n)
{
case0:
printf("星期天,");
break;
case1:
printf("星期一,");
break;
case2:
printf("星期二,");
break;
case3:
printf("星期三,");
break;
case4:
printf("星期四,");
break;
case5:
printf("星期五,");
break;
case6:
printf("星期六,");
break;
}
}
voidjudgexingzuo(intmonth,intday)
{
intn;
switch(month)
{
case1:
if(day<=19)
n=12;
else
n=1;
break;
case2:
if(day<=18)
n=1;
else
n=2;
break;
case3:
if(day<=20)
n=2;
else
n=3;
break;
case4:
if(day<=19)
n=3;
else
n=4;
break;
case5:
if(day<=20)
n=4;
else
n=5;
break;
case6:
if(day<=21)
n=5;
else
n=6;
break;
case7:
if(day<=22)
n=6;
else
n=7;
break;
case8:
if(day<=22)
n=7;
else
n=8;
break;
case9:
if(day<=22)
n=8;
else
n=9;
break;
case10:
if(day<=23)
n=9;
else
n=10;
break;
case11:
if(day<=22)
n=10;
else
n=11;
break;
case12:
if(day<=21)
n=11;
else
n=12;
break;
}
printxingzuo(n);
}
voidprintxingzuo(intn)
{
switch(n)
{
case1:
printf("水瓶座,");
break;
case2:
printf("双鱼座,");
break;
case3:
printf("白羊座,");
break;
case4:
printf("金牛座,");
break;
case5:
printf("双子座,");
break;
case6:
printf("巨蟹座,");
break;
case7:
printf("狮子座,");
break;
case8:
printf("处女座,");
break;
case9:
printf("天枰座,");
break;
case10:
printf("天蝎座,");
break;
case11:
printf("射手座,");
break;
case12:
printf("摩羯座,");
break;
}
}
/*voidnongli(int,int)
{
int
}*/
voidshuxiang(intyear,intn)
{
intm,cha;
cha=(year-2012)%12;
if(cha<0)
cha=12+cha;
m=cha%12;
judgeshuxiang(m,n);
}
voidjudgeshuxiang(intm,intn)
{
switch(m)
{
case0:
if(n==1)
printf("龙年,");
else
printf("辰年!
\n");
break;
case1:
if(n==1)
printf("蛇年,");
else
printf("巳年!
\n");
break;
case2:
if(n==1)
printf("马年,");
else
printf("午年!
\n");
break;
case3:
if(n==1)
printf("羊年,");
else
printf("未年!
\n");
break;
case4:
if(n==1)
printf("猴年,");
else
printf("申年!
\n");
break;
case5:
if(n==1)
printf("鸡年,");
else
printf("酉年!
\n");
break;
case6:
if(n==1)
printf("狗年,");
else
printf("戌年!
\n");
break;
case7:
if(n==1)
printf("猪年,");
else
printf("亥年!
\n");
break;
case8:
if(n==1)
printf("鼠年,");
else
printf("子年!
\n");
break;
case9:
if(n==1)
printf("牛年,");
else
printf("丑年!
\n");
break;
case10:
if(n==1)
printf("虎年,");
else
printf("寅年!
\n");
break;
case11:
if(n==1)
printf("兔年,");
else
printf("卯年!
\n");
break;
}
}
voidTGDZ(intyear)
{
intx,n=0;
x=year%10;
judgeTG(x);
shuxiang(year,n);
}
voidjudgeTG(intx)
{
switch(x)
{
case1:
printf("辛");
break;
case2:
printf("壬");
break;
case3:
printf("癸");
break;
case4:
printf("甲");
break;
case5:
printf("乙");
break;
case6:
printf("丙");
break;
case7:
printf("丁");
break;
case8:
printf("戊");
break;
case9:
printf("己");
break;
case10:
printf("庚");
break;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 马杰