#include<iostream.h>
#include<malloc.h>
#include<stdlib.h>
#include<conio.h>
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define MaxSize 1
typedef struct
{
int carnumber; //汽车牌号
int time; //汽车到达或离开的时间
}carInfo; //汽车有关信息
typedef struct
{
carInfo *top; //栈顶指针
carInfo *base; //栈底指针
int stacksize;
}SeqStack; //模拟车站的顺序栈
typedef struct Qnode
{
int carnumber;
int time;
struct Qnode *next;
}QNode,*QueuePark; //临时顺序栈模拟车辆规避所
typedef struct
{
QueuePark front; //队头指针
QueuePark rear; //队尾指针
int lenth;
}LinkQueue; //模拟便道
void InitStack(SeqStack *s)
{
s->base=(carInfo *)malloc(MaxSize*sizeof(carInfo));
if(!s->base)
exit(OVERFLOW);
s->top=s->base;
s->stacksize=0;
} //栈的初始化
void Push(SeqStack *s,carInfo e)
{
*s->top++=e; //栈顶指针值加1,将e入栈
s->stacksize++;
}
carInfo Pop(SeqStack *s)
{
carInfo e;
if(s->top==s->base)
{
cout<<"\t\t 停车场内没有该车辆!"<<endl; //若栈为空,则输出提示信息,退出。
exit(0) ;
}
e=*--s->top; //若栈不为空,则删除s的栈顶元素,用e返回其值,栈顶指针减1
s->stacksize--; //栈长度减1
return e;
}
int InitQueue(LinkQueue *Q)
{
Q->front=Q->rear=(QueuePark)malloc(sizeof(QNode));
if(!Q->front)
exit(OVERFLOW);
Q->front->next=NULL;
Q->lenth=0;
return OK;
} //初始化队列(便道)
void InsertQueue(LinkQueue *Q,carInfo *a )
{ //插入c车辆到新的队尾(插入到便道上)
QueuePark p;
p=(QueuePark)malloc(sizeof(QNode)); //申请内存空间
if(!p)
exit(OVERFLOW); //申请失败退出
p->carnumber=a->carnumber; //把新车辆的信息存放到新申请的内存空间中去
p->time=a->time;
p->next=NULL;
Q->rear->next=p; //p插入到队尾
Q->rear=p; //队尾指针后移
Q->lenth++; //队长度加1
}
QueuePark DeleteQueue(LinkQueue *Q)
{
QueuePark p,e,s={0};
if(Q->front==Q->rear)
{
cout<<"\t\t 便道上没有车辆!"<<endl; //若便道上没有车辆,则输入提示
return s;
}
p=Q->front->next; //p指向队头指针的下一个存储空间
e=p; //用e返回其值
Q->front->next=p->next; //Q指针后移
Q->lenth--; // 队列长度减1
if(Q->rear==p)
Q->front=Q->rear; //保存队尾指针
return e;
}
void arrive(SeqStack *s,LinkQueue *p,carInfo a,int n)
{
if(s->stacksize<n)
{
Push(s,a); //n代表用户确定栈的大小 ,若栈中未满,则将车辆进入栈(停车场)中,同时显示出车辆位于栈中的位子
cout<<"\n\t\t 车牌号为"<<a.carnumber<<"的车辆进入停车场"<<s->stacksize<<"号车道"<<endl;
}
else
{
InsertQueue(p,&a); //若队列已满,则车辆进入队列(便道)中,同时显示位于队列(便道)中的位子
cout<<"\n\t\t 停车场已满,车牌号为"<<a.carnumber<<"的车辆停在便道的"<<p->lenth <<"号位置"<<endl;
}
}
void leave(SeqStack *tcc,SeqStack *dcc,LinkQueue *p,carInfo a,float pay)
{
carInfo x,ss;
QueuePark b;
int find=1,arrivetime=0;
float cost=0.0;
while(find)
{
ss=Pop(tcc); //将停车场中的tcc车从车站中出栈
Push(dcc,ss);
if(ss.carnumber==a.carnumber) //若要离开的车辆在车站中则算出它一共停留的时间,并计算出它的停车费
{
find=0;
cost=(a.time-ss.time)*pay;
arrivetime=ss.time;
}
}
Pop(dcc); //把临时堆栈的第一辆车(要离开的)去掉;
while(dcc->stacksize)
{
x=Pop(dcc); //将临时栈中的第一辆车的信息存入x中
Push(tcc,x); //再将x依次放入栈中(停车场)
}
if(tcc->stacksize<50&&p->lenth!=0)
{
b=DeleteQueue(p); //将队列首位从队列中删除,放入b中
x.carnumber=b->carnumber; //将b的信息赋予x
x.time=b->time;
Push(tcc,x); //再将x入栈,并显示哪个车辆是由便道进入停车场的几号通道的
cout<<"\n\t\t 车牌号为"<<x.carnumber<<"的车辆由便道进入停车场"<<tcc->stacksize<<"号车道\n\n";
}
//显示车辆在车站中停留的相关信息
cout<<"\t\t"<<"*****************************************************\n";
cout<<"\t\t"<<"** |车牌号码|进站时刻|出站时刻|停留时间|停车费用| **\n";
cout<<"\t\t"<<"** ---------------------------------------------- **\n";
cout<<"\t\t "<<" "<<a.carnumber<<" | "<<arrivetime<<" | "<<a.time<<" | "<<a.time-arrivetime<<" | "<<cost<<" | "<<endl;
cout<<"\t\t"<<"*****************************************************\n";
}
void draw()
{
//显示符号图画
cout<<"\t ,·′ ,,·′`) \n";
cout<<"\t(,,·′ (,*¤ 欢迎使用模拟停车场管理系统 ¤〃′`) \n";
cout<<"\t ,·′ ,,·′`) \n";
cout<<"\t\t 制作人:计科05级1班 段伟 \n";
//显示车辆输入信息说明
cout<<"\n\t |******************************************************|";
cout<<"\n\t |*********** 模拟停车场管理系统 ***********|";
cout<<"\n\t |*****--------------------------------------------*****|";
cout<<"\n\t |***** 车辆信息输入说明: *****|";
cout<<"\n\t |***** *****|";
cout<<"\n\t |***** (A/a 1 2): 车牌号1的车5时刻到达 *****|";
cout<<"\n\t |***** *****|";
cout<<"\n\t |***** (D/d 1 8): 车牌号1的车8时刻离开 *****|";
cout<<"\n\t |***** *****|";
cout<<"\n\t |***** (E/e 0 0): 退出系统 *****|";
cout<<"\n\t |*****--------------------------------------------*****|";
cout<<"\n\t |***** 此模拟停车场的初始化车位总个数为:3个车位 *****|";
cout<<"\n\t |*****--------------------------------------------*****|";
cout<<"\n\t |***** 此停车场对每辆车的收费标准为:2.0元/小时 *****|";
cout<<"\n\t |*****--------------------------------------------*****|";
cout<<"\n\t |***** 温馨提示:请按照提示进行操作! *****|";
cout<<"\n\t |******************************************************|";
}
void main()
{
SeqStack tcc,dcc; //声明两个顺序栈,一个模拟停车场,另一个模拟车辆规避所
LinkQueue p; //声明一个队列,模拟便道
carInfo a; //车辆信息对象
int sum=1000,n=3; //n是停车场的车位总数, sum是模拟汽车信息输入的次数
float pay=2.0; //单位时间内的停车费
char sign,c; //sign对系统的操作方式,c为是否对车位总数及收费标准进行修改
draw(); //显示主界面
InitStack(&tcc); //初始化顺序栈(模拟停车场)
InitStack(&dcc); //初始化顺序栈(车辆规避所)
InitQueue(&p); //初始化队列(便道)
cout<<"\n\n 你是否想更改停车场的车位总个数及对每辆车的单位时间内的收费标准(Y/N):";
c=cin.get();
if(c=='Y'||c=='y')
{
cout<<"\n\n\t 请先输入模拟停车场的车位总个数:";
cin>>n;
cout<<"\n\t 请输入此停车场的对每辆车的收费标准(元/小时):";
cin>>pay;
}
cout<<"\n\t 请输入A/D/E,车牌号,时刻(输入格式如:A/a 1 5):";
cin>>sign>>a.carnumber>>a.time;
while(sum)
{
switch(sign)
{
case 'a':
case 'A':arrive(&tcc,&p,a,n);break;
case 'D':
case 'd':leave(&tcc,&dcc,&p,a,pay);break;
case 'e':
case 'E':exit(OVERFLOW);break;
}
cout<<"\n\t 请输入A/D/E,车牌号,时刻(输入格式如:A/a 1 5):";
cin>>sign>>a.carnumber>>a.time;
sum--;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
停车场管理系统
共12个文件
pdb:2个
exe:1个
dsw:1个
4星 · 超过85%的资源 需积分: 19 148 下载量 193 浏览量
2008-01-09
22:21:42
上传
评论 4
收藏 150KB RAR 举报
温馨提示
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆次序。编制一程序模拟该停车场的管理。<br>(2) 实现要求:<br>要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。<br>(2) 实现提示:<br>汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。例如,(’A’,1,5)表示1号牌照车在5时刻到达,而(’D’,5,20)表示5号牌照车在20时刻离去。整个程序可以在输入信息为(’E’,0,0)时结束。本题可用顺序存储结构和链式存储结构来实现。<br>本人的一个数据结构课程设计(用C++源码实现,供大家学习参考之用,有不妥之处望指正)<br>
资源推荐
资源详情
资源评论
收起资源包目录
停车场管理系统.rar (12个子文件)
停车场管理系统
CarManage.dsp 4KB
CarManage.cpp 7KB
CarManage.opt 53KB
CarManage.ncb 49KB
Debug
vc60.pdb 60KB
CarManage.pdb 577KB
CarManage.obj 25KB
CarManage.exe 212KB
CarManage.suo 7KB
CarManage.plg 1KB
CarManage.dsw 543B
CarManage.sln 339B
共 12 条
- 1
资源评论
- xpsuperman2012-08-02还是不太懂。但是思路是不错的吧!
awei0916
- 粉丝: 2
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功