温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言怎么实现停车场管理系统

发布时间:2021-08-11 14:56:17 来源:亿速云 阅读:184 作者:chen 栏目:编程语言

本篇内容介绍了“C语言怎么实现停车场管理系统”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.问题描述:停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。

2.基本要求

(1)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。(2)每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。(3)栈以顺序结构实现,队列以链表结构实现。(4)按照题意要求独立进行设计,设计结束后按要求写出设计报告。

一、代码块:

#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef int ElemType;#define MaxSize 100#define QNODE struct QNodetypedef struct Node //车辆信息{ char AL; int NO; int time;}Node;typedef struct Stack //栈定义{ struct Node data[MaxSize]; int top; int num;}SqStack;QNODE        //队列节点{ struct Node data; QNODE *next;};typedef struct linkqueue    //队列结构体定义{ QNODE *front,*rear; int num;}LinkQueue;SqStack *Init_SeqStack() //置空栈{ SqStack *s; s=(SqStack*)malloc(sizeof(SqStack));   s->top=-1; s->num=0; return s;}LinkQueue *Init_LQueue()    //创建空队列{ LinkQueue *q;   QNODE *p;   q=(LinkQueue*)malloc(sizeof(LinkQueue));   p=(QNODE*)malloc(sizeof(QNODE)); p->next=NULL; q->front=q->rear=p; q->num=0; return q;}int ISEmpty_SeqStack(SqStack *s) //判断栈是否为空,栈为空返回1{ if(s->top ==-1) return 1; else return 0;}int ISFULL_SeqStack(SqStack *s,int n) //判断栈是否已满,若栈满返回1{ if(s->top==n-1) return 1; else return 0;}int ISEmpty_LQueue(LinkQueue *q) //判断队列是否为空,队列为空返回1{ if(q->front==q->rear) return 1; else return 0;}void IN_Lqueue( LinkQueue *q,struct Node s)  //入队{ QNODE *p; p=(QNODE*)malloc(sizeof(QNODE)); p->data=s; q->num++; p->next=NULL; q->rear->next =p; q->rear =p;}void Push_SeqStack(SqStack *p,struct Node s)  //入栈{ p->top ++; p->data[p->top]=s; p->num++;}int POP_SeqStack(SqStack *s,struct Node car)//出栈{ SqStack *p; int t;  p=Init_SeqStack(); while(s->data[s->top].NO !=car.NO)//找到车牌号为P.NO的车, {   Push_SeqStack(p,s->data[s->top]); s->top--; s->num--; } t=car.time-s->data[s->top].time; s->top--; s->num--; while(ISEmpty_SeqStack(p)==0) { Push_SeqStack(s,p->data[p->top]); p->top--; p->num--; } return t;}struct Node Out_LQueue(LinkQueue *q)  //出队{ QNODE *p; p=q->front->next; q->front->next=p->next; q->num --; if( q->front->next==NULL)  q->rear=q->front; return p->data; free(p);}int main(){ SqStack *parkstack;  //parkstack为表示停车场的栈 LinkQueue *parkqueue;    //parkqueue为表示便道的队列 struct Node car; int n,a=0,t;        //n为停车场栈的最大容量 float f;          //f为每小时收费 parkstack=Init_SeqStack(); parkqueue=Init_LQueue(); //初始界面  printf("***************停车场信息查询***************\n"); printf("请输入停车场最大容量n="); scanf("%d",&n); printf("\n请输入每分钟收取费用f="); scanf("%f",&f); printf("\n请输入车辆信息\n");  scanf("%c,%d,%d",&car.AL,&car.NO,&car.time); while(car.AL!='Q') {  if(car.AL=='A' )  {    // 汽车到达的情况   if(ISFULL_SeqStack(parkstack,n)==1) //栈满的情况   {   IN_Lqueue(parkqueue,car);  //进入队列等待    printf("这辆车在门外便道上第%d个位置\n",parkqueue->num);   printf("\n");   printf("请输入车辆信息\n");   }   else   {   Push_SeqStack(parkstack,car); //入栈   printf("这辆车在停车场内第%d个位置\n",parkstack->num);   printf("\n");   printf("请输入车辆信息\n");   }  }  if(car.AL=='L' )   //汽车离开的情况  {        t=POP_SeqStack(parkstack,car);//出栈  printf("这辆车停留时间为%d,收费为%f。\n",t,f*t);  printf("\n");  printf("请输入车辆信息\n");    if(ISEmpty_LQueue(parkqueue)==0)  //队列不为空需要进栈     Push_SeqStack(parkstack,Out_LQueue(parkqueue) );  }  if(car.AL=='P'&&car.NO==0&&car.time==0 )//显示停车场的车数  {   printf("停车场的车数为%d\n",parkstack->num);    printf("\n");   printf("请输入车辆信息\n");  }    if(car.AL=='W'&&car.NO==0&&car.time==0 )//显示候车场的车数  {   printf("候车场的车数为%d\n",parkqueue->num);  printf("\n");  printf("请输入车辆信息\n");  } scanf("%c,%d,%d",&car.AL,&car.NO,&car.time); } printf("输入结束\n"); return 1;}

二、运行:

关键字:A——arrive;L——leave;P——park;Q——quit;W——wait.

“C语言怎么实现停车场管理系统”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI