鱼C论坛

 找回密码
 立即注册
查看: 2688|回复: 7

[已解决]求鱼油帮忙

[复制链接]
发表于 2018-4-16 18:15:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:某商场有一个100个车位的停车场,当车位未满时,等待的车辆可以进入并计时;当车位已满时,必须有车辆离开,等待的车辆才能进入;当车辆离开时计算停留的的时间,并且按照每小时1元收费。
汽车的输入信息格式可以是(进入/离开,车牌号,进入/离开时间),要求可以随时显示停车场内的车辆信息以及收费历史记录。
这道题目对我来说太难了,求大神帮忙!
最佳答案
2018-4-18 18:27:21
修复bug

main.cpp
  1. #include "CarParking.h"
  2. #include <iostream>

  3. CarParking car_parking;

  4. int main()
  5. {
  6.         car_parking.EnterParking(new Car("晋H·A1363"), "2018/04/18 15:24:31");
  7.         car_parking.EnterParking(new Car("晋H·YQ911"), "2018/04/18 15:43:52");

  8.         Car *car;
  9.        
  10.         car = car_parking.LeaveParking("晋H·YQ911", "2018/04/18 16:46:11");
  11.         //std::cout << car->license_plate_number << std::endl;
  12.         delete car;
  13.         car_parking.ParkingStatus();

  14.         car = car_parking.LeaveParking("晋H·A1363", "2018/04/18 16:47:37");
  15.         //std::cout << car->license_plate_number << std::endl;
  16.         delete car;
  17.         car_parking.ParkingStatus();

  18.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  19.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  20.         delete car;
  21.         car_parking.ParkingStatus();

  22.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  23.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  24.         delete car;
  25.         car_parking.ParkingStatus();

  26.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  27.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  28.         delete car;
  29.         car_parking.ParkingStatus();

  30.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  31.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  32.         delete car;
  33.         car_parking.ParkingStatus();

  34.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  35.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  36.         delete car;
  37.         car_parking.ParkingStatus();


  38.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  39.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  40.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  41.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  42.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  43.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  44.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  45.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  46.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  47.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  48.         car_parking.ParkingStatus();

  49.         car = car_parking.LeaveParking("?????????", "2018/04/18 16:47:37");
  50.         //std::cout << car->license_plate_number << std::endl;
  51.         delete car;
  52.         car_parking.ParkingStatus();
  53.        
  54.         car = car_parking.LeaveParking("?????????", "2018/04/18 16:47:37");
  55.         //std::cout << car->license_plate_number << std::endl;
  56.         delete car;
  57.         car_parking.ParkingStatus();
  58.         return 0;
  59. }
复制代码


CarParking.cpp
  1. #include "CarParking.h"

  2. #include <iostream>

  3. CarParking::CarParking(): history(parking_space_count)
  4. {
  5.         total_income = 0;
  6. }

  7. void CarParking::EnterParking(Car *car, std::string enter_time)
  8. {
  9.         waiting_queue.push(InfoNode(car, enter_time));

  10.         if(parking_space.size() < 5)
  11.         {
  12.                 parking_space.push_back(waiting_queue.front());
  13.                 waiting_queue.pop();
  14.         }
  15. }

  16. static int IteratorToIndex(std::vector<InfoNode> &v, std::vector<InfoNode>::iterator iter)
  17. {
  18.         return iter - v.begin();
  19. }

  20. // 在等待队列的车不能离开停车场^_^,这里也许需要改进,目前就这样了
  21. Car *CarParking::LeaveParking(const std::string &license_plate_number, const std::string leave_time)
  22. {
  23.         for(auto iter = parking_space.begin(); iter != parking_space.end(); ++iter)
  24.         {
  25.                 if(iter->car->license_plate_number == license_plate_number)
  26.                 {
  27.                         InfoNode in(iter->car, iter->enter_time);
  28.                         HistoryNode hn(*in.car, in.enter_time, leave_time);
  29.                         CollectionOfCharges(hn);
  30.                         history.at(IteratorToIndex(parking_space, iter)).push_back(hn);
  31.                        
  32.                         parking_space.erase(iter);


  33.                         // 如果等待队列有车,现在有空位了
  34.                         // 这里处理进入停车场和离开停车场的车位有点问题,目前就这样了
  35.                         // 也许停车位该用数组?
  36.                         if(waiting_queue.size() != 0)
  37.                         {
  38.                                 parking_space.push_back(waiting_queue.front());
  39.                                 waiting_queue.pop();
  40.                         }

  41.                         return in.car;
  42.                 }
  43.         }

  44.         return NULL;
  45. }

  46. void CarParking::ParkingStatus() const
  47. {
  48.         std::cout << "总收入:" << total_income << std::endl;
  49.         ViewHistory();
  50. }

  51. void CarParking::ViewHistory() const
  52. {
  53.         std::cout << "**************************************************" << std::endl;
  54.         std::cout << "历史记录:" << std::endl;
  55.         for(int i = 0; i < parking_space_count; ++i)
  56.         {
  57.                 if(history.at(i).size() == 0)
  58.                         continue;

  59.                 std::cout << "第 " << i << "号停车位:" << std::endl;
  60.                 for(auto iter = history.at(i).begin(); iter != history.at(i).end(); ++iter)
  61.                 {
  62.                         std::cout << std::endl;
  63.                         std::cout << "车牌号:" << iter->car.license_plate_number << std::endl;
  64.                         std::cout << "进入时间:" << iter->enter_time << std::endl;
  65.                         std::cout << "离开时间:" << iter->leave_time << std::endl;
  66.                         std::cout << std::endl;
  67.                 }
  68.         }
  69.         std::cout << "**************************************************" << std::endl;
  70. }

  71. void CarParking::CollectionOfCharges(HistoryNode & hn)
  72. {
  73. }
复制代码


CarParking.h
  1. #ifndef _CAR_PARKING_HPP_
  2. #define _CAR_PARKING_HPP_

  3. #include <queue>
  4. #include <string>
  5. #include <vector>

  6. class Car
  7. {
  8. public:
  9.         const std::string license_plate_number;

  10.         Car(std::string license_plate_number): license_plate_number(license_plate_number){}
  11. };


  12. class InfoNode
  13. {
  14. public:
  15.         Car *car;
  16.         const std::string enter_time;
  17.         InfoNode(Car *car, std::string enter_time): enter_time(enter_time){ this->car = car; }
  18.         InfoNode &operator=(const InfoNode &dest)
  19.         {
  20.                 this->car = dest.car;
  21.                 return *this;
  22.         }
  23. };

  24. class HistoryNode
  25. {
  26. public:
  27.         const Car car;
  28.         const std::string enter_time;
  29.         const std::string leave_time;
  30.         HistoryNode(const Car car, const std::string enter_time, const std::string leave_time): car(car), enter_time(enter_time), leave_time(leave_time){}
  31. };

  32. class CarParking
  33. {
  34. public:
  35.         const int parking_space_count = 5;        // 设小点,方便调试

  36.         CarParking();

  37.         void EnterParking(Car *car, std::string enter_time);
  38.         Car *LeaveParking(const std::string &license_plate_number, const std::string leave_time);
  39.         void ParkingStatus() const;
  40.         void ViewHistory() const;
  41. private:
  42.         std::vector<std::vector<HistoryNode>> history;
  43.         std::queue<InfoNode> waiting_queue;
  44.         std::vector<InfoNode> parking_space;
  45.         long total_income;

  46.         void CollectionOfCharges(HistoryNode &hn);
  47. };

  48. #endif
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-17 22:33:53 | 显示全部楼层

回帖奖励 +5 鱼币

我也不会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-18 10:57:44 | 显示全部楼层

回帖奖励 +5 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-18 18:12:02 | 显示全部楼层

回帖奖励 +5 鱼币

360截图17710407302953.png

还剩CollectionOfCharges函数没写,你自己先试着写一写,我再研究研究

main.cpp
  1. #include "CarParking.h"
  2. #include <iostream>

  3. CarParking car_parking;

  4. int main()
  5. {
  6.         car_parking.EnterParking(new Car("晋H·A1363"), "2018/04/18 15:24:31");
  7.         car_parking.EnterParking(new Car("晋H·YQ911"), "2018/04/18 15:43:52");

  8.         Car *car;
  9.        
  10.         car = car_parking.LeaveParking("晋H·YQ911", "2018/04/18 16:46:11");
  11.         //std::cout << car->license_plate_number << std::endl;
  12.         delete car;
  13.         car_parking.ParkingStatus();

  14.         car = car_parking.LeaveParking("晋H·A1363", "2018/04/18 16:47:37");
  15.         //std::cout << car->license_plate_number << std::endl;
  16.         delete car;
  17.         car_parking.ParkingStatus();

  18.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  19.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  20.         delete car;
  21.         car_parking.ParkingStatus();

  22.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  23.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  24.         delete car;
  25.         car_parking.ParkingStatus();

  26.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  27.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  28.         delete car;
  29.         car_parking.ParkingStatus();

  30.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  31.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  32.         delete car;
  33.         car_parking.ParkingStatus();

  34.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  35.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  36.         delete car;
  37.         car_parking.ParkingStatus();


  38.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  39.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  40.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  41.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  42.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  43.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  44.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  45.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  46.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  47.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  48.         car_parking.ParkingStatus();

  49.         return 0;
  50. }
复制代码


CarParking.cpp
  1. #include "CarParking.h"

  2. #include <iostream>

  3. CarParking::CarParking(): history(parking_space)
  4. {
  5.         total_income = 0;
  6. }

  7. void CarParking::EnterParking(Car *car, std::string enter_time)
  8. {
  9.         waiting_queue.push(InfoNode(car, enter_time));

  10.         if(info.size() < 5)
  11.         {
  12.                 info.push_back(waiting_queue.front());
  13.                 waiting_queue.pop();
  14.         }
  15. }

  16. static int IteratorToIndex(std::vector<InfoNode> &v, std::vector<InfoNode>::iterator iter)
  17. {
  18.         return iter - v.begin();
  19. }

  20. // 在等待队列的车不能离开停车场^_^,这里也许需要改进,目前就这样了
  21. Car *CarParking::LeaveParking(const std::string &license_plate_number, const std::string leave_time)
  22. {
  23.         for(auto iter = info.begin(); iter != info.end(); ++iter)
  24.         {
  25.                 if(iter->car->license_plate_number == license_plate_number)
  26.                 {
  27.                         InfoNode in(iter->car, iter->enter_time);
  28.                         HistoryNode hn(*in.car, in.enter_time, leave_time);
  29.                         CollectionOfCharges(hn);
  30.                         history.at(IteratorToIndex(info, iter)).push_back(hn);
  31.                        
  32.                         info.erase(iter);
  33.                         return in.car;
  34.                 }
  35.         }

  36.         return NULL;
  37. }

  38. void CarParking::ParkingStatus() const
  39. {
  40.         std::cout << "总收入:" << total_income << std::endl;
  41.         ViewHistory();
  42. }

  43. void CarParking::ViewHistory() const
  44. {
  45.         std::cout << "**************************************************" << std::endl;
  46.         std::cout << "历史记录:" << std::endl;
  47.         for(int i = 0; i < parking_space; ++i)
  48.         {
  49.                 if(history.at(i).size() == 0)
  50.                         continue;

  51.                 std::cout << "第 " << i << "号停车位:" << std::endl;
  52.                 for(auto iter = history.at(i).begin(); iter != history.at(i).end(); ++iter)
  53.                 {
  54.                         std::cout << std::endl;
  55.                         std::cout << "车牌号:" << iter->car.license_plate_number << std::endl;
  56.                         std::cout << "进入时间:" << iter->enter_time << std::endl;
  57.                         std::cout << "离开时间:" << iter->leave_time << std::endl;
  58.                         std::cout << std::endl;
  59.                 }
  60.         }
  61.         std::cout << "**************************************************" << std::endl;
  62. }

  63. void CarParking::CollectionOfCharges(HistoryNode & hn)
  64. {
  65. }
复制代码


CarParking.h
  1. #ifndef _CAR_PARKING_HPP_
  2. #define _CAR_PARKING_HPP_

  3. #include <queue>
  4. #include <string>
  5. #include <vector>

  6. class Car
  7. {
  8. public:
  9.         const std::string license_plate_number;

  10.         Car(std::string license_plate_number): license_plate_number(license_plate_number){}
  11. };


  12. class InfoNode
  13. {
  14. public:
  15.         Car *car;
  16.         const std::string enter_time;
  17.         InfoNode(Car *car, std::string enter_time): enter_time(enter_time){ this->car = car; }
  18.         InfoNode &operator=(const InfoNode &dest)
  19.         {
  20.                 this->car = dest.car;
  21.                 return *this;
  22.         }
  23. };

  24. class HistoryNode
  25. {
  26. public:
  27.         const Car car;
  28.         const std::string enter_time;
  29.         const std::string leave_time;
  30.         HistoryNode(const Car car, const std::string enter_time, const std::string leave_time): car(car), enter_time(enter_time), leave_time(leave_time){}
  31. };

  32. class CarParking
  33. {
  34. public:
  35.         const int parking_space = 5;        // 设小点,方便调试

  36.         CarParking();

  37.         void EnterParking(Car *car, std::string enter_time);
  38.         Car *LeaveParking(const std::string &license_plate_number, const std::string leave_time);
  39.         void ParkingStatus() const;
  40.         void ViewHistory() const;
  41. private:
  42.         std::vector<std::vector<HistoryNode>> history;
  43.         std::queue<InfoNode> waiting_queue;
  44.         std::vector<InfoNode> info;
  45.         long total_income;

  46.         void CollectionOfCharges(HistoryNode &hn);
  47. };

  48. #endif
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
kykio + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-18 18:14:25 | 显示全部楼层
  1. 总收入:0
  2. **************************************************
  3. 历史记录:
  4. 第 1号停车位:

  5. 车牌号:晋H·YQ911
  6. 进入时间:2018/04/18 15:43:52
  7. 离开时间:2018/04/18 16:46:11

  8. **************************************************
  9. 总收入:0
  10. **************************************************
  11. 历史记录:
  12. 第 0号停车位:

  13. 车牌号:晋H·A1363
  14. 进入时间:2018/04/18 15:24:31
  15. 离开时间:2018/04/18 16:47:37

  16. 第 1号停车位:

  17. 车牌号:晋H·YQ911
  18. 进入时间:2018/04/18 15:43:52
  19. 离开时间:2018/04/18 16:46:11

  20. **************************************************
  21. 总收入:0
  22. **************************************************
  23. 历史记录:
  24. 第 0号停车位:

  25. 车牌号:晋H·A1363
  26. 进入时间:2018/04/18 15:24:31
  27. 离开时间:2018/04/18 16:47:37


  28. 车牌号:?????????
  29. 进入时间:2018/04/18 17:56:39
  30. 离开时间:2018/04/18 17:57:01

  31. 第 1号停车位:

  32. 车牌号:晋H·YQ911
  33. 进入时间:2018/04/18 15:43:52
  34. 离开时间:2018/04/18 16:46:11

  35. **************************************************
  36. 总收入:0
  37. **************************************************
  38. 历史记录:
  39. 第 0号停车位:

  40. 车牌号:晋H·A1363
  41. 进入时间:2018/04/18 15:24:31
  42. 离开时间:2018/04/18 16:47:37


  43. 车牌号:?????????
  44. 进入时间:2018/04/18 17:56:39
  45. 离开时间:2018/04/18 17:57:01


  46. 车牌号:?????????
  47. 进入时间:2018/04/18 17:56:39
  48. 离开时间:2018/04/18 17:57:01

  49. 第 1号停车位:

  50. 车牌号:晋H·YQ911
  51. 进入时间:2018/04/18 15:43:52
  52. 离开时间:2018/04/18 16:46:11

  53. **************************************************
  54. 总收入:0
  55. **************************************************
  56. 历史记录:
  57. 第 0号停车位:

  58. 车牌号:晋H·A1363
  59. 进入时间:2018/04/18 15:24:31
  60. 离开时间:2018/04/18 16:47:37


  61. 车牌号:?????????
  62. 进入时间:2018/04/18 17:56:39
  63. 离开时间:2018/04/18 17:57:01


  64. 车牌号:?????????
  65. 进入时间:2018/04/18 17:56:39
  66. 离开时间:2018/04/18 17:57:01


  67. 车牌号:?????????
  68. 进入时间:2018/04/18 17:56:39
  69. 离开时间:2018/04/18 17:57:01

  70. 第 1号停车位:

  71. 车牌号:晋H·YQ911
  72. 进入时间:2018/04/18 15:43:52
  73. 离开时间:2018/04/18 16:46:11

  74. **************************************************
  75. 总收入:0
  76. **************************************************
  77. 历史记录:
  78. 第 0号停车位:

  79. 车牌号:晋H·A1363
  80. 进入时间:2018/04/18 15:24:31
  81. 离开时间:2018/04/18 16:47:37


  82. 车牌号:?????????
  83. 进入时间:2018/04/18 17:56:39
  84. 离开时间:2018/04/18 17:57:01


  85. 车牌号:?????????
  86. 进入时间:2018/04/18 17:56:39
  87. 离开时间:2018/04/18 17:57:01


  88. 车牌号:?????????
  89. 进入时间:2018/04/18 17:56:39
  90. 离开时间:2018/04/18 17:57:01


  91. 车牌号:?????????
  92. 进入时间:2018/04/18 17:56:39
  93. 离开时间:2018/04/18 17:57:01

  94. 第 1号停车位:

  95. 车牌号:晋H·YQ911
  96. 进入时间:2018/04/18 15:43:52
  97. 离开时间:2018/04/18 16:46:11

  98. **************************************************
  99. 总收入:0
  100. **************************************************
  101. 历史记录:
  102. 第 0号停车位:

  103. 车牌号:晋H·A1363
  104. 进入时间:2018/04/18 15:24:31
  105. 离开时间:2018/04/18 16:47:37


  106. 车牌号:?????????
  107. 进入时间:2018/04/18 17:56:39
  108. 离开时间:2018/04/18 17:57:01


  109. 车牌号:?????????
  110. 进入时间:2018/04/18 17:56:39
  111. 离开时间:2018/04/18 17:57:01


  112. 车牌号:?????????
  113. 进入时间:2018/04/18 17:56:39
  114. 离开时间:2018/04/18 17:57:01


  115. 车牌号:?????????
  116. 进入时间:2018/04/18 17:56:39
  117. 离开时间:2018/04/18 17:57:01


  118. 车牌号:?????????
  119. 进入时间:2018/04/18 17:56:39
  120. 离开时间:2018/04/18 17:57:01

  121. 第 1号停车位:

  122. 车牌号:晋H·YQ911
  123. 进入时间:2018/04/18 15:43:52
  124. 离开时间:2018/04/18 16:46:11

  125. **************************************************
  126. 总收入:0
  127. **************************************************
  128. 历史记录:
  129. 第 0号停车位:

  130. 车牌号:晋H·A1363
  131. 进入时间:2018/04/18 15:24:31
  132. 离开时间:2018/04/18 16:47:37


  133. 车牌号:?????????
  134. 进入时间:2018/04/18 17:56:39
  135. 离开时间:2018/04/18 17:57:01


  136. 车牌号:?????????
  137. 进入时间:2018/04/18 17:56:39
  138. 离开时间:2018/04/18 17:57:01


  139. 车牌号:?????????
  140. 进入时间:2018/04/18 17:56:39
  141. 离开时间:2018/04/18 17:57:01


  142. 车牌号:?????????
  143. 进入时间:2018/04/18 17:56:39
  144. 离开时间:2018/04/18 17:57:01


  145. 车牌号:?????????
  146. 进入时间:2018/04/18 17:56:39
  147. 离开时间:2018/04/18 17:57:01

  148. 第 1号停车位:

  149. 车牌号:晋H·YQ911
  150. 进入时间:2018/04/18 15:43:52
  151. 离开时间:2018/04/18 16:46:11

  152. **************************************************
  153. 请按任意键继续. . .
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
kykio + 5 + 5 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-18 18:27:21 | 显示全部楼层    本楼为最佳答案   
修复bug

main.cpp
  1. #include "CarParking.h"
  2. #include <iostream>

  3. CarParking car_parking;

  4. int main()
  5. {
  6.         car_parking.EnterParking(new Car("晋H·A1363"), "2018/04/18 15:24:31");
  7.         car_parking.EnterParking(new Car("晋H·YQ911"), "2018/04/18 15:43:52");

  8.         Car *car;
  9.        
  10.         car = car_parking.LeaveParking("晋H·YQ911", "2018/04/18 16:46:11");
  11.         //std::cout << car->license_plate_number << std::endl;
  12.         delete car;
  13.         car_parking.ParkingStatus();

  14.         car = car_parking.LeaveParking("晋H·A1363", "2018/04/18 16:47:37");
  15.         //std::cout << car->license_plate_number << std::endl;
  16.         delete car;
  17.         car_parking.ParkingStatus();

  18.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  19.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  20.         delete car;
  21.         car_parking.ParkingStatus();

  22.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  23.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  24.         delete car;
  25.         car_parking.ParkingStatus();

  26.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  27.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  28.         delete car;
  29.         car_parking.ParkingStatus();

  30.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  31.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  32.         delete car;
  33.         car_parking.ParkingStatus();

  34.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  35.         car = car_parking.LeaveParking("?????????", "2018/04/18 17:57:01");
  36.         delete car;
  37.         car_parking.ParkingStatus();


  38.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  39.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  40.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  41.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  42.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  43.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  44.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  45.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  46.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  47.         car_parking.EnterParking(new Car("?????????"), "2018/04/18 17:56:39");
  48.         car_parking.ParkingStatus();

  49.         car = car_parking.LeaveParking("?????????", "2018/04/18 16:47:37");
  50.         //std::cout << car->license_plate_number << std::endl;
  51.         delete car;
  52.         car_parking.ParkingStatus();
  53.        
  54.         car = car_parking.LeaveParking("?????????", "2018/04/18 16:47:37");
  55.         //std::cout << car->license_plate_number << std::endl;
  56.         delete car;
  57.         car_parking.ParkingStatus();
  58.         return 0;
  59. }
复制代码


CarParking.cpp
  1. #include "CarParking.h"

  2. #include <iostream>

  3. CarParking::CarParking(): history(parking_space_count)
  4. {
  5.         total_income = 0;
  6. }

  7. void CarParking::EnterParking(Car *car, std::string enter_time)
  8. {
  9.         waiting_queue.push(InfoNode(car, enter_time));

  10.         if(parking_space.size() < 5)
  11.         {
  12.                 parking_space.push_back(waiting_queue.front());
  13.                 waiting_queue.pop();
  14.         }
  15. }

  16. static int IteratorToIndex(std::vector<InfoNode> &v, std::vector<InfoNode>::iterator iter)
  17. {
  18.         return iter - v.begin();
  19. }

  20. // 在等待队列的车不能离开停车场^_^,这里也许需要改进,目前就这样了
  21. Car *CarParking::LeaveParking(const std::string &license_plate_number, const std::string leave_time)
  22. {
  23.         for(auto iter = parking_space.begin(); iter != parking_space.end(); ++iter)
  24.         {
  25.                 if(iter->car->license_plate_number == license_plate_number)
  26.                 {
  27.                         InfoNode in(iter->car, iter->enter_time);
  28.                         HistoryNode hn(*in.car, in.enter_time, leave_time);
  29.                         CollectionOfCharges(hn);
  30.                         history.at(IteratorToIndex(parking_space, iter)).push_back(hn);
  31.                        
  32.                         parking_space.erase(iter);


  33.                         // 如果等待队列有车,现在有空位了
  34.                         // 这里处理进入停车场和离开停车场的车位有点问题,目前就这样了
  35.                         // 也许停车位该用数组?
  36.                         if(waiting_queue.size() != 0)
  37.                         {
  38.                                 parking_space.push_back(waiting_queue.front());
  39.                                 waiting_queue.pop();
  40.                         }

  41.                         return in.car;
  42.                 }
  43.         }

  44.         return NULL;
  45. }

  46. void CarParking::ParkingStatus() const
  47. {
  48.         std::cout << "总收入:" << total_income << std::endl;
  49.         ViewHistory();
  50. }

  51. void CarParking::ViewHistory() const
  52. {
  53.         std::cout << "**************************************************" << std::endl;
  54.         std::cout << "历史记录:" << std::endl;
  55.         for(int i = 0; i < parking_space_count; ++i)
  56.         {
  57.                 if(history.at(i).size() == 0)
  58.                         continue;

  59.                 std::cout << "第 " << i << "号停车位:" << std::endl;
  60.                 for(auto iter = history.at(i).begin(); iter != history.at(i).end(); ++iter)
  61.                 {
  62.                         std::cout << std::endl;
  63.                         std::cout << "车牌号:" << iter->car.license_plate_number << std::endl;
  64.                         std::cout << "进入时间:" << iter->enter_time << std::endl;
  65.                         std::cout << "离开时间:" << iter->leave_time << std::endl;
  66.                         std::cout << std::endl;
  67.                 }
  68.         }
  69.         std::cout << "**************************************************" << std::endl;
  70. }

  71. void CarParking::CollectionOfCharges(HistoryNode & hn)
  72. {
  73. }
复制代码


CarParking.h
  1. #ifndef _CAR_PARKING_HPP_
  2. #define _CAR_PARKING_HPP_

  3. #include <queue>
  4. #include <string>
  5. #include <vector>

  6. class Car
  7. {
  8. public:
  9.         const std::string license_plate_number;

  10.         Car(std::string license_plate_number): license_plate_number(license_plate_number){}
  11. };


  12. class InfoNode
  13. {
  14. public:
  15.         Car *car;
  16.         const std::string enter_time;
  17.         InfoNode(Car *car, std::string enter_time): enter_time(enter_time){ this->car = car; }
  18.         InfoNode &operator=(const InfoNode &dest)
  19.         {
  20.                 this->car = dest.car;
  21.                 return *this;
  22.         }
  23. };

  24. class HistoryNode
  25. {
  26. public:
  27.         const Car car;
  28.         const std::string enter_time;
  29.         const std::string leave_time;
  30.         HistoryNode(const Car car, const std::string enter_time, const std::string leave_time): car(car), enter_time(enter_time), leave_time(leave_time){}
  31. };

  32. class CarParking
  33. {
  34. public:
  35.         const int parking_space_count = 5;        // 设小点,方便调试

  36.         CarParking();

  37.         void EnterParking(Car *car, std::string enter_time);
  38.         Car *LeaveParking(const std::string &license_plate_number, const std::string leave_time);
  39.         void ParkingStatus() const;
  40.         void ViewHistory() const;
  41. private:
  42.         std::vector<std::vector<HistoryNode>> history;
  43.         std::queue<InfoNode> waiting_queue;
  44.         std::vector<InfoNode> parking_space;
  45.         long total_income;

  46.         void CollectionOfCharges(HistoryNode &hn);
  47. };

  48. #endif
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
kykio + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-18 21:51:10 | 显示全部楼层

回帖奖励 +5 鱼币

对不起
还有楼上的同学真厉害,我也要学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-18 22:48:30 | 显示全部楼层

回帖奖励 +5 鱼币

太难了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 20:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表