一、思路
一辆汽车的通过流程为:
起落杆处于落下状态,通行灯为红灯。
汽车进入门禁系统,入闸传感器值变为True。
控制起落杆上升,直到起落杆位置传感器到达升起位置。
通行灯为绿灯。
汽车离开门禁,触发汽车出闸传感器值为True。
控制起落杆下降,直到起落杆位置传感器到达落下位置。
通行灯变为红灯
需控制的是起落杆和通行灯,需测试的是汽车进入还是出去。
由此得到状态机图示:
二、代码
主函数:
#include "./head.h"
#include <iostream>
using namespace std;
int main()
{
GurdSystem gs;
cout << "测试车辆进入.." << endl;
gs.carIn();
cout << "测试车辆出去..." << endl;
gs.carOut();
return 0;
}
头文件:
#include <iostream>
using namespace std;
class Lifter{ //起落杆类
private:
bool state; //私有值表示自身状态,0落下 1升起
public:
Lifter(){
state = false; //构造函数,默认起落杆处于降下状态
}
void setstate(bool s){ //函数方法该参
state=s;
}
bool getstate(){ //获取参数函数
return state;
}
void change(){ //主要功能 升降起落杆
if(getstate()==0){
cout << "___________升起起落杆___________" << endl;
setstate(true);
}
else{
cout << "___________降下起落杆___________" << endl;
setstate(false);
}
}
};
class Light{ //灯类
private:
bool state; //私有值表示自身状态,0红灯 :1绿灯
public:
Light(){
state = false; //构造函数,默认false表示红灯状态
}
void setstate(bool s){ //函数方法改参
state=s;
}
bool getstate(){ //函数方法获取参数
return state;
}
void change(){ //主要功能 升降起落杆
if(getstate()==0){
cout << "___________绿灯亮起___________" << endl;
setstate(true);
}
else{
cout << "___________红灯亮起___________" << endl;
setstate(false);
}
}
};
class GurdSystem {
private:
Lifter lifter;
Light light;
bool state; //表示是否有车进入
public:
GurdSystem(){ //初始化杆和灯类
Lifter lifter;
Light light;
state=false; //默认表示无车进入
}
void setState(bool s){ //函数方法改参
state=s;
}
void carIn() { // 测试车进入
setState(true);
cout << "___________汽车准备入门___________" << endl;
light.change();//改变灯
lifter.change(); //改变起落杆
}
void carOut() { //测试车出去
setState(false);
cout << "___________汽车准备出门___________" << endl;
light.change();
lifter.change();
}
};