案例

真钱捕鱼C语言停车场管理(整理)

  C 语言课程设计报告 ——停车场管理 1 班级:192102 学号: 姓 名:聂彪 指导教师:张冬梅 时间:2011 年 6 月 7 日 目录 一、 二、 三、 四、 五、 六、 七、 八、 九、 题目及要求 题目及要求 题目及要求 题目分析 数据结构说明 各函数算法分析 程序测试 课程设计感悟与收获 源代码 一、题目及要求 [要求] 设有一个可以停放 n 辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达 停车场时间的早晚依次从停车场最里面向大门口停放(最先到达的第一辆车放在停车场的 最里面)。如果停车场已放满 n 辆车,则后来的车辆只能在停车场大门外的便道上等待, 一旦停车场内有车开走,则排在便道上的第一辆国就进入停车场。停车场内如有某辆车要 走,在它之后进来的车都必须退出停车场为它让路,待其开出停车场后,这些车辆再依原 来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如 果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且其他在便道上 等待的车辆的次序不变。编制一程序模拟停车场管理。 [提示] 汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去时刻)。 例如:(’A’,1,5)表示 1 号牌照车在 5 这个时刻到达,而(’D’,5,20)表示 5 号 牌照车在 20 这个时刻离去,整个程序可以在输入信息为(’E’,0,0)时结束。 基本要求:要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车 离开停车场时应交的费用和它在停车场内停留的时间。 根据题目要求,停车场可以用一个长度为 n 的堆栈来模拟。由于停车场内如有某辆车 要开走,在它之后进来的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆 再依原来的次序进场。所以可以设两个堆栈。 二、题目分析 由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,问题要求汽车在停车 场内按车辆到达时间的先后顺序,依次由北向南排列。由此很容易联想到用结构体数组来 存储车库信息。又每个汽车的车牌号都不一样,这样一来就可以根据车牌号准确找到汽车 位置。当停车场内某辆车要离开时,在他之后进入的汽车必须再按原次序进入车库。这是 一个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个结构 体数组,用来暂时存放为出站汽车暂时让道的汽车车牌号。当车库满后,继续进来的汽车 需要停放在车库旁边的便道上等候,若车库满后,继续进来的汽车需要停放在车库旁边的 便道上等候,若车有汽车开走,这完全是一个先进先出模型,因此可以设计一个队列来模 拟便道,队列中的数据元素仍然设计成汽车的车牌号。另外,停车场是根据汽车在停车场 内停放的总长来收费的,在便道上的时间不计费,因此必须记录车辆进入车库时的时间, 车辆离开车库时的时间不需要记录,当从终端输入时可直接使用。 另外,题目提示中的表示方法[(’A’,1,真钱捕鱼,5)表示 1 号牌照车在 5 这个时刻到达]有两 点不好;一、对用户友好程度不高,用起来并不方便;二、不接近实际情况,生活中表示 时间的格式为“--:--”,完全可以建立一个时间结点来实现。因此,实际编程中将对这一 方面予以优化。 三、数据结构说明 根据题意,停车场中的空间分为车库和便道。这里用结构体来模拟车库和便道,按照 从端读入数据序进行管理。模拟车库和模拟便道中分别用结构体数组和链表来存储车辆信 息。 模拟车库和模拟便道的数据结构如下表 1 和表 2 所示: Moni_cheku CarNode char num[10] *stack[MAX+1] Time reach int hour 结构体 结构体数组 int min 结构体 Time leave int hour int min 结构体 int top 表 1 模拟车库的数据结构 Moni_biandao 结构体 QueueNode *head 链表 CarNode *data 数组 char num [10] Time reach 结构体 Time leave 结构体 char num [10] Time reach 结构体 Time leave 结构体 int hour int min int hour int min QueueNode *rear 链表 Struct car *next CarNode *data 数组 int hour int min int hour int min Struct car *next 表 2 模拟便道的数据结构 用 C 语言实现这一部分为: typedef struct time { int hour。 int min。 }Time。 /*时间结点*/ typedef struct node { char num[10]。 Time reach。 Time leave。 }CarNode。/*车辆信息结点*/ typedef struct NODE { CarNode *stack[MAX+1]。 int top。 }Moni_Cheku。 typedef struct car { CarNode *data。 struct car *next。 }QueueNode。 typedef struct Node { QueueNode *head。 QueueNode *rear。 }Moni_Biandao。 四、各函数算法分析 (1)主函数 void main() { Moni_Cheku Enter,Temp。 Moni_Biandao Wait。 int ch。 InitStack(&Enter)。 /*初始化车站*/ InitStack(&Temp)。 /*初始化让路的临时链表*/ InitQueue(&Wait)。 /*初始化便道*/ printf(\n)。 printf( ^_^欢迎进入停车场管理系统 1!^_^\n