日期格式实验报告.docx
《日期格式实验报告.docx》由会员分享,可在线阅读,更多相关《日期格式实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
日期格式实验报告
《程序设计实践》报告
学号;姓名周宇桔;题目来源及序号2010年题6-2;难度等级B
一、题目
第2题日期格式处理
a.程序功能简介:
一个处理日期格式得程序。
b.设计要求:
(1)解决程序运行中会出现非法操作的问题。
(2)在源程序基础上增加一个中文格式,使之能够实现中文日期的处理功能。
(3)增加可以从文件中输入日期的功能。
(4)如有可扩充的好主意,请自行设计到程序中。
二、问题分析及求解基本思路
该题目需要解决的功能较多,所以采用switch语句进行功能选择,每个功能之间不影响。
使用类更加方便。
通过访问类的成员函数来进行基本几项的格式转换。
而从文件输入这个功能,通过输入输出流操作来达到目的;最后的日期计算则采用基本加减计算来达到目的。
三、问题求解的整体框架结构
程序流程图如图1所示:
Switch显示可选功能并选择
定义类
输入路径,打开文件失败显示失败,成功则显示其中日期内容
输入日期
输入日期
输入日期
输入今天的年月日
结束
调用类的成员函数来转换成为需要的格式
调用类的成员函数来转换成为需要的格式
关闭文件
开始
是否非法
是否非法
是否非法
是否闰年
是,计算周几
否,计算周几
否否否
是是是
调用类的成员函数来转换成为需要的格式
图1.程序流程图
四、主要算法
算法1:
输入日期;
将日期分别赋值给对应变量yy,mm,dd;
输出yy年mm月dd日。
算法2:
从文件输入日期并显示
打开(“请输入你需要打开的文件的路径:
”);
如果(打开路径失败)输出"文件不能打开。
";
当(打开文件路径成功),获取文件中的日期字符,输出日期字符;
关闭文件。
算法3:
计算某个日期是星期几?
从键盘输入任意日期;
计算输入日期与1972年间的闰年个数d;
计算输入日期与1972年相距天数:
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+本年已过天数;
如果是闰年,2月29天;
如果非闰年,2月28天;
计算周几:
i=(u+5)%7
程序代码:
#include
#include
usingnamespacestd;
classDate//定义日期类Date。
{
private:
intyear,month,day;
public:
voidsetDate(inty=2013,intm=5,intd=16);//声明3个成员函数
voidshowDate1();
voidshowDate2();
};
voidDate:
:
setDate(inty,intm,intd)//获得待转换前的日期
{
year=y;
month=m;
day=d;
}
voidDate:
:
showDate1()//以"年.月.日"形式输出日期
{
cout<if(month<10)cout<<'0';
cout<if(day<10)cout<<'0';
cout<}
voidDate:
:
showDate2()//以*年*月*日的形式输出日期
{
cout<<"转换后的日期格式是:
";
cout<cout<cout<}
intmain()
{
Datea,b,c;//定义a,b,c3个以Date定义的对象
intyear,month,day;//人性化界面
intinput;
cout<<"请选择需要的功能:
"<cout<<"1.将yy-mm-dd格式的日期转换成yy.mm.dd格式"<cout<<"2.将yy-mm-dd和yy.mm.dd格式的日期转换成为yy年mm月dd日的格式"<cout<<"3.将yy年mm月dd日格式的日期转换成为yy.mm.dd格式"<cout<<"4.从文件输入日期并显示"<cout<<"5.计算一个日期后一个天数是周几:
"<cout<<"6.退出"<cin>>input;
loop:
switch(input)//功能选择
{
case1:
cout<<"请输入一个日期,yy-mm-dd格式:
"<cin>>year>>month>>day;
if(month>=13||day>=32)
{
cout<<"******输入非法******"<gotoloop;//返回上一步输入操作
}
a.setDate(year,month,day);
cout<<"您输入的日期是:
";
cout<cout<<"转换后的日期格式是:
";
a.showDate1();
break;
case2:
cout<<"请输入一个日期,yy-mm-dd格式:
"<cin>>year>>month>>day;
if(month>=13||day>=32)
{
cout<<"******输入非法******"<gotoloop;
}
b.setDate(year,month,day);
cout<<"您输入的日期是:
";
cout<cout<<"转换后的日期格式是:
";
b.showDate2();
break;
case3:
cout<<"请输入一个日期,yy年mm月dd日格式:
(yymmdd)"<cin>>year>>month>>day;
if(month>=13||day>=32)
{
cout<<"******输入非法******"<gotoloop;
}
c.setDate(year,month,day);
cout<<"您输入的日期是:
";
cout<cout<<"转换后的格式是:
";
c.showDate1();
cout<break;
case4:
{
char*j=newchar[10];
cout<<"请输入你需要打开的文件的路径:
"<cin>>j;
ifstreamin(j);
charch;
if(!
in)
{
cout<<"文件不能打开。
"<return-1;
}
cout<<"该文件中的日期是:
";
while(in)
{
in.get(ch);
if(in)
cout<}
in.close();
}
break;
case5:
intw,e,t,i,u;
cout<<"请输入一个日期,起始日期最早是1973.01.01:
"<intc,v,b;
c=w%4;
v=w%400;
b=w%100;
cin>>w>>e>>t;
switch(e)
{
case1:
{
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t;
}
break;
case2:
{
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+31;
}
break;
case3:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+60;
}
}
elseu=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+59;
}
break;
case4:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+91;
}
}
elseu=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+90;
}
break;
case5:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+121;
}
}
elseu=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+120;
}
break;
case6:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+152;
}
}
elseu=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+151;
}
break;
case7:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+182;
}
}
elseu=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+181;
}
break;
case8:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+213;
}
}
elseu=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+212;
}
break;
case9:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+244;
}
}
elseu=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+243;
}
break;
case10:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+273;
}
}
elseu=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+272;
}
break;
case11:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+304;
}
}
elseu=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+303;
}
break;
case12:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+334;
}
}
elseu=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+333;
}
break;
}
i=(u+5)%7;
cout<if(i>=1)cout<<"是周"<
else
cout<<"是周日"<
case6:
cout<<"********你选择退出*********谢谢使用"<break;
}
return0;
}
五、测试
程序成功运行,进入选择界面如图所示:
退出系统如图8所示:
六、总结
操作非法的问题使用了goto语句来返回上一步;
编写程序时必须先用一个大概框架,不然编写的过程中思维很乱;
该程序使用了循环嵌套,类,输入输出流等知识点。
程序中功能只能一个一个的测试~不能连接起来,是严重的不足。