1、 1 学 生学 生 课 程 设 计课 程 设 计 实 验 课 名 称:数据结构 实验项目名称:车库管理系统车库管理系统 专 业 名 称: 班级: 学号: 学 生 姓 名: 教 师 姓 名: 2012 年年 6 月月 21 日日 - 1 - 实验日期:实验日期: 2012 年年 06 月月 21 日日 实验室名称:实验室名称: 2301 一一. 题目要求题目要求 设有一个可以停放 n辆汽车的狭长停车场,它只有一个大门可以供车辆进 出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到 达的第一辆车放在停车场的最里面)。 如果停车场已放满 n辆车,则后来的车辆只能在停车场大门外的便
2、道上等 待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。 停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场 为它让路,待其开出停车场后,这些车辆再依原来的次序进场。 每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。 编制一程序模拟该停车场的管理。 二二. 需求分析需求分析 根据题目要求首先设计一个栈,以栈来模拟停车场,又每辆汽车的车牌号都不一样,这样一 来可以根据车牌号准确找到汽车位置, 所以栈里的数据元素设计成汽车的车牌号。 当停车场内某 辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆 再按原次序进入停车场。
3、这是个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因 此可再设计一个栈,以之来暂时存放为出站汽车暂时让道的汽车车牌号。当停车场满后,继续进 来的汽车需要停放在停车场旁边的便道上等候, 若停车场有汽车开走, 则按排队的先后顺序依次 进站,最先进入便道的汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计一个 队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。另外,停车场根据汽车在停车场 内停放的总时长来收费的,在便道上的时间不计费,因此必须记录车辆进入停车场时的时间,车 辆离开停车场时的时间不需要记录, 当从终端输入时可直接使用。 由于时间不像汽车一样需要让 道,可设计了
4、一个顺序表来存放时间。又用顺序表用派生法设计了一个栈,恰好满足上面模拟停 车场的需要。 三三. 总体设计总体设计 - 2 - 实验日期:实验日期: 2012 年年 06 月月 21 日日 实验室名称:实验室名称: 2301 车辆到达 以顺序栈来模拟停车场和以顺序栈里的数 据元素我设计成汽车的车牌号、 进出入库时 间、 在库时间、 缴纳费用。 用队列表示便道。 初始化车站, 初始化让 路的临时栈, 初始化通 道 车场未满,车进车场 车场已满,车进便道 判断车场是 否已满 输入车子到达时间,车牌 号 未满 车进入车场 打印小票 是 否 打印小票 不打印小票 判断车场内是 否有车 无 无操作 输入离
5、开车辆的离开时间,进 行停车费用的计算 - 3 - 实验日期:实验日期: 2012 年年 06 月月 21 日日 实验室名称:实验室名称: 2301 1.设定栈的抽象数据类型定义为: ADT stack 数据对象:D=ai|aicharset,i=1,2,n,n=0 数据关系:R1=|ai-1,aiD,i=2,n 基本操作: InitStack( typedef struct Carinfor int position; int intime; /进入时间 int Carnumber; /车牌号 - 5 - 实验日期:实验日期: 2012 年年 06 月月 21 日日 实验室名称:实验室名称:
6、 2301 int time; int cost; int outtime; Carinfor; typedef struct Sqstack struct Carinfor CarSTACK_INIT_SIZE+1; int top; Sqstack; typedef struct CarRR struct Carinfor data; struct CarRR *next; QNode,*QueuePtr; typedef struct LinkQueue QueuePtr front; QueuePtr rear; LinkQueue; int InitStack(Sqstack *S) /构建栈(车库) S-top=0; return OK; /插入 e(汽车入库) int Push(Sqstack *S, Carinfor *e) S-top+; S-CarS-top.Carnumber