数据结构课程设计——停车场.doc_第1页
数据结构课程设计——停车场.doc_第2页
数据结构课程设计——停车场.doc_第3页
数据结构课程设计——停车场.doc_第4页
数据结构课程设计——停车场.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

数据结构课程设计停车场管理一、需求分析:1、问题描述: 设停车场是一个可停放n辆汽车的狭长通道,且只有一个门可供出入。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆汽车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原顺序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。应用个简单的栈与队列实现该功能。2、基本要求(1)以顺序栈模拟停车场,以链队列模拟便道。(2)当车辆到达时,输入车辆车牌号、达到时间,得到车辆在停车场的位置。车牌号格式要正确,达到时间为00:00到24:00之间。(3)当车辆离开时,输入车辆在停车场位置及离开时间,离开时间应在该车进入时间之后。等待车辆按顺序进入停车场,并输入进入时间,进入时间应在上辆离开车辆离开时间之后。(4)打印出离开车辆的车牌号、到达时间、离开时间、停留时间及应缴费用。(5)显示停车场和便道车辆信息。二、概要设计 1、数据结构: typedef struct time int hour; int min; Time; /*时间结点*/ typedef struct node char num10; 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 *head; QueueNode *rear; LinkQueueCar; /*模拟通道*/ 2、模块本程序首先定义了用来模拟停车场的堆栈模块和用来模拟便道的链队列模块为全局变量,然后编写主函数,在主函数中实现对其他各个模块的调用。在进入菜单界面后程序分别调用车辆到达、车辆离开、存车信息、退出这四个模块。其中车辆离开模块中又调用了打印离开车辆信息的函数,在存车信息模块中有调用了显示停车场车辆信息函数及显示便道车辆信息函数。最后从调用的四个函数模块回到主函数结束程序运行。3、流程图:开始车场容量为010 否 是初始化栈及队列车场是否为空主菜单车辆到达进入车场车辆离开显示存车信息退出车场信息便道信息退出存车信息是进入便道否车场是否为空是否车辆离开,并进行计费便道是否为空是结束进入车场三、详细设计1时间结点类型typedef struct time int hour; int min; Time; /*时间结点*/ 2车辆进出站信息类型typedef struct node char num10;Time reach; Time leave; CarNode; /*车辆信息结点*/ 3停车场和便道信息类型typedef struct NODE CarNode *stackMax+1;int top; SeqStackCar; /*模拟车站*/typedef struct car CarNode *data;struct car *next; QueueNode; typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /*模拟通道*/4初始化,创建栈void InitStack(SeqStackCar *,int n); /*声明栈*/ int i; s-top=0; for(i=0;istacks-top=NULL; 5初始化,创建一个队列用于便道int InitQueue(LinkQueueCar *); /*声明便道*/ Q-head=(QueueNode *)malloc(sizeof(QueueNode); if(Q-head!=NULL) Q-head-next=NULL; Q-rear=Q-head; return(1); else return(-1); 6车辆到达int Arrival(SeqStackCar *,LinkQueueCar *,int n); /*车辆进站*/if(Enter-toptop0) /*有车*/else8显示停车场和便道的存车信息void List1(SeqStackCar *S) /*列表显示车场存车信息*/if(S-top0) /*判断车站内是否有车*/elsevoid List2(LinkQueueCar *W) /*列表显示便道信息*/if(W-head!=W-rear) /*判断通道上是否有车*/else.9主函数Void main() InitStack(&Enter,n); /*初始化车场*/InitStack(&Temp,n); /*初始化让路的临时栈*/InitQueue(&Wait); /*初始化便道*/while(1)scanf(.);/根据提示信息输入想要 的操作 switch(ch) /根据输入的数调用不同的函数case 1:case 2:case 3:case 4:default:break;四、测试与分析1程序运行的界面及为了便于观察,停车场中最多可停2辆车,如下图,是由于车牌号码格式及进出停车场时间上有错误而进行的一次程序运行。2下图是规定停车场最多停2辆车,而开来了4辆车的程序运行界面。 3下图是在第1位置的车辆离开停车场时,该车的车牌号、进出车场时间、停留时间、应缴费用的信息,以及便道上的车辆进入停车场时的信息。4下图是在上图的情况下,在停车场和便道上车辆的信息。5下图是停车场第2位置上的车辆离开停车场时的所有信息,及便道上第一辆车进入停车场的信息。五、总结通过这次课程设计使我充分的理解了用栈和队列实现模拟停车场的基本原理,知道了栈的顺序存储结构和队列的链式存储结构的定义和算法描述,同时也学会了编写停车场问题的程序。虽然此次的程序不是很完善,还缺少许多更好的功能,像时间上没有范围,如果车从第一天停到第二天,程序计算上就会出现错误,但是总体还是一个比较能体现数据结构知识点能力的程序了,当然只是相对于我这个初学者来说。在刚开始编程的时候,我感到有点无从下手,觉得把以前课堂上学到的知识运用到实践中还是比较困难,这时我才知道,我的基础还很薄弱,还需要继续努力。但之后经过对题目的详细分析和思考,还有向他人请教,我知道了具体应该做什么,怎么去做。尽管在做的时候遇到许多的困难,但经过几天上网及图书馆查找,参考了许多的文献资料,我终于完成这个程序。我学到了很多东西,这是在课堂上无法做到的,像做课程设计从中我也体会到了课程设计这门课的乐趣,虽然挫折很多,但这也是其乐趣所在,当你解决这些挫折时,心中是很有满足感的。还有就是光从书上学到的知识而不去实践是不够的,只有能够灵活的把书本上的知识运用到实际中,才可以说是掌了它。六、附录:源程序清单: #include#include#include#include#define Max 10int getn()int n;printf(本停车场管理实行24小时制,停车每分钟0.1元.n);printf(请输入停车场可容纳的车(最多10辆):);scanf(%d,&n);fflush(stdin);doif(n10)printf(输入的车辆数不在要求范围内,请重新输入!);scanf(%d,&n);fflush(stdin);else break;while(n10);return n;typedef struct time int hour; int min; Time; /*时间结点*/ typedef struct node char num10;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 *head; QueueNode *rear; LinkQueueCar; /*模拟通道*/ void InitStack(SeqStackCar *,int n); /*声明栈*/int InitQueue(LinkQueueCar *); /*声明便道*/int Arrival(SeqStackCar *,LinkQueueCar *,int n); /*车辆进站*/void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *,int n); /*车辆出站*/void List(SeqStackCar,LinkQueueCar); /*显示存车信息*/ void InitStack(SeqStackCar *s,int n) /*初始化栈*/ int i; s-top=0; for(i=0;istacks-top=NULL; int InitQueue(LinkQueueCar *Q) /*初始化便道*/ Q-head=(QueueNode *)malloc(sizeof(QueueNode); if(Q-head!=NULL) Q-head-next=NULL; Q-rear=Q-head; return(1); else return(-1); void PRINT(CarNode *p) /*打印出站车的信息*/ int A1,A2,B1,B2;int a,b,c; printf(n请输入离开的时间:/*:*/); scanf(%d:%d,&(p-leave.hour),&(p-leave.min);fflush(stdin);doif(p-leave.hourreach.hour | (p-leave.hour=p-reach.hour & p-leave.minreach.min)printf(输入离开时间比进站时间早,请重新输入!n);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);fflush(stdin);if(p-leave.hourleave.hour=24 | p-leave.minleave.min=60)printf(输入的时间格式有错,请重新输入!);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);fflush(stdin);else break;while(p-leave.hourreach.hour | (p-leave.hour=p-reach.hour & p-leave.minreach.min) | p-leave.hourleave.hour=24 | p-leave.minleave.min=60);printf(车场现在有一辆车离开,请便道里的第一辆车进入车场!n);printf(出站的车的车牌号为:);puts(p-num);printf(n);A1=p-reach.hour; A2=p-reach.min; B1=p-leave.hour; B2=p-leave.min;a=(B1-A1)*60+B2-A2;if(a=60)b=a/60;c=a-60*b;elseb=0;c=a;printf(车牌号: );puts(p-num);printf(n);printf(=n);printf(|进车场时刻 | 出车场时刻 | 停留时间 | 应付(元)|n);printf(=n);printf(| %d:%d,p-reach.hour,p-reach.min);printf( | %d:%d,p-leave.hour,p-leave.min);printf( | %d:%d,b,c);printf( | %2.1f,0.1*a);printf( |n);printf(-n);free(p); int Arrival(SeqStackCar *Enter,LinkQueueCar *W,int n) /*车辆到达*/ CarNode *p; QueueNode *t; int a,b;p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf(n请输入车牌号(例:qA1234):n);printf(请严格按照要求输入车牌号,否则系统会出错!n);doa=strlen(qA1234);b=strlen(gets(p-num);fflush(stdin);if(a!=b)printf(输入车牌号格式错误,请重新输入!n);gets(p-num);fflush(stdin);else break;if(a!=b)printf(输入车牌号格式错误,请重新输入!n);while(a!=b);if(Enter-toptop+; printf(n车辆在车场第%d位置.,Enter-top); fflush(stdin);printf(n请输入到达时间:/*:*/); scanf(%d:%d,&(p-reach.hour),&(p-reach.min);fflush(stdin);doif(p-reach.hourreach.hour=24 | p-reach.minreach.min=60)printf(输入的时间格式有错,请重新输入!);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);fflush(stdin);elsebreak;while(p-reach.hourreach.hour=24 | p-reach.minreach.min=60);Enter-stackEnter-top=p; return(1); else /*车场已满,车进便道*/ printf(n请该车在便道稍作等待!);t=(QueueNode *)malloc(sizeof(QueueNode); t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(1); void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W,int n) /*车辆离开*/ int i, room; CarNode *p,*t; QueueNode *q; /*判断车场内是否有车*/ if(Enter-top0) /*有车*/ while(1) /*输入离开车辆的信息*/ printf(n请输入要离开的车在车场的位置/1-%d/:,Enter-top);scanf(%d,&room);fflush(stdin); 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);/*判断通道上是否有车及车站是否已满*/ if(W-head!=W-rear)&Enter-tophead-next; t=q-data; Enter-top+; printf(n现在请便道上的车进入车场.该车的车牌号为:);puts(t-num);printf(n该车进入车场第%d位置.,Enter-top);printf(n请输入现在的时间(即该车进站的时间)/*:*/:);scanf(%d:%d,&(t-reach.hour),&(t-reach.min);fflush(stdin); doif(t-reach.hourreach.hour=24 | t-reach.minreach.min=60)printf(输入的时间格式有错,请重新输入!);scanf(%d:%d,&(t-reach.hour),&(t-reach.min);fflush(stdin);elsebreak;while(t-reach.hourreach.hour=24 | t-reach.minreach.min=60);W-head-next=q-next; if(q=W-rear) W-rear=W-head; Enter-stackEnter-top=t; free(q); else printf(n目前便道里没有车.n); else printf(n目前车场里没有车,来车请直接进入车场!); /*没车*/ void List1(SeqStackCar *S) /*列表显示车场存车信息*/ int i; if(S-top0) /*判断车站内是否有车*/ printf(n车场:); 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-head-next; if(W-head!=W-rear) /*判断通道上是否有车*/ printf(n目前正在等待车辆的号码为:);while(p!=NULL) puts(p-data-num); p=p-next; printf(n); else printf(n目前便道里没有车.); void List(SeqStackCar S,LinkQueueCar W) int flag,tag; flag=1; while(flag) printf(n1.车场n2.便道n3.返回n); while(1) printf(n请选择 1|2|3:); scanf(%d,&tag);fflush(stdin);doif(tag3)printf(输入有误,请按要求重新输入!);scanf(%d,&tag);fflush(stdin);elsebreak;while(tag3 & tag4 | ch4 | ch1);break;switch(ch) case 1:Arrival(&Enter,&Wait,n);break; /*车辆进站*/case 2:Leave(&Enter,&Temp,&Wait,n);break; /*车辆出站*/case 3:List(Enter,Wait);break; /*存车信息*/case 4:exit(0); /*退出系统*/default:break; 袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈

温馨提示

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

评论

0/150

提交评论