C语言实现停车场管理
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 QNode typedef 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语言实现放烟花的程序,有音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-23
- 本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
- 这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- 这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下...2020-04-25
详解C语言中的rename()函数和remove()函数的使用方法
这篇文章主要介绍了详解C语言中的rename()函数和remove()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25- 这篇文章主要介绍了C语言中求和、计算平均值、方差和标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
- 本篇文章主要讲解C语言 基本语法,这里提供简单的示例和代码来详细讲解C语言的基本语法,开始学习C语言的朋友可以看一下,希望能够给你带来帮助...2021-09-18
- 这篇文章主要介绍了C语言中send()函数和sendto()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
- 今天小编就为大家分享一篇C语言实现从文件读入一个3*3数组,并计算每行的平均值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了C语言中memcpy 函数的用法详解的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了使用C语言操作文件的基本函数整理,包括创建和打开以及关闭文件的操作方法,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C语言中查找字符在字符串中出现的位置的方法,分别是strchr()函数和strrchr()函数的使用,需要的朋友可以参考下...2020-04-25
- 很多同学在学习c语言的时候是不是会碰到a++和++a都有甚么作用啊。今天我们就来探讨下...2020-04-25
- 这篇文章主要对C语言中const关键字的用法进行了详细的分析介绍,需要的朋友可以参考下...2020-04-25
- 下面小编就为大家带来一篇C语言实现时间戳转日期的算法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了C语言之整数划分问题(递归法)实例代码的相关资料,需要的朋友可以参考下...2020-04-25
C语言正则表达式详解 regcomp() regexec() regfree()用法详解
C语言处理正则表达式常用的函数有regcomp()、regexec()、regfree()和regerror(),这里就为大家介绍一下,需要的朋友可以参考一下啊...2020-04-25- 本文给大家简单介绍下c实现linux下的数据库备份的方法和具体的源码,十分的实用,有需要的小伙伴可以参考下。...2020-04-25
- 这篇文章主要介绍了c语言实现找最大值最小值位置查找,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-04