案例

钱柜娱乐停车场管理系统设计说明

  停车场管理系统设计说明_计算机软件及应用_IT/计算机_专业资料。1 需求分析 1.1 基本要求和目的 编写一个可以停放 n 辆汽车的停车场操作系统,该系统有汽车驶入、驶出 停车场、查询停车场等功能。以栈模拟停车场,以队列模拟车场外的便道,按照 从终端读入的输入数据

  1 需求分析 1.1 基本要求和目的 编写一个可以停放 n 辆汽车的停车场操作系统,该系统有汽车驶入、钱柜娱乐驶出 停车场、查询停车场等功能。以栈模拟停车场,以队列模拟车场外的便道,按照 从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽 车车位、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的 输出信息为:若是车辆到达,则输出汽车在停车场内的停车位置;若是车辆离去, 则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收 费)。栈以顺序结构实现,队列以链表结构实现。 1.2 问题描述 设停车场是一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进 出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最 南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停满 n 辆 汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的 第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退 出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,钱柜娱乐!每辆停 放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场 编制按上述要求进行管理的模拟程序。 2 总体设计 2.1 停车场的设计 此系统要求停车场要需要用线性表的顺序存储,所以就要用到 top,base 的 指针。在停车场中的每一辆车都包含车辆的车牌号、车位和进站时间等信息,车 牌号是车辆的最基本的信息,它可以准确的找寻到此车;车位是根据停车场的情 况分配的,进站时间则是计算车辆费用的唯一信息。所以停车场应该采用结构体 来储存,具体方法如下: typedef struct elem{ string name; // int data; //车牌号 int time[12]; }elem; //栈节点 typedef struct{ elem *base; elem *top; int stacksize;}sqstack; 2.2 函数的设计 在此程序中是通过函数调用,最终实现程序功能。 void initstack(sqstack初始化栈; void pushstack(sqstack &s,queue 进栈; void popstack(sqstack &s,int x,queue void initqueue(queue 初始化队列; void inputqueue(queue进队列 void outputqueue(sqstack &s,int y,queue出队列 int busmessage(sqstack &s,queue void time(int a[]);时间差函数 void time1(int a[]);获取时间函数 void time2(int a[]);获取时间函数 void show(sqstack &s,queue 显示信息的函数 3 详细设计 程序的开始主要是利用主函数来调用各个成员函数。首先,主函数 main() 是设计了一个界面显示函数,并使用 initstack(sqstack&s)函数初始化栈。其 流程如下:s.base; 图 3.1 initstack()函数 初始化栈首先为栈申请内存空间,如果没有申请成功,就返回,如果申请成 功,就令栈顶和栈底指针相等,都指向先申请的内存空间。在此同时,令 s.base-next=NULL; Int x;//车牌号 s.stacksizesi ze inputqueue(q,x); s.base[s.stacksize-1].data=x; s.stacksizesi ze 结束 s.top++; 图 3.2 输入函数 pushstack()的实现 输入函数比较简单,判断刚开始时用 if(s.stacksizesize)判断停车场的车位 长度是否大与现在的汽车长辆数,如过大于,就把车停在便道上。如果小于,就 把车停在停车场内,并取得进入车库时的时间。 inta1,b,c; If(a[11]=a[5 ] a1=a[11]-a[5]; If(a[10]=a[4 ] b=a[10]-a[4]; a1=a[11]+60-a[5]; b=a[10]+60-a[4]; If(a[9]=a[3] c=a[9]-a[3]; c=a[9]+12-a[3]; printf( 相 差 时 间 为 %02d:%02d:%02d,c,b,a 1); 图 3.3 求时间差 time()函数 求时间差函数比较简单,先把时间保存在一个数组中,保存的时候为把年份 和月份分别保存在数组中,求时间差的时候,就用后面进入时的时间减去前面进 入时的时间,在减的时候先判断一下被减数是否比减数大,如果比减数大就向前 面进一位,然后加上进位数在减,这样一直减下去就得到了时间差。 Int i=s.stacksize;//车长 If(i=size) printf(汽车离开,所交费 用); printf(汽车进入); 结束 node *w=q.rear-prior;int b If(b=size-x) printf(所交费用为); printf(从车库离开); 图 3.4 便道上出去 popstack ( )函数 汽车输出函数比较简单,首先判断汽车长度是否小于栈长,如果小于,则便 道上的就没有汽车,只需要将车场内的汽车开出车场,在进入即可,如果判断汽 车长度大于栈长时,就先要把便道上的汽车开出去在把停车场内的汽车开出去, 在把停车场的车开进来,当停车场的汽车开近来时,便道上的第一辆车要开进停