栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

停车场停车管理

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

停车场停车管理

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

2代码

#include
#include
#include
#include
#define ok 1
#define error 0
#define maxsize 3 //停车场的最大容量,根据具体情况设置
typedef struct  //时间的数据结构 
{
    int hour;//命名时 
    int minute;//命名分钟 
}date;
typedef struct  //汽车的信息数据结构 
{
    int getleave;
    char number[8];
    int Location;
    date time;
}car;
typedef struct  //构建栈 
{
    car *top; //栈顶 
    car *base; //栈底 
    int stacksize;//栈空间大小 
}Sqstack;
void Initstack(Sqstack* s) //栈的初始化 
{
    s->base = (car*)malloc(maxsize * sizeof(car)); //为顺序栈动态分配一个最大容量为maxsize的数组空间 
    if (!s->base)  
        exit(error); //存储分配失败 
    s->top = s->base; //top初始base,空栈 
    s->stacksize = 2; //stacksize置最大容量为2 
}
void pop(Sqstack* s, car* e)  //出栈 
{
    //插入新的栈顶元素e 
    s->top--; //栈顶指针减一 
    *e = *(s->top); //栈顶元素赋给e 
}
void push(Sqstack* s, car e)  //入栈 
{
    *(s->top) = e; //e压入栈列 
    s->top++; //栈顶指针加一 
}
int Isemptystack(Sqstack* s)  //判断栈是否为空 
{
    if (s->top - s->base == 3)  //栈满了 
        return error;
    else
        return ok;
}
typedef struct QNode  //定义队 
{
    car data;//声明结构变量data 
    struct QNode* next;//指向一个 struct QNode*型的指针 
}QNode, * Queueptr;
typedef struct
{
    Queueptr front;//队头指针
    Queueptr rear;//队尾指针 
}LinkQueue;
void InitQueue(LinkQueue* Q) //初始化队列 
{
    Q->front = Q->rear = (QNode*)malloc(sizeof(QNode));//开辟出结点 ,并分配存储空间 
    Q->front->next = NULL;//头结点指针域指向NULL
    return;
}
void InQueue(LinkQueue* Q, car e)  //入队 
{
    QNode* p;//定义结构体QNode*的指针变量p 
    p = (QNode*)malloc(sizeof(QNode));//分配一个QNode类型大小的内存空间,并把它赋给QNode*型的变量p
    p->data = e;//将p结点的data值设为e 
    p->next = NULL;//p指针指对象的next属性为空值 
    Q->rear->next = p;//尾指针rear的后继指针next=新指针p 
    Q->rear = p;//让新结点指针p成为新的尾指针 rear
    return;
}
void OutQueue(LinkQueue* Q, car* e)  //出队 
{
    QNode* p = NULL;//定义了一个QNode*类型的结构体指针p,并将指针怕p初始化为空 
    p = Q->front->next;//新指针=头指针front的后继指针next 
    *e = p->data;//将  p->data值赋给*e 
    Q->front->next = p->next;//头指针front的后继指针next =新结点指针p的后继指针
    if (Q->rear = p)
        Q->rear = Q->front;//特殊情况对队尾重新赋值 
    free(p);//释放p  
}
int howlong(int hour1, int minute1, int hour2, int minute2) //计算时间 
{
    return (hour2 - hour1) * 60 + (minute2 - minute1);
}

car gettop(Sqstack s) { return *(s.top - 1); }//返回s栈顶元素 
void main()
{
    Sqstack* park, * temp;//park为停车场的栈,temp为让道的栈 
    LinkQueue* lane;//lane是队列的便道 
    park = (Sqstack*)malloc(sizeof(Sqstack));//分配一个 Sqstack类型大小的内存空间,并把它赋给 Sqstack*型的变量park 
    temp = (Sqstack*)malloc(sizeof(Sqstack));//分配一个 Sqstack类型大小的内存空间,并把它赋给 Sqstack*型的变量temp
    lane = (LinkQueue*)malloc(sizeof(LinkQueue));//分配一个 LinkQueue类型大小的内存空间,并把它赋给 LinkQueue*型的变量lane
    Initstack(park);//初始话栈park 
    Initstack(temp);//初始化栈temp 
    InitQueue(lane);//初始化队列lane 
    int price = 2, location1 = 0, location2 = 0;//定义停车单价为每分钟俩块 
    while (1)
    {
    
        car* one;//定义结构体car*指针p 
        one = (car*)malloc(sizeof(car));//分配一个 car类型大小的内存空间,并把它赋给 car*型的变量one
        printf("                                       -------------------------n");
        printf("                                         停车管理 n");
        printf("                                       输入进出状态:1是进,0是出n");
    	printf("                                      -------------------------n");
        printf("                                       输入车牌号:");
        scanf("%s", &one->number);
        if (strcmp(one->number, "########") == 0)//如果字符串one->nunber与######相同 
            break;
        printf("                                       输入时刻:");
        scanf("%d:%d", &one->time.hour, &one->time.minute);
        printf("                                       输入进出状态:");
        scanf("%d", &one->getleave);
        switch (one->getleave)
        {
        case 1: if (Isemptystack(park))//停车场栈空 
        {

            push(park, *one);//*one进栈park 
            location1++;//停车栈加1 
            one->Location = location1;//location1赋值给one->Location 
            printf("                                   车辆在停车场的位置为:%dn", one->Location);
            printf("*******************************************************************************n");
        }
              else
        {
            InQueue(lane, *one);//one进队列lane 
            location2++;//队列便道加1 
            one->Location = location2;//location2值赋给 one->Location
            printf("                                   车辆在便道的位置为:%dn", one->Location);
            printf("******************************************************************************n");
        }
              break;
        case 0:
        {
            car* e, * t;//定义结构体car指针  e 和  t 
            e = (car*)malloc(sizeof(car));//分配一个 car类型大小的内存空间,并把它赋给 car*型的变量e
            t = (car*)malloc(sizeof(car));//分配一个 car类型大小的内存空间,并把它赋给 car*型的变量t
            do
            {
                pop(park, e);//e出栈 park
                push(temp, *e);//*e进栈temp 
            } while (strcmp(e->number, one->number) != 0);//如果字符串e->number和 one->number相同 
            printf("                                    出车车牌为:%sn", one->number);
            printf("                                    出车时间为:%d:%dn", one->time.hour, one->time.minute);
            printf("                                    停车费用为:%d元n", howlong(e->time.hour, e->time.minute, one->time.hour, one->time.minute) * price);
            printf("********************************************************************************n");
            while (temp->top != temp->base)//栈temp的顶部不等于底部 
            {
                pop(temp, t);//t出栈temp 
                push(park, *t);//*t入栈park 
                t->Location--;//t的location值减1 
            }
            OutQueue(lane, e);//e出队lane 
            e->Location = maxsize;//将maxsize赋值给e->Location,前面已经定义maxsize值为3 
            push(park, *e);//*e入栈park 
            location2--;//便道减1 
        }
            break;
        default:
            break;
        }
        }
    }

 

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034710.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号