C语言课程设计打印月历.docx
《C语言课程设计打印月历.docx》由会员分享,可在线阅读,更多相关《C语言课程设计打印月历.docx(10页珍藏版)》请在冰点文库上搜索。
C语言课程设计打印月历
《打印月历》
课程设计报告
题目
打印月历
学号
姓名
年级专业
指导教师
完成日期
年
月
日
1实验目的
2实验内容
3源程序
4测试数据
5分析评价
6实验心得
一、实验目的
1)在教师指导下,学生根据选定的课题,综合运用所学程序设计的知识,完成问题分析、模块设计、代码编写、程序调试和运行等训练任务。
2)通过课程设计,初步锻炼运用所学基础知识解决实际问题的能力,掌握软件开发的基本过程和基本方法以及良好的编程风格,培养在软件开发中相互合作的团队意识。
二、实验内容
打印月历
1)年份和月份由键盘输入,打印的月历按星期一到星期日排列;
2)注意大小月、闰年等问题。
三、源程序
#include
#include
#include
#include
intdays[6][7];
intmdays[]={31,28,31,30,31,30,31,31,30,31,30,31};
intmdays2[]={31,29,31,30,31,30,31,31,30,31,30,31};
#defineis_leap_year(y)((!
((y)%4)&&((y)%100))||(!
((y)%400)))
#definemax_mdays(m,y)(is_leap_year(y)?
mdays2[m]:
mdays[m])
intdiff_days(inty1,intm1,intd1,inty2,intm2,intd2)
{
intd=0;
intmd=max_mdays(m1,y1);
while((y1!
=y2)||(m1!
=m2)||(d1!
=d2))
{
d++;
d1++;
if(d1>md)
{
d1=1;
m1++;
if(m1>=12)
{
m1=0;
y1++;
}
md=max_mdays(m1,y1);
}
}
returnd;
}
intget_wday(inty,intm,intd)
{
structtmtm;
time_tt;
intcy,cm,cd,cw;
intdd,w,f=0;
time(&t);
tm=*localtime(&t);
cy=tm.tm_year+1900;
cm=tm.tm_mon;
cd=tm.tm_mday;
cw=tm.tm_wday;
if(cy{
dd=diff_days(cy,cm,cd,y,m,d);
f=1;
}
elseif(cy>y)
{
dd=diff_days(y,m,d,cy,cm,cd);
}
else
{
if(cm{
dd=diff_days(cy,cm,cd,y,m,d);
f=1;
}
elseif(cm>m)
{
dd=diff_days(y,m,d,cy,cm,cd);
}
else
{
if(cd{
dd=diff_days(cy,cm,cd,y,m,d);
f=1;
}
elseif(cd>d)
{
dd=diff_days(y,m,d,cy,cm,cd);
}
else
{
dd=0;
}
}
}
d=d+1;
w=f?
(cw+(dd%7)):
(cw-(dd%7));
if(w<0)
{
w+=7;
}
w=f?
(w+((d-1)%7)):
(w-((d-1)%7));
if(w<0)
{
w+=7;
}
returnw;
}
intmain()
{
intyear,mon,day;
inti,j,d,w,md;
printf("pleaseinputthedate:
");
scanf("%d%d%d",&year,&mon,&day);
if(((mon<1)||(mon>12))
||((day<0)||(day>mdays[mon-1])))
{
printf("error!
[1<=mon<=12][1<=day<=31]\n");
return-1;
}
w=get_wday(year,mon-1,day);
md=max_mdays(mon-1,year);
d=1;
while(d<=md)
{
i=w/7;
j=w%7;
days[i][j]=d++;
w++;
}
printf("\ndate:
%dyear%dmon%dday\n",year,mon,day);
printf("==========================================\n");
printf("%2s%2s%2s%2s%2s%2s%2s\n","MON","TUE","WED","THU","FRI","SAT","SUN");
for(i=0,d=0;i<6;i++)
{
for(j=0;j<7;j++)
{
if(days[i][j])
{
d++;
(d==day)?
printf("[%2d]",d):
printf("%2d",d);
}
else
{
printf("%-4s","");
}
}
printf("\n");
}
printf("============================================\n");
system("pause");
return0;
}
四、测试数据
任意输入一个日期
得到结果:
再次尝试输入一个闰年
例如2000年2月:
得到结果:
五、分析评价
流程图:
我在设计这个程序时采用了使用函数来实现各个打印月历的功能。
花了大约15个小时的时间,其中大部分时间用于构思、输入程序、调试和写实验报告。
遇到的主要困难是:
开始时由于构思不完善,导致程序很乱,等搞清楚主函数和子函数的关系后,程序变得简洁了。
下面对程序分模块进行优缺点的评价,以及提出了改进方案。
优点:
程序不仅在完成基本要求的基础上,还可以在凸显出具体的日期,即可以在程序中标出该天。
缺点:
程序的代码过于复杂,函数使用的少。
六、实验心得
1)我复习巩固C语言的基础知识,进一步加深对C语言编程的理解和掌握;
2)利用所学知识,理论和实际结合,利用资源,采用模块化的结构,使用模仿自主设计相结合的方法,锻炼了我综合分析解决实际问题的编程能力;
3)培养我在项目开发中的团队合作精神、创新意识及实战能力。
物理与电子信息学院课程设计评定意见
指导教师评语
主要内容包括:
设计报告内容的完整性和完成情况、报告格式的规范性、通过课程设计取得的收获等。
成绩:
签名:
年 月 日
注:
本页与上一页用A3纸套印成封面和封底,课程设计报告正文用A4纸打印然后装订