第十二周实验报告3(开摩托车)

时间:2021-04-18 08:03:14

程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:         开摩托车 
* 作    者:     王智凯                       
* 完成日期:  2012年   5月07  日
* 版 本 号:  凯子第十二周实验报告3(开摩托车)

 

#include <iostream>
#include<conio.h>
#include <windows.h>
using namespace std;
enum vehicleStaus {rest, running};  //车辆状态:泊车、行进
class vehicle //车辆类
{
protected:
	int maxSpeed;		//最大车速
	int currentSpeed;	//当前速度
	int weight;			//车重
	vehicleStaus  status; //rest-泊车状态;running-行进状态
public:
	vehicle(int maxS, int w); //构造函数,初始时,当前速度总为0且处在停车状态
	void start();  //由rest状态到running, 初速为1
	void stop(); //由running状态到rest, 当前速度小于5时,才允许停车
	void speed_up();  //加速,调用1次,速度加1
	void slow_down(); //减速,调用1次,速度减1,速度为0时,停车
};

class bicycle :virtual public vehicle//(1)自行车类的虚基类为车辆类
{ 
protected:
	double height; //车高
public:
	bicycle(int maxS=10, int w=50, int h=0.7);   //定义构造函数
};

class motorcar :virtual public vehicle//(2)机动车类的虚基类也为车辆类
{ 
protected:
	int seatNum; //座位数
	int passengerNum; //乘客人数
public:
	motorcar(int maxS=150, int w=1500, int s=5, int p=1);   //定义构造函数
	void addPassenger(int p=1);   //搭载乘客,超员要拒载,有人下车时,p为负数。当然车上乘客至少有1个(司机)。上下车时要保证安全……
};

class motorcycle:public bicycle,public motorcar //(3)摩托车类的基类为自行车类和机动车类
{ 
public:
	motorcycle(int maxS=90, int w=100, int s=3, int p=1, int h=0.7);   //定义构造函数
	void show(); //显示摩托车的运行状态
};
vehicle::vehicle(int maxS, int w)
{
	  maxSpeed = maxS;
	  currentSpeed = 0;
	  weight = w;
	  status = rest;
}

void vehicle::start() //由rest状态到running, 初速为1
{
	 

	if( currentSpeed = 1)
	{   
		currentSpeed = 1;
		status = running;
	}
}

void vehicle::stop() //由running状态到rest, 当前速度小于5时,才允许停车
{
	if(currentSpeed  < 5)
	{
        currentSpeed = 0;
		status = rest;
	}
	else 
		cout<<"此速度不允许停车";
}

void vehicle::speed_up()  //加速,调用1次,速度加1
{
	if(currentSpeed < 90)
	{
	  currentSpeed  = currentSpeed  + 1;
    }
	else
		cout<<"车速太快,不允许加速";
}

void vehicle::slow_down() //减速,调用1次,速度减1,速度为0时,停车
{
	if(currentSpeed == 0)
         status = rest;   
	if(currentSpeed > 0)
	{
	   currentSpeed  = currentSpeed  - 1;
	   if(currentSpeed == 0)
         status = rest;   
	}
	else
		status = rest;
}
bicycle::bicycle(int maxS, int w, int h ) : vehicle ( maxS, w )
{
	height = h;
}

motorcar::motorcar(int maxS, int w, int s, int p) : vehicle ( maxS, w )
{
	seatNum = s;
	passengerNum = p; 
}


void  motorcar::addPassenger(int p) //搭载乘客,超员要拒载,有人下车时,p为负数。当然车上乘客至少有1个(司机)。上下车时要保证安全……
{
	if(passengerNum>=seatNum)
	{
		cout<<"人员已满不允许上车";
	}
	else 
		passengerNum+=p;

}
void motorcycle::show()
{
	cout<<"当前状态为:  ";
	if(status)
		cout << "行进";
	else 
		cout << "泊车";

	cout<<"  当前车速为: "<< currentSpeed<<"/"<<"90";
	cout<<"   当前车上人数为:"<<passengerNum<<"/"<<"3";
}
motorcycle::motorcycle(int maxS, int w, int s, int p, int h):vehicle ( maxS, w ), bicycle( maxS, w, h ),  motorcar ( maxS, w, s, p ) {}

//显示摩托车的运行状态
	
int main( )
{
	motorcycle m;
	bool end=false;
	while (!end){
		cout<<"请操作:1-启动  2-加速  3-减速  4-有人上车  5-有人下车  6-停车 0-结束"<<endl;
		char keydown= _getch(); //_getch()返回键盘上读取的字符,应包含头文件<conio.h>
		switch(keydown)
		{
		case '1': 
			cout<<"操作(启动)\t"; m.start(); break;
		case '2':                         
			cout<<"操作(加速)\t"; m.speed_up(); break;
		case '3':                          
			cout<<"操作(减速)\t"; m.slow_down(); break;
		case '4':                        
			cout<<"操作(有人上车)\t"; m.addPassenger(); break;
		case '5':                      
			cout<<"操作(有人下车)\t"; m.addPassenger(-1); break;
		case '6':                      
			cout<<"操作(停车)\t"; m.stop(); break;
		case '0':               
			end=true; break;
		}
		m.show();
		cout<<endl;
		Sleep(200);  //要包含头文件<windows.h>
	}
	system("pause");
	return 0;
}


第十二周实验报告3(开摩托车)

 

上机感言:在做程序是,有一个地方吧 (==)写成了( = )导致减速出现了错误,又一次体会了写程序细心很重要。

                    另外虽然运行结果对了,但程序内部有些语句还不够完善,仍需改进。