万年历系统 zuihao.docx
- 文档编号:12679106
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:18
- 大小:129.31KB
万年历系统 zuihao.docx
《万年历系统 zuihao.docx》由会员分享,可在线阅读,更多相关《万年历系统 zuihao.docx(18页珍藏版)》请在冰豆网上搜索。
万年历系统zuihao
信息科学与技术学院
程序设计基础课程设计报告
题目名称:
万年历系统
学生姓名:
徐波波
学号:
2011508020
专业班级:
计科1班
指导教师:
高攀
2012年7月1日
目录
1课程设计目的及要求1
1.1设计题目1
1.2设计要求1
1.3其他要求1
2课题总体设计2
2.1系统功能模块图2
2.2系统流程图..........................................................................................................2
3.详细设计3
3.1printWNL()3
3.2isRunNian()模块设计4
3.3getDays模块设计5
3.4主函数main()模块设计6
4调试与测试7
5课程设计总结10
参考文献11
附录12
万年历系统的设计
1课程设计目的及要求
1.1设计题目
万年历系统
1.2设计要求
模仿现实中的日历
1.、当前页以系统当前日期的月份为准,显示当前月的每一天(显示出日及对应的星期几);
2、当系统日期变到下一个月时,系统自动翻页到下一月。
1.3其他要求
1、只能使用c/c++语言,源程序要有适当的注释,使程序容易阅读。
2、至少采用文本菜单界面。
3、学生可自动增加新功能模块。
2课题总体设计
2.1系统功能模块图
图1-1系统功能模块图
2.2系统流程图
图1-2系统流程图
3.详细设计
3.1printWNL()
图1-3printWNL()模块设计图
模块说明:
prinWNL()先后调用week(),getdays()打印出简单的日历。
3.2isRunNian()模块设计
图1-4isRunNian()函数模块设计图
模块说明:
若该年不是闰年,则输出0,相反则输出1;
设年数为X,先判断X能否被4整除,若不能则输出0;
若能整除,则判断X能否被100整除,若不能则输出1;
若能整除,则判断X能否被400整除,若不能则输出0,若能则输出1。
3.3getDays模块设计
图1-5getDays模块设计图
模块说明:
判断系统月份,以月份为主,三十一天的有一月,三月,五月,七月,八月,十月,十二月;
三十天的有四月,六月,九月,十一月。
若是闰年,则二月为二十九天,不是,则为二十八天。
3.4主函数main()模块设计
图1-6主函数体main()模块设计图
模块说明:
主函数体主要调用printWNL函数对由getsystime函数读取的主板时间进行相应的编辑和输出,并根据用户指令“↑↓←→”Esc实现年份及月份的调整,并退出程序
4调试与测试
此课程设计要求如生活中的挂历,要以当前页以系统当前日期的月份为准,显示当前月的每一天,并且当系统日期变到下一个月是,系统自动翻页到下一月。
然而在调试过程中首先自己没有注意到区分闰年,没有考虑到二月有二十八天,与二十九天的区别,其次没有做到每一天对应的每个星期,再次在调用函数时出错,本代码无法做到在改变系统年份或月份时,不能立即运行,需要重新调试,所以此代码还是有不足之处的。
经过不断的修改与尝试,最终将代码完成。
当对上面的程序进行了调试后运行会出现下面图2-1所示:
图2-1
满足当前页以系统当前日期的月份为准,显示当前月的每一天。
按“↑”键其下面接着会显示上一月的万年历,如图2-2
图2-2
按“↓”键其下面会接着显示下一月的万年历,如图2-3
图2-3
按“→”键下面将会接着显示当年上一个月的万年历,如题2-4
图2-4
按“←”键将会在下面接着显示当年下一个月的万年历,如图2-5
图2-5
以上所显示按EsC后将会退去该程序。
以上运行的结果可知该C语言所设计的万年历满足设计要求
5课程设计总结
课程设计时一个很好的提高我们专业编程水平的方法,让我们充分了解我们自己的水平,自主学习一些我们所短缺的知识。
主动督促我们去补充我们的知识漏洞。
在这期间我对于我所不知道的问题,我总是去查考一些资料,从那些书中我了解到了许多,同时我也知道书是多么的重要。
与此同时,在这个课设的过程中,我更了解到团队合作的重要,同学们总是给我一些重要的资料,出奇的想法,老师则对我的课设中的不足的提出宝贵的意见,供我参考、提高,因此,我才能完成这次课程设计。
从这次课设中我认为编写程序中掌握总体思想是其中的重要部分,清晰的思路能让我们快速的解决问题。
这次课程设计,我改了好几次,每次的改动让我对编程体会更加深刻,相信经过多次的训练后,我的编程能力会更上一层楼。
总而言之,从这次课设,我得到了很多人的帮助,感谢那些帮助过我的同学、老师。
通过对C语言万年历的设计进一步的巩固了用C语言编写程序,并且有利于更好的掌握C语言。
在C语言程序设计的过程中也知道了自己在以前的学习中有很大的不足导致在设计过程中出现了很多的问题,有些地方看不懂也不知道怎么去设计,但是在设计过程中也学习了很多,掌握了自己以前没有学好的知识,虽然一时可以掌握完以前没有学好的知识,不过也给自己敲响了警钟,在学习中不可以伏于表面,要想学好每一门课程都要踏踏实实,做什么都不是给别人看的!
都是要更好的掌握该门知识,提高自己的自身的修养,提高自己的能力!
为以后的工作打下良好的知识基础和技能基础!
在万年历的编写过程中我也体会到了做事情一顶有耐心呢、细心,认真。
也培养了我独立思考、综合运用所学有关相应知识的能力,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!
更加知道了要掌握好基础知识的重要性。
在万年历的设计过程中更加体会到了团队合作的重要性,三个臭皮匠抵上一个诸葛亮。
大家在合作中共同努力,共同进步!
团队合作才会更好的完成设计!
我也体会到以后在工作中团队合作的必要性和重要性!
通过这次课程设计让我在以后的学习中更加有信心!
参考文献
[1]刘振安,刘燕君.《C程序设计课程设计》[M].北京:
机械工业出版社,2004年9月
[2]谭浩强.《C程序设计》(第三版).清华大学出版社,2005年7月
[3]严蔚敏,吴伟民.《数据结构》(C语言版).清华大学出版社,1997年4月
[4]张岳新,《VisualC++程序设计》.苏州大学出版社,2007年12月
[5]徐宝文,《TheCProgrammingLanguage》.机械工业出版社,2004年1月
[6]黄明,梁旭,周绍斌,《VisualC++信息系统设计与开发实例》.机械工业出版社,2005年3月
[7]ALKELLEY等著,麻志毅译.《C语言解析教程》.北京:
机械工业出版社,2002年
[8]李志球,《实用C语言程序设计教程》.北京:
电子工业出版社,1999年
[9]王立柱,《C/C++与数据结构》.北京:
清华大学出版社,2002年
[10]李大友,《C语言程序设计》.清华大学出版社,1999年
附录
#include
#include
#include
#include
#include
#defineCURU72
#defineCURD80
#defineCURL75
#defineCURR77
#defineESC27
voidprintWNL(int,int);//简单格式打印万年历
intWeek(int,int,int);//求星期几
intgetDays(int,int);//计算某个月的天数
intisRunNian(int);//判断是否闰年
/*
*简单格式打印万年历
*参数:
y整型,接收年份值;m整型,接收月份值;
*返回值:
无
*/
voidprintWNL(inty,intm)
{
inti,j;
intday=1-Week(y,m,1);//天数初始值,定位1号的位置
intdays=getDays(y,m);
printf("%4d年%2d月\n",y,m);
printf("日一二三四五六\n");
for(i=1;i<=6;i++)
{
for(j=1;j<=7;j++)
{
if(day<=0||day>days)
printf("");
else
printf("%3d",day);
day++;
}
printf("\n");
}
printf("提示:
【←】减年【→】加年【↑】减月【↓】加月【ESC】退出\n");
}
/*
*求星期几
*参数:
y整型,接收年份值;m整型,接收月份值;d整型,接收天的号数
*返回值:
整型,是0,1-6七个数之间的一个数,0代表星期日,1-6代表星期一至星期六
*/
intWeek(inty,intm,intd)
{
intdays=0;//总天数
inti;
for(i=1;i days+=isRunNian(i)? 366: 365; for(i=1;i days+=getDays(y,i); days+=d;//累计当月的天数。 returndays%7;//返回星期值 } /* *判断是否闰年 *参数: y整型,接收年份值 *返回值: 整型,只为0或1,0代表假,1代表真 */ intisRunNian(inty) { return(y%4==0&&y%100! =0||y%400==0)? 1: 0; } /* *计算某个月的天数 *参数: y整型,接收年份值;m整型,接收月份值; *返回值: 整型,是0,28,29,30,31之间的一个数 *注意: 返回值为0,表示你调用该函数时传递了不正确的年份值或月份值. */ intgetDays(inty,intm) { intdays=0; switch(m) { case1: case3: case5: case7: case8: case10: case12: days=31;break; case4: case6: case9: case11: days=30;break; case2: days=isRunNian(y)? 29: 28;break; default: ; } returndays; } /* *主函数,应用程序入口 */ voidmain() { intyear,month; structtmt; charch; _getsystime(&t);//标准函数,获得系统当前时间 year=t.tm_year+1900;//得到当前年份 month=t.tm_mon+1;//得到当前月份 do { system("cls");//调用DOS清屏命令 printWNL(year,month);//自定义函数,打印万年历 ch=getch();//获得无回显控制台输入字符 if(ch==ESC)//ESC键,退出循环,结束程序 break; elseif(ch==0)//若值为零,则用户敲了功能键,继续获取后续代码。 ch=getch(); switch(ch) { caseCURL: year--;break;//左键减年 caseCURR: year++;break;//右键加年 caseCURU: //上键减月 month--; if(month==0) { month=12; year--; } break; caseCURD: //下键加月 month++; if(month==13) { month=1; year++; } break; default: ; } }while (1); printf("\n\n\t谢谢使用,欢迎常来! 再见。 \n"); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万年历系统 zuihao 万年历 系统