




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计报告 信息工程学院计算机科学与技术专业题目:停车场管理系统班级:计算机卓越111班 第10组 组长: 姓名: 学号:组员:姓名: 学号: 指导老师:曲朝阳、郭晓利、刘志颖 日期:2012年12月27日程序设计书目录一、程序设计目标.3二、问题描述.3三、需求分析.4四、概要设计.5五、详细设计.8六、软件说明书11七、源程序清单.12八、测试报告 .28九、课程设计总结.36一、程序设计目标 1、通过本次课设进一步的了解栈和队列等有关概念。掌握栈和队列的建立,掌握栈和队列的基本操作,深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们。 2、复习巩固C语言知识。通过C语言课程设计,使我们了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,更加了解C语言的好处和其可用性。进一步加深对C语言、数据结构、离散数学等基础技能的理解和掌握。 3、掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。 4、掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!让我们有一个既动手又动脑,独立实践的机会,锻炼我们的分析解决实际问题的能力。同时增加了同学之间的团队合作精神!更加体会到工作中团队合作的重要性和必要性!二、 问题描述按照题目要求,我们把程序分为三个模块 a.车辆到达模块:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待。 b.车辆离开模块:一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。c.显示模块:当需要列表显示时,系统判断输入值(1-3),如果输入1,则调用显示车场列表,如果输入2,则调用显示便道信息,如果输入3,则返回主菜单。三、 需求分析这个程序的关键是车辆的进站和出站操作,以及车辆的通道之间的相互关系。由于停车场是一个很窄的、一边开口的车道,先进后出,类似数据结构中的栈结构,故车场用顺序栈这种数据结构来描述。外面的狭长的通道,先进后出,通道的车辆可以随时退出,故可用链式队列结构来描述。考虑到车场和通道在整个程序中都要用到,故把这两个变量定义为全局变量。本程序中的数据对象是汽车,可以认为车牌号是每个元素的关键项,不能重复,和现实中的一样,车的入场时间以及出场时间都将作收费项目来考虑。在通道上的车由于没有入场,故不用收取费用。功能实现方式:(1).以栈S作为停车场,栈S1作为让路的临时停车点,队列Q作为车等待时用的便道,stackMax+1作为车场能够容纳的车辆数,num10作为车所在位置的编号,并且限定车场最多能够容纳10辆车.(2).用户根据系统所规定并提示的要求输入有关内容,车场所能容纳的车辆数由收费人员来确定,车辆离开时,车主还可以得到收据,便于收费的管理使用,并且系统程序所提供的一些信息可通过特殊硬件显示出来,供车主了解信息,准确有效的停车。(3).程序能够显示当前存车信息以及等待车的信息,便于管理人员对车辆进行管理,并且能够给等待中的车提供当前车场占用情况信息,便于他们能够及时的停车。(4).程序执行的命令为:输入进站信息-输入出站信息-打印收据(5).每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。四、概要设计1数据结构说明用到两个顺序栈:一个为车场栈;另一个为临时栈temptypedef struct Node CarNode *stackMAX+1; int top;SeqStackCar; 一个链式队列结构,存储便道车辆信息: typedef struct Node QueueNode *head; QueueNode *rear;LinkQueueCar; 2.算法说明终端汽车读入数据包含三项:a.是“到达”还是“离开”;b.汽车牌照号码;c.“到达”或“离开”的时刻。3. 功能模块说明停车场管理系统含有三个模块,即:车辆到达、离开、列表显示 (图1) 以模块为单位分析算法 a.车辆到达模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。如图2。 (图2) b.车辆离开模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。如图3。 (图3) c.显示模块:显示模块有两个显示选项,即:车场与便道。如图4。(图4)4、主要要点说明a.主程序Void main() 声明定义调用栈与队列的函数主信息(输入初始操作信息) b.栈-实现栈抽象数据类型c.队列-实现队列抽象数据类型d.结构体-用于对对象及变量的管理它们之间的调用关系如下: 主程序 结构体 栈 队列5、 详细设计(实现程序模块的具体算法)1.菜单选项 应用switch分支循环对应的数字类别,执行相应的系统功能。2.动画 欢迎动画从屏幕下方上升,结束动画是从屏幕上方下落。动画是由输出的图案叠加而成,输出一个图案便立刻清屏,接着输出下一时刻的图案,一次输出一次清屏便在人眼中形成动画效果。开头动画结束动画3.停车场系统a、结构体声明与定义 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; LinkQueueCar; /*模拟通道*/ b、函数声明与定义(1)主函数void main()/主程序/初始化等while(1)scanf(.);/根据提示信息输入想要的操作switch(k)/根据输入的数调用不同的函数case 1:case 2:.typedef struct */用于创建不同结构体类型的指针与变量void PRINT(CarNode *p)/调用输出函数Leave(*p,n).根据求解时间值来求得费用,并通过收据打印出来(2) 功能函数的声明 void InitStack(SeqStackCar *,int n); 初始化栈int InitQueue(LinkQueueCar *); 初始化队列int Arrival(SeqStackCar *,LinkQueueCar *,int n); 车辆到达,登车牌号,没停满进栈。否则,进队列void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); 车辆离开,通过输入离开车辆的位置处理,然后调用PRINT(CarNode *p);函数进行收费,然后,判断便道上有没有车,如果有,就进停车场。void ExitCar(SeqStackCar *,SeqStackCar *,LinkQueueCar *,int n); 车辆离开,通过输入车牌号而处理离开,然后调用PRINT(CarNode *p);函数进行收费,然后,判断便道上有没有车,如果有,就进停车场。void List(SeqStackCar,LinkQueueCar);显示信息,用switch();函数选择显示车场与便道上的车辆情况,包括对void List1(SeqStackCar *S);void List2(LinkQueueCar *W);分别为车场和便道上的车辆情况void PRINT(CarNode *p) 打印出站车的信息。 (3)库函数 Stdio.h /*标准输入/输出头文件*/ String.h /*包含字符串处理函数头文件*/ Stdlib.h /*包含动态存储与释放函数头文件*/ Malloc.h /*包含内存分配头文件*/4.主要函数思想本程序是个简单的栈与队列的应用程序,其所用的函数也是栈与队列的基本函数,但在编写函数时应特别注意它的面向对象性与窗口化设计,切身为使用者着想.所以在运用一些函数时调用的基本语句有太多的重复,其目的在于实现它本来的基本目的.6、 软件说明书本系统为存车信息管理软件,能实现车场存车及便道存车信息的输入,输出,查找等功能,并建立和更新的存车费用信息保存于文件输出或打印。每辆车的相关信息包括:车牌号,进站时间,出站时间,存车位置,(非)会员停车费用等。该程序是简单的用于运用栈与队列基本知识的工具,不能用于现实中,特别是栈“先进后出”的规则大大限定了该程序的推广,现实世界的车站管理系统比这个远远复杂的多。-进入演示系统后首先会出现欢迎动画,是一个用户及管理员使用注意事项界面。该停车场管理系统是个比较简单系统,在应用的时候请注意要求! 如果您有任何问题,请及时联系我们,谢谢合作! = 进入注意事项界面后系统会提示你停车场所容纳的车辆数,输入可容纳车辆后(1-10),进入管理系统界面 * 欢迎使用本停车管理系统 * * - 1. 车辆到达 - - 2. 车辆(位置 )离开 - - 3. 车辆(车牌号)离开- - 4. 列表显示 - - 5. 退出系统 - * *本停车场管理实行24小时制*n); *本停车场有会员服务,会员0.05/每分钟,非会员0.1/每分钟* 请选择所需要的服务:1|2|3|4|5.这时可按照提示进行你想要的操作,对于15的具体操作与内容请详见前面的调试分析,您便可以轻松操作了!注意事项:1、 注意按提示内容输入,以免出错。2、 本系统功能还需完善,操作简单,只是供学习之用,并不能作 为实际生活使用。七、源程序清单#include#include #include#include/*-*/ #define Max 10char NUM10;int getn()int n; printf(请输入停车场可容纳的车(最多10辆):); scanf(%d,&n);fflush(stdin);/*用来清空输入缓存,以便不影响后面输入的东西*/do if(n10) printf(输入的车辆数不在要求范围内,请重新输入!); scanf(%d,&n); fflush(stdin); else break;while(n10); return n;typedef struct timeint hour; int min; Time; /*时间结点*/ typedef struct node char num10;Time reach; Time leave; CarNode; /*车辆信息结点*/ typedef struct NODE CarNode *stackMax+1;int top; int n;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 dh1()printf( * 欢迎使用本停车管理系统 * n);printf( - - n); printf( n); printf( n); printf( n); printf( n); printf( n); printf( n);void set1() for (int i=15; i1; i-) system(cls); for (int j=0; ji; j+) printf(n); dh1(); system(pause); fflush(stdin);/*结束动画*/void dh2()printf(n); printf(n);printf(n);printf(n);printf(n);printf(n);printf(n);printf(n);printf(n);printf(n);printf( 欢迎下次 n);printf( 光临 n);printf( n);void out2()for (int i=1; i10; i+) system(cls); for (int j=0; jtop=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; int i;/会员char ch;printf(n请输入离开的时间(小时:分钟):); scanf(%d:%d,&(p-leave.hour),&(p-leave.min);fflush(stdin);do/*直到程序输出正确的时间*/if(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(请问你是否是会员(是1/否0):);while(1)scanf(%d,&i);if (i=1) printf( 祝您一路顺风,欢迎您下次光临.); printf(n 收 据n);printf(n 会员n); 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.05*a); printf( |n); printf(-n); free(p);break;if(i=0) printf( 祝您一路顺风,欢迎您下次光临.); printf(n 收 据n);printf(n 非会员n); 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);break;else printf(输入有错,请重新输入:); fflush(stdin);/ch=getchar();int Arrival(SeqStackCar *Enter,LinkQueueCar *D,int n) /*车辆到达,Enter为车场的指针,D为便道队列的指针*/ CarNode *p;/*车辆结点p*/ QueueNode *t;/*队列结点t*/ p=(CarNode *)malloc(sizeof(CarNode); flushall(); /*清空缓存区*/int i;printf(n请输入车牌号(例:A1234):n);gets(p-num);if(Enter-toptop+; printf(车辆在车场第%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; /*把p结点赋值给车站*/return(1); else /*车场已满,车进便道*/ printf(n请该车在便道稍作等待!n);t=(QueueNode *)malloc(sizeof(QueueNode);/*开辟一个队列结点,它的数据结点是p,它的指针结点是空,队列的头与尾都是此结点*/t-data=p; t-next=NULL; D-rear-next=t; D-rear=t; return(1); /车辆离开,输入车牌号离开void ExitCar(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W,int n) int i=0,room,flag=0;/*room为要输出的位置*/char num10,*pnum;/字符串的比较SeqStackCar *S;/开辟新的空间时是否是NULL空CarNode *p,*t; /车辆本生的结点是p,车辆在队列中的结点是tQueueNode *q; /判断车场内是否有车,队列结点*qpnum=num;if(Enter-top0) /车场有车 while(!flag) /输入离开车辆的信息 printf(请输入出站车辆的车牌号:); scanf(%s,pnum); for(i=0;itop;i+)if(strcmp(Enter-stacki+1-num,pnum)=0) room=i+1; flag=1;fflush(stdin); elseprintf(第%d车位没有此车n,i+1);fflush(stdin); while(Enter-toproom) /*车辆离开*/ Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top;/*把剩余的车辆退出车站并送入临时栈内*/Enter-stackEnter-top=NULL;/*栈顶为空*/ Enter-top-; p=Enter-stackEnter-top; /*p是离开车辆的结点*/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);/*LXY判断通道上是否有车及车站是否已满*/ 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); do/*控制到达的时间*/if(t-reach.hourreach.hour=24 | t-reach.minreach.min=60)printf(输入的时间格式有错,请重新输入!);scanf(%d:%d,&(t-reach.hour),&(t-reach.min);fflush(stdin);/else/break;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目前车场里没有车,来车请直接进入车场!n); void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W,int n) /车辆离开int i, room;/room为要输出的位置 CarNode *p,*t; /车辆本生的结点是p,车辆在队列中的结点是tQueueNode *q; /判断车场内是否有车,队列结点qif(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; /p是离开车辆的结点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);/LXY判断通道上是否有车及车站是否已满 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); do/控制到达的时间if(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目前车场里没有车,来车请直接进入车场!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)/LXY列表显示便道信息 QueueNode *p; p=W-head
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级语文下册 第一单元 1 邓稼先说课稿 新人教版
- 2025年面试时劳动合同应注意条款
- 3.3生态系统的物质循环教学设计-2024-2025学年高二上学期生物人教版选择性必修2
- 2025上海市电梯定期检查与维修服务合同
- 2025农产品采购合同书
- 第十二课 用表格为网页布局说课稿-2025-2026学年初中信息技术浙教版2013八年级上册-浙教版2013
- 2024-2025学年新教材高中语文 第三单元 9.1 说“木叶”说课稿 部编版必修下册
- 居民集中供热(热计量计费)合同协议
- 国有土地租赁合同
- 鲁科版高中物理必修一第2章第3节《匀变速直线运动实例-自由落体运动》教学设计
- 2025年常州市规划馆公开招聘工作人员1人考试参考题库及答案解析
- 2025年校外培训机构应急疏散预案
- 2025年年公租房租赁合同范本
- 燃气轮机介绍课件
- 2022年国家公务员考试申论真题及答案解析(地市级)
- 名师成长的路径与修炼(教师版)课件
- 案外人执行异议之诉课件
- 西方经济学导论全套课件
- “基础教育精品课”PPT课件模板
- 第8部分消防设施标识可视化
- 通用顶管监理规划
评论
0/150
提交评论