日期格式实验报告参考模板

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《程序设计实践》报告
学号 110342245 ;姓名周宇桔;题目来源及序号2010年题6-2 ;难度等级 B
一、题目
第2题日期格式处理
a.程序功能简介:一个处理日期格式得程序。

b.设计要求:
(1)解决程序运行中会出现非法操作的问题。

(2)在源程序基础上增加一个中文格式,使之能够实现中文日期的处理功能。

(3)增加可以从文件中输入日期的功能。

(4)如有可扩充的好主意,请自行设计到程序中。

二、问题分析及求解基本思路
该题目需要解决的功能较多,所以采用switch语句进行功能选择,每个功能之间不影响。

使用类更加方便。

通过访问类的成员函数来进行基本几项的格式转换。

而从文件输入这个功能,通过输入输出流操作来达到目的;最后的日期计算则采用基本加减计算来达到目的。

三、问题求解的整体框架结构
程序流程图如图1所示:
图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<iostream>
#include <fstream>
using namespace std;
class Date //定义日期类Date。

{
private:
int year,month,day;
public:
void setDate(int y=2013,int m=5 ,int d=16); //声明3个成员函数
void showDate1();
void showDate2();
};
void Date::setDate(int y,int m,int d) //获得待转换前的日期
{
year=y;
month=m;
day=d;
}
void Date::showDate1()//以"年.月.日"形式输出日期
{
cout<<year<<".";
if (month<10) cout<<'0';
cout<<month<<".";
if (day<10) cout<<'0';
cout<<day<<endl;
}
void Date::showDate2()//以*年*月*日的形式输出日期
{
cout<<"转换后的日期格式是:";
cout<<year<<"年";
cout<<month<<"月";
cout<<day<<"日"<<endl;
}
int main()
{
Date a,b,c; //定义a,b,c3个
以Date定义的对象
int year,month,day; //人性化界面
int input;
cout<<"请选择需要的功能:"<<endl;
cout<<"1.将yy-mm-dd格式的日期转换成yy.mm.dd格式"<<endl;
cout<<"2.将yy-mm-dd和yy.mm.dd格式的日期转换成为yy年mm月
dd日的格式"<<endl;
cout<<"3.将yy年mm月dd日格式的日期转换成为yy.mm.dd格式
"<<endl;
cout<<"4.从文件输入日期并显示"<<endl;
cout<<"5.计算一个日期后一个天数是周几:"<<endl;
cout<<"6.退出"<<endl;
cin>>input;
loop: switch(input) //功能选择
{
case 1:cout<<"请输入一个日期,yy-mm-dd格式:"<<endl;
cin>>year>>month>>day;
if(month>=13||day>=32)
{
cout<<"******输入非法******"<<endl; //输入非法
goto loop; //返回上一步输入操作}
a.setDate(year,month,day);
cout<<"您输入的日期是:";
cout<<year<<"-"<<month<<"-"<<day<<endl;
cout<<"转换后的日期格式是:";
a.showDate1();
break;
case 2:cout<<"请输入一个日期,yy-mm-dd格式:"<< endl;
cin>>year>>month>>day;
if(month>=13||day>=32)
{
cout<<"******输入非法******"<<endl;
goto loop;
}
b.setDate(year,month,day);
cout<<"您输入的日期是:";
cout<<year<<"-"<<month<<"-"<<day<<endl;
cout<<"转换后的日期格式是:";
b.showDate2();
break;
case 3:cout<<"请输入一个日期,yy年mm月dd日格式:(yy mm dd)"<<endl;
cin>>year>>month>>day;
if(month>=13||day>=32)
{
cout<<"******输入非法******"<<endl;
goto loop;
}
c.setDate(year,month,day);
cout<<"您输入的日期是:";
cout<<year<<"年"<<month<<"月"<<day<<endl;
cout<<"转换后的格式是:";
c.showDate1();
cout<<year<<"-"<<month<<"-"<<day<<endl;
break;
case 4:
{
char *j=new char[10];
cout<<"请输入你需要打开的文件的路径:"<<endl;
cin>>j;
ifstream in(j);
char ch;
if(!in)
{
cout<<"文件不能打开。

"<<endl;
return -1;
}
cout<<"该文件中的日期是:";
while(in)
{
in.get(ch);
if(in)
cout<<ch;
}
in.close();
}
break;
case 5:
int w,e,t,i,u;
cout<<"请输入一个日期,起始日期最早是1973.01.01:"<<endl;
int c,v,b;
c=w%4;
v=w%400;
b=w%100;
cin>>w>>e>>t;
switch(e)
{
case 1:
{
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t;
}
break;
case 2:
{
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+31;
}
break;
case 3:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+60;
}
}
else
u=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+59;
}
break;
case 4:
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+91;
}
}
else
u=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+90;
}
break;
case 5:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+121;
}
}
else
u=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+120;
}
break;
case 6:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+152;
}
}
else
u=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+151;
}
break;
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+182;
}
}
else
u=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+181;
}
break;
case 8:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+213;
}
}
else
u=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+212;
}
break;
case 9:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+244;
}
}
else
u=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+243;
}
break;
case 10:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+273;
}
}
else
u=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+272;
}
break;
case 11:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+304;
}
}
else
u=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+303;
}
break;
case 12:
{
if(c=4)
{
if(v=400)
{
if(b=100)
u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+334;
}
}
else
u=u=((w-1972)*365+(w-1973)%4-(w-1973)/100+(w-1973)/400)+t+333;
}
break;
}
i=(u+5)%7;
cout<<w<<"."<<e<<"."<<t<<".";
if(i>=1) cout<<"是周"<<i<<endl;
else
cout<<"是周日"<<endl;
case 6:cout<<"********你选择退出*********谢谢使用"<<endl;
break;
}
return 0;
}
五、测试
程序成功运行,进入选择界面如图所示:
退出系统如图8所示:
六、总结
操作非法的问题使用了goto语句来返回上一步;
编写程序时必须先用一个大概框架,不然编写的过程中思维很乱;
该程序使用了循环嵌套,类,输入输出流等知识点。

程序中功能只能一个一个的测试~不能连接起来,是严重的不足。

友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!。

相关文档
最新文档