可以用c++类和文件写个车辆停车计费系统吗
时间: 2023-11-22 15:54:36 浏览: 66
当然可以。以下是一个简单的车辆停车计费系统的C++类和文件实现:
```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <ctime>
using namespace std;
class ParkingRecord {
public:
ParkingRecord(int id, time_t start_time) : id_(id), start_time_(start_time) {}
int get_id() const { return id_; }
time_t get_start_time() const { return start_time_; }
double get_duration() const {
time_t now = time(NULL);
return difftime(now, start_time_) / 3600.0;
}
void print() const {
cout << "车辆编号:" << id_ << endl;
cout << "停车开始时间:" << ctime(&start_time_);
cout << "停车时长:" << get_duration() << "小时" << endl;
cout << "停车费用:" << get_fee() << "元" << endl;
}
double get_fee() const {
double duration = get_duration();
if (duration <= 1.0) {
return 5.0;
} else {
return 5.0 + (duration - 1.0) * 3.0;
}
}
private:
int id_;
time_t start_time_;
};
class ParkingLot {
public:
ParkingLot(const string& file_name) : file_name_(file_name) {
load_records();
}
~ParkingLot() {
save_records();
}
void park(int id) {
time_t now = time(NULL);
records_.push_back(ParkingRecord(id, now));
cout << "车辆编号为 " << id << " 的车辆停车成功" << endl;
}
void leave(int id) {
bool found = false;
for (auto iter = records_.begin(); iter != records_.end(); ++iter) {
if (iter->get_id() == id) {
iter->print();
records_.erase(iter);
found = true;
break;
}
}
if (!found) {
cout << "没有找到车辆编号为 " << id << " 的车辆" << endl;
}
}
private:
void load_records() {
ifstream fin(file_name_);
if (fin.is_open()) {
while (!fin.eof()) {
int id;
time_t start_time;
fin >> id >> start_time;
if (id > 0 && start_time > 0) {
records_.push_back(ParkingRecord(id, start_time));
}
}
fin.close();
}
}
void save_records() {
ofstream fout(file_name_);
if (fout.is_open()) {
for (auto record : records_) {
fout << record.get_id() << " " << record.get_start_time() << endl;
}
fout.close();
}
}
string file_name_;
vector<ParkingRecord> records_;
};
int main() {
ParkingLot lot("records.txt");
while (true) {
cout << "请选择操作:" << endl;
cout << "1. 停车" << endl;
cout << "2. 离开" << endl;
cout << "3. 退出" << endl;
int choice;
cin >> choice;
if (choice == 1) {
cout << "请输入车辆编号:";
int id;
cin >> id;
lot.park(id);
} else if (choice == 2) {
cout << "请输入车辆编号:";
int id;
cin >> id;
lot.leave(id);
} else if (choice == 3) {
break;
} else {
cout << "无效选择,请重新输入" << endl;
}
}
return 0;
}
```
在该实现中,我们使用了两个类:`ParkingRecord` 和 `ParkingLot`。前者表示停车记录,后者表示停车场。`ParkingRecord` 类中包含了车辆的编号、停车开始时间等信息,以及计算停车费用的方法。`ParkingLot` 类中包含了所有的停车记录,并提供了停车和离开的方法。在程序运行时,用户可以选择停车或离开车场,程序会根据用户的选择调用相应的方法。
停车记录保存在一个文本文件中,程序启动时会从该文件中加载之前的停车记录,程序结束时会将新的停车记录保存到该文件中。这样即使程序关闭,之前的停车记录也不会丢失。
以上就是一个简单的车辆停车计费系统的C++类和文件实现。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)