停车场收费系统

停车场收费系统

实现:输入停车的开始时间和结束时间,得到总停车时间(小时)

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)

停车时间只计算到分钟,忽略秒数

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值