C语言程序设计万年历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言课程设计报告
题目:万年历系统
设计者:李文杰
专业班级:软件工程(.net)一班
学号:************
指导教师:***
2011年6月30日
河南理工大学计算机科学与技术学院
目录
一、C语言课程设计任务书 (3)
1、C语言课程设计目的和要求 (3)
1.1目的: (3)
1.2要求: (3)
二、本组课题及本人任务 (3)
三、程序功能简介 (4)
四、主题内容 (4)
1、题目与要求 (4)
1.1 问题提出 (4)
1.2 本系统涉及的知识点 (5)
1.3 功能要求 (5)
2、功能设计 (6)
2.1 算法设计 (6)
3、程序流程图.. (8)
4、程序代码设计 (9)
4.1输入及年份平润确定模块 (9)
4.2求星期天数模块 (9)
4.3求月份天数模块 (11)
4.4查询模块 (11)
4.5输出及验证模块 (12)
4.6说明: (12)
5、C程序设计总结 (12)
6、结束语 (13)
参考文献 (13)
一、C语言课程设计任务书
1、C语言课程设计目的和要求
1.1目的:
1)复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握;
2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力;
3)培养学生在项目开发中团队合作精神、创新意识及能力。
1.2要求:
1)、对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;
2)、系统设计要实用,编程简练,可用,功能全面
3)、说明书、流程图要清楚
4)、记录设计情况(备查,也为编写设计说明书作好准备);
5)、要求采用模块化程序设计方法,及锯齿型书写格式,要求上机调试通过和按设计报告格式。
6)、设计上交内容:设计报告一份(按格式书写);源程序盘一张(能编译成可执行文件并能正常运行,可一个班交一张光盘)。
二、本组课题及本人任务
经考虑及尝试,本人决定选择题目2.2编写一个万年历系统,完成对日期的查询输出。
1设计编写一个C程序—“万年历”。
2输入任一年将显示出该年的所有月份日期,对应的星期。
3 下一行显示星期,从周日到周六,中英文都可以。
4 下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐。
5 月份:中文英文都可以,注意闰年情况。
三、程序功能简介
模仿现实生活中的挂历.
当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几).
当系统日期变到下一月时,系统自动翻页到下一月.
四、主题内容
1、题目与要求
1.1 问题提出
本人计划编写一个万年历查询系统,模仿现实生活中的挂历,实现多日期的变更了解。
1.2 本系统涉及的知识点
1. 程序的三种基本结构:顺序,选择,循环。
if语句的嵌套,for语句的嵌套。
2. 定义整型,字符型,指针变量,字符型数组和指针数组。
数组的初始化和引用和指针的使用。
3. 函数的定义、声名、调用以及函数的返回值。
4. 赋值语句的使用。
5. 输入(scanf)输出(printf)函数的应用。
6. 算术运算符、关系运算符和逻辑运算符的应用。
1.3 功能要求
1、建立日历基础信息,输入当前日期时间为本系统时间基数;
2、根据年份平润规律得出所要了解年份的平润;
3、以每七天为一个循环的规律得出星期天数;
4、根据月份天数规律得出所要了解月份天数;
5、输入日期查询;
6、输出。
2、功能设计
2.1 算法设计
1、本系统需要实现的功能要求:
利用switch语句设计如图1所示的主菜单:
请输入选项编号(1~7)
图1 日历查询系统主菜单
2、选择3后,调用排序函数,进入函数后利用switch语句实现一个如图2所示的菜单,该菜单中每个选项调用一个函数。
图2 排序子菜单
3、根据所选菜单编写相应模块图
1)输入函数leap 、count ,将当前基数时间输入及求出所要了解年份的平润;
2)通过switch 函数求出星期天数;
3)通过switch 函数求出月份天数;
4)输入日期查询;
5)输出及验证。
3、程序流程图
(成立)
4、程序代码设计
4.1输入及年份平润确定模块
1)函数原形:void count(int year, int month)
2)功能:利用if循环语句和count、leap函数完成对基数日期的输入和对所要了解的日期所在年份的平润。
3)模块源代码:
#include <stdio.h>
#define YEAR 365
int leap(int year)
{
int n;
n=(year%4==0&&year%4!=0||year%400==0);
return(n);
}
void count(int year, int month) /*基:2000年1月*/
{
int i,day,first_day,flag,year1,year2,temp=6;
flag=leap(year);
year1=year/100; /*相差几百年*/
year2=year%100; /*中间几十年*/
if(year>=2000) /*大于2000年*/
{
year1-=20;
day=year1/4; /*百闰年数*/
day+=(YEAR+24)*year1+YEAR*year2+(year2-1)/4; /*2000年至现年总天数*/
if(year>2000)day++; /*加上2000年闰年2月的29天*/
4.2求星期天数模块
1)函数原型:switch(month)
2)功能:利用switch语句完成万年历中对星期天数的求解。
3)模块源代码:
switch(month)
{
case 1:day+=0;break;
case 2:day+=31;break; /*加上月份天数*/
case 3:day+=59+flag;break;
case 4:day+=90+flag;break;
case 5:day+=120+flag;break;
case 6:day+=151+flag;break;
case 7:day+=181+flag;break;
case 8:day+=212+flag;break;
case 9:day+=243+flag;break;
case 10:day+=273+flag;break;
case 11:day+=304+flag;break;
case 12:day+=334+flag;break;
}
day+=temp; /*加上2000年1月1号是星期六*/ first_day=day%7; /*对7取余,为1号星期*/
}
else /*以下25行,计算<2000年,算法同上*/ {
year1=20-1-year1;
year2=100-year2-1; /*倒减,应多减1*/
day=year1/4;
day+=36524*year1+365*year2+year2/4; switch(month)
{
case 12:day+=31;break;
case 11:day+=61;break;
case 10:day+=92;break;
case 9:day+=122;break;
case 8:day+=153;break;
case 7:day+=184;break;
case 6:day+=214;break;
case 5:day+=245;break;
case 4:day+=275;break;
case 3:day+=306;break;
case 2:day+=334+flag;break;
case 1:day+=365+flag;break;
}
day-=temp; /*减去1号的6天*/
day=day%7;
first_day=(7-day)%7; /*反对称*/
}
4.3求月份天数模块
1)函数原型:switch(month)
2)功能:利用switch、fot循环语句实现万年历中对每月天数的求解以及万年历基本信息的输出。
3)模块源代码:
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:month=31;break;
case 4:
case 6:
case 9:
case 11:month=30;break;
case 2:month=28+flag;
}
printf(" SUN MON TUE WED THU FRI SAT\n");
for(i=1;i<=4*first_day;i++) /*输出空格*/
printf(" ");
for(i=0;i<month;i++)
{
printf("%4d",i+1); /*输出日历*/
if((first_day+i)%7==6)printf("\n");
}
printf("\n");
}
4.4查询模块
1)函数原型:void main()
2)功能:利用main函数实现对输入日期的查询。
3)模块源代码:
void main()
{
int year,i;
printf("please input year :\n");
4.5输出及验证模块
1)函数原型:void main()
2)功能:利用for、while语句和for、count函数实现查询结果的输出及验证。
3)模块源代码:
while(scanf("%d",&year)!=1)
{
printf("输入错误,请重新输入");
fflush(stdin);
}
for(i=1;i<13;i++)
{
printf("month:%d\n",i);
count(year,i);
}
getch();
}
4.6说明:
执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。
5、C程序设计总结
1.程序调试情况;
程序经过多次调试,最终运行正常。
输入数据,得出正确结果。
2.本人在程序设计中感想,收获:
通过本次试验设计,我对C语言在编写程序时的用处有了更明确的认识,懂得了编写C程序的一般法方步骤。
最大的收获是,编写程序时一定要有信心和勇气,要相信自己一定可以把这个程序编写出来。
分析问题做出算法,想好思路,在心里有个大致的框架,然后按部就班的记下自己想到的每一点内容,把写下的东西认真整理,查缺补漏,把一些细节的地方补上,就这样一个貌似很难的程序就写出来了(其实编程并不难,关键是要投入,要钻到里面去)。
下一步就是读程序了,读程序时一定要小心仔细,一条语句一条语句的读,看是否能输出自己想要输出的结果,如果发现错误要马上改过来,再接着向下读,直到把程序调试的完美无缺为至。
这次作的这一个设计,虽然我自己觉的很有的成就感,但是这必竟是我第一次作C语言的课程设计,必然会有很多的不足之处有待改进,相信以后我一定会做的更好。
6 结束语
感谢我的指导老师米老师和同学们在这次实训中对我的指导和帮助。
参考文献
[1] 谭浩强,C程序设计(第二版),北京:清华大学出版社,2001.1
[2] 贾宗璞,C语言程序设计,徐州:中国矿业大学出版社,2007.1。