添加了公交车控制类
This commit is contained in:
parent
2c73b1d2ed
commit
48947253f2
54
include/busModel.h
Normal file
54
include/busModel.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
//
|
||||
// Created by ricardo on 2022/6/10.
|
||||
//
|
||||
|
||||
#ifndef AUTO_BUS_GUI_BUS_MODEL_H
|
||||
#define AUTO_BUS_GUI_BUS_MODEL_H
|
||||
|
||||
#include "railsModel.h"
|
||||
#include "queryModel.h"
|
||||
#include "define.h"
|
||||
|
||||
#include "string"
|
||||
#include "sstream"
|
||||
|
||||
class BusControllerModel
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* 指向公交车所在站点的指针
|
||||
*/
|
||||
rail_node_t *rail_pos;
|
||||
|
||||
/**
|
||||
* 当前行进的距离
|
||||
*/
|
||||
int distance;
|
||||
|
||||
/**
|
||||
* 轨道对象
|
||||
*/
|
||||
RailsModel *rail_manager;
|
||||
|
||||
/**
|
||||
* 请求控制对象
|
||||
*/
|
||||
QueryModel *query_manager;
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
*/
|
||||
BusControllerModel(RailsModel *railsModel, QueryModel *queryModel);
|
||||
|
||||
/**
|
||||
* 析构函数
|
||||
*/
|
||||
~BusControllerModel();
|
||||
|
||||
std::string PrintState();
|
||||
|
||||
private:
|
||||
int GetBusPosition() const;
|
||||
};
|
||||
|
||||
#endif //AUTO_BUS_GUI_BUS_MODEL_H
|
122
src/busModel.cpp
Normal file
122
src/busModel.cpp
Normal file
|
@ -0,0 +1,122 @@
|
|||
//
|
||||
// Created by ricardo on 2022/6/10.
|
||||
//
|
||||
|
||||
#include "busModel.h"
|
||||
|
||||
BusControllerModel::BusControllerModel(RailsModel *railsModel, QueryModel *queryModel)
|
||||
{
|
||||
rail_manager = railsModel;
|
||||
query_manager = queryModel;
|
||||
|
||||
// 公交车开始时停在轨道起始处
|
||||
rail_pos = railsModel->rails;
|
||||
distance = 0;
|
||||
}
|
||||
|
||||
BusControllerModel::~BusControllerModel()
|
||||
{
|
||||
delete(rail_manager);
|
||||
delete(query_manager);
|
||||
}
|
||||
|
||||
int BusControllerModel::GetBusPosition() const
|
||||
{
|
||||
int result = 0;
|
||||
rail_node_t *now_pos = rail_pos;
|
||||
rail_node_t *node = rail_manager->rails;
|
||||
|
||||
// 先求一下当前所在位置离起始点的距离
|
||||
do
|
||||
{
|
||||
result += node->next_node_distance;
|
||||
node = node->next_node;
|
||||
} while (node != now_pos);
|
||||
|
||||
if (now_pos == rail_manager->rails)
|
||||
{
|
||||
int length = distance;
|
||||
if(length >= 0)
|
||||
{
|
||||
return length;
|
||||
}
|
||||
else
|
||||
{
|
||||
return result + length;
|
||||
}
|
||||
}
|
||||
else if (now_pos == rail_manager->rails->last_node)
|
||||
{
|
||||
int length = distance;
|
||||
if (length == now_pos->next_node_distance)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return distance + length;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return result + distance;
|
||||
}
|
||||
}
|
||||
|
||||
std::string BusControllerModel::PrintState()
|
||||
{
|
||||
int count, flag = 1;
|
||||
rail_node_t *node;
|
||||
char target[25], clockwise[25], counterclockwise[25];
|
||||
|
||||
//遍历轨道链表,将所有站点初始化为0,即:无任何请求;
|
||||
for (count = 0, node = rail_manager->rails; flag == 1 || node != rail_manager->rails;
|
||||
node = node->next_node, count++)
|
||||
{
|
||||
flag=0;
|
||||
target[count] = '0';
|
||||
clockwise[count] = '0';
|
||||
counterclockwise[count] = '0';
|
||||
}
|
||||
|
||||
// 在字符串的末尾填0
|
||||
target[count] = '\0';
|
||||
clockwise[count] = '\0';
|
||||
counterclockwise[count] = '\0';
|
||||
|
||||
bus_query_t *query = query_manager->queries;
|
||||
int pos;
|
||||
|
||||
while (query != nullptr)
|
||||
{
|
||||
pos = query->node->id - 1;
|
||||
|
||||
if(query->type == BUS_CLOCK_WISE)
|
||||
{
|
||||
clockwise[pos] = '1';
|
||||
}
|
||||
else if (query->type == BUS_COUNTER_CLOCK_WISE)
|
||||
{
|
||||
counterclockwise[pos] = '1';
|
||||
}
|
||||
else
|
||||
{
|
||||
target[pos] = '1';
|
||||
}
|
||||
|
||||
query = query->next_node;
|
||||
}
|
||||
|
||||
std::stringstream format;
|
||||
|
||||
// 格式化输出字符串
|
||||
format << "Time:" << std::endl
|
||||
<< "BUS:" << std::endl
|
||||
<< "position:" << GetBusPosition() << std::endl
|
||||
<< "target:" << target << std::endl
|
||||
<< "STATION:" << std::endl
|
||||
<< "clockwise:" << clockwise << std::endl
|
||||
<< "counterclockwise:" << counterclockwise << std::endl;
|
||||
|
||||
return format.str();
|
||||
}
|
Loading…
Reference in New Issue
Block a user