版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 停车场模拟管理程序的设计与实现一、简介1设计目的:理解线性表的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。2问题的描述:设停车场只有一个可停放几辆汽车的狭长通道,只有一个大门可供汽车进出。汽车在停车场按车辆到达的先后顺序依次排列,若车场已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场有车辆开走,则排在便道上的第一辆汽车即可进入;当停车场某辆汽车要开走时,由于停车场是狭长的通道,在它之后开入的车辆必须先推出车场为他让路,待车辆开出大门,为他让路的车辆再按原次序进入车场。试设计这样一个停车场模拟管理程序。二、数据结构的设计:(1)为了便于区分每辆汽车并了解每辆
2、车当前所处的位置,需要记录汽车的牌照和汽车当前的状态。(2)为了便于停车场的管理,要为每个车位分配一个固定的编号。(3)当停车场的停车位上都已停满了汽车,又有新的汽车到来时要把它调度到便道上,便道上的车辆要按照进入便道的先后顺序顺次序放在便道上,为便道上的每个位置分配一个固定的编号。当有车从停车位上离开后,便道上的第一辆汽车就立即进入停车位上的某个车位。(4)当某辆车离开停车场的时候,比他后进停车位的车要为他让路,而且当他开走之后让路的车还要按照原来的停放次序再次进入停车位的某个车位上,为完成这项功能,定义一个结构体。三、功能(函数)设计:本程序从总体上分为四个功能模块,分别为:(1)程序功能
3、介绍和操作提示模块(2)汽车进入停车位的管理模块(3)汽车离开停车位的管理模块(4)查看停车场状态的查询模块四、界面设计: 本程序界面本着易于操作简单整洁而不失美观的理念,采用数字对应功能选项,结合详细的操作提示,使得操作方便快捷,界面清晰明朗。五、程序设计:1车辆进入停车场模块:·Arrive函数:有车进入停车厂;·Enter->top<MAX:对栈进行判满,Y表示栈满,进入便道;N表示栈不满,进入车站;2车辆离开停车场模块:·Leave函数:有车的话就要离开车位。·scanf("%d",&room):输入需要离
4、开的车所在的位置,如果Enter->top>room,车辆出站。·W->head!=W->rear)&&Enter->top<MAX:便道上有车且车位没有满,便道上的车进入车站。3停车场信息显示模块:·List函数:查询车辆信息。·flag:如果flag=1,则执行List1函数;如果flag=2,则执行List2函数;如果flag=3,则返回,退出函数。·List1函数:查询车站信息。·s->top>0:判断车站有没有车,如果Y,用for循环打印出站的车位和车牌号的信息;如果N,
5、则输入车场没有车,返回List函数。·List2函数:查询便道信息。·w->head!=w->rear:判断便道有没有车,如果Y,用while循环打印出便道上车的信息;如果N,则输出便道没有车,返回List函数。六、运行与测试:1、测试的数据与其结果:(1)前五辆车到达进入停车位:(2)后来的两辆车在便道等候:(3)牌照为CF003的车离开,CF004,CF005需要让道,CF006进入5号车位:(4)查询车场和便道里的信息(5)退出程序:2、运行与测试期间遇到的问题与其解决办法。问题1:在车辆离开时不能显示车辆让道的信息; 解决办法:在离开函数中一个while
6、循环中增加一个printf语句,通过循环可以显示全部需要让道的车辆。问题2:在进行进场出场信息的输入时,只能进行一次; 解决办法:设置一个标志量flag和while循环,在每一次操作后返回到操作步骤。问题3:运行显示程序简介后,继续输入时没有清屏操作,导致运行结果不方便观察: 解决办法:增加getch(); system("cls");语句,实现按任意键继续,并清屏。七、结论:本停车场管理系统,可以进行车辆进入停车场和退出停车场以与停车厂部车位和便道上的停车信息的显示三个步骤的操作。在车辆进入停车场进入模块中,如果进入停车场的车辆大于5,即车位里停放的车辆已满,后面的车自动
7、进入便道等候;在车辆离开停车场模块中,在查找车辆过程中如果没有对应车辆能够显示出“对不起,输入有误,请重新输入!”,并有辅助栈保证从车位上出来的车不会改变顺序;车位出现空位时,便道上的车能自动进入车位,同时,便道上的车也可以直接离开停车场;信息查询模块,能够显示停车场车位和便道上等待车的信息。并有错误操作的信息提示。同样此程序存在一些不足之处。在显示模块,没有显示出开出停车场车辆的信息,在进一步修改补充时,可以添加车辆开出停车场的显示模块;车辆的信息过于简单,只有一个车牌,可以添加更加详细的车辆信息以与添加收费操作等功能。八、设计后的思考:此次课程设计,付出了很多的时间和经历,编程过程中,我看
8、到了自己许多不足,例如程序编写的有点杂乱,造成编译时错误不好找到,没有足够的耐心,有点急功近利,修改编译错误时不能做到系统的分析,造成程序越改越乱,影响了情绪,丢掉了信心。同时,我也深切感受到了程序员的艰辛,明白了作为一个程序员应该尽可能的为用户考虑,缜密的思维,让程序不断地人性化,可操作性强,界面尽可能的友好,把完美作为自己的目标。对于程序本身,我看到了良好的程序编写风格对于程序员的重要性,函数之间调用的便利与简洁,以与循环套用的魅力之所在。总之,不管简单还是复杂的程序设计,都要求扎实的基础知识,因为各种程序都是由简单的一块块的函数结构组成的,并加强实践,从程序的编写中进一步加强对书本知识的
9、掌握。而且,需要耐心,做程序的编写时比较枯燥的,会出现许多错误,需要我们细心并耐心的进行修改。回顾编程的过程,我也学到了许多程序之外的东西,编程的过程对一个人的耐心和毅力是一种极考验,不停地编译,不停地改错,不停地被打击,信心被一点点的消磨,如果放弃,将前功尽弃。所以我选择了停一停稍作休息然后坚持下去,终于在完成的那一瞬间,心充满了自豪和成就感。这次任务完成的过程给我上了生动而难忘的一课,面对一次次的挫折与打击,我会选择咬牙坚持;为了远方的目标,我会不懈的努力,一点点的去接近。参考文献:1谭浩强,C语言设计(第三版). : 清华大学, 20052严蔚敏 吴伟民,数据结构(C语言版).:清华大学
10、,2007附:源代碼 #include<stdio.h> #include <conio.h> #include<stdlib.h> #include<string.h> #define MAX 5/*车库容量*/ typedef struct node char num10; CarNode;/*车辆信息结点*/ typedef struct NODE CarNode *stackMAX+1; int top; SeqStackCar; /*模拟车站*/ typedef struct car CarNode *data; struct car
11、*next; QueueNode; typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /*模拟通道*/ void InitStack(SeqStackCar *); /*初始化栈*/ int InitQueue(LinkQueueCar *); /*初始化便道*/ int Arrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*车辆离开*/ void Li
12、st(SeqStackCar,LinkQueueCar); /*显示存车信息*/ int j=0; void main() SeqStackCar Enter,Temp; LinkQueueCar Wait; int ch;int j=0; InitStack(&Enter); /*初始化车站*/ InitStack(&Temp); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/ printf("|*|n"); printf("|*|n"); printf("|* *|n")
13、; printf("|*欢迎进入停车场管理系统*|n"); printf("|* *|n"); printf("|*|n"); printf("|*|n"); printf("|注:本程序操作容易,请注意跟随操作提示|n"); printf("n"); printf("请按任意键继续."); getch(); system("cls"); while(1) printf("请输入对应的数字选择您需要的功能:n");
14、printf("n*n"); printf("*1.车辆到达*n"); printf("*2.车辆离开*n"); printf("*3.查询信息*n"); printf("*4.退出系统*n"); printf("*n"); while(1) scanf("%d",&ch); if(ch=4) printf("您的使用,再见!n"); else if(ch>=1&&ch<=4)break; else
15、printf("n对不起,您的输入有误!n");break; switch(ch) case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/ case 2:Leave(&Enter,&Temp,&Wait);break; /*车辆离开*/ case 3:List(Enter,Wait);break; /*列表打印信息*/ case 4:exit(0); /*退出主程序*/ default: break; void InitStack(SeqStackCar *s) /*初始化栈*/ int i; s-&
16、gt;top=0; for(i=0;i<=MAX;i+) s->stacks->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) /*打印出站车的信息*/ printf("n离开
17、车辆的车牌号为:"); puts(p->num); int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf("n请输入车牌号(例:DS888):n"); gets(p->num); if(Enter->top<MAX) /*车场未满,车进车场*/ Enter->top+; printf("n车辆停入车场第%
18、d位置.nn",Enter->top); Enter->stackEnter->top=p; return(1); else /*车场已满,车进便道*/ printf("n对不起,车场已满,该车须在便道等待!n"); t=(QueueNode *)malloc(sizeof(QueueNode); j+; t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; printf("车进入%d号便道nn",j); return(1); void Leav
19、e(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)/*车辆离开*/ int i, room; CarNode *p,*t; QueueNode *q; /*判断车场是否有车*/ if(Enter->top>0) /*有车*/ while(1) /*输入离开车辆的信息*/ printf("n请输入车在车场的位置/1-%d/:",Enter->top); scanf("%d",&room); if(room>=1&&room<=Enter->
20、;top) break; while(Enter->top>room) /*车辆离开*/ printf("n牌号为%s的车需要让道n",Enter->stackEnter->top); Temp->top+; Temp->stackTemp->top=Enter->stackEnter->top; Enter->stackEnter->top=NULL; Enter->top-; p=Enter->stackEnter->top; Enter->stackEnter->top=N
21、ULL; 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->top<MAX) /*便道的车辆进入车场*/ q=W->head->next; t=q-&g
22、t;data; Enter->top+; printf("n便道的%s号车进入车场第%d位置.n",t->num,Enter->top); 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->top>0) /*判断车站是否有车*/ printf("n车场:"); printf("n 位置 车牌号n"); for(i=1;i<=S->t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年教育机构临时工劳动协议
- 农村建房承包合同安全责任
- 2024年专业综合布线施工协议样本
- 关于美育的活动方案
- 关于月球的说明文
- 2024届广东省广州市高考语文押题试卷含解析
- 2024年私人房产水电安装协议条款
- 齐鲁工业大学《泵与风机》2023-2024学年第一学期期末试卷
- 齐鲁工业大学《PLC原理及应用》2022-2023学年期末试卷
- 全面总结一季度工作开展情况
- 计算机教室(微机室)学生上机使用记录
- FAI首件检验报告
- 生活满意度量表(SWLS)
- 细胞生物学主题知识讲座
- 小作坊食品安全管理制度(3篇)
- 孕期焦虑测评
- 光伏电站施工组织设计
- 全人教版四年级英语上册期中考试知识点汇总-必背的重点
- 2023年1月高三英语试题(浙江卷)+听力+答案+作文
- 体位引流课件
- 市政工程项目部管理制度及岗位职责
评论
0/150
提交评论