C++程序设计实验报告(三十三)---第三周任务三

本文介绍了一个C++类的实现,该类能够处理时间并提供多种时间操作功能,包括增加秒、分钟、小时等。通过内部函数和输入验证确保了时间的有效性和一致性。实现了基本的时间设置、显示和时间增量功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第三周报告3-1::
实验目的:要求增加类的功能
实验内容:在原类基础上,增加下列成员函数,要求前三个设计成内置函数,在main()数中增
加适当的调用以展示扩充类定义后的功能。
* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2012烟台大学计算机学院学生
* All rights reserved.
* 文件名称: array.cpp 
* 作 者: 刘镇 
* 完成日期: 2012 年 3 月 4 日
* 版 本 号: 1.030
* 对任务及求解方法的描述部分
* 输入描述:时、分、秒
* 问题描述:。。。。。
* 程序输出:增加指定的时间后的时刻

* 程序头部的注释结束

#include<iostream>   

using namespace std;  

class Time  
{  
public:  
	void set_time();  
	void show_time();  
	inline void add_a_sec();   //增加1秒钟   
	inline void add_a_minute();   //增加1分钟   
	inline void add_an_hour();   //增加1小时   
	void add_seconds(int);   //增加n秒钟   
	void add_minutes(int);   //增加n分钟   
	void add_hours(int);    //增加n小时   

private:  
	bool is_time(int, int, int);  
	int hour;  
	int minute;  
	int sec;  

};  

int main()  
{  
	Time t1;  

	Time &t2 = t1;  

	t1.set_time(); 

	t2.show_time();  

	t1.add_a_sec();  

	cout << "增加1秒钟:" << endl;

	t2.show_time();  

	t1.add_a_minute();

	cout << "增加1分钟:" << endl;

	t2.show_time();  

	t1.add_an_hour();  

	cout << "增加1小时:" << endl;

	t2.show_time();  

	t1.add_seconds(45); 

	cout << "增加45秒钟:" << endl;

	t2.show_time();  

	t1.add_minutes(50);  

	cout << "增加50分钟:" << endl;

	t2.show_time();  

	t1.add_hours(2);  

	cout << "增加2小时:" << endl;

	t2.show_time();  

	system("PAUSE");

	return 0;
}  

void Time::set_time()  
{  
	char c1, c2;  

	cout << "请输入时间(格式hh:mm:ss)";  

	while(1)  
	{  
		cin >> hour >> c1 >>minute >> c2 >> sec;  

		if(c1 != ':' || c2 != ':')  
		{  
			cout << "格式不正确,请重新输入!" << endl;  
		}  

		else if(! is_time(hour, minute,sec))  
		{  
			cout << "时间非法,请重新输入!" << endl;  
		}  

		else  
		{  
			break;  
		}  

	}  
}  

void Time::show_time()  
{  
	cout << hour << ":" << minute << ":" << sec << endl;  
}  

bool Time::is_time(int h, int m, int s)  
{  
	if(h < 0 || h > 24 || m < 0 || m > 60 || s < 0 || s > 60)  
	{  
		return false;  
	}  

	return true;  
}  

void Time::add_a_sec()  
{  
	++ sec;  

	if(sec >= 60)  
	{  
		sec = 0;  

		add_a_minute();  
	}  

}  

void Time::add_a_minute()  
{  
	++ minute;  

	if(minute >= 60)  
	{  
		minute = 0;  

		add_an_hour();  
	}  

}  

void Time::add_an_hour()  
{  
	++ hour;  

	if(hour > 24)  
	{  
		hour = 1;  
	}  

}  

void Time::add_seconds(int n)  
{     
	sec = sec + n;  

	if(sec >= 60)  
	{  
		add_minutes(sec/60);

		sec = sec % 60;
	}  

}  

void Time::add_minutes(int n)  
{     
	minute = minute + n;  

	if(minute >= 60)  
	{ 
		add_hours(minute / 60);

		minute =  minute % 60;  
	} 
}

void Time::add_hours(int n)  
{  
	hour = hour + n;  

	if(hour >= 24)  
	{ 
		hour = hour % 24;  
	} 
}  



 


运行结果:


经验积累;

1、能在增加n个单位时间后考虑到所引起的连锁反应,秒变化,时和分也有可能变化,这就要对其进行判断,if的嵌套是我的处理方法。

2、本来想在超过24时时能够体现出是第二天的时间,但并没有太好的办法,需要再思考。

3、经过老师指导,对于类中的成员函数尽量不要将非用于输入输出的函数中处理输入输出。

4、类处理大型工程是非常好的,封装和隐蔽性也很好,改动也并不会产生太大影响。

上级感言:

照猫画虎吧,在不同的算法中总会又能用到的方法,而且会很巧妙哦。但并不是完全的套用,别人的总归是别人的,自己嚼烂才行。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值