模拟停车场管理系统(c++,使用栈和队列)

这篇具有很好参考价值的文章主要介绍了模拟停车场管理系统(c++,使用栈和队列)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、问题描述

二、算法结构分析与设计

三、算法主模块的流程及各子模块的主要功能

四、算法详细设计

五、源代码


一、问题描述

  1. 功能要求

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

     2.输入输出要求

每一组输入数据要求包括三个数据项:汽车“到达”或“离去”的信息、汽车拍照号码、汽车到达或者离去的时刻。

二、算法结构分析与设计

  1. 时间

typedef struct Time

{

    int mon=0;

    int date=0;

    int hour=0;

    int min=0;

    int sec=0;

    

}Time;

2.汽车

typedef struct Car

{

    string ChePai="";

    Time in;

    Time out;

}Car;

3.顺序栈

typedef struct SeqStack

{

    Car CheWei[MAXSIZE];

    int top=-1;

    

}SeqStack;

4.链式队列

typedef struct QNode

{

    Car data;

    QNode *next=NULL;

    

}QNode;

typedef struct LQueue

{

    QNode *front,*rear;

    

}LQueue;

三、算法主模块的流程及各子模块的主要功能

子模块的主要功能:

1)压栈和出栈SeqStack* InStack(SeqStack* pl,Car a)

SeqStack* OutStack(SeqStack* pl,Car a)

2)入队和出队LQueue* InQueue(Car a,LQueue* p)

Car OutQueue(LQueue* p)

3)初始化队LQueue* InitLQueue()

4)获取系统时间计算时间差void differ(Time in,Time out)

Time GetTime()

5)算钱int MoneyCalculate(int MoneyPH,Time in,Time out)

主程序流程

模拟停车场管理系统(c++,使用栈和队列)

四、算法详细设计

1.写出各个模块的伪码算法

得到系统时间:

{获取系统时间

赋值返回

}文章来源地址https://www.toymoban.com/news/detail-472543.html

寻找车辆用于查询:

{遍历栈,若查询到车牌一致,返回

遍历队列,若查询到车牌一致,返回

}

入栈:

{top指针上移

获取系统时间,赋给car进入的时间

装填数据

}

出栈:

{如果内部车辆出栈,外部车辆压入辅助栈,内部车辆出栈,外部车辆压回;

如果最外边的车辆出栈,则直接出栈。

获取系统时间,计算时间差,计算应缴纳的金额。

}

计算缴纳的费用:

{计算停泊了几个小时,不超过半个小时的部分忽略不计

自定义每小时停泊的价格,返回总金额

}

初始化队:

{申请头节点空间和第一个数据节点的空间

头节点的头尾指针均指向第一个数据节点

第一个数据节点的后继置空

返回头节点

}

入队:

{获取系统时间,赋给进入的车辆

如果此时便道内没有车辆,第一个数据节点装填

如果此时便道内已经有了车辆,申请新的节点空间,装填数据,尾指针后移

返回头节点

}

出队:

{如果便道内有多个车辆,用一个node类型指针指向待入车辆,用一个car变量承接数据,出队之后释放指针指向的空间,返回承接的数据

如果只有一个车辆,用一个car类型指针指向数据,承接数据后释放指针,返回数据

}

五、源代码

#include<iostream>
#include<time.h>
using namespace std;
#define MAXSIZE 5
typedef int DataType;

//定义时间
typedef struct Time
{
    int mon=0;
    int date=0;
    int hour=0;
    int min=0;
    int sec=0;
    
}Time;


typedef struct Car
{
    string ChePai="";
    Time in;
    Time out;
    
}Car;


//定义顺序栈
typedef struct SeqStack
{
    Car CheWei[MAXSIZE];
    int top=-1;
    
}SeqStack;


//定义链式队列
typedef struct QNode
{
    Car data;
    struct QNode *next=NULL;
    
}QNode;

typedef struct LQueue
{
    QNode *front=NULL,*rear=NULL;
    
}LQueue;


void TimePrint(Time a)
{
    cout<<"时间为:"<<a.mon<<"月 "<<a.date<<"日 "<<a.hour<<"时 "<<a.min<<"分 "<<endl;
    
}


Time GetTime()
{
    Time a;
    time_t t;
    tm *p;
    time(&t);
    p=localtime(&t);
    a.mon=p->tm_mon+1;
    a.date=p->tm_mday;
    a.min=p->tm_min;
    a.hour=p->tm_hour;
    a.sec=p->tm_sec;
    return a;
}

Car Search(SeqStack* pl,LQueue* bd,Car op)
{
    int j=1;
    //先在栈内找
    for(int i=0;i<=pl->top;i++)
    {
        if(pl->CheWei[i].ChePai==op.ChePai)
        {
            cout<<"在第"<<i+1<<"号车位"<<endl;
            
            return pl->CheWei[i];
        }
    }
    
    //然后在队列里找
    QNode* p=bd->front;
    while(op.ChePai!=p->data.ChePai&&p->next!=NULL)
    {
        p=p->next;
        j++;
    }
    cout<<"车在便道的第"<<j<<"位"<<endl;
    return p->data;
}

SeqStack* InStack(SeqStack* pl,Car a)
{
    pl->top++;
    
    a.in=GetTime();
    pl->CheWei[pl->top]=a;
    TimePrint(a.in);
    return pl;
}

//汽车离去,出栈
SeqStack* OutStack(SeqStack* pl,Car a)
{
    SeqStack* fz=new SeqStack();//注意,需要将指针初始化。
    
    while(pl->CheWei[pl->top].ChePai!=a.ChePai)
    {
        fz->top++;
        fz->CheWei[fz->top]=pl->CheWei[pl->top];
        pl->top--;
        
    }
    
    while(fz->top!=-1)
    {
        
        pl->CheWei[pl->top]=fz->CheWei[fz->top];
        pl->top++;
        fz->top--;
        
    }
    pl->top--;
    a.out=GetTime();
    TimePrint(a.out);
    int MoneyCalculate(int MoneyPH,Time in,Time out);
    int money=MoneyCalculate(5,a.in,a.out);//所需要的金额一并输出
    void differ(Time in,Time out);
    differ(a.in,a.out);
    cout<<"应缴纳:"<<money<<"元"<<endl;
    return pl;
}

//算钱
int MoneyCalculate(int MoneyPH,Time in,Time out)
{
    int money;
    if(out.min<in.min)
    {
        out.hour--;
        out.min+=60;
        
    }
    if(out.min-in.min>=30)
        out.hour++;//超过半个小时部分按一个小时计算
    money=MoneyPH*(out.hour-in.hour);
    return money;
    
}

//计算时间差
void differ(Time in,Time out)
{
    Time d;
    if(out.min<in.min)
    {
        out.hour--;
        out.min+=60;
        
    }
    d.hour=out.hour-in.hour;
    d.min=out.min-in.min;
    TimePrint(d);
    
}

LQueue* InitLQueue()
{
    LQueue* p=new LQueue();
    QNode* q=new QNode();
    p->front=q;
    p->rear=q;
    q->next=NULL;
    return p;
    
    
}
LQueue* InQueue(Car a,LQueue* p)
{//传入需要入队的车辆信息和便道队的地址
    a.in=GetTime();
    if(p->front->data.ChePai=="")
    {
        p->front->data=a;
        return p;
    }
    else
    {
        QNode* q=new QNode();
        q->data=a;
        p->rear->next=q;
        p->rear=q;
        return p;
    }
}

//出队,得到车辆
Car OutQueue(LQueue* p)
{
    Car RIn;
    Car* op1;
    if(p->front!=p->rear)
    {
        QNode* q=p->front;
        p->front=p->front->next;
        RIn=q->data;
        free(q);
        return RIn;
    }
    else
    {
        RIn=p->front->data;
        op1=&(p->front->data);
        free(op1);
        return RIn;
        
    }
    
}

void CarInfPrint(Car a)
{
    cout<<"车牌号为:"<<a.ChePai<<endl;
    
    
}


int main()
{
    string a;
    SeqStack* pl=new SeqStack;
    SeqStack fz;
    LQueue* bd=InitLQueue();
    string cp;
    Car op;
    Car op1;
    
    cout<<"欢迎来到模拟停车场管理程序"<<endl;
    while(true)
    {
        cout<<"查询车辆信息请输入1,录入车辆信息请输入2"<<endl;
        cin>>a;
        
        //查询车辆信息
        if(a=="1")
        {
            cout<<"请输入车牌号:"<<endl;
            cin>>op.ChePai;
            op=Search(pl, bd, op);
            differ(op.in,GetTime());
            CarInfPrint(op);//车牌号打印正常。
            continue;
        }
        
        //录入车辆信息
        if (a=="2")
        {
            string b;
            
            cout<<"离去请按1,到达请按2"<<endl;
            cin>>b;
            
            //离去
            if(b=="1")
            {
                
                cout<<"请输入车牌号:"<<endl;
                cin>>op.ChePai;
                op=Search(pl, bd, op);
                OutStack(pl, op);
                if(bd->front->data.ChePai!="")
                {
                    op1=OutQueue(bd);
                    InStack(pl,op1);
                }
                continue;
                
            }
            //到达
            if(b=="2")
            {
                cout<<"请输入车牌号:"<<endl;
                cin>>cp;
                op.ChePai=cp;
                if(pl->top==MAXSIZE-1)
                    InQueue(op,bd);
                if(pl->top<MAXSIZE-1)
                    InStack(pl,op);
                CarInfPrint(op);
                continue;
            }
            else
            {
                cout<<"输入错误,请重新输入"<<endl;
                continue;
            }
        }
        
        else
        {
            cout<<"输入错误,请重新输入"<<endl;
            continue;
        }
    }
}

到了这里,关于模拟停车场管理系统(c++,使用栈和队列)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于python的停车场管理系统的设计与实现/智能停车管理系统

    车位信息 是 停车场供应用户 必不可少的一个部分。在 停车场发展 的整个过程中, 车位信息 担负着最重要的角色。为满足如今日益复杂的管理需求,各类 系统管理 程序也在不断改进。本课题所设计的 停车场管理系统 , 使用 Django 框架 , Python语言 进行开发,它的优点代

    2024年02月10日
    浏览(43)
  • 停车场管理系统(C语言)

    1、问题描述 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待

    2024年02月04日
    浏览(42)
  • 用JAVA实现停车场管理系统

    该程序使用ArrayList存储停车记录,并通过switch-case语句实现菜单选择功能。主要功能包括: 停车:输入车牌号和进入时间,自动分配停车位编号, 结算:根据停车位编号计算停车费用,计费标准为停车时长(秒)乘以每秒费用0.05元,同时记录车辆离开时间和费用; 查看记录

    2024年02月11日
    浏览(41)
  • 数据结构停车场管理系统设计

    数据结构与算法分析课程设计之数据结构停车场管理系统设计。主要应用到数据结构中的栈与队列。运用到的编程语言为C++。 目录 一  设计要求  二 思路分析 三 设计流程 先附上完整代码: 运行结果图: 1.1 问题描述 :设停车场是一个可停放n辆车的狭长通道,且只有一个

    2024年02月04日
    浏览(45)
  • 停车场管理系统文件录入(C++版)

    ❤️作者主页:微凉秋意 ✅作者简介:后端领域优质创作者🏆,CSDN内容合伙人🏆,阿里云专家博主🏆 之前写的停车场管理系统或者是通讯录管理系统都没有使用 文件 录入、保存数据,今天带来一个文件录入信息的C++版停车场管理系统。代码部分都会有详细注释,稍加思

    2024年02月03日
    浏览(41)
  • 基于Web的停车场管理系统(Java)

    目录 一、系统介绍 1.开发的环境 2.本系统实现的功能 3.数据库用到的表 4.工程截图 二、系统展示 1、登录页面  2、首页 3、系统信息管理模块   4、车位信息管理模块  5、IC卡信息管理模块 ​编辑6、固定车主停车管理模块 7、临时车主停车管理模块 8、系统功能操作模块 三

    2024年02月10日
    浏览(37)
  • Python 实验报告,实现停车场收费管理系统

    3.某小型收费停车场有50个车位,有一个入口与一个出口,满1小时收费1元,不足1小时不收费,10元封顶,超过1天罚款200元。编写程序实现停车场出入口管理。 要求: (1)定义出入口类,将车位总数与目前停在停车场的车辆信息(每辆车包括车牌和入场时间)定义为类属性;

    2024年02月12日
    浏览(44)
  • 【数据结构】停车场管理系统程序设计

    说明: 该程序设计采用常见基础的数据结构栈和队列实现了一个简单停车场管理系统。在具体设计中,实现了系统页面和停车场的示意图显示,通过调用顺序栈和链队的相关函数,模拟了实际停车场的运营流程。 目录 1 任务内容 2 需求分析 2.1 功能需求 2.2 输入输出需求 3 概

    2024年02月03日
    浏览(47)
  • 【计算机毕业设计】智能停车场管理系统

          摘 要 本论文主要论述了如何使用JAVA语言开发一个智能停车场管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述智能停车场管理的当前背景以及系统开发的目的,后续章节将严格按照

    2024年02月06日
    浏览(37)
  •  基于JAVAEE的停车场管理系统(论文+PPT+源码)

      详情介绍 毕业设计(论文) 论文题目 基于JAVAEE的停车场管理系统 Thesis Topic JAVAEE – based parking management system 毕业设计(论文)任务书 毕业设计(论文)题目:基于JAVAEE的停车场管理系统毕业设计(论文)要求及原始数据(资料):1.了解当前停车场管理的实际需求,确

    2024年02月03日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包