第二周作业(更新)

一、思路

一辆汽车的通过流程为:

起落杆处于落下状态,通行灯为红灯。
汽车进入门禁系统,入闸传感器值变为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(); 
    }
};   

三、测试结果

原文地址:https://www.cnblogs.com/ouxiaohui/p/6227232.html