程序设计万年历Word文档下载推荐.docx

上传人:b****8 文档编号:22498135 上传时间:2023-02-04 格式:DOCX 页数:20 大小:298.83KB
下载 相关 举报
程序设计万年历Word文档下载推荐.docx_第1页
第1页 / 共20页
程序设计万年历Word文档下载推荐.docx_第2页
第2页 / 共20页
程序设计万年历Word文档下载推荐.docx_第3页
第3页 / 共20页
程序设计万年历Word文档下载推荐.docx_第4页
第4页 / 共20页
程序设计万年历Word文档下载推荐.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

程序设计万年历Word文档下载推荐.docx

《程序设计万年历Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《程序设计万年历Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。

程序设计万年历Word文档下载推荐.docx

文字表达熟练程度

回答问题准确度

简短评语

教师签名:

郭剑

2014年4月28日

评分等级

B13090223邵家琦

B13090222陈俊良

B13090224练彤天

备注

评分等级共五种:

优秀、良好、中等、及格、不及格

一、课题内容和要求

问题描述:

已知2005年10月20日是星期四。

现要求编写一个程序,输出指定年份的日历到规定路径的.txt文件。

万年历要能提供以下几个基本功能:

(1)从键盘读入要求输出日历的年份xxxx,此部分要求对读入的数据具有一定的错误检查能力,如输入的不是数字,或输入的是五位以上的年份等。

(2)根据2005年10月20日是星期四,推算出xxxx年的1月1日是星期几。

(3)输出到指定文件夹下面。

二、需求分析

万年历系统的功能框架图如图一所示。

三、概要设计

1主要结构体

classData//声明一个类Data

{//私有变量

public:

intyear;

//公有变量

voidgetyear();

//提示用户输入想要查询的年份

voidPrintYear();

intioleapyear(intyear);

//判断该年是不是闰年

intweekday();

//判断该年的元旦是星期几

intmonthday(inti);

//该年每个月的天数

intchar_to_int();

//判断输入字符是否合法

intNowToDay(intyear,intmonth,intday);

//累计天数

voidDisplayYear(intyear);

};

2主要函数流程图

(1)char_to_int()//把输入的字符转换为数字

(2)ioleapyear()//判断闰年和平年

(3)weekday();

(3)dispyear()//显示函数

四、源程序代码

#include<

iostream>

iomanip>

fstream>

usingnamespacestd;

ofstreamoutfile("

万年历.txt"

ios_base:

:

out);

char*weekd[7]={"

MON"

"

TUE"

WEN"

THU"

FRI"

STA"

SUN"

//记录星期一到星期天

voidData:

getyear()

{

cout<

<

"

请输入你想要查询的年份:

;

//

year=char_to_int();

}

intData:

ioleapyear(intyear)//判断闰年和平年,闰年返回1,平年返回0

if(year%4==0&

&

year%100!

=0||year%400==0)//计算闰年和平年的方法

//四位年份能被4整除但不能被100整除,或能被400整除

return1;

else

return0;

weekday()

intn=year-1900;

//已知1900年的元旦刚好是星期一

n=n+(n-1)/4+1;

//判断,以每年52个整星期计算year年比1900年多出来的天数

//多出来的天数除以7的余数就是这年第一天是星期几

n=n%7;

if(n==0)//当n=0的时候是周日,使它返回7

return7;

//返回输入的年份的元旦是星期几

returnn;

//n不是0的时候反回n的值就是星期几

monthday(inti)//这里是返回月有几天的,i是月份

if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)

return31;

//如果是1,2,5,7,8,10,12月,则返回是31天

elseif(i==2)//判断2月

if(ioleapyear(year))//当ioleapyear()返回1时就是闰年,则为29天,ioleapyear()是一个函数,调用的一个函数

return29;

elsereturn28;

//否则为28天

return30;

//其他的月份为30天

char_to_int()

{

charyear_char[5];

intyear1=0,i=0;

boolj=0;

there:

cin>

>

year_char;

for(i=0;

year_char[i]!

='

\0'

i++)

{

if(year_char[i]<

'

0'

||year_char[i]>

9'

){cout<

输入的年份有误,请重新输入"

endl;

j=0;

break;

}

if(i>

=5){cout<

输入的年份有误请重新输入"

elsej=1;

}

if(j==1)for(i=0;

i++)year1=year1*10+year_char[i]-48;

elsegotothere;

returnyear1;

PrintYear()

intm=year/1000;

intn=(year/100)%10;

intp=(year/10)%10;

intq=year%10;

intnum[4]={m,n,p,q};

charss[5][10][8]={

"

*****"

*"

**"

*"

};

for(intg=0;

g<

5;

g++)

{{cout<

outfile<

for(inti=0;

i<

4;

for(inth=0;

h<

7;

h++)

{cout<

ss[g][num[i]][h];

{cout<

intData:

NowToDay(intyear,intmonth,intday)

{intDiDay,i;

for(i=1800,DiDay=0;

i<

year;

i++)//闰年单独+366天

if(ioleapyear(i))DiDay+=366;

elseDiDay+=365;

for(i=1;

month;

i++)DiDay+=monthday(i);

DiDay+=day-1;

returnDiDay;

voidData:

DisplayYear(intyear)

inti,j,n,month1,month2;

//按照一个季度输出日历month1month2month3是该月应该有天数

intExcur1,Excur2;

//i,j,k分别表示三个月的天数值Excur1,Excur2,Excur3表示偏移量

intsea;

charMonths[12][10]={{"

Jan"

},{"

Feb"

Mar"

Apr"

May"

Jun"

Jul"

Aug"

Sep"

Oct"

Nev"

Dec"

}};

constintSpaceSize=4;

for(sea=1;

sea<

=12;

sea+=2){//分两列显示

Excur1=(NowToDay(year,sea,1)+3)%7;

//分别计算2个月的偏移量

Excur2=(NowToDay(year,sea+1,1)+3)%7;

month1=monthday(sea);

//分别计算2个月的天数

month2=monthday(sea+1);

setw(16)<

Months[sea-1]<

setw(31)<

Months[sea]<

outfile<

--------------------------------------------------------"

cout<

setw(SpaceSize)<

<

;

//输

//出

WED"

THR"

//周

//号

SAT"

outfile<

for(n=1;

n<

=Excur1;

n++)//第一行单独处理首先输出多余的空格然后在输出天数

}//处理奇数月

for(n;

n<

=7;

n++){cout<

setw(SpaceSize)<

n-Excur1;

outfile<

n-Excur1;

{cout<

i=n-Excur1;

//i,j单独保存当前的日期

for(n=1;

=Excur2;

n++)

=7;

n++)//第一行单独处理首先输出多余的空格然后在输出天数

n-Excur2;

n-Excur2;

}//处理偶数月

j=n-Excur2;

//i,j单独保存当前的日期

while(i<

=month1||j<

=month2)//当两个月的日期都大于应有的天数后循环结束

{//接下来的7天输出一次。

但是大于天数的部分输出空格

for(n=i;

n+7;

i++)//处理奇数月

if(i<

=month1){cout<

setw(SpaceSize)<

i;

else{cout<

cout<

for(n=j;

j<

n+7;

j++)//处理偶数月

if(j<

=month2){cout<

j;

else{cout<

cout<

}

endl;

cout<

intmain()

Dataa;

//创建一个对象a

//ofstreamoutfile("

if(!

outfile)

cerr<

error:

cannotopen\"

万年历.txt\"

foroutput\n"

exit(-1);

setw(45)<

万年历查询"

-------------------------------------------------------------------------------"

a.getyear();

//调用对象a里的函数,这个就管输入一个年份

a.PrintYear();

a.DisplayYear(a.year);

system("

pause"

);

}}.

五、测试数据及其结果分析

运行后,程序的主菜单界面如下。

图a。

1.输入“abcd”,运行结果如下,图b

2.输入“123456”,运行结果如下,图c

3.输入“A123”,运行结果如下,图d

4.输入“2005”,运行结果如下,图e

5.输入“2014”,运行结果如下,图f

6.输出的文件,如图g

结果分析如下。

(1)在输入菜单选项时如果输入的内容不是1-0之间的数字,而是其他字符,系统将继续执行等待下次正确的输入;

若输入的为大于5位的数字,将继续等待下次正确的输入;

(2)输入的为5位以下的数字时,执行下一步操作。

六、调试过程中的问题

(1)在字符判断函数中,原来是不把字符和超过5位数字分开的,这样的话比如输入“a12”,由该表达式算出的结果根据ASCII码来算的话仍然在允许的范围内,所以我们选择了分开判断。

(2)在计算每个月日子的时候,先将2月作为30日处理,再在基础上减去。

后发现运行过程中和原先算法预计的情况不同,所以我们选择将12个月的日子枚举出来,2月默认为28天,闰年29天。

(3)在推算每天是周几的时候,我们原来以非元旦计算,就会出现有些日期出现错误的情况。

后改用每年的元旦开始计算周几,实现了只需考虑元旦随后在一年内除以7取余数的算法。

(4)在输出年份的算法中,原先输出的字符形状有不准之处,我们就以“1234....abcd....!

@#$%^&

”等字符来代替“*”,就得以很快定位到字符串不准确的地方,实现修改。

(5)文件输出的过程中,起先无法将字符文件和日历文件同时输出,后发现将“ofstreamoutfile("

”语句放在程序起始部,成为一个全局函数的声明,就可以实现输出文件了。

七、课程设计总结

程序设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。

因此作为二十一世纪的大学生来说掌握程序开发技术是十分重要的,而C++语言又是最常见,功能最强大的一种高级语言,因此做好C++语言课程设计是十分必要的。

通过C++课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重。

做程序设计,难免会遇到过各种各样的问题,同时在设计的过程中我们也发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说数组的灵活应用,循环语句,类的封装与继承……通过这次程序设计之后,我们把前面所学过的知识又重新温故了一遍。

我们做的是简易万年历的课程设计,虽然是很简单的一个小的程序,但对我们来说也是是一个不小的困难。

开始的时候真的感觉编程是一件很复杂的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。

又经过几天的努力,终于把程序完成了,尽管程序还是有很多功能上的欠缺和漏洞,但我们仍然会继续努力实现更大的提高。

随着信息技术的发展,计算机语言逐步显示了其重要性。

信息的处理就显得尤为重要。

而我们相信随着我们不断地努力,一定可以成为信息波浪中的弄潮儿!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1