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.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言编写学生成绩管理系统

    用C语言编写学生成绩管理系统代码,供大家参考,具体内容如下 C语言实现学生成绩管理系统实战教学 https://www.jb51.net/article/154767.htm (1)给出所选课程设计题目以及本题目具体所要完成的功能要求说明. 1.课程设计题目:学生成绩管理系统 2.完成的功能要求: (1).主要实现的功能: 1---学生输入 2---学生插入 3---学生查询(按学号) 4---学生删除 5---学生输出 6---计算每名学生的平均分并输出 7---计算每科的平均分并输出 8--

  • C语言实现简单停车场管理系统

    本文实例为大家分享了C语言停车场管理系统的具体代码,供大家参考,具体内容如下 /*************************************************************************** 项目要求 停车场管理 问题描述:停车场是一个能放n辆车的狭长通道, 只有一个大门,汽车按到达的先后次序停放.若 车场满了,车要停在门外的便道上等候,一旦有 车走,则便道上第一辆车进入.当停车场中的车 离开时,由于通道窄,在它后面的车要先退出, 待它走后再依次进入.汽车

  • C语言职工信息管理系统源码

    本文实例为大家分享了C语言职工信息管理系统的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> struct worker { char ID[20];//工号 char name[20];//姓名 char sex[5];//性别 char born[20];//生日 char edu[20];//学历 char po

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

    问题描述:停车场是一个能放n辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放.若车场满了,车要停在门外的便道上等候,一旦有车走,则便道上第一辆车进入.当停车场中的车离开时,由于通道窄,在它后面呢的车要先退出,待它走后再依次进入.汽车离开时按停放时间收费. 基本功能要求: (1)建立三个数据结构分别是:停放队列.让路栈.等候队列. (2)输入数据模拟管理过程,数据(入或出,车号). 停车管理系统是C语言中队列和栈比较简单的应用,需要注意的是停车队列.等候队列.让路栈结构体的构建.在写代码时,

  • C语言设计图书登记系统与停车场管理系统的实例分享

    图书登记管理系统 图书登记管理系统应该具有下列功能: (1). 通过键盘输入某本图书的信息: (2) .给定图书编号,显示该本图书的信息: (3) .给定作者姓名,显示所有该作者编写的图书信息: (4) .给定出版社,显示该出版社的所有图书信息: (5) .给定图书编号,删除该本图书的信息: (6) .提供一些统计各类信息的功能. 程序完整的实现代码如下: #include "stdio.h" #include "stdlib.h" #include "s

  • C语言通讯录管理系统完整版

    C语言实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算字节//

  • C语言源码实现停车场管理系统

    本文实例为大家分享了C语言停车场管理系统的具体代码,供大家参考,具体内容如下 题目要求: 刚开始在Codeblocks下用C语言写的,但是用指针传递参数的时候总是出问题.后来就用C++,但是调用了C的输入输出和文件操作的头文件,所以代码都是C的 main.cpp #include <iostream> #include <cstdio> #include <cstdlib> #include <windows.h> #include <ctime>

  • C语言实现游戏VIP停车场管理系统

    在数据结构这部分学习结束后,写一个小项目,我想是对这部分知识一个很好的运用过程. 我在这介绍我写的一个项目,游戏停车场(这个版本只是初级版,可以在这之上继续添加很多其他功能,大家可以自己尝试). 功能要求如下: 程序如下: /*************************************************************************** 项目要求 游戏VIP停车场 问题描述:停车场是一个能放10辆车的车场(链表实现), 汽车按到达的先后次序停放 在等候区.若

  • C语言数组实现公交车管理系统

    本文实例为大家分享了C语言实现公交车管理系统的具体代码,供大家参考,具体内容如下 /**************************头文件声明************************************/ #include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" /*************************

  • C语言实现停车场管理

    C语言课程设计之停车场管理问题,供大家参考,具体内容如下 1.问题描述:停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入:当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它

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

    C语言课程设计之停车场管理问题,供大家参考,具体内容如下 1.问题描述 停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入:当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它

  • JVM内存管理之JAVA语言的内存管理详解

    引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓狂的内存溢出和泄露的问题. 可怕的事情还不只如此,有些使用其它语言开发的程序员,给JAVA程序员扣上了一个"不懂内存"的帽子,这着实有点让人难以接受.毕竟JAVA当中没有malloc和delete.没有析构函数.没有指针,刚开始接触JAVA的程序员们又怎么可能接触内存这一部分呢,更何况有不

  • 一文秒懂C语言/C++内存管理(推荐)

    C 语言内存管理指对系统内存的分配.创建.使用这一系列操作.在内存管理中,由于是操作系统内存,使用不当会造成毕竟麻烦的结果.本文将从系统内存的分配.创建出发,并且使用例子来举例说明内存管理不当会出现的情况及解决办法. 一.内存 在计算机中,每个应用程序之间的内存是相互独立的,通常情况下应用程序 A 并不能访问应用程序 B,当然一些特殊技巧可以访问,但此文并不详细进行说明.例如在计算机中,一个视频播放程序与一个浏览器程序,它们的内存并不能访问,每个程序所拥有的内存是分区进行管理的. 在计算机系统中

  • C语言实现餐饮管理与点餐系统

    本文实例为大家分享了C语言实现餐饮管理与点餐系统的具体代码,供大家参考,具体内容如下 一.项目简介 1.本程序实现了用户的点餐功能,共包含五类菜品:凉菜.热菜.锅仔.主食.饮品.还有查看所点菜品与结束等功能. 2.后台管理员:按a可进入,主页面并未提示. 3.合理运用getch函数,清屏与暂停函数,页面整洁清爽. 4.菜品与txt文件对应,可实现对程序与txt的同步增删改查等功能. 5.使用了C语言很多基础语法:函数.指针.结构体.文件等. 二.程序说明 程序运行后在主页面按a进入后台管理页面,

  • C语言动态内存管理的实现

    目录 1. 摘要 2. 为什么存在动态内存管理 3. 动态内存函数 3.1 malloc 3.2 free 3.3 calloc 3.4 realloc 4. 常见的动态内存错误 5. 几个经典笔试题 参考答案 6. 参考文献 1. 摘要 本文主要详解C语言中的动态内存分配 2. 为什么存在动态内存管理 我们先来看一段变量的声明: double x = 1.000000; char str[] = "abcdef"; 好的,上述变量的声明有何特点呢? 请思考一下,我的朋友. 对,没错,

  • C语言动态内存管理分析总结

    目录 什么是动态内存分配 动态内存函数的介绍 free malloc calloc realloc 动态内存管理中常见的错误 对NULL指针的解引用操作 对动态开辟空间的越界访问 对非动态开辟内存使用free释放 使用free释放一块动态开辟内存的一部分 对同一块动态内存多次释放 动态开辟内存忘记释放(内存泄漏) 一些经典的笔试题 题目1 题目2 题目3 题目4 柔性数组 柔性数组的特点 柔性数组的优势 什么是动态内存分配 我们都知道在C语言中,定义变量的时候,系统就会为这个变量分配内存空间,而

  • C语言动态内存管理介绍

    目录 前言: C 语言为内存的分配和管理提供了几个函数: 1.malloc() 用法 2.calloc() 用法 3.realloc() 与 free() 用法 前言: 简单记录一下,内存管理函数 为什么使用动态内存呢? 简单理解就是可以最大限度调用内存 用多少生成多少,不用时就释放而静止内存不能释放 动态可避免运行大程序导致内存溢出 C 语言为内存的分配和管理提供了几个函数: 头文件:<stdlib.h> 注意:void * 类型表示未确定类型的指针  1.malloc() 用法  分配一块

  • 关于C语言动态内存管理介绍

    目录 1.为什么需要动态内存分配 2.有关动态内存函数介绍 2.1 malloc和free 2.2 calloc函数 2.3 realloc函数 3. 常见的动态内存错误 3.1 对NULL指针进行解引用操作 3.2 对动态开辟空间的越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态开辟内存的一部分 3.5 对同一块动态内存多次释放 3.6 动态开辟内存忘记释放(内存泄漏) 总结 1.为什么需要动态内存分配 关于这个问题,我们先看看我们之前是如何开辟内存的. i

  • C语言 动态内存管理全面解析

    目录 1. 为什么存在动态内存分配 2. 动态内存函数的介绍 2.1 malloc和free 2.2 calloc 2.3 realloc 3. 常见的动态内存错误 3.1 对NULL指针的解引用操作 3.2 对动态开辟空间的越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态开辟内存的一部分 3.5 对同一块动态内存多次释放 1. 为什么存在动态内存分配 *动态内存开辟在堆区* 我们已经掌握的开辟内存方式是类型直接定义变量,开辟的内存是固定的,像: int a=

随机推荐