以下源码使用一个类解决问题,耦合性较强,仅供参考
/**********************************************************/
//Function : main,雨刷控制程序
//parm :
//comment :
//return : void
//Author :
//date : 2011.11.6
/**********************************************************/
#include <iostream.h>
#include <stdlib.h>
class WindshieldWiper{
private:
int wiperSpeed; //雨刷速度
int leverPosition; //控制杆位置
int dialPosition; //刻度盘位置
public:
WindshieldWiper(int w,int l,int d); //构造函数
int getWiperSpeed(); //获取雨刷速度,用于显示输出
void setWiperSpeed(); //设置雨刷速度
int getLeverPostion(); //获取控制杆位置
void setLeverPosition(int); //设置控制杆位置
int getDialPosition(); //获取刻度盘位置
void setDialPosition(int); //设置刻度盘位置
void senseLeverUp(); //感知控制杆升挡
void senseLeverDown(); //感知控制杆降挡
void senseDialUp(); //感知刻度盘升挡
void senseDialDown(); //感知刻度盘降挡
};
WindshieldWiper::WindshieldWiper(int w,int l,int d)
//Parm: w:雨刷速度; l:控制杆位置; d:刻度盘位置
{
wiperSpeed = w;
leverPosition = l;
dialPosition = d;
}
int WindshieldWiper::getDialPosition()
{
return dialPosition;
}
int WindshieldWiper::getLeverPostion()
{
return leverPosition;
}
int WindshieldWiper::getWiperSpeed()
{
return wiperSpeed;
}
void WindshieldWiper::setDialPosition(int d)
{
dialPosition = d;
}
void WindshieldWiper::setLeverPosition(int l)
{
leverPosition = l;
}
void WindshieldWiper::setWiperSpeed()
{
if(leverPosition == 0) //控制杆位置为0挡
wiperSpeed = 0; //雨刷速度为0
else
if(leverPosition == 1) //控制杆位置为1挡
{
if(dialPosition == 1) //刻度盘位置为1挡
wiperSpeed = 4;
else
if(dialPosition == 2) //刻度盘位置为2挡
wiperSpeed = 6;
else //刻度盘位置为3挡
wiperSpeed = 12;
}
else
if(leverPosition == 2) //控制杆位置为2挡
wiperSpeed = 30;
else //控制杆位置为3挡
wiperSpeed = 60;
cout<<"Lever position is: "<<leverPosition<<endl; //输出
cout<<"Dial position is: "<<dialPosition<<endl;
cout<<"Wiper speed is: "<<wiperSpeed<<endl;
}
void WindshieldWiper::senseDialDown()
{
switch(dialPosition)
{
case 1: break;
case 2: setDialPosition(1);break;
case 3: setDialPosition(2);break;
}
setWiperSpeed();
}
void WindshieldWiper::senseDialUp()
{
switch(dialPosition)
{
case 1: setDialPosition(2);break;
case 2: setDialPosition(3);break;
case 3: break;
}
setWiperSpeed();
}
void WindshieldWiper::senseLeverDown()
{
switch(leverPosition)
{
case 0: break;
case 1: setLeverPosition(0);break;
case 2: setLeverPosition(1);break;
case 3: setLeverPosition(2);break;
}
setWiperSpeed();
}
void WindshieldWiper::senseLeverUp()
{
switch(leverPosition)
{
case 0: setLeverPosition(1);break;
case 1: setLeverPosition(2);break;
case 2: setLeverPosition(3);break;
case 3: break;
}
setWiperSpeed();
}
void menu(WindshieldWiper &w) //菜单,此处将w作为参数并不好
{
int flag;
while(1)
{
cout<<"Please choose operation:"<<endl;
cout<<endl<<"\t========1:Lever Up========"<<endl;
cout<<"\t========2:Lever Down======"<<endl;
cout<<"\t========3:Dial Up========="<<endl;
cout<<"\t========4:Dial Down======="<<endl;
cout<<"\t========0:Quit============"<<endl<<endl;
cin>>flag;
switch(flag) //选择操作
{
case 1:w.senseLeverUp();break;
case 2:w.senseLeverDown();break;
case 3:w.senseDialUp();break;
case 4:w.senseDialDown();break;
case 0:exit(0);
default: cout<<"Invalid number"<<endl;
}
}
}
//main函数
void main()
{
WindshieldWiper w(0,0,1);
w.setWiperSpeed();
menu(w);
}