实验2停车场管理系统.doc_第1页
实验2停车场管理系统.doc_第2页
实验2停车场管理系统.doc_第3页
实验2停车场管理系统.doc_第4页
实验2停车场管理系统.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验2 停车场管理系统班级: 信B0811 学号: 15号 姓名: 段增锋 指导教师签名: 成绩:_一、问题描述设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。设计要求:1模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。2从终端读入汽车到达或离去的数据,每组数据包括三项:(1)是“到达”还是“离去”;(2)汽车牌照号码;(3)“到达”或“离去”的时刻。二、算法说明typedef struct time int hour; int min;Time;/定义结构体变量Timetypedef struct node char num6; /用字符数组来存放车牌号码 Time reach; /车辆到达时间 Time leave; /车辆离去时间CarNode;typedef struct NODE CarNode *stackMAX+1;/用来存放栈中元素的一维数组 int top; /栈指针SeqStackCar;/定义顺序栈typedef struct car CarNode *data; /数据域 struct car *next;/指向下一个结点QueueNode;/链队的结点类型typedef struct Node QueueNode *front;/队首指针 QueueNode *rear; /队尾指针LinkQueueCar;/定义链队列类型2算法说明使用死循环和选择结构实现菜单项,使用栈与队列实现停车场管理的各项功能,如栈的进栈、出栈,队列的入队、出队等操作。三、测试结果第一组测试用例:1测试输入:5或字母 回车2测试目的:程序的健壮性3正确输出:输入字母出现死循环,输入数字提示选择(14)4实际输出:输入字母出现死循环,输入数字提示选择(14) 5错误原因:无6当前状态:通过第二组测试用例:1测试输入:1回车2测试目的:能否实现停车场车辆到达登记(数据能够真正进栈)3正确输出:(1 回车请输入车牌号(例:赣 B0689):赣1234回车 )车辆在车场第1位置. (回车 车辆到达时间:3:05) 4实际输出:(1 回车请输入车牌号(例:赣 B0689):赣1234回车) 车辆在车场第1位置. (回车 车辆到达时间:3:05)5错误原因:无 6当前状态:已修改第三组测试用例:1测试输入:1回车2测试目的:能否实现停车场车辆到达登记(数据能够真正进栈)3正确输出:(1 回车请输入车牌号(例:赣 B0689):赣234回车) 车辆在车场第2位置. (回车 车辆到达时间:3:08) 4实际输出:(1 回车请输入车牌号(例:赣 B0689):赣234回车) 车辆在车场第2位置.( 回车 车辆到达时间:3:08)5错误原因:无 6当前状态:已修改第四组测试用例:1测试输入:1回车2测试目的:能否实现停车场车辆到达登记(数据能够真正进栈)3正确输出:(1 回车请输入车牌号(例:赣 B0689):赣34回车) 车辆在车场第3位置. (回车 车辆到达时间:3:10)4实际输出:(1 回车请输入车牌号(例:赣 B0689):赣34回车) 车辆在车场第3位置. (回车 车辆到达时间:3:10)5错误原因:无 6当前状态:已修改第五组测试用例:1测试输入:1回车2测试目的:能否实现停车场车辆到达登记(数据能够真正进栈)3正确输出:该车需在便道等待,有车位是进入车场。4实际输出:该车需在便道等待,有车位是进入车场。5错误原因:无 6当前状态:已修改第六组测试用例:1测试输入:2 回车2测试目的:车辆离开并且登记是否能够通过(车从临时栈中退出) 3正确输出:(输入离开车场位置:2 车辆离开的时间:3:20 离开车辆的车牌号:赣234)其到达时间为:3:8离开时间:3:20应交费用:0.60元 便道的赣56号车进入车场第3位置 4实际输出:(输入离开车场位置:2 车辆离开的时间:3:20 离开车辆的车牌号:赣234)其到达时间为:3:8离开时间:3:20应交费用:0.60元 便道的赣56号车进入车场第3位置5错误原因:无6当前状态:已修改(按车牌号码离开未能实现)第七组测试用例:1测试输入:3 回车2测试目的:车辆列表的显示功能的实现(队列的输出)3正确输出:请选择(1|2|3) 1.车场列表 2.便道列表 3返回主菜单4实际输出:请选择(1|2|3) 1.车场列表 2.便道列表 3返回主菜单 5错误原因:无6当前状态:修改第八组测试用例:1测试输入:1 回车2测试目的:车场列表的显示功能 3正确输出:车场位置 到达时间 车牌号码 1 3:5 赣1234 2 3:10 赣34 3 (输入的时间)赣564实际输出:车场位置 到达时间 车牌号码 1 3:5 赣1234 2 3:10 赣34 3 (输入的时间) 赣56 5错误原因:无(第四辆车在便道等候,在上一步输入的时间)6当前状态:修改第九组测试用例:1测试输入:2 回车2测试目的:便道列表的显示功能(队列的输出)3正确输出:(如果便道无车)便道里没有车。(反之)显示车辆的信息 4实际输出:(如果便道无车)便道里没有车。(反之)显示车辆的信息 5错误原因:无6当前状态:修改第十组测试用例:1测试输入:3 回车2测试目的:能否返回主菜单3正确输出:(能返回)主菜单4实际输出:(能返回)主菜单 5错误原因:无6当前状态:通过第十一组测试用例:1测试输入:4 回车2测试目的:程序的退出功能的检测3正确输出:退出系统4实际输出:退出系统 5错误原因:无6当前状态:通过测试结果分析:该系统较完善的实现了停车场管理的各项功能,通过使用栈与队列,能够较快的实现停车场的车辆的进场与车场的进车场、退出等操作。掌握栈的“后进先出”队列的“先进先出”原理。 附录:源代码源代码列在附录中,要求程序风格清晰易理解,有充分的注释,有意义的注释行少于代码的30%将不能得分。#include#include#include#define MAX 3 /停车场内最多的停车数#define price 0.05 /每单位时间停车费用typedef struct time int hour; int min;Time;/定义结构体变量Timetypedef struct node char num6; /用字符数组来存放车牌号码 Time reach; /车辆到达时间 Time leave; /车辆离去时间CarNode;typedef struct NODE CarNode *stackMAX+1;/用来存放栈中元素的一维数组 int top; /栈指针SeqStackCar;/定义顺序栈typedef struct car CarNode *data; /数据域 struct car *next;/指向下一个结点QueueNode;/链队的结点类型typedef struct Node QueueNode *front;/队首指针 QueueNode *rear; /队尾指针LinkQueueCar;/定义链队列类型void InitStack(SeqStackCar *); /初始化顺序栈int InitQueue(LinkQueueCar *); /初始化链队列int Arrival(SeqStackCar *,LinkQueueCar *); /车辆到达函数的定义void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /车辆离去函数的定义void List(SeqStackCar,LinkQueueCar); /输出栈和队列中的元素/主函数模块void main() SeqStackCar Enter,Temp;/定义车辆进栈变量Enter,和存放临时栈变量Temp LinkQueueCar Wait; /定义车辆在便道等待变量 Wait int ch; InitStack(&Enter); /初始化 InitStack(&Temp); InitQueue(&Wait);/初始化 while(1) /* 菜单1 */printf(*欢迎进入停车场管理系统*n); printf(n1. 车辆到达登记); printf( 2. 车辆离开登记); printf( 3. 车辆列表显示); printf( 4. 退出系统n);while(1) scanf(%d,&ch); /从键盘输入你选择的菜单项 if(ch=1&chtop=0; for(i=0;istacks-top=NULL;int InitQueue(LinkQueueCar *Q) /* 初始化队列,建立一个空队列 */ Q-front=(QueueNode *)malloc(sizeof(QueueNode); if(Q-front!=NULL) Q-front-next=NULL; Q-rear=Q-front; return(1); else return(-1);/溢出/车辆到达模块int Arrival(SeqStackCar *Enter,LinkQueueCar *W) CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode);/为p结点分配空间 flushall(); printf(n请输入车牌号(例:赣B0689):); gets(p-num); /输入车牌号 if(Enter-toptop+; printf(n车辆在车场第%d位置.,Enter-top); printf(n车辆到达时间:); scanf(%d:%d,&(p-reach.hour),&(p-reach.min);/输入到达时间 Enter-stackEnter-top=p; return(1); else printf(n该车须在便道等待!有车位时进入车场n); t=(QueueNode *)malloc(sizeof(QueueNode); t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(1); /车辆离开模块void PRINT(CarNode *p,int room) int A1,A2,B1,B2; printf(n车辆离开的时间:); scanf(%d:%d,&(p-leave.hour),&(p-leave.min); printf(n离开车辆的车牌号为:); puts(p-num);/输出车牌号 printf(n其到达时间为: %d:%d,p-reach.hour,p-reach.min); printf(离开时间为: %d:%d,p-leave.hour,p-leave.min); A1=p-reach.hour; /将p指向的车辆到达时间赋值给A1 A2=p-reach.min; B1=p-leave.hour; B2=p-leave.min; printf(n应交费用为: %2.2f元,(B1-A1)*60+(B2-A2)*price);/计费 free(p);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) int room; CarNode *p,*t; QueueNode *q; if(Enter-top0) while(1) printf(n请输入车在车场的位置/1-%d/:,Enter-top);/输入车场的位置 scanf(%d,&room); if(room=1&roomtop) break;while(Enter-toproom) Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-;while(Temp-top=1) Enter-top+; Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTemp-top=NULL; Temp-top-;PRINT(p,room);if(W-front!=W-rear)&Enter-topfront-next; t=q-data; Enter-top+; printf(n便道的%s号车进入车场第%d位置.,t-num,Enter-top); printf(n请输入%s号车进入车场的时间:); scanf(%d:%d,&(t-reach.hour),&(t-reach.min); W-front-next=q-next; if(q=W-rear) W-rear=W-front; Enter-stackEnter-top=t; free(q);else printf(n便道里没有车.n);else printf(n车场里没有车.); void List1(SeqStackCar *S) int i; if(S-top0) printf(n 车场位置 到达时间 车牌号n);for(i=1;itop;i+) printf( %d ,i); printf( %d:%d ,S-stacki-reach.hour,S-stacki-reach.min); puts(S-stacki-num);/输出车牌号码else printf(n车场里没有车); /输出便道中的车辆void List2(LinkQueueCar *W) QueueNode *p; p=W-front-next;if(W-front!=W-rear) printf(n等待车辆的号码为:); while(p!=NULL) puts(p-data-num);/输出等待车的车牌号 p=p-next;else printf(n便道里没有车.);/ 输出栈,和便道中停留的车及相关的操作void List(SeqStackCar S,LinkQueueCar W) int flag,tag;/定义标志及选择菜单2的变量 flag=1; while(flag) printf(n请选择 1|2|3:); printf(n1.车场列表n2.便道列表n3.返回主菜单1n);while(1) scanf(%d,&tag);if(tag=1|tag=3) break;else printf(n请选择 13:);switch(tag) /* 菜单2 */ case 1:List1(&S);break; case 2:List2(&W);break; case 3:flag=0;break; default: break; 袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论