求停车场管理系统

时间:2021-09-04 03:18:20
现在要做一个停车场的题目,没有思路,希望有高人可以帮忙做下。要求在下面,要c或者c++的都可以,麻烦各位发我邮箱里930559921@qq.com,谢谢各位大神!!

要求:停车场拥有M个车位和一条进入停车场的便道,便道上最多停放N辆汽车。汽车要想进入车位,首先进入便道等候。若有空闲车位,则停车入位,否则在便道继续等候,直至有车位空出。若便道已经停满等候的汽车,后到达的汽车只能离开,选择其他停车场。设计一个停车场管理系统,模拟停车场的运作,并统计停车场的收入。
(1) 使用随机数产生某一时间段内进入和离开停车场的车辆数目;
(2) 存储并记录如下数据项:汽车到达和离去的时间及汽车的车号;
(3) 车辆到达时,提示汽车的停车位置编号(为车辆分配编号最小的可用车位),若车位已满给出相应提示;
(4) 汽车离去时,输出汽车在停车场内停留的时间和应交纳的费用。
(5) 对该停车场进行统计:统计每天到达、离开的车次,停车总时数、每天停车场的收入等。

7 个解决方案

#1


该回复于2011-12-26 09:58:28被版主删除

#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;
}










#1


该回复于2011-12-26 09:58:28被版主删除

#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;
}