双击离开,按车型计费,二分查找

This commit is contained in:
w-mj committed 2017-12-26 09:13:05 +08:00
1 parent 47bf8367f8
commit 45df7c452f
5 files changed
+63 -2

No files matched your search

+33 -1
View File
@@ -188,6 +188,38 @@ QPair<QString, int> ParkingLotManager::search(const QString& plate)
return qMakePair(QString("-1"), -1);
}
bool comp2(const Car* c1, const Car* c2) {
return c1->getPlateNumber() < c2->getPlateNumber();
}
int comp(const QString& p1, const Car* c2) {
return strcmp(p1.toStdString().c_str(), c2->getPlateNumber().toStdString().c_str());
}
QPair<QString, int> ParkingLotManager::biSearch(const QString &plate)
{
sort(m_all_cars.begin(), m_all_cars.end(), &comp2);
int left = 0, right = m_all_cars.size(), mid = m_all_cars.size() / 2;
while (left != right) {
int flag = comp(plate, m_all_cars.at(mid));
if (flag == -1) {
right = mid;
} else if (flag == 1) {
left = mid;
} else if (flag == 0) {
Car* c = m_all_cars.at(mid);
if (c->getStatus() == Car::Status::parking ||
c->getStatus() == Car::Status::moving)
return qMakePair(m_widgets.at(c->getTargetFloor())->getName(),
c->getNum());
else if (c->getStatus() == Car::Status::waiting)
return qMakePair(QString("0"), 0);
}
mid = (right + left) / 2;
}
return qMakePair(QString("-1"), -1);
}
void ParkingLotManager::showMode(bool enable)
{
if (enable)
@@ -284,7 +316,7 @@ void ParkingLotManager::requestIn(Car* car)
void ParkingLotManager::leave(Car* car)
{
int l = car->getCurrentFloor();
Log::i(QString("有车离开,当前共有%1个空车位").arg(m_pool.size()));
Log::i(QString("有车离开,已产生费用%1元,当前共有%2个空车位").arg(car->getFee()).arg(m_pool.size()));
callIn();
car->hide();
m_all_cars.removeOne(car);