万年历.docx
《万年历.docx》由会员分享,可在线阅读,更多相关《万年历.docx(11页珍藏版)》请在冰点文库上搜索。
万年历
目录
第一章课程设计的目的和要求1
第二章课程设计内容及要求2
第三章设计说明3
第四章课程设计心得体会5
附录1:
参考文献6
附录2:
程序代码7
第一章课程设计的目的和要求
C语言课程设计的主要目的是培养学生综合运用C语言程序设计课程所学到的知识,编写C程序解决实际问题的能力,以及严谨的工作态度和良好的程序设计习惯。
通过课程设计的训练,学生应该能够了解程序设计的基本开发过程,掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。
C语言程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,分析、设计、编写、调试和测试C语言程序及编写设计报告。
本课程设计的目标
1巩固和加深学生对c++语言课程的基本知识的理解和掌握
2掌握c++语言编程的和程序调试的基本技能
3掌握利用c++语言进行程序软件设计的方法
4提高书写程序设计说明文档的能力
5提高运用c语言解决实际问题得能力
基本要求
1分析课程设计题目得要求
2对系统功能模块进行分析,写出详细设计说明文档
3编写程序代码,调试程序使能正确运行
4设计完成的软件要便于操作和使用
5设计完成后提交课程设计报告
第二章课程设计内容及要求
设计背景:
随着高科技时代的到来,人们越来越享受着电子信息技术给人生活带来的便捷与高效。
人们也渐渐不能满足于传统的挂式日历。
传统挂式日历得使用方式较为繁琐,而且每天都要去手动翻页。
因此电子万年历渐渐地兴起了。
设计要求:
模仿现实生活中的挂历,以当前页系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。
前系统日期变到下一月时,系统自动翻页到下一个月。
第三章设计说明
系统模块图
流程图:
运行某次截图如下:
图3.3某次程序运行图
第四章课程设计心得体会
进过三周的课程设计,我独立完成了一个较大的C语言程序的设计,以及认真完成了课程设计的设计报告。
回忆着三周的时间,我的收获很大。
首先,通过这次课程设计,我熟练的掌握并运用了所学的知识进行了编程,而且取得了成功,这大大激发了我对编程的兴趣;其次,在涉及的过程中所遇到的困难,我都认真的去思考,和同学以及老师交流,或者利用网上资源来获取帮助,了解解决办法。
通过各种渠道,完善所学到的东西。
最后,我了解到了软件开发的答题过程和各个必要的步骤,这对我将来的学习和应用都是很有帮助的。
对于计算机专业的大学生来说,积累实战经验是一项极其重要的内容,很可能成为将来就业的敲门砖。
而程序设计综合课程设计就是积累实战经验的一个过程,虽然程序的规模不是很大,但是能够让我们尽早的认识软件开发的重要性和必要性,为将来的就业打下坚实的基础。
附录1:
参考文献
1.谭浩强:
C程序设计,清华大学出版社,2005年7月第三版
2.谭浩强:
C++程序设计,清华大学出版社,2004年6月第一版
附录2:
程序代码
#include
#include
#include
#include
typedefstruct
{
unsignedcharday;
unsignedcharmonth;
unsignedshortyear;
}
T_MFW_DATE;
typedefstruct
{
T_MFW_DATEdate;/*记录的日期*/
}
t_cldrecord;
typedefstruct
{
T_MFW_DATEtoday_date;
T_MFW_DATEcursor_date;
intdays_map[6][7];/*日期地图*/
}
t_cldmain_data;
t_cldmain_data*cldmain_data;
voidcldmain_get_days_map(void);
voidmain(void)
{
inti,j;
cldmain_data=(t_cldmain_data*)malloc(sizeof(t_cldmain_data));
cldmain_data->cursor_date.day=20;
while
(1)
{
charbuf[20];
char*p;
memset(buf,0,20);
printf("yearmonth:
");
gets(buf);
if(buf[0]=='q')break;
cldmain_data->cursor_date.year=strtod(buf,&p);
p++;
cldmain_data->cursor_date.month=strtod(p,&p);
printf("yea%d\nmonth%d\n",(cldmain_data->cursor_date.year),(cldmain_data->cursor_date.month));
cldmain_get_days_map();
printf("motuwthfrsasu\n");
for(j=0;j<6;j++)
{
printf("\t");
for(i=0;i<7;i++)
{
printf("%i\t",cldmain_data->days_map[j][i]);
}
printf("\n");
}
}
getchar();
}
/*检查日期是否合法合法返回1,否则返回0*/
intcheck_date(T_MFW_DATEdate)
{
charmonth_days[]={31,29,31,30,31,30,31,31,30,31,30,31};
/*大于2000年,小于2100年,月份合法*/
if(date.year<2000||date.year>=2100||date.month<1||date.month>12)
{
return0;
}
/*day合法*/
if(date.day<1)return0;
if(date.day>month_days[date.month-1])return0;
if(date.month==2)
{
if(date.year%4!
=0)
{
if(date.day==29)return0;
}
}
return1;
}
/*功能:
得到每个月第一天是星期几星期一二三四五六日
返回值:
1234567如果返回为0,则出错*/
intget_weekday_of_month(T_MFW_DATEcursor_date)
{
intday;
/*参照1997年1月1日,参数cursor_date从2000年1月1日到2099年1月1日*/
charmonth_days[]={31,28,31,30,31,30,31,31,30,31,30,31};
intthis_year_days[]={0,31,59,90,120,151,181,212,243,273,304,334};
intcursor_year_days=this_year_days[cursor_date.month-1]+(cursor_date.day=1);
intcomp_days=(cursor_date.year-1997)*365+cursor_year_days;
inti=(cursor_date.year-1997)/4;
comp_days=comp_days+i*1;
if(cursor_date.month>2)
{
if(cursor_date.year%4==0)
{
comp_days+=1;
}
}
if(cursor_date.day>2098)return0;
day=comp_days%7;
/*1997年1月1日是星期三*/
day=(day+2)%7;
if(day==0)day=7;
returnday;
}
/*根据参数的值,得到该年该月有多少天.返回值:
该月的天数*/
intcount_days_of_month(T_MFW_DATEcursor_date)
{
charmonth_days[]={31,28,31,30,31,30,31,31,30,31,30,31};
unsignedcharday=cldmain_data->cursor_date.day;
unsignedcharmonth=cldmain_data->cursor_date.month;
unsignedshortyear=cldmain_data->cursor_date.year;
if(month!
=2)
{
returnmonth_days[month-1];
}
else
{
if(year%4!
=0)
{
return28;
}
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)
{
return29;
}
return28;
}
return29;
}
}
}
/*得到日期地图,保存到全局结构变量cldmain_data的成员数组变量days_map中.*/
voidcldmain_get_days_map(void)
{
inti;
intday;
T_MFW_DATEcursor_date=cldmain_data->cursor_date;
int*map_p=cldmain_data->days_map[0];
intdays_count;
intweekday;
for(i=0;i<6*7;i++)
{
map_p[i]=0;
}
if(check_date(cldmain_data->cursor_date)==0)return;
days_count=count_days_of_month(cldmain_data->cursor_date);
weekday=get_weekday_of_month(cldmain_data->cursor_date);
day=1;
for(i=weekday-1;i{
map_p[i]=day;
day++;
}
}