还剩17页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
实验题目实验六停车场管理班级11计算机2班姓名仇越学号11070204日期
10.30
一、需求分析
1.程序的功能设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用
(1)建立静态数组栈作为模拟停车场,动态链表栈作为模拟便道
(2)车辆到达,停入停车场或者便道,记录车牌号,到达时间
(3)车辆离开,记录离开时间,输出停车时间和收费将便道内车停入停车场,记录进入时间
(4)列表显示停车场,便道内车辆情况
(5)列表显示历史记录(已经离开车的车牌号,到达离开时间,收费)
2.输入输出的要求
(1)输入字符串车牌号,到达时间,离开时间5插入新的链表尾voidEnQucucLinkQueucCar*wait/*插入新的队尾*/{QueueNode*p=wait-rear;wait-rear=QucueNode*mallocsizeofQueueNode;ifIwait-rearexitOVERFLOW;p-next=wait-rear;wait-rear-next=NULL;6车辆离开,登记离开时间,输出停车时间和收费将便道内车辆intLeaveSeqStackCar*cnterScqStackCar*tempLinkQueucCar*waitLinkQueueCar*leavecarintij=enter-top;QueueNode*q=NULL;if!enter-top〃若停车场内没有车则返回printf〃停车场内没有车〃;returnERROR;prin〃请输入车在停车场中的位序lid:〃j;scanf%d〃,i;whileil||ienter-top{printf输入错误请重新输入ITd:j;scanf飞di;whiletemp-top+ij〃临时停放为给要离去的汽车让路而从停车场退出来的汽车temp-stack[temp-top++]=cnter-stack[—cnter-top];feeenterleavecar;whiletemp-top〃将临时存放的车再停回停车场enter-stack[enter-top++]=temp-stack[一temp-top];ifwait-head!=wait-rear〃将便道里的一辆车停入停车场q=wait-hcad-next;printf便道里的%s车进入停车场第%1个位置\n〃,q-data.numMAX;enter-stack[enter-top++]=q-data;printf“请输入现在时间〈例如:12:00;scanf〃%d:%d〃,enteLstack[enter-top-l].reachhourenter-stack[entcr-top-l].reachmin;wait-head-next=q-next;if!q-nextwait-rear=wait-head;freeq;returnOK;7计算收费,将离开车辆的信息登记入历史记录voidfeeSeqStackCarCenterLinkQueueCar*leavecar/*车费计算以及登记历史记录*/EnQueueleavecar;一enter-top;printf〃请输入离开时间〈例如12:00:〃;scanfcnter-stack[entcr-top].leavehourcnter-stack[enter-top].leavemin;cnter-stack[enter-top].timc=enter-stack[enter-top].leavehour-enter-stack[enter-top].reachhour*60;cnter-stack[entcr-top].timc+=entcr-stack[enter-top].leavemin-enter-stack[enter-top].reachmin;printf〃〈车牌号%s停车时间:%d分钟停车费:%
6.2f\n,zcntcr-stack[enter-top].numenter-stack[enter-top].timeenter-stack[enter-top].time*price;leavecar-rear-data=enter-slack[enler-lop];〃将离开的车的信息存在历史记录里8显示存车信息,输出历史记录intListSeqStackCar*enterLinkQueueCar*waitLinkQueueCar*1eavecar/*显示存车信息*/intij;QueueNode*q=\vait-head*p=leavecar-head;while1printf〃******************************************\n;printf〃******************************************\n〃;switchi{case1:{printff位置到达时间车牌号\n〃;forj=0;jenter-top;j++printf,,%8d%8d:%2d%s\nz,j+1enter-stack[j].reachhourenter-stack[j].reachminenter-stack[j].num;break;}case2:仃£幅近-110@1二=\田江-正@「加14£便道里没有车\/;else{printf〃便道内等待车辆车牌号\n〃;whileq=q-nextprintf〃%s〃,q-data.num;printf〃\n〃;}break;}case3:{printf,z车牌号到达时间离开时间停车时间费用\n〃;whilep=p-nextprintf,%8s%8d:%2d%8d:%2d%10d%
8.2f\n〃,p-data.nump-data.reachhourp-data.reach.minp-data.Ieavc.hourp-data.leaveminp-data.timep-data.time*price;break;}case4:returnOK;}}}
2.画出函数的调用关系图主函数调用InitStackInitQueueArrivalLeaveList函数Arrival函数调用EnQueue函数Leave函数调用fee函数
三、调试分析
1.调试中遇到的问题及对问题的解决方法
2.算法的时间复杂度
四、使用说明及测试结果
1.使用说明:D输出菜单”
1.车辆达到
2.车辆离开
3.列表显示
4.退出系统”2先选择1,输入车牌号,输出车在停车场的位置,再输入到达时间随意选择1234若选1停车场满后停在便道上,输入车牌号选择2输入要离开的车辆在停车场的位置和离开时间输出停车时间和费用若便道上车,将一辆车移到停车场,输入现在时间S选择3输出菜单“
1.停车场
2.便道
3.历史记录
4.返回”选择123分别显示停车场,便道,历史记录的情况选择4返回到开始菜单最后选择4结束程序
2.测试结果
(2)输出停车时间和收费,停车场和便道的停车情况,历史记录
3.测试数据:二.概要设计
4.本程序所用的抽象数据类型的定义ADTStack{数据对象D={ai|ai为ElemSeti为正整数}数据关系Rl={〈aiTai|aiTai都属于Di为正整数}
2.主程序的流程及各程序模块之间的层次关系1流程输出菜单”
1.车辆达到
2.车辆离开
3.列表显示
4.退出系统”2先选择1,输入车牌号,输出车在停车场的位置,再输入到达时间随意选择1234若选1停车场满后停在便道上,输入车牌号选择2输入要离开的车辆在停车场的位置和离开时间输出停车时间和费用若便道上有车,将一辆车移到停车场,输入现在时间■选择3输出菜单”
1.停车场
2.便道
3.历史记录
4.返回”选择123分别显示停车场,便道,历史记录的情况选择4返回到开始菜单B最后选择4结束程序
二、详细设计.采用c语言定义相关的数据类型typcdefstructtimeinthour;intmin;}Time;/*时间结点*/typedefstructnodecharnum
[10];Timereach;Timeleave;inttime;//车停在停车场的总时间}CarNode;/*车辆信息结点*/typcdcfstructNODECarNodestack[MAX+1];inttop;}SeqStackCar;/*模拟车站*/typedefstructcarCarNodedata;structcar*nexl;jQueueNode;typedefstructNode{QucucNodc*hcad;QueueNode*rear;}LinkQueueCar;/*模拟通道*/.写出各模块的伪码算法1主函数voidmainSeqStackCarEnterTemp;LinkQueucCarWaitLeavecar;intch;InitStack.Enter;/*初始化车站*/lnitStackTcmp;/*初始化让路的临时栈*/InitQueueWait;/*初始化通道*/InitQueueLeavecar;/*初始化离开的车*/whilelprintf〃\n************************************************〃;printfCAnl.车辆到达〃;printff
2.车辆离开〃;printf,z
3.列表显示〃;printff
4.退出系统\n〃);while1scanfch;ifch=lch=4break;elseprintf〃\n请选择1|2⑶
4.;switchch{case1:ArrivalEnterWait;break;/*车辆到达*/case2:LeaveEnterTcmpWaitLeavccar;break;/*车辆离开*/case3:ListEnterWaitLeavecar;break;/*列表打印信息*/case4:exit0;/*退出主程序*/default:break;}}
(2)初始化栈voidInitStackSeqStackCar*carstack/*初始化栈*/carstack-top=0;3初始化便道intInitQucucLinkQucucCar*carwait/*初始化便道*/carwait-head=car\vait-rear=QueueNode*mallocsizeofQueueNode;if!carwait-hcadexitOVERFLOW;carwait-head-next=NULL;〃队列初始化为NULLreturnOK;4车辆到达,登记车牌号和到达时间intArrivalSeqStackCar*enterLinkQueueCar*wait/*车辆到达*/ifenter-topMAX〃车辆停入停车场并且登记车牌和到达时间printf〃请输入车牌号〈例如:苏A8888;scanf〃%s〃,enter-stack[enter-top].num;printf〃该车在停车场第%d个位置\n〃,cntcr-top+l;printf〃请输入该车的到达时间例如、12:00;scanf〃%d:%d”enter-stack[enter-top].reachhourenter-stack[enter-top].reachmin;enter-top++;returnOK;else{〃车辆停在便道上并且登记车牌和到达时间EnQueuewait;printf〃请输入车牌号例如:苏A8888;scanf〃%s〃,wait-rear-data.num;printf〃该车停在便道上等待\n〃;returnOK;序号错误信息解决方法1选择功能1出现“请输入车牌”后出现应用程序错误初始化栈错误,不要再申请动态内存,只有赋初始值即可2选择功能1出现“请输入车牌”后出现应用程序错误数据应用错误,将栈的结构体类型CarNode*stack[MAX+l]修改为CarNodestack[MAX+1]3选择功能1,输入到达时间出现应用程序错误数据应用错误,将栈的结构体类型CarNodedata;修改为CarNodedata;4输出车费时小数点后又太多位将输出函数里%f改为%
6.2f5从便道转移到停车场的车,离开后费用是乱码忘记登记进入停车场的时间6当停车场只有一辆车,让其离开时,输出费用是乱码将车停放在临时车站的判断条件错误,whilelemp-lop+i〈MAX修改为whiletemp-top+ijj为enter-top刚进入该调用函数的值7让便道车辆进入停车场第多少个位置输出有无推理可知总是第MAX个位置8当停车场内没有车时程序进入死循环加一个判断,if!enter-topreturnERROR;9输出停车场信息是,停车位置错误将停车位置加1即可10车辆在便道里的位置输出错误不输出位置信息序号函数功能函数名称时间复杂度1主函数voidmain2初始化栈voidInitStackSeqStackCar*carstack013初始化便道intInitQueueLinkQueueCar*carwait014车辆到达,登记车牌号和到达时间ArrivalSeqStackCar*enterLinkQueueCar*wait015插入新的链表尾voidEnQueueLinkQueueCar*wait016车辆离开,登记离开时间,输出停车时间和收费将便道内车辆intLeaveSeqStackCar*enterSeqStackCar*tempLinkQueueCar*waitLinkQueueCar*leavecar7计算收费,将离开车辆的信息记入历史记录voidfeeSeqStackCarCenterLinkQueueCar*leavecar018显示存车信息,输出历史记录intListSeqStackCarCenterLinkQueueCar*waitLinkQueueCar*leavecar序号测试数据输出结果1停车场车牌号苏A1111到达时间12:20离开时间13:00车牌号苏Ain1停车时间40分钟停车费
2.002停车场车牌号苏A1H1到达时间12:20离开时间13:00;车牌号苏A2222到达时间13:00离开时间14:00选择停车场内1号位离开,再选择停车场内2号位离开车牌号苏A1111停车时间40分钟停车费
2.00车牌号:苏A2222停车时间120分钟停车费:
6.003停车场车牌号苏AU11到达时间12:20离开时间13:00;车牌号苏A2222到达时间13:00离开时间14:00便道车牌号苏A3333到达时间12:30离开时间13:00;车牌号苏A4444到达时间13:00离开时间15:00选择停车场内2号位离开,再选择选择停车场内2号位离开车牌号苏A2222停车时间120分钟停车费:
6.00车牌号苏A3333停车时间30分钟停车费
1.504停车场车牌号苏A11H到达时间12:20离开时间13:00;车牌号苏A2222到达时间13:00离开时间14:00便道车牌号苏A3333到达时间12:30离开时间13:00;车牌号苏A4444到达时间13:00离开时间15:00输出停车场内和便道的停车情况停车场内位置达到时间车牌号112:20苏A1111213:00苏A2222便道内等待车辆车牌号苏A3333苏A44445停车场车牌号苏AUU到达时间12:20离开时间13:00;车牌号苏A2222到达时间13:00离开时间14:00便道车牌号苏A3333到达时间12:30离开时间13:00;车牌号苏A4444到达时间13:00离开时间15:00让苏A1U1和苏A2222离开后再输出停车场内和便道的停车情况,以及历史记录停车场内位置达到时间车牌号112:30苏A3333213:00苏A4444便道内没有车辆历史记录车牌号到达时间离开时间停车时间费用苏A1H112:2013:004000苏A222213:0014:0060006选择4退出系统成功退出程序1停车场车牌号苏A1U1到达时间12:20离开时间13:002停车场车牌号苏A1111到达时间12:20离开时间13:00;车牌号苏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停车场车牌号苏AU11到达时间12:20离开时间13:00;车牌号苏A2222到达时间13:00离开时间14:00便道车牌号苏A3333到达时间12:30离开时间13:00;车牌号苏A4444到达时间13:00离开时间15:00输出停车场内和便道的停车情况5停车场:车牌号苏AUU到达时间12:20离开时间13:00;车牌号苏A2222到达时间13:00离开时间14:00便道车牌号苏A3333到达时间12:30离开时间13:00;车牌号苏A4444到达时间13:00离开时间15:00让苏A1111和苏A2222离开后,再输出停车场内和便道的停车情况,以及历史记录6选择4退出系统。