大佬这个怎么写呢。。。。。。

iuyghiyhg 2020-04-28 04:05:17
*题目:时间流逝之增加一秒钟。模拟时间的流逝,例如:当前是2020年12月31日23:59:59,时间流逝(即增加一秒钟)后变成2021年1月1日00:00:00。
**要求实现
(1)Date类和Time类的构造函数;
(2)Time类的成员函数void add_a_second(Date &);
(3)<<运算符重载函数ostream& operator<<(ostream&, Time&)和ostream& operator<<(ostream&, Date&)(必须按照规定格式输出时间)。

**注意:不得修改已有代码;不得再增加其他函数。
**提示:在实现add_a_second函数时要注意:增加一秒,可能导致增加一分钟(而秒数需要减少60);而增加一分钟,可能导致增加一小时(而分钟数需要减少60);以此类推,天、月、年都要进行类似地判断和计算。由于不同月份的天数不同,且存在闰年的问题,所以计算月份的时候要考虑当前年份和月份(即以当前年份和月份为参数调用days函数计算该月的天数)。*/

#include <iostream>
#include <fstream>
#include <iomanip>
#define FORMAT setw(2)<<setfill('0')
using namespace std;

class Date; //对Date类的提前引用声明
class Time {
public:
Time(int,int,int);
void add_a_second(Date &); //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年
friend ostream& operator<<(ostream&, Time&); //输出格式:hour:minute:second
friend void writeToFile(Time&, Date&);
private:
int hour;
int minute;
int sec;
};

class Date {
public:
Date(int,int,int);
friend void Time::add_a_second(Date &);
friend ostream& operator<<(ostream&, Date&); //输出格式:year年month月day日
friend void writeToFile(Time&, Date&);
private:
int month;
int day;
int year;
};

/********************补充代码实现题目要求*****************



*************************************************************/

int days(int m, int y) { //days函数返回第y年第m月的天数
int d[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //数组下标从0开始,而月份从1开始,所以给定d[0]=0
if((y%100==0&&y%4!=0)||(y%400==0)) d[2]=29; //如果是闰年,则二月份是29天
return d[m];
}

void writeToFile(Time& t, Date& d) {
ofstream outFile("res.txt");
outFile<<d.year<<"年"<<d.month<<"月"<<d.day<<"日"<<" "<<FORMAT<<t.hour<<":"<<FORMAT<<t.minute<<":"<<FORMAT<<t.sec<<endl;
outFile.close();
}

int main() {
Time tm(23,59,59);
Date dt(12,31,2020);

tm.add_a_second(dt);
cout<<dt<<tm; //屏幕上的输出是:2021年1月1日(换行)0:0:0
writeToFile(tm, dt); //文件中的输出是:2021年1月1日(空格)00:00:00
return 0;
}

...全文
175 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
coo135 2020-04-29
  • 打赏
  • 举报
回复
引用 1 楼 iuyghiyhg 的回复:
没有人吗。。。。。。。。。。。。
不想写作业的孩子啊…… 补充代码如下:


int days(int m, int y);
Date::Date(int m,int d,int y) {
	month=m,day=d,year=y;
}
Time::Time(int h,int m,int s) {
	hour=h,minute=m,sec=s;
}
void Time::add_a_second(Date& date) {
	int flag=0;
	sec++;
	if(sec==60) sec=0,minute++;
	if(minute==60) minute=0,hour++;
	if(hour==24) flag=1,hour=0;
	if(flag==1) {
		date.day++;
		if(date.day>days(date.month,date.year))
			date.day=1,date.month++;
		if(date.month>12)
			date.month=1,date.year++;
	}
}
ostream& operator<<(ostream& out, Time& t) {
	return out<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
}
ostream& operator<<(ostream& out, Date& d) {
	return out<<d.year<<"年"<<d.month<<"月"<<d.day<<"日"<<endl;
}
iuyghiyhg 2020-04-29
  • 打赏
  • 举报
回复
1
111111
iuyghiyhg 2020-04-28
  • 打赏
  • 举报
回复
没有人吗。。。。。。。。。。。。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧