停车场收费系统
实现:输入停车的开始时间和结束时间,得到总停车时间(小时)
Time.hpp文件
//DateTime.hpp
class DateTime {
public:
void showTime();
void setTime();
double diff(const DateTime &T);
private:
long normalize() const;
long countdays() const;
int year;
int mon;
int day;
int hour;
int minute;
int second;
};
Time.cpp文件
//DateTime.cpp
#include "Time.hpp"
#include <iostream>
using namespace std;
void DateTime::showTime() {
cout << year << ":" << mon << ":" << day << ":" << hour << ":" << minute << ":" << second;
cout << endl;
}
void DateTime::setTime() {
do {
cin >> year >> mon >> day >> hour >> minute >> second;
} while (mon < 1 || mon > 12 || day < 1 || day > 31 || hour < 0 || hour > 24 || minute < 0 || minute > 59 || second < 0 || second > 59);
}
double DateTime::diff(const DateTime &T) { //计算停车小时
long d = normalize() - T.normalize() - 60; //一小时内免费,故减去1小时
if (d < 0)
return 0;
double h = d / 60, m = d % 60;
if (m < 15)
return h;
if (m >= 15 && m < 30)
return h + 0.5;
if (m >= 30 && m < 60)
return h + 1;
}
long DateTime::normalize() const { //天数转分钟
int d = countdays();
return (hour + d * 24) * 60 + minute;
}
long DateTime::countdays() const { //统计天数
long sum = 0; //sum记录天数
int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for (int i = 2000; i < year; i++) { //年份转天数,从2000年开始计数
if ((i % 4 == 4 && i % 100 != 0) || i % 400 == 0)
sum += 366;
else
sum += 365;
}
for (int i = 1; i < mon; i++) { //月份转天数
if (i == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
sum += 29;
else
sum += days[i - 1];
}
sum += day;
return sum;
}
Parking.cpp文件
#include "Time.hpp"
#include <iostream>
using namespace std;
int main() {
DateTime arriveTime, leaveTime;
double parkingTime, Fee;
arriveTime.setTime();
arriveTime.showTime();
leaveTime.setTime();
leaveTime.showTime();
parkingTime = leaveTime.diff(arriveTime);
cout << "parkingtime:" << parkingTime << "(h)" << endl;
getchar();
getchar();
return 0;
}
示例:
输入:(年/月/日/小时/分钟/秒)
2021 3 19 15 32 02
2021 4 10 14 56 20
输出:(小时)
526.5(h)
停车时间只计算到分钟,忽略秒数