清律出久 发表于 2019-7-21 21:55

编程:停车问题简易版

1.1问题描述停车场问题,问题描述:1.设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。2.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆        3.当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场。4.只允许便道头的汽车可以随意离开、不收取费用,便道中间的车不能随意开走。5.每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的建模程序。实现要求:1.以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置,若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以循环队列实现。2.模型的应操作简单、功能完整、界面清晰。1.2分析    此程序是利用顺序栈和循环队列实现对停车场进出变化的情况,程序所能达到的功能:输入和输出车辆在停车场的信息、统计停车场内的车数、以及收费情况,通过建立不同的结构体进行工作,我将停车场用栈进行,便道用循环队列进行,并且又用栈建立了一个让车道为了将停车场的车出栈和进栈。 1.3设计说明停车场功能包括:车进出入停车场信息,记录车的收费情况1.3.1抽象数据类型定义12. typedef struct //让车道 顺序栈13. {14.     int a;15.     int top;16. }rang;17. 18. typedef struct //等候车道 循环队列19. {20.     int base;21.     int front;//头指针22.     int rear;//尾指针23. }deng;//初始化队列24. 25. typedef struct //停车场zhan26. {27.     int b;28.     int top;29. }ting;30. 31. typedef struct32. {33.     char xx;//进入或离开的选择34.     int bh;35.     int time;36. }che;37. 38. void initr(rang& r); //初始化39. void rpush(rang& r, int e); //进栈40. void rpop(rang& r, int& e);//出栈41. 42. void initq(deng& d);43. void enq(deng& d, int e); //进队44. void deq(deng& d, int e);//出队列45. 46. void inits(ting& t);//初始化停车场47. void push(ting& t, deng& d, int e);//进入停车场48. void pop(ting& t, rang& r, int& e);//出停车场
1.4程序实现附部分代码:1.建立停车场栈187. void push(ting& t, deng& d, int e)//进入停车场188. {189.     if (t.top == 3)190.     {191.       cout << "停车场已满,进入等候车道" << endl;192.       enq(d, e);193.     }194.     else195.     {196.       t.b = e;197.       t.top += 1;198.       cout << e << "号车辆进入停车场" << endl;199.     }200. }201. 202. void pop(ting& t, rang& r, int& e)//出停车场203. {204.     e = t.b;205.     t.top--;206. }2.车辆的进出信息及收费66.     for (int i = 0; i < ssz; i++)67.     {68.       cout << "请输入车辆到达离去信息(A为到达车辆,D为离开车辆,E退出):" << endl;69.       cin >> c.xx;70. 71.       if (c.xx == 'E')   72.       {   73.             cout << "退出使用停车场管理系统" << endl;74.             break;75.       }76. 77.       cout << "请输入车辆编号:" << endl;78.       cin >> c.bh;79. 80.       cout << "请输入车辆到达/离去时间:" << endl;81.       cin >> c.time;82. 83.       if (c.xx == 'A')84.       {85.             push(t, d, c.bh);86.       }87. 88.       if (c.xx == 'D')89.       {90.             int flag = 1;//标记是否进入停车场91.             for (int h = 0; h < 3 && flag; h++)92.             {   93.                 if (t.b == c.bh);94.                 flag = 1;95.             }//寻找车是否在停车场      96. 97.             if (flag == 0)98.             {99.                 deq(d, c.bh);100.                 cout << "该车辆未进入停车场,收费为0" << endl;101.             }         102.             if (flag == 1)103.             {104.                 int l = 1;105.                 while (t.b != c.bh)106.                 {107.                   pop(t, r, l);108.                   rpush(r, l);109.                   cout << l << "号车进入让车道" << endl;110.                 }111.                 pop(t, r, l);112.                 cout << c.bh << "号车辆驶出停车场" << endl;113.                 while (r.top != 0)114.                 {115.                   rpop(r, l);116.                   push(t, d, l);117.                 }118. 119.                 /*********************************************/120.                 int ch;//收费121.                 int k = 0;122.                 for (int k = 0; k < i; k++)   123.                 {   124.                   if (c.bh == c.bh)125.                         break;126.                 }127.                 ch = charge * (c.time - c.time);128.                 cout << "收费为" << ch << endl;129.             }130.       }131.     }1.5程序运行情况主要功能:停车场对车辆的管理功能介绍:记录车辆进入停车场信息以及收费信息具体操作:第一步:输入停车场收费标准数据第二步:输入车辆选择进入停车场数据,按下回车第二步:输入车辆车牌信息以及进入或驶离时间,按下回车第三步:重复操作或退出

heiio 发表于 2019-7-22 10:33

。。这个代码,没有任何格式,看的头疼,发个附件出来也是好的。

清律出久 发表于 2019-7-24 12:46

重新发一下代码


#include<iostream>

#include<stdio.h>

#include<stdlib.h>



using namespace std;
/*********************************************************************************/
#define sz 10
typedef struct //让车道 顺序栈
{
        int a;
        int top;
}rang;
void initr(rang& r) //初始化
{
        r.top = 0;
}
void rpush(rang& r, int e) //进栈
{
        r.a = e; r.top++;
}
void rpop(rang& r, int& e)//出栈
{
        e = r.a;
        r.top--;
}
/***********************************************************************************/
#define siz 3
typedef struct //等候车道 循环队列
{
        int base;
        int front;//头指针
        int rear;//尾指针
}deng;//初始化队列
void initq(deng& d)
{
        d.front = d.rear = 0;
}
void enq(deng& d, int e) //进队
{
        if ((d.rear + 1) % siz == d.front)
                cout << "等候车道已满" << endl;
        else
        {
                d.base = e;
                d.rear = (d.rear + 1) % siz;
                cout << e << "号车辆进入等候车道" << endl;
        }
}
void deq(deng & d, int e)//出队列
{
        if (d.front == d.rear)
                cout << "等候车道无车" << endl;
        else
        {
                e = d.base;
                cout << e << "号车辆离开等候车道" << endl;
                d.base = 0;
                d.front = (d.front + 1) % sz;
        }
}
/*********************************************************************************/
typedef struct //停车场zhan
{
        int b;
        int top;
}ting;
void inits(ting & t)//初始化停车场
{
        t.top = 0;
        //t.b = 0;
}
void push(ting & t, deng & d, int e)//进入停车场
{
        if (t.top == 3)
        {
                cout << "停车场已满,进入等候车道" << endl;
                enq(d, e);
        }
        else
        {
                t.b = e;
                t.top += 1;
                cout << e << "号车辆进入停车场" << endl;
        }
}
void pop(ting & t, rang & r, int& e)//出停车场
{
        e = t.b;
        t.top--;
}
/***************************************************************************/
typedef struct
{
        char xx;//进入或离开的选择
        int bh;
        int time;
}che;
#define ssz 100
int main()
{
        int charge;//收费
        cout << "停车场管理系统" << endl << "请输入收费标准:" << endl;
        cin >> charge;
        cout << "请输入车辆信息:" << endl;
        ting t;//创建停车场
        deng d;//等候车道
        rang r;//让行车道

        inits(t);//初始化停车场
        initq(d);//等候车道
        initr(r);//让行车道

        che c;//车的个数

        for (int i = 0; i < ssz; i++)
        {
                cout << "请输入车辆到达离去信息(A为到达车辆,D为离开车辆,E退出):" << endl;
                cin >> c.xx;

                if (c.xx == 'E')
                {
                        cout << "退出使用停车场管理系统" << endl;
                        break;
                }

                cout << "请输入车辆编号:" << endl;
                cin >> c.bh;

                cout << "请输入车辆到达/离去时间:" << endl;
                cin >> c.time;

                if (c.xx == 'A')
                {
                        push(t, d, c.bh);
                }

                if (c.xx == 'D')
                {
                        int flag = 1;//标记是否进入停车场
                        for (int h = 0; h < 3 && flag; h++)
                        {
                                if (t.b == c.bh);
                                flag = 1;
                        }//寻找车是否在停车场               

                        if (flag == 0)
                        {
                                deq(d, c.bh);
                                cout << "该车辆未进入停车场,收费为0" << endl;
                        }               
                        if (flag == 1)
                        {
                                int l = 1;
                                while (t.b != c.bh)
                                {
                                        pop(t, r, l);
                                        rpush(r, l);
                                        cout << l << "号车进入让车道" << endl;
                                }
                                pop(t, r, l);
                                cout << c.bh << "号车辆驶出停车场" << endl;
                                while (r.top != 0)
                                {
                                        rpop(r, l);
                                        push(t, d, l);
                                }

                                /*******************************************************/
                                int ch;//收费
                                int k = 0;
                                for (int k = 0; k < i; k++)
                                {
                                        if (c.bh == c.bh)
                                                break;
                                }
                                ch = charge * (c.time - c.time);
                                cout << "收费为" << ch << endl;
                        }
                }
        }
        return 0;
}
页: [1]
查看完整版本: 编程:停车问题简易版