C万年历实验报告Word格式文档下载.docx
《C万年历实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C万年历实验报告Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
_wnl;
5、为类的成员函数填写代码,满足功能实现;
6、运行环境:
控制台应用程序的源程序;
(4)得意之处:
1、可以满足多功能实现,可以循环执行功能;
2、可以选择每行输出的月份数;
3、有欢迎界面;
4、客户输入错误会有提示;
5、使用了C语言的流的形式,判断闰年,提高执行速度;
6、使用I/O流控制头文件iomanip.h控制月份日历的输出,更加整齐;
(5)创意的技术实现
(6)
(7)
(8)
主函数流程
判断某天是周几
判断闰年
获取天数
输出年份
(9)课程设计中目前存在的问题:
无法在欢迎页面插入字符画;
(10)设计实践过程中的自我感受
这是我第一次编写如此长的代码,从网上如同大海捞针似的寻找编写方法,看铺天盖地的长代码,还有的程序是错的。
输入的时候,没有小工具。
在看着自己熬通宵打出的代码,一大串的错误,真的有些泄气。
改对了执行输出结果还是错的,只好重新思考算法。
不过通过这次编程我真的学会了好多,比如其他的头文件的功能;
setfil(‘’)设置填充字符;
setw()定义字段长度……也让我真正体会到了编程的作用,爱上了编程。
(11)参考文献:
[1]吕凤翥,《C++语言程序设计》,清华大学出版社。
实验代码:
//万年历
#include<
iostream.h>
stdio.h>
iomanip.h>
intdayofmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//整形数组用于储存每月的天数
charmonthname[13][5]={"
"
"
Jan"
Feb"
Mar"
Apr"
May"
June"
July"
Aug"
Seb"
Oct"
Nov"
Dec"
};
//字符型数组用于储存月份名第一个数字用于表示字符串数(相当于行)第二个用于表示字符串长度(相当于列)
classwnl
{
public:
voidisleapyear(intyear);
//判断闰年,用于输出判断结果,以流的形式
boolisleap(intyear);
//判断闰年,返回判断结果,用于计算天数
intgetdays(intyear,intmonth,intday);
//获取据第一天天数
voidweekdays(intyear,intmonth,intday);
//获取星期几
voidprintyear(intyear);
//输出年的日历
voidprintyearmonth(intyear,intmonth);
//输出某年某月的日历
voidanimal(intyear);
//判断某年的生肖
intgetyear(){returnYear;
}//返回私有成员的值
private:
}_wnl;
voidmain()
intchoice,year,month,day;
cout<
<
~~欢迎来到万年历查询系统~~"
endl<
endl;
设计人:
天津职业技术师范大学\n\t\t\t设计人:
张锦琪\n\n"
;
loop:
╱请按序号输入您要做的工作:
╲"
▏判断闰年请按1;
▕"
▏判断某天是星期几请按2;
▏判断某年的隶属生肖请按3;
▏输出某年的日历请按4;
▏输出某月的日期请按5;
╲如果您要退出系统请按0;
╱"
cin>
>
choice;
switch(choice)
{
case0:
return;
case1:
cout<
输入一个年份格式如:
xxxx"
cin>
year;
_wnl.isleapyear(year);
break;
case2:
{
cout<
请输入您要查询的天数格式如xxxxxxxx"
cin>
year>
month>
day;
_wnl.weekdays(year,month,day);
}break;
case3:
请输入您要查询的年份格式如xxxx:
_wnl.animal(year);
case4:
请输入你要输出的年份xxxx:
_wnl.printyear(year);
case5:
请输入您要输出的年月,形如xxxxxx:
month;
_wnl.printyearmonth(year,month);
default:
cout<
输入错误"
}
继续查询请输1"
退出查询请输入字符"
intx;
x;
if(x==1)
gotoloop;
voidwnl:
:
isleapyear(intyear)
if(year>
=1000&
&
year<
=9999)
printf("
%s\n"
year%(year%100?
4:
400)?
no"
yes"
);
//以C语言流的形式判断会更快一些,节省内存
else
没有按格式输入"
boolwnl:
isleap(intyear)
if(year%400==0||(year%100!
=0&
year%4==0))
return1;
else
return0;
weekdays(intyear,intmonth,intday)
if(month<
=12&
=1)
intmax=dayofmonth[month];
if(day>
0&
day<
max)
{
ints=getdays(year,month,day)%7;
switch(s)
{
case0:
Sunday"
case1:
Monday"
case2:
Tuesday"
case3:
Wednesday"
case4:
Thursday"
case5:
Friday"
case6:
Saturday"
}
}
}
else
intwnl:
getdays(intyear,intmonth,intday)
inti,sum=0;
for(i=1;
i<
i++)
if(isleap(i))sum+=366;
elsesum+=365;
if(isleap(year))dayofmonth[2]=29;
i++)sum+=dayofmonth[i];
sum+=day;
returnsum;
animal(intyear)
intn=year%12;
switch(n)
case0:
该年是猴年"
break;
case1:
该年是鸡年"
case2:
该年是狗年"
case3:
该年是猪年"
case4:
该年是鼠年"
case5:
该年是牛年"
case6:
该年是虎年"
case7:
该年是兔年"
case8:
该年是龙年"
case9:
该年是蛇年"
case10:
该年是马年"
case11:
该年是羊年"
printyear(intyear)
输入一行输出的月份数:
intchoice;
ints;
inta[3],b[3];
//b数组用来储存每月的天数a数组用来临时储存那一月输出到的日期
year:
"
inti=1;
for(i=1;
=12/choice;
i++)//计算纵向输出几个月
for(inth=1;
h<
=choice;
h++)//该循环用于输出横向月份名
intm=choice*(i-1)+h;
//计算月份
cout<
monthname[m]<
for(h=1;
h++)
---------------------"
for(intj=0;
j<
j++)
Su"
Mo"
Tu"
We"
Th"
Fr"
Sa"
for(j=0;
j++)//这个循环是为了输出第一行,第一行都是单数,所以提出来输
intmonth;
month=choice*(i-1)+j+1;
s=getdays(year,month,1);
s=s%7;
//获取每月第一天
for(intm=0;
m<
s;
m++)
cout<
//输出月前的空
if(isleap(year))dayofmonth[2]=29;
b[j]=dayofmonth[month];
//月份天数b数组储存一个月的天数
for(inti=1;
8-s;
i++)//从一号开始输出
setw
(2)<
//最后那个空是为了让一位数和两位数对齐
a[j]=i;
//a数组用来储存每一行的日期素材
//两个月份之间的空隙
}
for(intw=1;
w<
=5;
w++)//一个月最多会在五个星期出现
for(j=0;
j++)//输出要求个数的月份
intw=1;
for(w=1;
=7;
w++,a[j]++)//依次输出日期
{
if(a[j]>
b[j])//如果那一行的日期数大于该月最大日期则跳出
break;
cout<
a[j]<
if(w==7)
cout<
//输出每两个月之间日期间的空隙
}
for(intn=1;
a[j]>
b[j],n<
=8-w;
n++)//月份
if(a[j]>
b[j]&
w!
=8)//输出月份结束后的空
//为了美观空一行
printyearmonth(intyear,intmonth)
monthname[month]<
----------------------------------------"
setw(6)<
Sun"
Mon"
Two"
setw(6)
<
Wed"
Thur"
Fri"
Sat"
//我觉得输出这个可以定义一个数组,用循环来做,但这样可能会使执行速度变慢
intnumber=getdays(year,month,1)%7;
//第一天就一就相当于有一天了
for(intk=0;
k<
number;
k++)
{cout<
for(intj=1;
=max;
j;
if((number+j)%7==0)//周六换行