C++万年历课程设计.docx
《C++万年历课程设计.docx》由会员分享,可在线阅读,更多相关《C++万年历课程设计.docx(15页珍藏版)》请在冰豆网上搜索。
C++万年历课程设计
河南城建学院
高级语言课程设计报告书
题目:
输出万年历问题
系部:
计算机系
专业:
数字媒体技术
班级:
0824091班
姓名:
罗龙生
学号:
082409135
指导教师:
崔雪冰、仝瑞阳
2010年8月31日
一、课程设计题目
已知2000年1月1日为星期六,请输入任一年的年份后,打印该年的年历;
二、设计要求
本系统应完成如下功能:
已知2000年一月一日是星期六,再输入任一年的年份,该系统能打印出该年的年历。
1、输入记录
输入源程序,并对各部分有一个详细的解释,说明各个部分的功能,将这个问题模块化,分成几个部分的输入。
2、程序中数据的设计
此题需要考虑的情况比较多,诸如大月小月的判断,闰年非闰年的判断以及年历的排列方式都得用数据的形式给表示出来,所以数据的的设计也是比较多的,具体如下:
inti,c,day,year,k,a[50];
具体说明如下:
i(此变量是用来排列年历的),c(c是和year变量是一样的,是从计算机中输入的),day(day变量是是相差的天数),k(k是用来输出星期的)。
3、程序的函数设计
C++是函数驱动的,所以很多的功能是需要用函数来完成的。
本题我们共有6个函数,其中有5个自定义函数和一个主函数。
分别是:
voidf1(intx),voidf2(intx),voidf3(intx),voidf4(intx),voidg(inty[],intz)和main函数。
各个函数的功能是:
f1:
判断1号之前的天数并全部用空格填上。
f2:
用来判断大小月的。
f3:
用来判断并输出闰年的二月的。
f4:
用来判断并输出非闰年二月的。
g:
用来输出日历表的。
三、数据结构说明
本系统数据结构较简单,只有一个结构数组,预定50个元素。
定义结构类型如下:
for(i=0;i<50;i++)
a[i]=33;
四、系统功能模块图
五、各功能模块(函数)的算法处理
1、大月和小月的定义
voidf1(intx)//大月
{
for(i=0;i<50;i++)
a[i]=33;
for(i=k-1;i>=0;i--)
a[i]='\000';//1号前均为空格
for(i=k;i<31+k;i++)
a[i]=a[i-1]+1;
}
主要运用了数组的循环语句进行对大月的定义。
voidf2(intx)//小月
{
for(i=0;i<50;i++)
a[i]=33;
for(i=k-1;i>=0;i--)
a[i]='\000';
for(i=k;i<30+k;i++)
a[i]=a[i-1]+1;
}
依然用数组的循环语句进行对小月的定义。
数组的循环语句是C++中一个很重要的知识,数组可以节省很多的定义,一个句子就可以就可以输出很多的数,这样大大减少了计算机的存储空间。
这正是一个很打的进步。
2、闰年与非闰年二月的定义
voidf3(intx)//闰年二月
{
for(i=0;i<50;i++)
a[i]=33;
for(i=k-1;i>=0;i--)
a[i]='\000';
for(i=k;i<29+k;i++)
a[i]=a[i-1]+1;
}
voidf4(intx)//非闰年二月
{
for(i=0;i<50;i++)
a[i]=33;
for(i=k-1;i>=0;i--)
a[i]='\000';
for(i=k;i<28+k;i++)
a[i]=a[i-1]+1;
}
用两个函数定义了在闰年与非闰年时,二月的不同定义。
这主要运用到变量的不同定义。
从而分辨出它们的不同,使可打印出任一年的日历。
3、日历表的输出
ints,count=0;
cout<<"请输入年份:
";
cin>>year;
cout<c=year;
for(s=1;s<=year;s++)
if(((s-1)%4==0&&(s-1)%100!
=0)||(s-1)%400==0)
count++;
day=365*c+count;//相差天数
cout<<"*********************"<cout<
在此运用了C++中函数的运算,计算出该年的每月每日的不同。
还有一年的输入和输出。
在C++语言中,函数的运算又分为很多种,此次用的是
在输出时,闰年与非闰年二月的输出法的定义
if((year%4==0&&year%100!
=0)||year%400==0)//闰年二月
{
k=((day+31)%7+6)%7+1;
cout<<"二月"<f3(k);
g(a,50);
day=day+31+29;
}
else//非闰年二月
{
k=((day+31)%7+6)%7+1;
cout<<"二月"<f4(k);
g(a,50);
day=day+31+28;
}
此处主要运用了if语句来对闰年与非闰年的二月的不同定义的输出。
if语句一种可跳过不符合条件的语句,继续下面的语句的执行。
它具有很强的实用性。
在实际的操作中经常会用到的,是一个很重要的知识。
六、效果图
1、运行程序
2、输入数据并运行程序输出结果
七、流程图
1.图一
输入的年份
判断从定义年到输入的年份中
每个年份是否为闰年
是否
每年为366天
每年为365天
返回该年的天数
2.图二
输入的年份
判断输入年是否为定义年
是否
总天数S=1
总天数S为定义年到输入年的总天数
把S加上该年到输入年份的天数,再加1
判断输入的年份是否
为闰年
是否
该年是否有二月
是否
把S加上该年
到输入年份的天数
把S再加上该把S加上该年年的天数到输年天数
再加1
总天数为S
判断S的最后一天为星期几
从这一天起依次输出输入年份的天数直到该年底为止
八、课程设计心得及体会
经过一周的不懈努力,很高兴能完成一个C++编程,紧张的心终于可以平静了。
从中体会到以及学习到很多关于C++的很大方面的只是,是我更加了解了C++,并更加熟练了C++。
在此次设计中我也遇到了很多的问题,都是经过查看老师所给的关于课程设计书和图书馆借的书才明白所用函数的用法,更重要的是上课时老师的细心教学,使我们学会了许多关于C++的基础知识,为本次的课程设计打好了很好的基础。
从而使我能够顺利完成这次课程设计。
在本次做课程设计过程中,要感谢崔雪冰、仝瑞阳老师的悉心关照,一直陪伴我们,并为大家讲解不懂的地方,很是辛苦,也很是忙碌。
还要感谢学院为我们此次课程设计提供机房,让我们有了良好的学习环境可以利用所学做课程设计,从很大的程度上增强了我们对于C++学习的兴趣。
和小组成员一块讨论,多听听别人的想法,想办法改进自己,这是我受益匪浅。
只有比较才知道自己的不足。
我们一定要好好的改正自己的不足之处,完善自己。
不做最好,只做更好!
努力在老师规定的时间内完成老师所规定的任务。
结束课程设设的时侯,心里就有一种很渴望但又很害怕的感觉,明白了自己与实际所需的距离,因为现在毕业求职难,特别是对于像自己一般的人,更多的时侯是社会,职业选择自己,而不是更多的自己去选择职业,所以更应该把所学的知识灵活地用于实践,这次课设就是对自己一个很好的锻炼机会,无论任何的偿试,都是自己以后很宝贵的经验,更是对自己的一种充实。
通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C++,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机。
九、源程序清单
#include
#include
usingnamespacestd;
inti,c,day,year,k,a[50];
voidf1(intx)//大月
{
for(i=0;i<50;i++)
a[i]=33;
for(i=k-1;i>=0;i--)
a[i]='\000';//1号前均为空格
for(i=k;i<31+k;i++)
a[i]=a[i-1]+1;
}
voidf2(intx)//小月
{
for(i=0;i<50;i++)
a[i]=33;
for(i=k-1;i>=0;i--)
a[i]='\000';
for(i=k;i<30+k;i++)
a[i]=a[i-1]+1;
}
voidf3(intx)//闰年二月
{
for(i=0;i<50;i++)
a[i]=33;
for(i=k-1;i>=0;i--)
a[i]='\000';
for(i=k;i<29+k;i++)
a[i]=a[i-1]+1;
}
voidf4(intx)//非闰年二月
{
for(i=0;i<50;i++)
a[i]=33;
for(i=k-1;i>=0;i--)
a[i]='\000';
for(i=k;i<28+k;i++)
a[i]=a[i-1]+1;
}
voidg(inty[],intz)//输出日历表
{
cout<<"日"<<'\t'<<"一"<<'\t'<<"二"<<'\t'<<"三"<<'\t'<<"四"<<'\t'<<"五"<<'\t'<<"六"<for(i=0;i<50;i++)
{
if(a[i]==0)
cout<<(char)a[i]<<'\t';
if(a[i]!
=0&&a[i]!
=33)
cout<else;
if(i%7==0)
cout<}
cout<}
intmain()
{
ints,count=0;
cout<<"请输入年份:
";
cin>>year;
cout<c=year;
for(s=1;s<=year;s++)
if(((s-1)%4==0&&(s-1)%100!
=0)||(s-1)%400==0)
count++;
day=365*c+count;//相差天数
cout<<"*********************"<cout<k=(day%7+6)%7+1;
cout<<"一月"<f1(k);
g(a,50);
if((year%4==0&&year%100!
=0)||year%400==0)//闰年二月
{
k=((day+31)%7+6)%7+1;
cout<<"二月"<f3(k);
g(a,50);
day=day+31+29;
}
else//非闰年二月
{
k=((day+31)%7+6)%7+1;
cout<<"二月"<f4(k);
g(a,50);
day=day+31+28;
}
k=(day%7+6)%7+1;
cout<<"三月"<f1(k);
g(a,50);
k=((day+31)%7+6)%7+1;
cout<<"四月"<f2(k);
g(a,50);
k=((day+31+30)%7+6)%7+1;
cout<<"五月"<f1(k);
g(a,50);
k=((day+31+30+31)%7+6)%7+1;
cout<<"六月"<f2(k);
g(a,50);
k=((day+31+30+31+30)%7+6)%7+1;
cout<<"七月"<f1(k);
g(a,50);
k=((day+31+30+31+30+31)%7+6)%7+1;
cout<<"八月"<f1(k);
g(a,50);
k=((day+31+30+31+30+31+31)%7+6)%7+1;
cout<<"九月"<f2(k);
g(a,50);
k=((day+31+30+31+30+31+31+30)%7+6)%7+1;
cout<<"十月"<f1(k);
g(a,50);
k=((day+31+30+31+30+31+31+30+31)%7+6)%7+1;
cout<<"十一月"<f2(k);
g(a,50);
k=((day+31+30+31+30+31+31+30+31+30)%7+6)%7+1;
cout<<"十二月"<f1(k);
g(a,50);
return0;
}
十、参考文献
【1】谭浩强著.《C++面向程序程序设计》.北京:
清华大学出版社,2006.7
【2】钱能著.《C++程序设计教程(修订版)——设计思想与实现》.北京:
清华大学出版社,2009.7
【3】周玉龙刘璟著.《高级语言C++程序设计编程范例与精解》.高等教育出版社2003.4