《c语言数据结构停车场系统实验报告.doc》由会员分享,可在线阅读,更多相关《c语言数据结构停车场系统实验报告.doc(10页珍藏版)》请在金锄头文库上搜索。
1、实验题目:实验六 停车场管理班级:11计算机2班 姓名:仇越 学号:11070204 日期:10.30一、 需求分析1 程序的功能:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费
2、用。(1)建立静态数组栈作为模拟停车场,动态链表栈作为模拟便道。(2)车辆到达,停入停车场或者便道,记录车牌号,到达时间。(3)车辆离开,记录离开时间,输出停车时间和收费。将便道内车停入停车场,记录进入时间。(4)列表显示停车场,便道内车辆情况。(5)列表显示历史记录(已经离开车的车牌号,到达离开时间,收费)。2 输入输出的要求:(1) 输入:字符串车牌号,到达时间,离开时间(2) 输出:停车时间和收费,停车场和便道的停车情况,历史记录。3 测试数据:1停车场:车牌号 苏A1111 到达时间12:20 离开时间13:002停车场:车牌号 苏A1111 到达时间12:20 离开时间13:00;车
3、牌号 苏A2222 到达时间13:00 离开时间14:00 选择停车场内1号位离开,再选择停车场内2号位离开3停车场:车牌号 苏A1111 到达时间12:20 离开时间13:00;车牌号 苏A2222 到达时间13:00 离开时间14:00 便道:车牌号苏A3333 到达时间12:30 离开时间13:00;车牌号 苏A4444 到达时间13:00 离开时间15:00 选择停车场内2号位离开,再选择选择停车场内2号位离开4停车场:车牌号 苏A1111 到达时间12:20 离开时间13:00;车牌号 苏A2222 到达时间13:00 离开时间14:00 便道:车牌号苏A3333 到达时间12:30
4、 离开时间13:00;车牌号 苏A4444 到达时间13:00 离开时间15:00 输出停车场内和便道的停车情况5停车场:车牌号 苏A1111 到达时间12:20 离开时间13:00;车牌号 苏A2222 到达时间13:00 离开时间14:00 便道:车牌号苏A3333 到达时间12:30 离开时间13:00;车牌号 苏A4444 到达时间13:00 离开时间15:00 让苏A1111和苏A2222离开后,再输出停车场内和便道的停车情况,以及历史记录6选择4退出系统二概要设计4 本程序所用的抽象数据类型的定义ADT Stack数据对象:D=ai|ai为ElemSet,i为正整数数据关系:R1=
5、|ai-1,ai都属于D,i为正整数 基本操作:InitStack(&S) /构建一个空栈S DestroyStack(&S) /S 被销毁 StackLength(S) /返回 S 的元素个数,即栈的长度。 StackEmpty(s) /若栈 S 为空栈,则返回 TRUE,否则 FALE。 GetTop(S, &e) /用 e 返回 S 的栈顶元素 ClearStack(&S) /将 S 清为空栈 Push(&S, e) /入元素 e 为新的栈顶元素。 Pop(&S, &e) /删除 S 的栈顶元素,并用 e 返回其值2. 主程序的流程及各程序模块之间的层次关系 (1)流程:输出菜单“1.车
6、辆达到 2.车辆离开 3.列表显示 4.退出系统”。 先选择1,输入车牌号,输出车在停车场的位置,再输入到达时间。 随意选择1,2,3,4。若选1,停车场满后停在便道上,输入车牌号。 选择2,输入要离开的车辆在停车场的位置和离开时间。输出停车时间和费用。若便道上有车,将一辆车移到停车场,输入现在时间。 选择3,输出菜单“1.停车场 2.便道 3.历史记录 4.返回”。选择1,2,3,分别显示停车场,便道,历史记录的情况。选择4返回到开始菜单。 最后选择4结束程序。 二、 详细设计1. 采用c语言定义相关的数据类型(1)typedef struct timeint hour;int min;Ti
7、me; /*时间结点*/(2)typedef struct nodechar num10;Time reach;Time leave; int time;/车停在停车场的总时间CarNode; /*车辆信息结点*/(3)typedef struct NODECarNode stackMAX+1;int top;SeqStackCar; /*模拟车站*/(4)typedef struct carCarNode data;struct car *next;QueueNode;(5)typedef struct NodeQueueNode *head;QueueNode *rear;LinkQueu
8、eCar; /*模拟通道*/2.写出各模块的伪码算法(1)主函数void main()SeqStackCar Enter,Temp;LinkQueueCar Wait,Leavecar;int ch;InitStack(&Enter); /*初始化车站*/ InitStack(&Temp); /*初始化让路的临时栈*/InitQueue(&Wait); /*初始化通道*/ InitQueue(&Leavecar); /*初始化离开的车*/while(1) printf(n*);printf(n1. 车辆到达);printf( 2. 车辆离开);printf( 3. 列表显示);printf(
9、4. 退出系统n); printf(*n);while(1)scanf(%d,&ch);if(ch=1&chtop=0;(3)初始化便道int InitQueue(LinkQueueCar *carwait) /*初始化便道*/carwait-head=carwait-rear=(QueueNode *)malloc(sizeof(QueueNode);if(!carwait-head) exit(OVERFLOW);carwait-head-next=NULL;/队列初始化为NULLreturn OK;(4)车辆到达,登记车牌号和到达时间int Arrival(SeqStackCar *en
10、ter,LinkQueueCar *wait) /*车辆到达*/ if(enter-topMAX) /车辆停入停车场并且登记车牌和到达时间printf(请输入车牌号 : );scanf(%s,enter-stackenter-top.num);printf(该车在停车场第%d个位置n,(enter-top)+1);printf(请输入该车的到达时间 : );scanf(%d:%d,&(enter-stackenter-top.reach.hour),&(enter-stackenter-top.reach.min);(enter-top)+;return OK;else /车辆停在便道上并且登
11、记车牌和到达时间 EnQueue(wait);printf(请输入车牌号 : );scanf(%s,wait-rear-data.num);printf(该车停在便道上等待n);return OK; (5)插入新的链表尾void EnQueue(LinkQueueCar *wait) /*插入新的队尾*/ QueueNode *p=wait-rear;wait-rear=(QueueNode *)malloc(sizeof(QueueNode);if(!wait-rear) exit(OVERFLOW);p-next=wait-rear;wait-rear-next=NULL;(6)车辆离开,登记离开时间,输出停车时间和收费。将便道内车辆int Leave(SeqStackCar *enter,SeqStackCar *temp,LinkQueueCar *wait,LinkQueueCar *leavecar)int i,j=enter-top; QueueNode *q=NULL; if(!enter-top) /若停车场内没有车则返回printf(停车场内没有车);return ERROR;printf(请输入车在停车场中的位序(1-%d): ,j);scanf(%d,&i);while(ienter-top) printf(输入错误,请重新输入(1-%