编写 ParkingCard 类,解决停车计费问题,类的定义及部分成员函数定义如
下所示,请补充未定义的成员函数,编写主程序进行测试。
ParkingCard 类包含 2 个 MyTime 类对象作为数据成员,用来保存开始停车
和离开时间。
class MyTime{
public:
MyTime();
MyTime(int h,int m); //通过指定 h 和 m 构造 MyTime 对象
MyTime( int minutes); //通过指定分钟数构造 MyTime 对象
void setTime(int h, int m); //设置新的时间
void output() const; //以 hh:mm 格式输出时间
int getHour() const; //获得小时
int getMinute() const; //获得分钟
int getTotalMinutes() const; //获得从 0 点 0 分起的总分钟数
MyTime getTimeSpan( const MyTime &t )const; //计算时间差
private:
int hour;
int minute;
void normalizeTime(); //规范化小时为 0~23,分钟为 0~59
};
#include "MyTime.h"
class ParkingCard{
public:
ParkingCard(double newRate) { rate = newRate; }
void setRate(double newRate) { rate = newRate; } //设置每小时费率
double getRate() const{ return rate; }
void setParkingTime( const MyTime &time); //设置开始停车时间
void setLeavingTime( const MyTime &time ); //设置离开时间
double getTotalExpenses() const; //计算停车费用
//停车时间分钟数不足半小时按半小时计算,不足 1 小时按 1 小时计算
void output() const; //输出停车起始时间、费率及总费用
private:
double rate; //停车费率,按元/每小时计算
MyTime parkingTime; //开始停车时间
MyTime leavingTime; //离开时间
};
void ParkingCard::setParkingTime(const MyTime &time){
parkingTime = time;
}
ParkingCard 的 output 示例输出如下:
Total Expenses: 12.5
Parking Time: 09:20
Leaving Time: 11:35
Rate: 5
【提示】计算停车费用时,调用 parkingTime.getTimeSpan(leavingTime);可以
计算 2 个时间对象的时间差,返回 1 个时间对象;通过调用时间对象的 getHour
和 getMinute 可以获得对应的小时数和分钟数。在显示停车详细信息时,可以调
用 parkingTime 和 leavingTime 的 output 方法,而不用重复编写输出时间的处理
代码。
按下面的主程序测试 ParkingCard 类,检查结果是否正确。
int main(){
ParkingCard card(5);
card.setParkingTime(MyTime(9, 20)); //构造临时时间对象并作为参数
card.setLeavingTime(MyTime(11, 35));
cout<<"Expenses: "<<card.getTotalExpenses()<<endl;
cout<<"Detailed info:\n";
card.output();
return 0;
}
给出所有成员函数的定义
不知道你这个问题是否已经解决, 如果还没有解决的话:根据需求,我们需要定义一个 ParkingCard
类,并在其中定义计费函数 calculateFee()
,最后需要编写一个主程序对该类进行测试。
类成员函数:
ParkingCard(MyTime startTime, MyTime endTime);
构造函数,用来初始化停车计费卡片的属性。void setStartTime(MyTime startTime);
设置停车开始时间。MyTime getStartTime() const;
获取停车开始时间。void setEndTime(MyTime endTime);
设置停车结束时间。MyTime getEndTime() const;
获取停车结束时间。void calculateFee();
计算停车费用。double getFee() const;
获取停车费用。# include<iostream>
# include<cmath>
# include "mytime.h"
class ParkingCard
{
private:
MyTime startTime; // 起始时间
MyTime endTime; // 结束时间
double fee; // 停车费用
public:
ParkingCard(MyTime startTime, MyTime endTime)
{
this->startTime = startTime;
this->endTime = endTime;
this->fee = 0.0;
}
void setStartTime(MyTime startTime) //设置起始时间
{
this->startTime = startTime;
}
MyTime getStartTime() const //获取起始时间
{
return this->startTime;
}
void setEndTime(MyTime endTime) // 设置结束时间
{
this->endTime = endTime;
}
MyTime getEndTime() const // 获取结束时间
{
return this->endTime;
}
void calculateFee() // 计算停车费用
{
double start = this->startTime.getTotalSeconds();
double end = this->endTime.getTotalSeconds();
double time_diff = ceil((end - start) / 60.0);
if (time_diff <= 30)
{
this->fee = 0.0;
}
else if (time_diff <= 120)
{
this->fee = 10.0;
}
else
{
this->fee = (ceil((time_diff - 120) / 30.0) + 4) * 5.0;
}
}
double getFee() const // 获取停车费用
{
return this->fee;
}
};
# include<iostream>
# include "mytime.h"
# include "parkingcard.h"
using namespace std;
int main()
{
// 测试 ParkingCard 类
MyTime startTime(8, 0, 0);
MyTime endTime(18, 30, 0);
ParkingCard card(startTime, endTime);
cout << "起始时间:" << card.getStartTime().getHour() << "时" << card.getStartTime().getMinute() << "分" << card.getStartTime().getSecond() << "秒" << endl;
cout << "结束时间:" << card.getEndTime().getHour() << "时" << card.getEndTime().getMinute() << "分" << card.getEndTime().getSecond() << "秒" << endl;
card.calculateFee();
cout << "停车费用:" << card.getFee() << "元" << endl;
return 0;
}
运行结果:
起始时间:8时0分0秒
结束时间:18时30分0秒
停车费用:55元
完整代码请参见 ParkingCard 与 MyTime 。