停车场模拟管理程序的设计与实现
一、简介
1.设计目的
理解线性表的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。 2.问题描述
设停车场只有一个可停放几辆汽车的狭长通道,只有一个大门可供汽车进出。汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车辆开走,则排在便道上的第一辆汽车即可进入;当停车场内某辆汽车要开走时,由于停车场是狭长的通道,在它之后开入的车辆必须先推出车场为他让路,待车辆开出大门,为他让路的车辆再按原次序进入车场。试设计这样一个停车场模拟管理程序。
二、数据结构的设计
(1)为了便于区分每辆汽车并了解每辆车当前所处的位置,需要记录汽车的牌照号码和汽车当前的状态。
(2)为了便于停车场的管理,要为每个车位分配一个固定的编号。 (3)当停车场的停车位上都已停满了汽车,又有新的汽车到来时要把它调度到便道上,便道上的车辆要按照进入便道的先后顺序顺次序放在便道上,为便道上的每个位置分配一个固定的编号。当有车从停车位上离开后,便道上的第一辆汽车就立即进入停车位上的某个车
位。
(4)当某辆车离开停车场的时候,比他后进停车位的车要为他让路,而且当他开走之后让路的车还要按照原来的停放次序再次进入停车位的某个车位上,为完成这项功能,定义一个结构体。
三、功能(函数)设计:
本程序从总体上分为四个功能模块,分别为: (1)程序功能介绍和操作提示模块 (2)汽车进入停车位的管理模块 (3)汽车离开停车位的管理模块 (4)查看停车场状态的查询模块
四、界面设计:
五、程序设计:
主函数:显示主操作界面和调用其他函数 车辆进入函数:负责处理车辆的进入
浏览函数:查看此时停车场和等候区的车辆的相关信息 查询函数:查询停车场某位置的车辆信息 车辆开出函数:负责处理某位置车辆开出时,其后车辆的移动状况以及等候区的车辆进入停车场
结束函数:置空此停车场以及等候区 程序流程图:
开始
输入相关函数指令 否
是否退出函数 是
编写代码的过程中遇到的问题
对于停车场和的等候区是否要分两个线性表来处理
若要分两个线性表进行处理则处理车辆开出和进入时较为麻烦,现用一个线性表进行处理(只需在结构体中加入一个变量来指明车辆的所处位置即可)
六、运行与测试:
1、测试的数据及其结果:
(1)连续有7辆汽车到来,牌照号分别为CF001、CF002、CF003、CF004、CF005、CF006、CF007,前5辆车应该进入停车位1-5车位,第6、7辆车应停入便道的1、2位置上。
(2)上面(1)中的情况发生后,让牌照CF003的汽车从停车场开走,应显示CF005、CF004的让路动作和CF006从便道到停车位的动作。
(3)随时检查停车位和便道的状态,不应该出现有空位而便道上还有车的情况。 (4)其它正常操作的一般情况。
4.1重复进行7次添加函数依次输入七辆车的位置号码和车牌号码,然后进行一次浏览函数结果如下
4.2承接上述操作(不进行退出函数)
运行一次删除函数输入所删除的位置号码3 运行结果如下
4.3运行一次浏览函数查看剩余车的状态信息保证程序的正确性 运行结果如下
4.4任意开出停车位上的多部车辆保证所有车都在停车位,等候区无车辆停放 4.5多次运行指令函数保证正确性(如表空状态,查询不存在,删除位置不存在的提示错误)
2、运行与测试期间遇到的问题及其解决办法。
1.系统进入死循环状态重复输出操作界面 错误原因:车牌号的类型错误
解决办法:在车辆结构体中定义一个字符串指针指向车牌号 2.无法对等候区的编码进行从1开始计数
解决办法:对对应位置编号(停车场内)进行对(停车场最大停车辆+1)进行取余运算, 对对应位置编号(等候区)进行对(停车场最大停车辆+1)进行取余运算后+1。
七、设计后的思考:
经过一个星期的课程设计,过程曲折可谓一语难尽。整天都是对着电脑,不然就是翻阅资料。在此期间我失落过,也曾一度热情高涨。点点滴滴令我回味无长。这次课程设计使我体会到只有做到细心耐心,恒心才能做好事情。 这次的课程设计,加强了我们动手、思考和解决问题的能力。巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。培养了我选用参考书,查阅手册及文献资料的能力。培养思考,深入研究,分析问题、解决问题的能力。通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。而且做课程设计同时也是对课本知识的巩固和加强,平时看课本时,有些问题就不是很能理解,做完课程设计,那些问题就迎刃而解了。而且还可以记住很多东西。认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。所以这个期末测试之后的课程设计对我们的作用是非常大的 程序源码:
#include #define length sizeof(struct lianbiao) struct car{ int number;//车停靠在停车场的位置编号 char *state;//区分是在停车场还是等候区 char chepai[5];//车的车牌号码,默认5字符 }; struct lianbiao{ struct car data;//车的信息资料 struct lianbiao *next;}; int num1;//被查询的位置编号 int num2;//开出的车辆的位置编号 int m;//主界面的功能选择 int count=0;//停车场内的车辆数量 bool z=true;//主界面的判断条件 void main(){ struct lianbiao *head; head=(struct lianbiao*)malloc(length);//申请结点 head->next=NULL;//置空 struct lianbiao *add(struct lianbiao *head);//声明添加方法 void scan(struct lianbiao *head);//声明浏览方法 void cha(struct lianbiao *head,int num1);//声明查询方法 struct lianbiao *del(struct lianbiao *head,int num2);//声明删除方法 while(z){//主界面 printf(\"输入功能选项\\n\"); printf(\"添加。。。。。。。。1\\n\"); printf(\"查询。。。。。。。。2\\n\"); printf(\"浏览。。。。。。。。3\\n\"); printf(\"删除。。。。。。。。4\\n\"); printf(\"结束。。。。。。。。5\\n\"); scanf(\"%d\ switch(m){ case 1:head=add(head);break;//调用添加方法 case 2:printf(\"输入查询位置编号\"); scanf(\"%d\ cha(head,num1); break;//调用查询方法 case 3: scan(head);break;//调用扫描方法 case 4:printf(\"输入删除位置编号\"); scanf(\"%d\ head=del(head,num2);break;//调用删除方法 case 5: z=false; head->next=NULL;break;//跳出小程序 }}} struct lianbiao *add(struct lianbiao *head){//车辆进入时调用的方法 struct lianbiao *p2; p2=(struct lianbiao*)malloc(length);//申请结点 if(head->next==NULL){//此时停车场为空 printf(\"输入车辆信息位置编号 车牌\\n\"); scanf(\"%d%s\->data.number,&p2->data.chepai);//获取车的信息 count++; p2->data.state=\"停车场\"; p2->next=NULL; head->next=p2; return head;} else {//停车场不空 printf(\"输入车辆信息位置编号 车牌\\n\"); scanf(\"%d%s\->data.number,&p2->data.chepai);//获取车的信息 count++; if(count<6) p2->data.state=\"停车场\"; else p2->data.state=\"等候区\"; p2->next=head->next; head->next=p2; return head; } } void scan(struct lianbiao *head){//浏览停车场的方法 struct lianbiao *p1; p1=head->next; if(!p1)printf(\"空的停车场\");//停车场为空的情况 else{printf(\"%s\\n\位置编号 车牌号 停车位置\"); while(p1){ if(p1->data.number>5)//车辆在等候区 printf(\"%d\\%s\%s\\n\->data.number)%6+1,p1->data.chepai,p1->data.state); else if(p1->data.number<=5) //车辆在停车区 printf(\"%d\\%s\%s\\n\->data.number)%6,p1->data.chepai,p1->data.state); p1=p1->next; }} } void cha(struct lianbiao *head,int num1){//查询停车区某位置的车辆信息 struct lianbiao *p1=head->next; while(p1){//停车场不空 if(p1->data.number==num1&&p1->data.number>5){//车辆位于等候区 printf(\"%s\\n\位置编号 车牌号 停车位置\"); printf(\"%d\\%s\%s\\n\->data.number)%6+1,p1->data.chepai,p1->data.state);break;} else if (p1->data.number==num1&&p1->data.number<=5){//车辆在停车区 printf(\"%s\\n\位置编号 车牌号 停车位置\"); printf(\"%d\\%s\%s\\n\->data.number)%6,p1->data.chepai,p1->data.state);break;} else p1=p1->next;} if(p1==NULL)printf(\"查询没有结果\");}//空停车场或查找不存在 struct lianbiao *del(struct lianbiao *head,int num2){//车辆开出时调用的方法 struct lianbiao *p,*p1; p=head->next; if(p==NULL)//空停车场 {printf(\"空的停车场\");} else{ while(p->data.number!=num2&&p->next!=NULL){ p1=p;if(p->data.number==6){//判断是否等候区有车进入 p->data.state=\"停车场\";printf(\"%s\\n\等候区位置1的车等待下列车子移动后进入停车场5号车位\");} if(p->data.number>num2&&p->data.number<=5){//车辆开出让路的描述 printf(\"%d\->data.number); printf(\"%s\\n\号位置的车辆需要开出让路\");} p->data.number--; p=p->next;} if(p->data.number==num2){ p1->next=p->next;free(p);count--; } else printf(\"车辆删除失败\");//查询不到此位置有车停放无法删除 } return head;} 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务