From d803045fc59f3b827395052f02d1a7444e3c6af4 Mon Sep 17 00:00:00 2001 From: w-mj Date: Mon, 25 Dec 2017 21:34:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8EUI=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- car.cpp | 20 +++++++++++++++++-- car.h | 1 + monitor.cpp | 20 +++++++++++++------ parkingLotManager.cpp | 46 ++++++++++++++++++++++++++++++++++++++----- parkingLotManager.h | 9 ++++++--- 5 files changed, 80 insertions(+), 16 deletions(-) diff --git a/car.cpp b/car.cpp index a19d1b0..30b186e 100644 --- a/car.cpp +++ b/car.cpp @@ -1,7 +1,20 @@ #include "car.h" #include "logwindow.h" #include -//#include +#include +#include + +QString reaomPlate() { + QString province = "京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新港澳台"; + QString result; + result.append(province.at(rand() % province.size())); + result.append('A' + (rand() % 26)); + result.append('0' + (rand() % 10)); + result.append('0' + (rand() % 10)); + result.append('0' + (rand() % 10)); + result.append('0' + (rand() % 10)); + return result; +} Car::Car(ParkingLotManager * manager, QGraphicsItem *parent, int dir, Car::Color color) : @@ -41,7 +54,7 @@ Car::Car(ParkingLotManager * manager, QGraphicsItem *parent, int dir, Car::Color connect(this, &Car::out, manager, &ParkingLotManager::requestOut); connect(this, &Car::back, manager, &ParkingLotManager::requestBack); // connect(this, &Car::entry, manager, &ParkingLotManager::leave); - m_number = "1234"; + m_number = reaomPlate(); } @@ -277,6 +290,9 @@ void Car::leaveProbability(int p) emit out(this, -1); } +void Car::setPlateNumber(const QString &number) { + this->m_number = number; +} int Car::getTargetFloor() const { return targetFloor; diff --git a/car.h b/car.h index e7e5a9f..f94e98b 100644 --- a/car.h +++ b/car.h @@ -73,6 +73,7 @@ public: int type() const; void leaveProbability(int p); + void setPlateNumber(const QString &number); private: Status m_status; diff --git a/monitor.cpp b/monitor.cpp index 9afc63a..2df52ee 100644 --- a/monitor.cpp +++ b/monitor.cpp @@ -7,15 +7,16 @@ #include "carlist.h" #include "logwindow.h" #include "utils.h" +#include Monitor::Monitor(MainWindow *parent) : QWidget(parent), ui(new Ui::Monitor) { - - - ui->setupUi(this); + ui->selectColor->addItem("粉车"); + ui->selectColor->addItem("红车"); + ui->selectColor->addItem("黄车"); QGraphicsScene *scene = new QGraphicsScene(this); // 创建场景 ParkingLotManager *pk = new ParkingLotManager(this, scene); QObject::connect(pk, &ParkingLotManager::enableUpButton, ui->upStairButton, &QPushButton::setEnabled); @@ -33,10 +34,17 @@ Monitor::Monitor(MainWindow *parent) : pk->drawPath(ui->placeNum1->text().toInt(), ui->placeNum2->text().toInt()); }); - QObject::connect(ui->addCar, &QPushButton::clicked, [this]() { - Log::i(checkPlate(this->ui->plateNumBox->text())==true?"true":"false"); + QObject::connect(ui->addCar, &QPushButton::clicked, [this, pk]() { + QString p = this->ui->plateNumBox->text(); + if(checkPlate(p) == false) { + QMessageBox::warning(this, "警告","车牌不合规则"); + } else if (pk->checkSame(p)) { + QMessageBox::warning(this, "警告", "车牌重复"); + } else { + pk->addCar(p, ui->selectColor->currentIndex(), -1); + } }); - QObject::connect(ui->random, &QPushButton::clicked, pk, &ParkingLotManager::addCar); + QObject::connect(ui->random, &QPushButton::clicked, pk, &ParkingLotManager::addCarR); pk->showParkingLot(); ui->view->setScene(scene); diff --git a/parkingLotManager.cpp b/parkingLotManager.cpp index 1eb78a2..bd5e954 100644 --- a/parkingLotManager.cpp +++ b/parkingLotManager.cpp @@ -60,7 +60,7 @@ ParkingLotManager::ParkingLotManager(QObject* objectParent, QGraphicsScene* scen QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout, this, &ParkingLotManager::periodWork); - timer->start(1000); // 轮询 + // timer->start(1000); // 轮询 } void ParkingLotManager::showParkingLot(uint pos) @@ -159,6 +159,14 @@ void ParkingLotManager::drawPath(Path* p) } } +bool ParkingLotManager::checkSame(const QString &plate) +{ + for (auto c: m_all_cars) + if (c->getPlateNumber() == plate) + return true; + return false; +} + QString ParkingLotManager::getParkingLotName(int pos) { return m_widgets.at(pos)->getName(); @@ -255,11 +263,11 @@ void ParkingLotManager::leave(Car* car) emit setLoad(QString::number(m_capacity.at(m_current_floor) - m_num_of_cars[m_current_floor])); } -void ParkingLotManager::addCar(int entry) +void ParkingLotManager::addCarR() { Log::i("生成车"); - if (entry == -1) - entry = (rand() % m_num_of_entry); + + int entry = (rand() % m_num_of_entry); Car *car = new Car(this); car->setEntryNum(entry + 1); @@ -276,6 +284,27 @@ void ParkingLotManager::addCar(int entry) car->hide(); } +void ParkingLotManager::addCar(QString plate, int color, int entry) +{ + Log::i("生成车"); + if (entry == -1) + entry = (rand() % m_num_of_entry) + 1; + Car *car = new Car(this, nullptr, 0, static_cast(color)); + car->setPlateNumber(plate); + car->setEntryNum(entry); + m_waitting[entry-1].append(car); + Path *p = m_graph[1]->findPath(NODE_TYPE::entry, entry, NODE_TYPE::queueHead, entry); + car->setPath(p); + car->setCurrentFloor(1); // 刚添加的车一定是在一层 + car->setTargetFloor(1); + car->followPath(); + car->setStatus(Car::waiting); + m_all_cars.append(car); + m_scene->addItem(car); + if (m_current_floor != 1) + car->hide(); +} + void ParkingLotManager::showMargin(bool enable) { // qDebug() << "show margin" << enable; @@ -302,6 +331,13 @@ void ParkingLotManager::banSpace(bool banned, int l , int n) void ParkingLotManager::generatePool(bool sequence) { + m_pool.append(qMakePair(1, 0)); + m_pool.append(qMakePair(1, 1)); + m_pool.append(qMakePair(1, 2)); + m_pool.append(qMakePair(1, 3)); + m_pool.append(qMakePair(1, 4)); + return; + for (int l = m_num_of_layer - 1; l >= 0; l--) { for (int n = 0; n < m_capacity[l]; n++) { if (GET_SITUATION(l, n) == FREE) { @@ -318,7 +354,7 @@ void ParkingLotManager::periodWork() { int generateProbability = 80; if (rand() % 100 + 1 < generateProbability) - addCar(); + addCarR(); for (auto c: m_all_cars) { if (c->getStatus() == Car::parking) c->leaveProbability(2); diff --git a/parkingLotManager.h b/parkingLotManager.h index 72a9366..915a4a1 100644 --- a/parkingLotManager.h +++ b/parkingLotManager.h @@ -33,6 +33,8 @@ public: void drawPath(int n1, int n2); void drawPath(Path* p); + bool checkSame(const QString& plate); + QString getParkingLotName(int pos); public slots: @@ -41,7 +43,8 @@ public slots: void requestStair(Car* car); void requestBack(Car* car); void leave(Car* car); - void addCar(int entry = -1); + void addCarR(); + void addCar(QString plate, int color, int entry); void showMargin(bool enable); void showGraph(bool enable); @@ -54,8 +57,8 @@ private: QVector m_num_of_cars; // 每一层当前停的车数量 QVector > m_cars; // 停在每一层的车 QVector >m_waitting; // 在每个入口等待的车 - QList m_all_cars; - QVector m_graph; + QList m_all_cars; // 所有的车 + QVector m_graph; // 图 QVector m_graph_pixmap; QStringList m_xml_path; // 每一层xml文件地址 QStringList m_name; // 每一层的名字