日期格式实验报告.docx
- 文档编号:18067979
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:18
- 大小:120.23KB
日期格式实验报告.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语句来返回上一步; 编写程序时必须先用一个大概框架,不然编写的过程中思维很乱; 该程序使用了循环嵌套,类,输入输出流等知识点。 程序中功能只能一个一个的测试~不能连接起来,是严重的不足。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 日期 格式 实验 报告