这篇文章主要为大家详细介绍了C语言课程设计之停车场管理问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

停车场管理的C语言课程设计供大家参考,具体如下

1.问题描述

停车场只有一条狭窄的通道供N辆车通行,只有一个大门供汽车进出。在汽车停车场,按照车辆到达时间的先后顺序,由北向南排列(大门在最南端,先到达的第一辆车停在停车场的最北端)。如果停车场停满了N辆车,后面的车就只能在门外的便道上等了。一旦有车离开,便道上的第一辆车就可以开进来;当停车场的一辆车即将离开时,后面驶入的车辆必须先驶出停车场为其让路。当汽车离开大门时,其他车辆将按原顺序进入停车场。停放在停车场的每辆车离开停车场时,都必须根据其停留时间的长短缴纳费用。根据上述要求,为测试停车场准备一个模拟程序进行管理。

2.基本要求

(1)用栈模拟停车场,用队列模拟停车场外的便道,根据从终端读取的输入数据序列进行模拟管理。
(2)每组输入数据包括三个数据项:汽车ldquo到达rdquo或者ldquoRdquo信息、车牌号和到达或离开时间,运算每组输入数据后的输出数据为:如果车辆到达,输出车辆在停车场或人行道上的停车位置;如果车走了;输出汽车在停车场停留的时间和应该支付的费用(停留在人行道上的时间不收费)。
(3)栈用序列结构实现,队列用链表结构实现。
(4)根据题目要求独立设计,设计完成后按要求撰写设计报告。

一、代码块#include lt;stdio.hgt;#include lt;malloc.hgt;#include lt;stdlib.hgt;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-gt;top=-1; s-gt;num=0; return s;}LinkQueue *Init_LQueue() //创建空队列{ LinkQueue *q; QNODE *p; q=(LinkQueue*)malloc(sizeof(LinkQueue)); p=(QNODE*)malloc(sizeof(QNODE)); p-gt;next=NULL; q-gt;front=q-gt;rear=p; q-gt;num=0; return q;}int ISEmpty_SeqStack(SqStack *s) //判断栈是否为空,栈为空返回1{ if(s-gt;top ==-1) return 1; else return 0;}int ISFULL_SeqStack(SqStack *s,int n) //判断栈是否已满,若栈满返回1{ if(s-gt;top==n-1) return 1; else return 0;}int ISEmpty_LQueue(LinkQueue *q) //判断队列是否为空,队列为空返回1{ if(q-gt;front==q-gt;rear) return 1; else return 0;}void IN_Lqueue( LinkQueue *q,struct Node s) //入队{ QNODE *p; p=(QNODE*)malloc(sizeof(QNODE)); p-gt;data=s; q-gt;num++; p-gt;next=NULL; q-gt;rear-gt;next =p; q-gt;rear =p;}void Push_SeqStack(SqStack *p,struct Node s) //入栈{ p-gt;top ++; p-gt;data[p-gt;top]=s; p-gt;num++;}int POP_SeqStack(SqStack *s,struct Node car)//出栈{ SqStack *p; int t; p=Init_SeqStack(); while(s-gt;data[s-gt;top].NO !=car.NO)//找到车牌号为P.NO的车, { Push_SeqStack(p,s-gt;data[s-gt;top]); s-gt;top--; s-gt;num--; } t=car.time-s-gt;data[s-gt;top].time; s-gt;top--; s-gt;num--; while(ISEmpty_SeqStack(p)==0) { Push_SeqStack(s,p-gt;data[p-gt;top]); p-gt;top--; p-gt;num--; } return t;}struct Node Out_LQueue(LinkQueue *q) //出队{ QNODE *p; p=q-gt;front-gt;next; q-gt;front-gt;next=p-gt;next; q-gt;num --; if( q-gt;front-gt;next==NULL) q-gt;rear=q-gt;front; return p-gt;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-gt;num); printf("n"); printf("请输入车辆信息n"); } else { Push_SeqStack(parkstack,car); //入栈 printf("这辆车在停车场内第%d个位置n",parkstack-gt;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==0car.time==0 )//显示停车场的车数 { printf("停车场的车数为%dn",parkstack-gt;num); printf("n"); printf("请输入车辆信息n"); } if(car.AL=='W'car.NO==0car.time==0 )//显示候车场的车数 { printf("候车场的车数为%dn",parkqueue-gt;num); printf("n"); printf("请输入车辆信息n"); } scanf("%c,%d,%d",car.AL,car.NO,car.time); } printf("输入结束n"); return 1;}二、运行

关键词:a;;到达;l;;离开;p;;公园;q;;退出;w;;等等。


这就是本文的全部内容。希望对大家的学习有帮助