停车场管理系统设计说明

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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&s);初始化栈;

void pushstack(sqstack &s,queue &q); 进栈;

void popstack(sqstack &s,int x,queue &q)出栈;

void initqueue(queue&q); 初始化队列;

void inputqueue(queue&q,int x);进队列

void outputqueue(sqstack &s,int y,queue&q);出队列

int busmessage(sqstack &s,queue &q);

void time(int a[]);时间差函数

void time1(int a[]);获取时间函数

void time2(int a[]);获取时间函数

void show(sqstack &s,queue &q);显示信息的函数

3 详细设计

程序的开始主要是利用主函数来调用各个成员函数。首先,主函数main()是设计了一个界面显示函数,并使用initstack(sqstack&s)函数初始化栈。其流程如下:

图3.1 initstack()函数

初始化栈首先为栈申请内存空间,如果没有申请成功,就返回,如果申请成功,就令栈顶和栈底指针相等,都指向先申请的内存空间。在此同时,令s.base->next=NULL;

图3.2输入函数pushstack()的实现

输入函数比较简单,判断刚开始时用if(s.stacksize>size)判断停车场的车位

长度是否大与现在的汽车长辆数,如过大于,就把车停在便道上。如果小于,就把车停在停车场内,并取得进入车库时的时间。

图3.3求时间差time()函数

求时间差函数比较简单,先把时间保存在一个数组中,保存的时候为把年份和月份分别保存在数组中,求时间差的时候,就用后面进入时的时间减去前面进入时的时间,在减的时候先判断一下被减数是否比减数大,如果比减数大就向前面进一位,然后加上进位数在减,这样一直减下去就得到了时间差。

图3.4便道上出去popstack ( )函数

汽车输出函数比较简单,首先判断汽车长度是否小于栈长,如果小于,则便

道上的就没有汽车,只需要将车场内的汽车开出车场,在进入即可,如果判断汽车长度大于栈长时,就先要把便道上的汽车开出去在把停车场内的汽车开出去,在把停车场的车开进来,当停车场的汽车开近来时,便道上的第一辆车要开进停车场,同时汽车的长度要减一,在对便道进行操作时,先定义一便道类型的指针,把头节点附给定义的指针,这样头节点就不会变。

图3.5初始化队列函数的实现

initqueue(queue&q)函数比较简单,先为对头申请空间,如果申请成功就令头节点的下一节点为空,然后返回,如果申请不成功,就退出。

4 调试分析

4.1 调试过程中遇到的问题是如何解决的

在程序过程中经常会遇到很多问题,但是在同学与老师的帮助下这写问题都解决了,在很多时后自己以为是对的,但程序根本就运行不通。内存报告错误。我认为时自己的知识还不够,在放假的时间里回去还要好好补一下自己的知识。以前不懂的东西在回去之后一定要弄懂。

4.2 改进设计

此程序虽然基本能达到课程设计所要求的,但程序含简单。也不够完善,我想是因为自己的水平有限造成的。以后一定要多看书,要赶上那些成绩好的同学。在此程序中,没有怎么画面。也没有较好的以些功能。回去之后一定会实现这些功能。

4.3 经验和体会

经过了两周的努力,最后终于还是把程序写出来了,虽然有同学和老师的帮助,还有就是程序比较简单。但最后还是很高兴,现在回顾起来,也体会到了C 的魅力和智慧。C语言中文件的转换,以及一些算法都是很奇妙的。C语言根据此特点,要求一步一步算,且要求清楚,而要将模糊变清楚具体,加在计算机上,

相关文档
最新文档