要求:停车场拥有M个车位和一条进入停车场的便道,便道上最多停放N辆汽车。汽车要想进入车位,首先进入便道等候。若有空闲车位,则停车入位,否则在便道继续等候,直至有车位空出。若便道已经停满等候的汽车,后到达的汽车只能离开,选择其他停车场。设计一个停车场管理系统,模拟停车场的运作,并统计停车场的收入。
(1) 使用随机数产生某一时间段内进入和离开停车场的车辆数目;
(2) 存储并记录如下数据项:汽车到达和离去的时间及汽车的车号;
(3) 车辆到达时,提示汽车的停车位置编号(为车辆分配编号最小的可用车位),若车位已满给出相应提示;
(4) 汽车离去时,输出汽车在停车场内停留的时间和应交纳的费用。
(5) 对该停车场进行统计:统计每天到达、离开的车次,停车总时数、每天停车场的收入等。
7 个解决方案
#1
#2
用链表来实现即可。
#3
可以发一个吗?
#4
将车位作为链表的一个元素,包含车位是否被占用等结构域。
#5
我个人觉得应该使用循环队列
#6
用队列和栈模拟。我现在正在学习这,共同进步啊!
#7
下面这个有点类似的,去年做的,以前没问题,放邮箱一年了貌似有点错误,莫非QQ邮箱有嫌疑?自己去改改了
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
#define max_s 5 //车站只能容纳的人数
#define max_p 100 //便道能容纳100人
typedef struct {
char lp[10]; //车牌号
}CAR;
typedef struct { //停车场(0)和辅助栈(1)公用空间
CAR stop[max_s]; //存储空间 ,top0为0栈栈顶位置,top1为1栈栈顶位置
int top0,top1;
}STACK;
typedef struct{ //便道
CAR pave[max_p];
int front,rear;
int num; //计数
}PAVEMENT;
CAR *x;
STACK *s;
PAVEMENT *p;
/***************************欢迎************************************/
void welcome(){
cout<<"\t\t\t欢迎使用本程序\n\n";
cout<<"\t本程序为停车场的模拟管理系统,有车到来时请按“C”键。\n";
cout<<"\t然后根据屏幕提示进行相关操作,有车要走时请按“L”键。\n";
cout<<"\t然后根据屏幕提示进行相关操作,若要查询时请按“D”键。\n";
cout<<"\t然后根据屏幕提示进行相关操作,要退出程序请按“Q”键。\n";
}
/**********************************停车位和辅助栈***********************************/
STACK *Init_stack(){
STACK *h;
h=new STACK;
if(!h){
cout<<"空间不足";
return NULL;
}
else{
h->top0=-1;
h->top1=max_s;
return h;
}
}
int Full_stack(STACK *s){
if(s->top0+1==s->top1)
return 1;
else
return 0;
}
int Empty_stack(STACK *s){
if(s->top0==-1||s->top1==max_s)
return 1;
else
return 0;
}
void Push_stack(STACK *s, int i,CAR *x){
if(i!=0&&i!=1)
cout<<"参数有误"<<endl;
else
if(Full_stack(s))
cout<<"栈已满"<<endl;
else if(i==0)
s->stop[++s->top0]=*x;
else if(i==1)
s->stop[--s->top1]=*x;
}
CAR *Pop_stack(STACK *s,int i){
if(i!=1&&i!=0)
cout<<"参数有误"<<endl;
else{
if(i==0){
if(s->top0==-1)
cout<<"栈空"<<endl;
else{
return &(s->stop[s->top0--]);
}
}
else if(i==1){
if(s->top1==max_s)
cout<<"栈空"<<endl;
else{
return &(s->stop[s->top1++]);
}
}
}
}
CAR *top_stack(STACK *s,int i){
if(Empty_stack(s))
return 0;
else
return &(s->stop[s->top0]);
}
/*******************************便道对列*******************************/
PAVEMENT *Init_pavement(){
PAVEMENT *q;
q=new PAVEMENT;
if(q==NULL){
cout<<"空间不足"<<endl;
return NULL;
}
else{
q->front=q->rear=max_p-1;
q->num=0;
}
return q;
}
int Empty_pavement(PAVEMENT *p){
if(p->num==0)
return 1;
else
return 0;
}
void In_seq(PAVEMENT *p,CAR *x){
if(p->num==max_p)
cout<<"队已满"<<endl;
else {
p->rear=(p->rear +1) % max_p;
p->pave[p->rear]= *x;
p->num++;
}
}
CAR *Out_seq(PAVEMENT *p){
if(p->num==0)
cout<<"队空"<<endl;
else {
p->front=(p->front +1) % max_p;
p->num--;
return &(p->pave[p->front]);
}
}
/***************************车来了,哈哈,又可以赚钱了哦********************************/
void come(){
cout<<"请输入车的牌照:"<<endl;
x=new CAR;
cin>>x->lp;
if(!Full_stack(s)) {
Push_stack(s,0,x);
cout<<"车已进入车站"<<endl;
}
else{
In_seq(p,x);
cout<<"车站已满,车已进入便道"<<endl;
}
}
void leave(){
char lk[10];
int flag=0;
cout<<"请输入车的牌照:\n";
cin>>lk;
for(int i=0;i<=s->top0;i++)
if(strcmp(lk,s->stop[i].lp) ==0){
int h=s->top0;
for(int j=s->top0;j>i;j--){
CAR *pp=Pop_stack(s,0);
Push_stack(s,1,pp);
}
CAR *sh=Pop_stack(s,0);
while(s->top1<max_s){
CAR *oo=Pop_stack(s,1);
Push_stack(s,0,oo);
}
flag=1;
}
if(!flag)
cout<<"停车场中没有此车!"<<endl;
if(s->top0+1<max_s&&flag==1){
CAR *jj=Out_seq(p);
Push_stack(s,0,jj);
cout<<"便道中车牌号为"<<p->pave[p->front].lp<<"的车进入车站"<<endl;
}
}
void display(){
int i,j,k;
cout<<"停车场中有"<<s->top0+1 <<"辆车,如下所示:"<<endl;
for(i=s->top0;i>-1;i--){
cout<<s->stop[i].lp<<endl;
}
cout<<"便道中有"<<p->num <<"辆车,如下所示:"<<endl;
for(j= p->num,k= (p->front+1)%max_p ; j>0; j--,k++)
cout<<p->pave[k].lp <<endl;
}
int main()
{
char key;
s=Init_stack();
p=Init_pavement();
do{
heihei: welcome();
cout<<"请选择:"<<endl;
key=getchar();
getchar(); //吞掉回车键
if(key=='c'||key=='C')
come();
else if(key=='l'||key=='L')
leave();
else if(key=='d'||key=='D')
display();
else if(key=='q'||key=='Q')
exit(1);
else{
cout<<"输入的数据不对,请重新选择:"<<endl;
goto heihei;
}
}while(1);
return 0;
}
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
#define max_s 5 //车站只能容纳的人数
#define max_p 100 //便道能容纳100人
typedef struct {
char lp[10]; //车牌号
}CAR;
typedef struct { //停车场(0)和辅助栈(1)公用空间
CAR stop[max_s]; //存储空间 ,top0为0栈栈顶位置,top1为1栈栈顶位置
int top0,top1;
}STACK;
typedef struct{ //便道
CAR pave[max_p];
int front,rear;
int num; //计数
}PAVEMENT;
CAR *x;
STACK *s;
PAVEMENT *p;
/***************************欢迎************************************/
void welcome(){
cout<<"\t\t\t欢迎使用本程序\n\n";
cout<<"\t本程序为停车场的模拟管理系统,有车到来时请按“C”键。\n";
cout<<"\t然后根据屏幕提示进行相关操作,有车要走时请按“L”键。\n";
cout<<"\t然后根据屏幕提示进行相关操作,若要查询时请按“D”键。\n";
cout<<"\t然后根据屏幕提示进行相关操作,要退出程序请按“Q”键。\n";
}
/**********************************停车位和辅助栈***********************************/
STACK *Init_stack(){
STACK *h;
h=new STACK;
if(!h){
cout<<"空间不足";
return NULL;
}
else{
h->top0=-1;
h->top1=max_s;
return h;
}
}
int Full_stack(STACK *s){
if(s->top0+1==s->top1)
return 1;
else
return 0;
}
int Empty_stack(STACK *s){
if(s->top0==-1||s->top1==max_s)
return 1;
else
return 0;
}
void Push_stack(STACK *s, int i,CAR *x){
if(i!=0&&i!=1)
cout<<"参数有误"<<endl;
else
if(Full_stack(s))
cout<<"栈已满"<<endl;
else if(i==0)
s->stop[++s->top0]=*x;
else if(i==1)
s->stop[--s->top1]=*x;
}
CAR *Pop_stack(STACK *s,int i){
if(i!=1&&i!=0)
cout<<"参数有误"<<endl;
else{
if(i==0){
if(s->top0==-1)
cout<<"栈空"<<endl;
else{
return &(s->stop[s->top0--]);
}
}
else if(i==1){
if(s->top1==max_s)
cout<<"栈空"<<endl;
else{
return &(s->stop[s->top1++]);
}
}
}
}
CAR *top_stack(STACK *s,int i){
if(Empty_stack(s))
return 0;
else
return &(s->stop[s->top0]);
}
/*******************************便道对列*******************************/
PAVEMENT *Init_pavement(){
PAVEMENT *q;
q=new PAVEMENT;
if(q==NULL){
cout<<"空间不足"<<endl;
return NULL;
}
else{
q->front=q->rear=max_p-1;
q->num=0;
}
return q;
}
int Empty_pavement(PAVEMENT *p){
if(p->num==0)
return 1;
else
return 0;
}
void In_seq(PAVEMENT *p,CAR *x){
if(p->num==max_p)
cout<<"队已满"<<endl;
else {
p->rear=(p->rear +1) % max_p;
p->pave[p->rear]= *x;
p->num++;
}
}
CAR *Out_seq(PAVEMENT *p){
if(p->num==0)
cout<<"队空"<<endl;
else {
p->front=(p->front +1) % max_p;
p->num--;
return &(p->pave[p->front]);
}
}
/***************************车来了,哈哈,又可以赚钱了哦********************************/
void come(){
cout<<"请输入车的牌照:"<<endl;
x=new CAR;
cin>>x->lp;
if(!Full_stack(s)) {
Push_stack(s,0,x);
cout<<"车已进入车站"<<endl;
}
else{
In_seq(p,x);
cout<<"车站已满,车已进入便道"<<endl;
}
}
void leave(){
char lk[10];
int flag=0;
cout<<"请输入车的牌照:\n";
cin>>lk;
for(int i=0;i<=s->top0;i++)
if(strcmp(lk,s->stop[i].lp) ==0){
int h=s->top0;
for(int j=s->top0;j>i;j--){
CAR *pp=Pop_stack(s,0);
Push_stack(s,1,pp);
}
CAR *sh=Pop_stack(s,0);
while(s->top1<max_s){
CAR *oo=Pop_stack(s,1);
Push_stack(s,0,oo);
}
flag=1;
}
if(!flag)
cout<<"停车场中没有此车!"<<endl;
if(s->top0+1<max_s&&flag==1){
CAR *jj=Out_seq(p);
Push_stack(s,0,jj);
cout<<"便道中车牌号为"<<p->pave[p->front].lp<<"的车进入车站"<<endl;
}
}
void display(){
int i,j,k;
cout<<"停车场中有"<<s->top0+1 <<"辆车,如下所示:"<<endl;
for(i=s->top0;i>-1;i--){
cout<<s->stop[i].lp<<endl;
}
cout<<"便道中有"<<p->num <<"辆车,如下所示:"<<endl;
for(j= p->num,k= (p->front+1)%max_p ; j>0; j--,k++)
cout<<p->pave[k].lp <<endl;
}
int main()
{
char key;
s=Init_stack();
p=Init_pavement();
do{
heihei: welcome();
cout<<"请选择:"<<endl;
key=getchar();
getchar(); //吞掉回车键
if(key=='c'||key=='C')
come();
else if(key=='l'||key=='L')
leave();
else if(key=='d'||key=='D')
display();
else if(key=='q'||key=='Q')
exit(1);
else{
cout<<"输入的数据不对,请重新选择:"<<endl;
goto heihei;
}
}while(1);
return 0;
}
#1
#2
用链表来实现即可。
#3
可以发一个吗?
#4
将车位作为链表的一个元素,包含车位是否被占用等结构域。
#5
我个人觉得应该使用循环队列
#6
用队列和栈模拟。我现在正在学习这,共同进步啊!
#7
下面这个有点类似的,去年做的,以前没问题,放邮箱一年了貌似有点错误,莫非QQ邮箱有嫌疑?自己去改改了
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
#define max_s 5 //车站只能容纳的人数
#define max_p 100 //便道能容纳100人
typedef struct {
char lp[10]; //车牌号
}CAR;
typedef struct { //停车场(0)和辅助栈(1)公用空间
CAR stop[max_s]; //存储空间 ,top0为0栈栈顶位置,top1为1栈栈顶位置
int top0,top1;
}STACK;
typedef struct{ //便道
CAR pave[max_p];
int front,rear;
int num; //计数
}PAVEMENT;
CAR *x;
STACK *s;
PAVEMENT *p;
/***************************欢迎************************************/
void welcome(){
cout<<"\t\t\t欢迎使用本程序\n\n";
cout<<"\t本程序为停车场的模拟管理系统,有车到来时请按“C”键。\n";
cout<<"\t然后根据屏幕提示进行相关操作,有车要走时请按“L”键。\n";
cout<<"\t然后根据屏幕提示进行相关操作,若要查询时请按“D”键。\n";
cout<<"\t然后根据屏幕提示进行相关操作,要退出程序请按“Q”键。\n";
}
/**********************************停车位和辅助栈***********************************/
STACK *Init_stack(){
STACK *h;
h=new STACK;
if(!h){
cout<<"空间不足";
return NULL;
}
else{
h->top0=-1;
h->top1=max_s;
return h;
}
}
int Full_stack(STACK *s){
if(s->top0+1==s->top1)
return 1;
else
return 0;
}
int Empty_stack(STACK *s){
if(s->top0==-1||s->top1==max_s)
return 1;
else
return 0;
}
void Push_stack(STACK *s, int i,CAR *x){
if(i!=0&&i!=1)
cout<<"参数有误"<<endl;
else
if(Full_stack(s))
cout<<"栈已满"<<endl;
else if(i==0)
s->stop[++s->top0]=*x;
else if(i==1)
s->stop[--s->top1]=*x;
}
CAR *Pop_stack(STACK *s,int i){
if(i!=1&&i!=0)
cout<<"参数有误"<<endl;
else{
if(i==0){
if(s->top0==-1)
cout<<"栈空"<<endl;
else{
return &(s->stop[s->top0--]);
}
}
else if(i==1){
if(s->top1==max_s)
cout<<"栈空"<<endl;
else{
return &(s->stop[s->top1++]);
}
}
}
}
CAR *top_stack(STACK *s,int i){
if(Empty_stack(s))
return 0;
else
return &(s->stop[s->top0]);
}
/*******************************便道对列*******************************/
PAVEMENT *Init_pavement(){
PAVEMENT *q;
q=new PAVEMENT;
if(q==NULL){
cout<<"空间不足"<<endl;
return NULL;
}
else{
q->front=q->rear=max_p-1;
q->num=0;
}
return q;
}
int Empty_pavement(PAVEMENT *p){
if(p->num==0)
return 1;
else
return 0;
}
void In_seq(PAVEMENT *p,CAR *x){
if(p->num==max_p)
cout<<"队已满"<<endl;
else {
p->rear=(p->rear +1) % max_p;
p->pave[p->rear]= *x;
p->num++;
}
}
CAR *Out_seq(PAVEMENT *p){
if(p->num==0)
cout<<"队空"<<endl;
else {
p->front=(p->front +1) % max_p;
p->num--;
return &(p->pave[p->front]);
}
}
/***************************车来了,哈哈,又可以赚钱了哦********************************/
void come(){
cout<<"请输入车的牌照:"<<endl;
x=new CAR;
cin>>x->lp;
if(!Full_stack(s)) {
Push_stack(s,0,x);
cout<<"车已进入车站"<<endl;
}
else{
In_seq(p,x);
cout<<"车站已满,车已进入便道"<<endl;
}
}
void leave(){
char lk[10];
int flag=0;
cout<<"请输入车的牌照:\n";
cin>>lk;
for(int i=0;i<=s->top0;i++)
if(strcmp(lk,s->stop[i].lp) ==0){
int h=s->top0;
for(int j=s->top0;j>i;j--){
CAR *pp=Pop_stack(s,0);
Push_stack(s,1,pp);
}
CAR *sh=Pop_stack(s,0);
while(s->top1<max_s){
CAR *oo=Pop_stack(s,1);
Push_stack(s,0,oo);
}
flag=1;
}
if(!flag)
cout<<"停车场中没有此车!"<<endl;
if(s->top0+1<max_s&&flag==1){
CAR *jj=Out_seq(p);
Push_stack(s,0,jj);
cout<<"便道中车牌号为"<<p->pave[p->front].lp<<"的车进入车站"<<endl;
}
}
void display(){
int i,j,k;
cout<<"停车场中有"<<s->top0+1 <<"辆车,如下所示:"<<endl;
for(i=s->top0;i>-1;i--){
cout<<s->stop[i].lp<<endl;
}
cout<<"便道中有"<<p->num <<"辆车,如下所示:"<<endl;
for(j= p->num,k= (p->front+1)%max_p ; j>0; j--,k++)
cout<<p->pave[k].lp <<endl;
}
int main()
{
char key;
s=Init_stack();
p=Init_pavement();
do{
heihei: welcome();
cout<<"请选择:"<<endl;
key=getchar();
getchar(); //吞掉回车键
if(key=='c'||key=='C')
come();
else if(key=='l'||key=='L')
leave();
else if(key=='d'||key=='D')
display();
else if(key=='q'||key=='Q')
exit(1);
else{
cout<<"输入的数据不对,请重新选择:"<<endl;
goto heihei;
}
}while(1);
return 0;
}
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
#define max_s 5 //车站只能容纳的人数
#define max_p 100 //便道能容纳100人
typedef struct {
char lp[10]; //车牌号
}CAR;
typedef struct { //停车场(0)和辅助栈(1)公用空间
CAR stop[max_s]; //存储空间 ,top0为0栈栈顶位置,top1为1栈栈顶位置
int top0,top1;
}STACK;
typedef struct{ //便道
CAR pave[max_p];
int front,rear;
int num; //计数
}PAVEMENT;
CAR *x;
STACK *s;
PAVEMENT *p;
/***************************欢迎************************************/
void welcome(){
cout<<"\t\t\t欢迎使用本程序\n\n";
cout<<"\t本程序为停车场的模拟管理系统,有车到来时请按“C”键。\n";
cout<<"\t然后根据屏幕提示进行相关操作,有车要走时请按“L”键。\n";
cout<<"\t然后根据屏幕提示进行相关操作,若要查询时请按“D”键。\n";
cout<<"\t然后根据屏幕提示进行相关操作,要退出程序请按“Q”键。\n";
}
/**********************************停车位和辅助栈***********************************/
STACK *Init_stack(){
STACK *h;
h=new STACK;
if(!h){
cout<<"空间不足";
return NULL;
}
else{
h->top0=-1;
h->top1=max_s;
return h;
}
}
int Full_stack(STACK *s){
if(s->top0+1==s->top1)
return 1;
else
return 0;
}
int Empty_stack(STACK *s){
if(s->top0==-1||s->top1==max_s)
return 1;
else
return 0;
}
void Push_stack(STACK *s, int i,CAR *x){
if(i!=0&&i!=1)
cout<<"参数有误"<<endl;
else
if(Full_stack(s))
cout<<"栈已满"<<endl;
else if(i==0)
s->stop[++s->top0]=*x;
else if(i==1)
s->stop[--s->top1]=*x;
}
CAR *Pop_stack(STACK *s,int i){
if(i!=1&&i!=0)
cout<<"参数有误"<<endl;
else{
if(i==0){
if(s->top0==-1)
cout<<"栈空"<<endl;
else{
return &(s->stop[s->top0--]);
}
}
else if(i==1){
if(s->top1==max_s)
cout<<"栈空"<<endl;
else{
return &(s->stop[s->top1++]);
}
}
}
}
CAR *top_stack(STACK *s,int i){
if(Empty_stack(s))
return 0;
else
return &(s->stop[s->top0]);
}
/*******************************便道对列*******************************/
PAVEMENT *Init_pavement(){
PAVEMENT *q;
q=new PAVEMENT;
if(q==NULL){
cout<<"空间不足"<<endl;
return NULL;
}
else{
q->front=q->rear=max_p-1;
q->num=0;
}
return q;
}
int Empty_pavement(PAVEMENT *p){
if(p->num==0)
return 1;
else
return 0;
}
void In_seq(PAVEMENT *p,CAR *x){
if(p->num==max_p)
cout<<"队已满"<<endl;
else {
p->rear=(p->rear +1) % max_p;
p->pave[p->rear]= *x;
p->num++;
}
}
CAR *Out_seq(PAVEMENT *p){
if(p->num==0)
cout<<"队空"<<endl;
else {
p->front=(p->front +1) % max_p;
p->num--;
return &(p->pave[p->front]);
}
}
/***************************车来了,哈哈,又可以赚钱了哦********************************/
void come(){
cout<<"请输入车的牌照:"<<endl;
x=new CAR;
cin>>x->lp;
if(!Full_stack(s)) {
Push_stack(s,0,x);
cout<<"车已进入车站"<<endl;
}
else{
In_seq(p,x);
cout<<"车站已满,车已进入便道"<<endl;
}
}
void leave(){
char lk[10];
int flag=0;
cout<<"请输入车的牌照:\n";
cin>>lk;
for(int i=0;i<=s->top0;i++)
if(strcmp(lk,s->stop[i].lp) ==0){
int h=s->top0;
for(int j=s->top0;j>i;j--){
CAR *pp=Pop_stack(s,0);
Push_stack(s,1,pp);
}
CAR *sh=Pop_stack(s,0);
while(s->top1<max_s){
CAR *oo=Pop_stack(s,1);
Push_stack(s,0,oo);
}
flag=1;
}
if(!flag)
cout<<"停车场中没有此车!"<<endl;
if(s->top0+1<max_s&&flag==1){
CAR *jj=Out_seq(p);
Push_stack(s,0,jj);
cout<<"便道中车牌号为"<<p->pave[p->front].lp<<"的车进入车站"<<endl;
}
}
void display(){
int i,j,k;
cout<<"停车场中有"<<s->top0+1 <<"辆车,如下所示:"<<endl;
for(i=s->top0;i>-1;i--){
cout<<s->stop[i].lp<<endl;
}
cout<<"便道中有"<<p->num <<"辆车,如下所示:"<<endl;
for(j= p->num,k= (p->front+1)%max_p ; j>0; j--,k++)
cout<<p->pave[k].lp <<endl;
}
int main()
{
char key;
s=Init_stack();
p=Init_pavement();
do{
heihei: welcome();
cout<<"请选择:"<<endl;
key=getchar();
getchar(); //吞掉回车键
if(key=='c'||key=='C')
come();
else if(key=='l'||key=='L')
leave();
else if(key=='d'||key=='D')
display();
else if(key=='q'||key=='Q')
exit(1);
else{
cout<<"输入的数据不对,请重新选择:"<<endl;
goto heihei;
}
}while(1);
return 0;
}