您的位置:首页 > 理论基础 > 数据结构算法

数据结构课程设计——停车场管理系统

2017-12-22 11:08 357 查看
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
运行结果图



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 设计