1.问题描述:

设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达的时间先后顺序依次排列,若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,由于停车场内是狭长的通道,在他之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,为它让路的车辆再按原次序进入车场。假设汽车不能从便道上开走。

2.基本要求

(1)栈用顺序结构实现,队列用链式结构实现。
(2)每一组输入数据包括三个数据项:汽车"到达"或"离去"的信息、汽车牌照号码、汽车到达或离去的时刻。
(3)对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出车辆在停车场内或便道上的停车位置;若是车辆离去,则输出车辆在停车场内停留的时间和应缴纳的费用(假设在便道上等候的时间不收费)。

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>
#include <time.h>
#define Stack_Size 4typedef struct{         //车辆信息 char number[10]; //车牌号 int reachHour;int reachMin;int seconds;
}Car;typedef struct Stack1{         //停车场 Car carNode[Stack_Size];int top;
}ParkingLot;typedef struct Stack2{          //临时栈,存放让路车 Car carNode[Stack_Size];int top;
}TempStack;typedef struct LNode{            //连接便道 Car data;LNode *next;
}*Linklist;typedef struct Queque{           //便道 ,封装队列头尾指针 Linklist front;Linklist rear;
}Path;void initStack(ParkingLot *pl){pl->top=-1;
} void initTempStak(TempStack *ts){ts->top=-1;
}void initQueque(Path *path){                       //头结点为空 path->front=(LNode *)malloc(sizeof(LNode));path->front->next=NULL;   path->rear=path->front;
}void listStack(ParkingLot *pl){int index;system("cls");printf("\n车牌号\t车道\t进场时间");              //车道=pl->top+1 for(index=0;index<=pl->top;index++){printf("\n%s\t%d\t%d:%d",pl->carNode[index].number,index+1,pl->carNode[index].reachHour,pl->carNode[index].reachMin);}getch();
}void listQueque(Path *path){system("cls");printf("\n便道状况:\n");Linklist p;p=path->front;p=p->next;while(p!=NULL){printf("%s号车正在便道等待\n",p->data.number);p=p->next;}printf("\n\n按任意键继续!");getch();
} void backPL(ParkingLot *pl,TempStack *ts){                //将临时栈的车开回停车场,更新车道值 pl->top=0;int tsTop;tsTop=ts->top;  while(pl->top!=tsTop||tsTop!=-1){                  //当临时栈不为空栈,且临时栈顶不等于停车场栈顶 pl->carNode[pl->top]=ts->carNode[ts->top];pl->top++;ts->top--;}
}void arrival(ParkingLot *pl,Path *path){time_t  p;struct tm *reach;Linklist temp;char c='y'; char num[10];while(c=='y'||c=='Y'){printf("\n请输入车牌号:");scanf("%s",&num);if(pl->top==Stack_Size-1){                            //当车位已满 temp=(LNode *)malloc(sizeof(LNode));strcpy(temp->data.number,num);temp->next=NULL;path->rear->next=temp;path->rear=temp;printf("\n车位已满,%s号车辆进入便道等候!",path->rear->data.number);printf("\n停车成功,是否继续停车(y/n)?");fflush(stdin);scanf("%c",&c);}else{                                                //当车位未满 pl->top++;time (&p);reach=localtime(&p);pl->carNode[pl->top].seconds=p;pl->carNode[pl->top].reachHour=reach->tm_hour;pl->carNode[pl->top].reachMin=reach->tm_min;strcpy(pl->carNode[pl->top].number,num);printf("\n停车成功,是否继续停车(y/n)?");fflush(stdin);scanf("%c",&c);}}} void leave(ParkingLot *pl,Path *path,TempStack *ts){char ch='y';int index;time_t  p;struct tm *leave;while(ch=='y'||ch=='Y'){system("cls");listStack(pl);printf("\n请输入要出场车辆的车道:");scanf("%d",&index);fflush(stdin);if(index-1>pl->top||index-1<0){          //index-1对应pl->top printf("\n请输入正确的车道!");printf("\n按任意键继续!");getch();}else{ts->top=-1;while(pl->top!=index-1){             //当要出车的车道不等于栈顶时,该车道之前的车进临时栈 ts->top++;ts->carNode[ts->top]=pl->carNode[pl->top];pl->top--;}                                 //此时要出车的车道等于栈顶时,直接出车,不需进临时栈 printf("\n提车成功!");time (&p);leave=localtime(&p);printf("\n%s的驶离时间为%d:%d,",pl->carNode[pl->top].number,leave->tm_hour,leave->tm_min);printf("收费 %2.1f元",(p-pl->carNode[pl->top].seconds)*0.02);         //假设每秒收费0.02元backPL(pl,ts); printf("\n是否继续提车?(y/n)");scanf("%c",&ch); }}}int menu(){int flag; system("cls");printf("\n************欢迎使用停车场管理系统************\n");printf("\n\t 按[1]停车");printf("\n\t 按[2]提车");printf("\n\t 按[3]查看停车场状况");printf("\n\t 按[4]查看便道状况");printf("\n\t 按[5]退出系统");printf("\n***************************************\n");do{printf("请输入1~5!!\n");scanf("%d",&flag);}while(flag<1||flag>5);return flag;
}void quit(){printf("\n\n谢谢使用!");exit(0);
}void initTempStak(TempStack *ts);
void initStack(ParkingLot *pl);
void initQueque(Path *path);
void arrival(ParkingLot *pl,Path *path);
void leave(ParkingLot *pl,Path *path,TempStack *ts);
void listStack(ParkingLot *pl);
void backPL(ParkingLot *pl,TempStack *ts);
int menu();
void listQueque(Path *path);int main(){ParkingLot pl;Path path;TempStack ts;initTempStak(&ts);initStack(&pl);initQueque(&path);while(1){switch(menu()){case 1:  arrival(&pl,&path); break;case 2: leave(&pl,&path,&ts); break;case 3:   listStack(&pl); break;case 4: listQueque(&path);    break;case 5:   quit(); break;}}getch();
}

模拟停车场管理C语言代码相关推荐

  1. Java模拟停车场管理

    简易模拟停车场管理 并不是非常地精致,各位大佬有优化建议尽管提. 1.Car.java import java.util.Objects;public class Car {/*** number:车 ...

  2. 停车场管理c语言课程设计,数据结构课程设计-停车场管理

    #include #include /** * 具体要求请看C语言数据结构课程设计 3.4.1:停车场管理系统 * 思路: * 进: * 1. 车按照顺序先进去通道(入队列) * 2. 给出指定,让先 ...

  3. 猜数字游戏 模拟用户登录场景 模拟屏幕输出 C语言代码实现详细

    范围在 0-100 的猜数字游戏 c语言代码实现 //1-100猜数字游戏 #include<stdio.h> #include<stdlib.h> //随机数函数头文件 #i ...

  4. c语言编程模拟进程管理,C语言如何模拟进程管理?

    C语言如何模拟进程管理? 发布日期:2016-01-04 09:15 来源: 标签: 编程语言 C教程 C语言模拟进程 C语言模拟进程管理 本章我们主要学习C语言如何模拟进程管理,下面我们就做一下具体 ...

  5. 程序设计与实践 停车场管理 C语言

    实验内容: 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门供车辆进出.车辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放(即最先到达的一辆车停放在停车场的最里面).如果停车场已放满n ...

  6. 停车自助缴费模拟系统c语言,停车场管理系统C语言实现,全动画模拟.doc

    停车场管理系统C语言实现,全动画模拟 停车场管理系统C语言实现,全动画模拟#include#include#include#include#include#include#define PASSWOR ...

  7. 停车场系统管理c语言程序代码,停车场管理系统程序源代码

    一个简单的停车场管理系统c语言代码 #include #include #define N 30 /*停车场类最多的停车数*/ #define M 20 /*便道内最多的停车数*/ #define p ...

  8. 停车场管理系统C语言作业,c语言课程设计报告停车场管理系统

    c语言课程设计报告停车场管理系统 C 语言课程设计报告 --停车场管理 1 班 级: 192102 学 号: 20101003907 姓 名: 聂 彪 指导教师: 张冬梅 时 间: 2011 年 6 ...

  9. C语言课程设计之停车场管理问题

    C语言课程设计之停车场管理问题 1.问题描述:停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第 ...

最新文章

  1. unix网络编程 ubuntu下搭建环境编译源码
  2. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170325
  3. Transformer升级之路:博采众长的旋转式位置编码
  4. 由CloudStack项目引起的ESXI嵌套虚拟化引起的二级虚拟机无法被访问
  5. MySQL数据库 --基础
  6. 工程监测管理平台、工程数据看板、工程总览、动态模型、数据分析、数据跟踪、建筑工地、数据报表、警点管控、现场记录、观测记录、测点管理、模型管理、文档管理、墙体下沉、成员管理、axure原型、产品原型
  7. c语言课程设计做科普,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  8. PyTorch:模型训练和预测
  9. virtualbox虚拟机下的cdlinux找不到无线网卡的解决方法
  10. 最新服装零售软件管理排名
  11. lowB三人组排序算法及其时间复杂度
  12. python线程isalive_如何在线程类上使用.isAlive()
  13. CentOS6.5下搭建LAMP+FreeRadius+Daloradius Web管理和TP-LINK路由器、H3C交换机连接,实现,上网认证和记账功能
  14. 机器学习-SVM硬间隔与软间隔:重要参数C
  15. 指纹识别 python实现_Python语言之指纹识别是目前最成熟的识别技术!Python能分分钟做出一个来!...
  16. Lucene入门教程及java实现
  17. Tomcat在指定JDK版本启动
  18. JSOI2019招待
  19. 指出 寻址方式,并计算 物理地址(汇编练习题)
  20. python 利用win32 打印文件

热门文章

  1. 诺基亚215 4G支付版上市,预售279元,长辈出门也无需现金了!
  2. 【模板】KMP字符串匹配
  3. 2022-2027年中国空港物流行业发展前景及投资战略咨询报告
  4. 安徽大学历年计算机考研复试分数线,安徽大学社会工作硕士历年复试分数线_社会工作考研分数线_复试线 - 希赛网...
  5. linux文件夹制作iso,Linux 制作 ISO
  6. 如何高效地准备技术面试?
  7. Access 2007 宝典--学习笔记7(VBA)
  8. 理解yolov6网络结构
  9. Camtasia Studio2022电脑屏幕录制工具详细功能介绍
  10. 《深度学习推荐系统》读书笔记之推荐系统的进化之路