设有一个可以停放n(n>=5)辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆在依原来的次序进场。每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。如果停留在便道上的车 未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制模拟该停车场的管理的程序。

源代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define MAXSIZE 2    //定义停车场的最大容量
#define MAX 10 //定义便道的最大容量 
#define OK 1
#define ERROR 0 
//建立车辆停留时间结点
float parktime;//车辆停留的总时间,全局变量
char panduan[10];//用于判断条件 
struct shijian
{
    int hour;
    int minute;
};
//建立车辆信息的结点结构
typedef struct node
{
    char num[10];//牌照信息
    int panduan; //如果是1,表示到达,0表示离去 
    struct shijian arrivetime;
    struct shijian leavetime;
}cardata;
//建立存放停车场车辆的栈
//临时栈和实际停车场站可建立一个栈数组 
typedef struct
{
    cardata elem[MAXSIZE];
    int top; 
}carstack;
void initstack(carstack* s)
{
    s->top = -1;
}
int isempty(carstack* s)//判断空 
{
    return(s->top == -1 ? OK : ERROR);
}
int isfull(carstack* s)
{
    return(s->top == MAXSIZE - 1 ? OK : ERROR);
}
int push(carstack* s, cardata x)
{
    if (!isfull(s)) //站满不执行 
    {
        s->top++;
        s->elem[s->top] = x;
        return OK;
    }
    else
        return ERROR;
}
int pop(carstack* s, cardata* x)
{
    if (!isempty(s))
    {
        *x = s->elem[s->top];
        s->top--;
        return OK;
    }
    else
        return ERROR;
}
//构建计算停车场收费函数 
float charge(cardata* x)//传入需要计算停车费的车辆信息,返回停车的总费用
{
    int first;//停车起始费用
    int h;//从第二个小时开始,每小时收取的费用
    float last;//总费用 
    float t;//用于计算时间差,单位为hour
    printf("请输入起始费用:\n");
    scanf("%d", &first);
    printf("请输入每小时收取的费用:\n");
    scanf("%d", &h);
    t = abs(x->leavetime.hour - x->arrivetime.hour) + abs(x->leavetime.minute - x->arrivetime.minute) / 60.0;
    parktime=t;
    if (t <= 1)
    {
        return first;
    }
    else
    {
        last = first + h * (t - 1.0);
        return last;
    }
}
//利用队列建立便道
typedef struct
{
cardata queue[MAX];
int front,rear;    
}carqueue;
void initqueue(carqueue* sq)//队列的初始化 
{
    sq->front=sq->rear=0;
}
int queueempty(carqueue* sq)//判断队列是否为空 
{
 return(sq->front==sq->rear?OK:ERROR);    
}
int queuefull(carqueue* sq)
{
return ((sq->rear+1)%MAX==sq->front? OK:ERROR);
}
//入队
int enterqueue(carqueue* sq,cardata x)
{
    if(!queuefull(sq))
    {   
        sq->rear++;
        sq->queue[sq->rear]=x;
        return OK;
    }
    else
    {
        printf("队列已满,无法入队\n");
        return ERROR; 
    }
}
//出队
int  deletequeue(carqueue* sq,cardata* x)
{
     if(!queueempty(sq))
    {
    *x=sq->queue[sq->front];
    sq->front++;
    return OK;    
    }
    else
    { 
    return ERROR;    
    }    
}
                      
int main()
{   
    cardata mycar;//创建一个输入车的变量 
    carstack park;//建立一个停车场
    carstack tempark;//建立一个临时停车场
    carqueue way; //建立一个通道 
    int f;//便道的第几个位置 
    initstack(&park);
    initstack(&tempark);
    initqueue(&way);
    printf("亲爱的顾客:\n"); 
    printf("\t\t欢迎使用停车场管理系统\t\t\n");
do

    printf("请输入您是到达还是离去:(到达按1,离去按0)\n");
    scanf("%d",&mycar.panduan);
    if(mycar.panduan==1)//表示到达 
      {
          printf("请输入您的车牌号(例如苏A12345)\n");
        scanf("%s",&mycar.num); 
        printf("请输入您到达的时间(小时+分钟):\n");
        scanf("%d %d",&mycar.arrivetime.hour,&mycar.arrivetime.minute);
        if(!isfull(&park)) //如果停车场不满 
        {
            push(&park,mycar);//将车开入
            printf("您的车目前停在%d车位(一共%d个车位)\n",park.top+1,MAXSIZE); 
        } 
        else //如果停车场已满,则将车存入便道 
        {
            if(!queuefull(&way))//如果便道不满
            {
            enterqueue(&way,mycar);
            f++; 
            printf("您的车目前停在便道的第%d个位置(便道一共有%d个位置)\n",f,MAX); 
            }
            else
            printf("此停车场已经超载,无法继续停车,请稍后再来\n");
        }
       }
    else//表示离开 
    {   
        int i,j,k;  
        if(!isempty(&park)) //停车场有车的情况下 
       {
        printf("请输入您的车停在停车场的第几号位:\n");
        scanf("%d",&i);
        printf("请输入现在的时间(小时+分钟)\n");
        scanf("%d %d",&park.elem[i-1].leavetime.hour,&park.elem[i-1].leavetime.minute); 
        printf("您的车辆所需要支付的费用为:%0.2f元\n",charge(&park.elem[i-1]));
        printf("您在停车场内停留的时间为%0.2f小时",parktime);
        j=park.top;
        cardata t;//中间变量
        cardata s; 
        for(j;j>i-1;j--)//出的车辆后面的车辆出栈,表示让路 
        {
            pop(&park,&t);//让路的车出栈 
            push(&tempark,t);//放入临时停放栈 
        }
        pop(&park,&s);//自己的车出栈,即删除
        while(!isempty(&tempark)) //将临时栈的车出栈进入停车场 
        {
            pop(&tempark,&t);
            push(&park,t);
        }
        if(!queueempty(&way))
        { 
        deletequeue(&way,&t);//将便道的第一辆车出队
        f--;
        push(&park,t);//进入停车场
        }
       }
       else//停车场无车 
       {
       printf("您的操作有误!停车场内无车...\n"); 
       } 
    }
   printf("以上进程执行完毕,是否重新执行,请键入y或n以回车键结束:\n");
   scanf("%s",panduan);    
}while(!strcmp(panduan,"y"));
    return 0;
}

运行结果:

创作不易,感谢支持

停车场管理系统实习题〈数据结构〉相关推荐

  1. 停车场管理系统程序设计c语言数据结构,数据结构(C语言)—停车场管理系统...

    2014-01-02 回答 #include #include #include #include #define max 3 #define price 1 int b=1; typedef str ...

  2. 计算机课程设计收费管理系统,数据结构课程设计报告---收费停车场管理系统

    数据结构课程设计报告---收费停车场管理系统 (20页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 XX大学计算机与电子 信息学院< ...

  3. c语言数据结构课程设计停车场管理系统,数据结构课程设计报告停车场管理系统...

    <数据结构课程设计报告停车场管理系统>由会员分享,可在线阅读,更多相关<数据结构课程设计报告停车场管理系统(8页珍藏版)>请在人人文库网上搜索. 1.数据结构课程设计报告系 别 ...

  4. 数据结构课程设计-停车场管理系统

    利用前面所建立的算法库基础进行的课程设计,名曰停车场管理系统 具体利用顺序栈以及链队等知识 当车辆进入时,输入车辆车牌号码并且自动获取当前系统时间. 具体请运行代码. parking.h: 包含定义顺 ...

  5. C语言数据结构练习——停车场管理系统(使用栈和队列)(草稿的草稿)

    (代码很乱,也没什么注释,调试信息也没删,真心不是给别人看的东西,等标题上的草稿两字没了再看也不迟.)(注:标题带有"草稿"两字的,质量普遍很低,亲们,就不要浪费时间在上面吧) 题 ...

  6. 数据结构大作业之停车场管理系统

    数据结构大作业之停车场管理系统 安排: 1. 分析停车场的数据属性,并依据停车场管理的功能要求,确定模拟系统设计方案: 2. 完成停车场管理的数据结构设计工作,包括栈和队列的逻辑结构和存储结构等: 3 ...

  7. java数据结构停车场管理系统_《数据结构》实验设计报告-停车场管理系统

    <<数据结构>实验设计报告-停车场管理系统>由会员分享,可在线阅读,更多相关<<数据结构>实验设计报告-停车场管理系统(28页珍藏版)>请在人人文库网上 ...

  8. java数据结构停车场管理系统_停车场管理系统数据结构毕业论文.doc

    PAGE PAGE \* MERGEFORMAT 20 数据结构课程设计题目: 停车场管理系统 姓名: 邓全飞 学号: 201120320105 专业: 信息与计算科学 指导老师:姜俊坡 目 录 TO ...

  9. [数据结构实践项目]变态的停车场管理系统

    [数据结构实践项目]变态的停车场管理系统 项目简介 设停车场是一个可以停放 n 辆汽车的南北方向的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在 ...

最新文章

  1. 志澄观察:卫星互联网——太空经济新动力
  2. Python中str.replace()的使用方法
  3. python访问序列元素的编号用什么括起来_Python 序列通用操作介绍
  4. DataSet转换为实体(函数)
  5. MybatisPlus中@TableField注解的使用
  6. Django中如何防范CSRF跨站点请求伪造攻击
  7. ad19原理图标注_AD19中原理图的模板如何进行编辑?
  8. Python基础(四)函数
  9. 【问题】父套子时,‘阻止子元素的外边距传递给父元素’与闭合浮动
  10. android view state,Android状态系统(二)——View状态组合
  11. 多媒体交互应用基础(7)
  12. PPP项目群管理模式的实践探索——以浙江交工富阳PPP项目群为例
  13. 论坛源码推荐(12月24日):OS X原生开源游戏模拟器OpenEmu iOS 7条形码扫描器
  14. 电磁兼容测试分析软件软件,电磁兼容测试方案的主要应用
  15. lettcode算法题目--玛祖游戏
  16. Excel转PDF 一百行代码超简单
  17. Mysql定义DELETE操作触发器,将删除数据存入历史表
  18. 【20230302】【剑指1】数学(中等)
  19. 人与计算机进行交互的接口,5种新型人机交互技术
  20. 搭建Discuz论坛网站-最新版Discuz3.4

热门文章

  1. [Java]使用jConsole导出java程序的heap dump文件
  2. 学校计算机使用维护管理制度,计算机教室使用管理制度
  3. 牛客 - 统计每个月兔子的数量
  4. Linux-Centos7搭建k8s前系统配置项
  5. XXXX工程割接方案
  6. C++ 判断 IP 是否在 1网段。 char string 查找 截取 比较
  7. http://blog.csdn.net/jame_peng
  8. Echarts学习之十一:地理坐标系geo
  9. 长城wifi服务器没响应,wifi设置网站进不去怎么办,教你一招轻松解决
  10. 《痞子衡嵌入式半月刊》 第 41 期