main.cpp

#include "Park.h"
#include <iostream>
using namespace std;

//进入停车场
int InPark(Queue &sqPark,Queue &sqAisle);
//离开停车场
int OutPark(Queue &sqPark, Queue &sqAisle);
//查看停车场
int ViewPark(Queue &sqPark, Queue &sqAisle);

/*
函数名称\main
函数功能\程序主函数,即应用程序的入口
函数参数\无
返回值\int  说明程序退出的状态
*********************************/

int main(void)
{
	//声明队列
	Queue sqPark;//停车场
	Queue sqAisle;//临时车道

	//初始化队列
	InitQueue(sqPark,MAX_PAKING_SPACE);//初始化停车场
	InitQueue(sqAisle,AISLE_SIZE);//初始化临时车道


	bool running = true;//程序运行标志
	char key[10] = {0};//用户输入的选项

	cout<<"******************************************************"<<endl
		<<"--Welcome!-----------停车场管理-----------------------"<<endl
		<<"------------------------------------------------------"<<endl
		<<"------------------------------------------------------"<<endl;
	while(running)
	{
		//输出界面
		cout<<"------------------------------------------------------"<<endl;
		cout<<"1. 车辆入场 "<<endl;
		cout<<"2. 车辆离开 "<<endl;
		cout<<"3. 查看停车场 "<<endl;
		cout<<"4. 退出 "<<endl;

		//输入选项
		cout<<"请选择(1~4): ";
		cin>> key;

		//处理用户输入
		switch(key[0]){
		case'1'://车辆入场
			{
				InPark(sqPark,sqAisle);
				break;
			}
		case'2'://车辆离开
			{
				OutPark(sqPark,sqAisle);
				break;
			}
		case'3'://查看停车场
			{
				ViewPark(sqPark,sqAisle);
				break;
			}
		case'4'://退出
			running = false;
			cout<<"再见!"<<endl;
			break;
		}
	}
	//销毁队列
	DestoryQueue(sqPark);
	DestoryQueue(sqAisle);

	return 0;
}

/*
函数名称\InPark
函数功能\车进入停车场
函数参数\Queue AsqPark:停车场
函数参数\Queue AsqAisle:临时车道
返回值\int:说明程序退出的状态
*/
int InPark(Queue &sqPark, Queue &sqAisle)
{
	cout<<"----------进入停车场----------------"<<endl;

	//输入车辆信息
	Car car;
	cout<<"请输入车牌号:";
	cin>>car.lisence_plate;
	cout<<"请输入入场时间: ";
	cin>>car.time;

	if(OK==EnQueue(sqPark,car))
	{
		//进入停车场
		cout<<"进入停车场"<<QueueLength(sqPark)<<"号位置."<<endl;
	}
	else if(OK==EnQueue(sqAisle,car))
	{
		//进入过道
		cout<<"停车场已满,进入过道"<<QueueLength(sqAisle)<<"号位置."<<endl;
	}
	else
	{
		//离开
		cout<<"没有空余车位,请离开停车场."<<endl;
	}
	return 0;
}

/*
函数名称\OutPark
函数功能\汽车离开停车场
函数参数\Queue AsqPark:停车场
函数参数\Queue AsqAisle:临时车道
返回值\int:说明程序退出的状态
*/

int OutPark(Queue &sqPark, Queue &sqAisle)
{
	cout<<"----------离开停车场----------------"<<endl;

	Car car;
	if(OK==DeQueue(sqPark,car))
	{
		//车辆离开,计时收费
		int time;
		cout<<car.lisence_plate<<"号车离开!"<<endl<<"请输入离场时间:";
		cin>>time;

		int fee = (time - car.time)*2;//每小时两元
			cout<<"收费: "<<fee<<"元"<<endl;

			if(OK==DeQueue(sqAisle,car))
			{
			//过道上排队的车进入停车场
			cout<<car.lisence_plate<<"从过道进入停车场"<<endl;
			cout<<"请输入入场时间:";
			cin>>car.time;//输入时间,开始计费
			EnQueue(sqPark,car);
			}
	}
	else
	{
		//队列为空,停车场内没有汽车
		cout<<"停车场没有车要离开"<<endl;

	}
	return 0;
}

/*
函数名称\ViewPark
函数功能\查看停车场
函数参数\eue AsqPark:停车场
函数参数\Queue AsqAisle:临时车道
返回值\nt:说明程序退出的状态
*/

int ViewPark(Queue &sqPark, Queue &sqAisle)
{
	cout<<"---------查看停车场------------"<<endl;

		QueueTraverse(sqPark);
		cout<<"-----------过道------------"<<endl;
		QueueTraverse(sqAisle);
		cout<<endl;
		return 0;
}
park.cpp

#include "Park.h"
#include <stdlib.h>
#include <iostream>
using namespace std;

/*
函数名称\InitQueue
函数功能\初始化队列
函数参数\Queue &q:队列
函数参数\int nSize: 最大队列长度
返回值\int: 说明程序退出的状态
*/

int InitQueue(Queue &q, int nSize)
{
	q.base = (Car *)malloc((nSize+1) *sizeof(Car));
	if(!q.base)
	{//内存分配失败
		return ERROR;
	}
	q.front = q.rear = 0;
	q.size = nSize+1;
	return OK;
}
/*
函数名称\DestoryQueue
函数功能\销毁队列
函数参数\Queue q:队列
返回值\t: 说明程序退出的状态
*/
int DestoryQueue (Queue &q)
{
	//释放空间
	if(q.base)
	{
		free(q.base);
		q.base = NULL;
	}
	q.front = q.rear = 0;
	q.size = 0;
	return OK;
}
/*
函数名称\QueueLength
函数功能\获得队列长度
函数参数\Queue q:队列
返回值\int: 说明程序退出的状态
*/
int QueueLength(Queue q)
{
	return(q.rear - q.front + q.size)% q.size;
}

/*
函数名称\QueueEmpty
函数功能\判断队列是否为空
函数参数\Queue q:队列
返回值\int: 说明程序退出的状态
*/
int QueueEmpty(Queue q)
{
	return(q.front == q.rear);
}
/*
函数名称\EnQueue
函数功能\插入元素到队尾
函数参数\Queue &q:队列
函数参数\Car car: 车辆元素
返回值\int: 说明程序退出的状态
*/
int EnQueue(Queue &q,Car car)
{
	if((q.rear+1)%q.size == q.front)
	{
		return ERROR;
	}
	q.base[q.rear] = car;
	q.rear = (q.rear+1)%q.size;
	//cout<<"尾指针"<<q.rear<<endl;
	return OK;
}


/*
函数名称\DeQueue
函数功能\若队列不空,则删除队头元素
函数参数\Queue &q:队列
函数参数\Car car: 车辆元素
返回值\int: 说明程序退出的状态
*/
int DeQueue(Queue &q,Car &car)
{
	//队列空
	if(q.front==q.rear)
	{
		return ERROR;
	}
	car = q.base[q.front];
	q.front = (q.front+1)%q.size;
	return OK;
}
/*
函数名称\QueueTraverse
函数功能\遍历队列,输出车辆信息
函数参数\Queue q: 队列
返回值\int: 说明程序退出的状态
*/
int QueueTraverse(Queue q)
{
	if(q.front==q.rear)
	{
		return ERROR;
	}
	int i=q.front;
	while(i!=q.rear)
	{
		Car car = q.base[i];
		cout<<"车牌号码:"<<car.lisence_plate<<"\t停车位: "<<i+1<<"\t入场时间:"<<car.time<<endl;
		i = (i+1)%q.size;
	}
	return OK;
}

park.h

#ifndef PARK_H_INCLUDED
#define PARK_H_INCLUDED
#define MAX_PAKING_SPACE 3 //停车场最大车位
#define AISLE_SIZE 10 //过临时车位数量
#define ERROR -1
#define OK 0

//定义时间结构体
typedef struct time
{
    int hour;
    int min;
}Time
}
//汽车节点
typedef struct Car
{
	char lisence_plate[10]; //车牌
	Time reach;
	Time leave               //进出停车场的时间
};

//循环队列
typedef struct CirQueue
{
	Car *base; //数组
	int front; //队头指针
	int rear; //队尾指针
	int size; //最大队列长度
}Queue;

//初始化队列
int InitQueue(Queue &q, int size);
//销毁队列
int DestoryQueue(Queue &q);
//判断队列是否为空
int QueueEmpty(Queue q);
//获得队列长度
int QueueLength(Queue q);
//插入元素到队尾
int EnQueue(Queue &q,Car car);
//删除队头元素
int DeQueue(Queue &q,Car &car);
//遍历队列
int QueueTraverse(Queue q);


#endif // PARK_H_INCLUDED
运行结果图




Logo

快速构建 Web 应用程序

更多推荐