




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录1 实习目的 12 问题描述 13 需求分析 23.1 设计思想 23.2 实现方法 24 概要设计 34.1 数据结构设计 34.4 函数及功能要求 35 总体设计 45.1 总体设计图 45.2.1 车辆成批入站 65.2.2 车站内信息显示 76 详细设计 86.1 采用结构体定义的相关数据类型 86.2 功能函数设计 97 系统测试及其结果 137.1 程序调试中的问题 137.2 结果截图 157.2.1 车辆成批入站 157.2.2 车辆出站 178 心得体会 18参考文献 20附录 21停车场管理系统1实习目的通过实习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析
2、、 编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以 及操作方法,为进一步的应用开发打好基础。2问题描述停车场是一条可以停放n辆车的狭窄通道,且只有一个大门汽车停放安到达 时间的先后依次由北向南排列(大门在最南端,最先到达的第一辆车停在最北端) 若停车场已经停满n辆车,后来的汽车在便道上等候,一旦有车开走,排在便道 上的第一辆车可以开入;当停车场的某辆车要离开时,停在他后面的车要先后退 为他让路,等它开出后其他车在按照原次序开入车场, 每两停在车场的车要安时 间长短缴费。3需求分析3.1设计思想此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆 进出,并且
3、要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先 退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能, 就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时 停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。 至于当停车场已满时,需要停放车辆的通道可以用一个循环队列来实现。当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆 结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈, 并且使通道 上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的循环队列的头 结点连到原来的第二辆车上就可以了
4、。这个程序的关键是车辆的进站和出站操作,以及车场和通道之间的相互关 系。由于车站是一个很窄的、一边开口的车道,先进后出,类似数据结构中的栈 结构,故车场用栈这种数据结构来描述。外面的狭长的通道,先进先出,故可用 队列结构来描述。考虑到车场和通道在整个程序中都要用到。故把这两个变量定义成全局变量。本程序中的数据对象是汽车,可以认为车牌号是每个元素的关键 项,不能重复,和现实中一样,另外加了车主姓名这一数据项,为表简洁,其他 相关信息如入场时间,车的类型,收取费率等,都不再考虑,具体应用的时候可 以方便地修改得到。3.2实现方法对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车 场
5、内车辆为其它车辆让路时退出停车的临时停放地点。至于通道上车辆的停放则用一个循环队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此循 环队列上的结点而已。4概要设计4.1数据结构设计第一个定义汽车的信息:车牌号 num10和车主姓名name10:typedef struct carchar num10;char n ame10;Car;第二个定义汽车场的结构,在这里我把它看成是一个栈,在这里定义栈的容 量等信息:typedef struct Car datamaxsize;int n;栈容量设定int top;Stack;顺序栈用来存放汽车场内的车辆信息第三个定义通道的结构,在这里我把它
6、看成是一个循环队列,在这里定义队列胡容量等信息:typedef struct Car datamaxsize;int n;队列容量设定int num;/当前通道上的车辆数int fron t,rear;Queue;循环队列用来存放通道内的车辆信息:创建入栈的操作,以实现车辆进入停车场:创建出栈的操作,以实现车辆离开停车场4.4函数及功能要求1. int Push(Stack *S,Car x)的操作2. int Pop(Stack *S,Car *px)的操作3. i nt In sertQueue(Queue *Q,Car x):创建入队的操作,以实现进入临时停车场的操作4. i nt De
7、leteQueue(Queue *Q,Car *x):创建出队的操作,以实现离开临时停车场的操作5. void ShowCar(void):创建显示车站内信息的子程序。6. void In itCarpark(void):创建车辆成批入站的子程序。7. void In sertCar(void):创建单个车辆入站的子程序。:创建车辆出站的子程序。8. void ExitCar(void)9. Pop(SCar, &x);:提供指定车辆出站的功能。10. void SetCar(void):提供车站模拟系统相关功能设定的功能。11. void carme nu( void):显示出车站管理系统主
8、菜单。12. void mai n( void):此为主函数,调用其他子程序。5总体设计5.1总体设计图停车场车辆管理系统工IIII车辆单个车辆显示车站管理退出成批车辆车站系统主菜入站入站出站内汽单函系统车信息数图2.1功能模块图运行程序到系统界面,接着系统界面就会出现让你能选择的功能:【1】车辆成批入站【2】单个车辆入站【3】车辆出站【4】车站内信息实时显示【5】相关功能设定【0】退出本系统5.2模块流程图5.2.1车辆成批入站图2.2车辆成批入站流程图522车站内信息显示图2.3停车场内信息显示流程图6详细设计6.1采用结构体定义的相关数据类型前面提到,要用到栈和队列的操作。这里,由于一个
9、车场的最大容量是一定 的,且车场最多执行的操作是插入和删除操作,所以用顺序储存结构可以带来更大益处。为了防止队列中出现“假溢出”现象,这里采用了循环队列。在模拟汽 车这个对象时,进行了简化处理,只取得最核心的两个数据项:车牌号和车主姓 名。具体数据结构定义如下:首先定义maxsize为20:#defi ne maxsize 20第二个再定义汽车的信息:车牌号 num10和车主姓名name10:typedef struct carchar num10;char n ame10;Car;第三个定义汽车场的结构,在这里我把它看成是一个栈,在这里定义栈的容 量等信息:typedef struct Ca
10、r datamaxsize;int n;栈容量设定int top;Stack;顺序栈用来存放汽车场内的车辆信息第四个定义通道的结构,在这里我把它看成是一个循环队列,在这里定义队列胡容量等信息:typedef struct Car datamaxsize;int n;队列容量设定int num;/当前通道上的车辆数int fron t,rear;Queue;循环队列用来存放通道内的车辆信息6.2功能函数设计(1)车辆成批入站void InitCarpark(void)/车辆成批入站此函数也可以作为初始化车场的函数,因为一个车场刚开始投入运行的时候 会有很多的车进来,这也是设计此函数最重要的一个原
11、因。每行输入一个汽车信息,最后结束的时候输入“ #”即可。汽车信息中前面表示汽车的车牌号,后 面表示车主姓名,中间用空格隔开。当输入汽车的数目超过规定的最大容量的时 候(如果开始不设置最大容量,默认值为系统申请的最大值maxsize=20),自动检测条件,给出相关提示信息。程序如下:void In itCarpark(void)/车辆成批入站 char nu m8,*p num,n ame10,*p name;Car pear;pnum=num;pn ame=n ame;printf(nn请输入车子的信息(包括车牌号和车主姓名(两者之间用空格隔开)(以# #这个符号结束):n);sea nf(
12、%s%s,p nu m,p name);while(strcmp(p num,#)!=0) strcpy(pcar. nu m,p nu m);strcpy(pcar. name,p name);if(Push(SCar,pcar)=-1) printf(n车站已满!车辆已经入通道!n);if(I nsertQueue(QCar,pcar)=-1)printf(n通道已满,进入通道失败!n);sca nf(%s%s,p nu m,p name);printf(这批汽车已经成功进入停车场n);getch();carme nu();(2) 单个车辆入站void InsertCar(void)/单个
13、车辆入站当系统正常投入运行后,会有零散的车辆进进出出,如还用成批输入方式的 话,将会带来一定的麻烦。此函数具有函数Ini tCarpark()几乎所有的功能,程序跟InitCarpark()这个差不多,同样先输入,然后再判断停车场是否满了,通道是否满了,最后执行结果,程序如下:void In sertCar(void)/ 单个车辆入站 char nu m10,*p num,n ame10,*p name;Car pcar;pnum=num;pn ame=n ame;printf(nn请输入车子的信息(包括车牌号和车主姓名(两者之间用空格隔开):n);sca nf(%s%s,p nu m,p n
14、ame);strcpy(pcar. nu m,p nu m);strcpy(pcar. name,p name);if(Push(SCar,pcar)=-1)printf(n车站已满!车辆已经入通道!n);if(I nsertQueue(QCar,pcar)=-1)printf(n通道已满,进入通道失败!n);getch();(3) 车辆内信息显示函数void ShowCar(void)/车站内信息显示如果车场本身是空的,没有汽车,那么也就不存在查看汽车信息了。故本函数一开始进行合理性检查,如果条件不成立,拒绝执行显示信息操作,给出出错 的信息后返回到主界面。前面提到,车站内信息包括两部分:车
15、场内停放的车辆, 在外面通道上等停的车辆。因为通道上也不一定有车,程序输出车场内的所有汽 车信息后,自动进行判断通道上是否有车辆。如果有车辆的话,继续输出停在通道上的车子信息。程序如下:void ShowCar(void)/车站内信息显示 int i,fr on t,rear;if(SCar-top=-1) printf(nn 这停车场是空的!n);getch();carmenu();printf(nn目前停车场的车有:n-车牌号 车主姓名n);for(i=0;itop+1;i+) prin tf(%-13s,SCar-datai. nu m);prin tf(%18sn,SCar-datai
16、. name);if(QCar-rear!=QCar-fro nt)通道内有车辆fron t=QCar-fr on t;rear=QCar-rear;printf(n通道信息:n- 车牌号 车主姓名n);while(fro nt!=rear) printf(%-13s,QCar-datafro nt, nu m);prin tf(%18sn,QCar-datafro nt, name);fron t=(fro nt+1)%QCar- n;(4) 车辆出站函数void ExitCar(void)/ 车辆出站同上,首先进行和利息你给检查。这里的检查包括两个部分:车场非空且输 入的车牌号在车场中。如
17、果一切条件满足,则执行推车操作。最后,检查通道上 是否有车辆等待。如果通道不为空,程序会自动把排在通道最前面的车调入车场 内。其中,退车的算法过程如下:前面检测条件满足时,执行如下操作:由于车场很窄,当一辆车要出场时, 排在它后面的车辆需要先出场,等要退出的车开走后,刚才为它让道的那些车再 按原次序进入车场。不难看出,这里需要创建一个临时栈,用于保存让道车辆的 信息。在前面的合理性检查中,已经定位到出场车辆所在位置,从栈顶开始,到所在位置前一个结束,车场内执行出栈操作,临时栈结构执行入栈操作。在当前位置执行出栈操作,即可实现指定的车辆出场。当临时栈不为空时,依次执行:临时栈退栈,车场内入栈。(
18、5) 车站模拟系统相关功能设定函数void SetCar(void)/车站模拟系统相关功能设定此函数很简单,首先用一个do-while循环,得到一个合理值,修改相关参数即可。这里有一个防错设计:当输入的最大容量小于车场内当前的车辆数时, 拒绝执行修改。程序如下:void SetCar(void)/车站模拟系统相关功能设定 int b;printf(”选择1:修改停车场的容量n);printf( 选择2:修改通道的容量n);printf(请你选择操作(1-2):n);seanf(%d,&b); /*读入选择 */if(b=1)int n, flag=1;printf(nn目前停车场最大的容纳量是
19、:dn,SCar-n);prin tf(n输入您想要的停车场的最大容纳量:(maxsize)printf(输入错误,请重新输入 n);if(n top+1) flag=0;n=SCar- n;break;while( n maxsize);SCar- n=n;if(flag!=0) printf(n修改成功!n);elseprintf(n错误!车站车辆已经超过此数!如要再输,请再按功能5n);geteh();earme nu ();if(b=2) intn ,flag=1;printf(nn目前通道最大的容纳量是:dn,QCar-n-1);prin tf(n请输入您想要的通道的最大容纳量:(m
20、axsize)printf(输入错误,请重新输入 n);if(nrear+1) flag=0;n=QCar- n;break;while( n maxsize);QCar- n=n+1;if(flag!=0) printf(n修改成功!n);elseprintf(n错误!车站车辆已经超过此数!如要再输,请再按功能5n);getch();carme nu ();(6) 车站管理系统主菜单函数void carmenu(void)/车站管理系统主菜单 此函数是用户与系统之间的一个窗口,用户通过它来选择相关操作。用printf语句打印出供选择项目后,用不会显的 getch ()得到一个字符,用开关 语
21、句switch进行分类,判断用户想要执行的操作,然后执行相关功能函数即可。(7) 主函数 void main(void)为分别表示车场和通道的两个指针变量申请空间,分别调用相应的初始化函数,得到一个合理解,然后程序流向主供选菜单,供用户选择执行。void ma in (void)if(SCar=(Stack *)malloc(sizeof(Stack)=NULL) prin tf(Failed!);exit(1);if(QCar=(Queue *)malloc(sizeof(Queue)=NULL)pri ntf(Failed!);exit(1);In itStack(SCar);l ni t
22、Queue(QCar);carme nu( );exit(0);7系统测试及其结果7.1程序调试中的问题调试过程中的主要问题由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使用了 清屏函数,所以,运行时用户选择任务并且执行完任务后,又会回到供用户选择功能的主界面,因此整个程序从整体上来讲结构清晰,使用方便。本程序的调试 运行,总体上情况良好,但中间也出现了一些小问题。其中比较有代表性的主要问题有:(1) 当停车场已经达到最大容量,但仍有车辆进入停车场的时候,运行界面上没有出现或者说出现了但又跳掉了“车站已满!车辆已经入通道!”的提示信息。在查阅了多种资料后,在那一个printf 语
23、句后加了一个getch(),此时,程序运行结果就符合要求了,看起来也比较清晰了。(2) 使用getch ()语句必须使用头文件 #includevconio.h刚开始因为没有使用这个头文件,所以会出现getch ()这个无法辨别.CCpp1.cpp(71) : error C206: getch : undeclared identifierI图4.1错误报告1(3) 在对字符型的数据进行赋值的时候,要用strcpy,而不能直接用 pcar.n um=p num这样的赋值形式,这样子会产生如下的错误:LCCpp1.cpp(98) : error C2UI10: = : cannot conue
24、rt From char * ta cliar 1fl1y typest although there are conversions to references or pointers to arrays图4.2错误报告2正确的形式应该是这样的:strcpy(pcar. nu m,p nu m);(4) 同时,对字符型的数据进行比较的时候,也需要用strcmp。不过我认为用 while(pnum=#)的形式也是可以的,我试验了一下,结果是可 以的,所以不用strcmp这个东西也是可以的。注意呀,那个#符号必须加”号,不加的话就有四个错误了:CCpp1.cpp(97) : error 2fl1
25、b: preprocessor command nust start 旳 First ncnwhite spacetCCpp1.cpp(VB) : error C2143: sfntdi error ; idssiig )* before *(-CCpp1xpp(9B) : error C2C59: sjntdi error :)-CCpp1.cpp(9S) : error 2143: syntax error ; nissing before h图4.3错误报告3(5) 把通道看成是一个队列,但在通道中的车辆数目总是少一辆,刚开始总是感觉疑问,明明就是设定maxsize为20的,通道内的车辆
26、为什么就只有19辆呢,后来,我突然想到原来队列的Q-front是不存放数据的,终于找到了错误的地方了,所以我在定义数列的地方,把原来的Q-n=maxsize改成了Q- n=maxsize+1;结果是对的了。(6) 采用清屏的功能:system(cls); /*运行前清屏*/刚开始不知道有这个功能,在屏幕执行的时候,总感觉屏幕非常的复杂杂乱,感 觉不是很舒服,后来问了同学一下,发现了这个功能,就马上加上了这个功能, 屏幕就看起来比较清晰和舒服了。(7) 刚开始的时候,程序的健壮性不是很强,在主菜单函数中选择case多少时,如果不是规定的数字范围内的时候, 它就会直接说按任意键返回。 所以为 了增
27、强程序的健壮性,在最后加上 default:ShowCar()这句话,在一开始运行程 序的时候,由于此时停车场内信息没有输入, 认为是空的,而当用户选择了退出 车站的时候,程序将给出出错的信息“这停车场是空的”。(8) 在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难,所以尽量少用goto语句。因为在网上看到了这段话,所以我 就把那个 车站模拟 系统相关功 能设定 这个模块改 成用 do-while语句的形式,其实我觉得do-while语句还是比较容易能实现的,而且 程序也比较容易去检测出错误。(9) 对于通道的假定,原本是没有采用循环队列的,只
28、是采用了比较基本 简单的顺序存储队列,后来发现,这样子会发生“假溢出”的现象,所谓的“假 溢出”顾名思义就是队列出现了“假满”的情况,而不是“真满”,比如 设队 头指针为front ,队尾指针是rear,约定front指向队头元素的前一位置,rear 指向队尾元素。当front等于-1时队空,rear等于m-1时为队满。由于队列的 性质(“删除”在队头而“插入”在队尾),所以当队尾指针rear等于m-1时, 若front不等于-1,则队列中仍有空闲单元,所以队列并不是真满。这时若再有 入队操作,会造成假“溢出”。7.2结果截图7.2.1车辆成批入站待主界面显示出来后,按1进入输入车辆的界面,然
29、后输入你想输入的车辆 信息,然后以“ #”号结束;在此之前,你还可以先设定车站和通道的容量; 如下图:1:先修改停车场与通道的容量,都改成 2;席要的停车场的最尢容纳伞關:2目前停车场最大的容纳量是洽何二二;菇两卑霧費囂|管翥賢莎茶二二E;Dev-Cp p.ConsciiediuseFtexe*# K #w * * M * *示 时5嚼成车岀内功怎弼饗和头!:车:;番12 3 4-50i I5厉内劭0丰谓逸1:星逵 片以遥淫.fe 请进选请图4.1先修改停车场与通道的容量截图2:成批输入三辆汽车的信息,因为停车场内只能停两辆汽车,所以第三辆车要 停放在通道上等停,一旦停车场内有汽车开走,通道上
30、的车辆即可进入;二二丽和护哪用梆舷硕乔二HKMMjoM34.MXMX KMMK MHMiM KME:Dew-C ppC onsoilePd u ser.exe入入 曹*SF 塾舀内功.本 常餐天出 二_亠三豐12 3 4 5 0mmr严 口 |U情输人车予的信息I包括车胆号和车王姓咎两者之间用空梏隔开以別U护这个符号结克卄31 gxF32 a lqk站己满车稱辽经入通道, 井 A这拙汽丰已经或功进人停半场图4.2车辆成批入站结果截图3:待返回主界面后,按4,即会显示出车站内与通道上的车辆信息;图4.3车辆成批入站结果截图制肩訓釁隣驚魏!整JH(骸我盖扛制*盖黑崔蜀 X JI ”賈糸宾PtX X
31、啊拄H N 貝良X 良良赳宾UN聲rt、史健戍”M DDev-C ppC onsolePi U5tr.?:eUSLe 牡更44瑕1 2 3 4 G w请你选择操作5 5=旦雪釁色爭丙车主姓名通返信息;车 丰姓亠B3dyj7.2.2车辆出站1:输入想要出站的汽车牌号,然后汽车出站,接着通道上的第一辆汽车进入停车场;E:DwCpp11 C oradlrPuseT exeher xHWMKM-MM-KMMM-KWMMN-M-NM-NMXMMKMNWNMX-KKMMXMMMMM KMKXKHWMKMKttKMXMHp欢迎理使用便车-龙制忙 代业广、贵莺塞 苣矜耳輯耳if輕輯 KhiJUM耳.鞋翼耳.科
32、耳H显 軽冲4二乂乂N!H Hl事屛辑乍.算即if岸輯1 请依选择操件W-b:请输入车子的车脾号二&1退车成功它w M M 4 4 *站站实足 人入息尸纭 溝站富系内功本 嚟蕩夭出 mu 12 3 4 5 0B图4.4车辆出结果截图(1)2:通道内的车已经进入停车场,如下图:EI站站XMXM息诱MM w4dIA “ 翠曹夭出 US X*M戸目前停车场的车有土-车牌号-车主姓名02SlqB3dyg图4.5车辆出结果截图8心得体会通过这次的课程设计,我拓宽了知识面,锻炼了能力。比如对于队列的队满 或者队空的状态呀,或者队列的长度呀,记得我那时想了好久的一个问题, 我在 上面程序的调试分析里有提过,
33、就是我明明定义 maxsize等于20,可是通道内 汽车的数量却只能输进19辆汽车的信息,我纠结了好久,后来,我的脑袋中突 然闪过一个循环队列的图,那个 Q-front好像是不存放数据资料的,这个 Q-front这个结点确实是不存放数据的,这样子一想,问题就游刃而解了,只 要把原来的Q-n=maxsize改成了 Q-n=maxsize+1就可以了。也许这就是课程设计的目的吧,在于把理论和实际相结合吧,把课堂上所学 到的系统化的理论知识投到实际中, 巩固还没有巩固的知识点,也有助于我们提 高观察,分析和解决问题的实际工作能力,就像那时我和赵老师在对问题进行分 析时,因为双方对汽车场通道的看法都是
34、不同的,所以我们就进行讨论了,我觉得能和老师讨论这很重要,特别是能找出程序上的不足,对完善我们的程序有着 莫大的帮助,那天下午,我也改进了程序,在程序上加上了一个选择,就是停车 场和通道的容量,可以由你更改,改变原来的默认值,但唯一的前提是不能比默 认值大。可以说吧,数据结构真的也比较难,特别是知识点非常的多,很容易看 那个忘记了这个,对于课设要用到的综合知识,那可是难上加上,不过,这也才 激发了我的兴趣,有动力比别人早完成程序。很开心我做到了,既完成了课设也 学到了好多知识,经历了这一个星期,我收获了如下的几点:1.程序的设计思想的精巧的重要性,是不管怎么说都不为过的,好的程序 可以让大家很
35、快的明白你的思想,而且很方便的来实现它。还有不管这程序有多 长,只要你解释了之后,别人很快就能明白,看程序也比较简单了。2数据结构是一门实践性较强的课程,为了学好这门课程,必须在掌握 理论知识的同时,加强上机实践。一个人的力量是有限的,要想把课程设计做的 更好,就要学会参考一定的资料,要善于捕获资料,吸取别人的经验,让自己和 别人的思想有机的结合起来,得出属于你自己的灵感。3.学会“递进”的思想:程序的编写需要有耐心,有些事情看起来很复杂, 但问题需要一点一点去解决,分析问题,把问题一个一个划分,划分成小块以后 就逐个去解决。再总体解决大的问题。这样做起来不仅有条理也使问题得到了轻松的解决这次
36、的程序训练培养了我实际分析冋题、编程和动手能力,使我掌握了程序 设计的基本技能,提高了我适应实际,实践编程的能力。这次的课程设计我对于专业课的学习有了更加深刻的认识,以为现在学的知 识用不上就加以怠慢,等到想用的时候却发现自己的学习原来是那么的不扎实。 以后努力学好每门专业课,让自己拥有更多的知识,才能解决更多的问题!总的来说,这次课程设计让我获益匪浅,对数据结构也有了进一步的理解和 认识,也让我相信,只要你要做(just doit ),没有什么困难能难倒我们参考文献【1】严蔚敏,吴伟民数据结构(C语言版)清华大学出版社,1997.【2】李春葆,曾慧,张植民数据结构程序设计题典清华大学出版社,
37、2002.2007.【3】秦锋,袁志祥数据结构例题详解与课程设计指导中国科学技术大学出版社【4】谭浩强.C程序设计.清华大学出版社.2005.附录/源代码#i nclude #i nclude #in clude #i nclude #defi ne maxsize 20 typedef struct car char num10; char n ame10; Car;typedef struct Car datamaxsize; int n;栈容量设定 int top;Stack;顺序栈typedef struct Car datamaxsize;int n;队列容量设定int num;/当
38、前通道上的车辆数 int fron t,rear;Queue;循环队列Stack *SCar;全局变量:车站内车辆信息Queue *QCar;全局变量:通道内车辆信息void carme nu( void);void In itStack(Stack *S)S-top=-1;S-n=maxsize;void In itQueue(Queue *Q)Q-fron t=Q-rear=Q-num=0;Q-n=maxsize+1;int Push(Stack *S,Car x)入栈操作 if(S-top=S- n-1) return(-1); S-top+;S-dataS-top=x; return(
39、0);int Pop(Stack *S,Car *px) 出栈操作 if(S-top=-1)return(-1); S-top-;*px=S-dataS-top+1; return(0);int In sertQueue(Queue *Q,Car x)/入 队 if(Q-rea r+1)%Q- n)=Q-fro nt) return(-1);Q-nu m+;Q-dataQ-rear=x; Q-rear=(Q-rea 叶1)%Q- n; return(0);int DeleteQueue(Queue *Q,Car *x)出队if(Q-fr on t=Q-rear)return(-1);Q-nu
40、m-; *x=Q-dataQ-fro nt;Q-fro nt=(Q-fro nt+1)%Q- n; return(0);void ShowCar(void)/车站内信息显示 int i,fr on t,rear;if(SCar-top=-1)printf(nn这停车场是空的!n);getch();carme nu ();车主姓名n);车主姓名n);printf(nn目前停车场的车有:n-车牌号for(i=0;itop+1;i+)prin tf(%-13s,SCar-datai. nu m);prin tf(%18sn,SCar-datai. name); if(QCar-rear!=QCar-
41、fro nt)/ 通道内有车辆 fron t=QCar-fr ont;rear=QCar-rear;printf(n通道信息:n-车牌号while(fro nt!=rear)pri ntf(%-13s,QCar-datafro nt, nu m);prin tf(%18sn,QCar-datafro nt. name);fron t=(fro nt+1)%QCar- n;getch(); carme nu();void In itCarpark(void)/ 车辆成批入站char nu m8,*p num,n ame10,*p name;Car pcar;pnum=num;pn ame=n a
42、me;printf(nn请输入车子的信息(包括车牌号和车主姓名 开)(以# #这个符号结束):n);sca nf(%s%s,p nu m,p name); while(strcmp(p num,#)!=0) strcpy(pcar. nu m,p nu m);strcpy(pcar. name,p name); if(Push(SCar,pcar)=-1) printf(n车站已满!车辆已经入通道!n);if(ln sertQueue(QCar,pcar)=-1)printf(n通道已满,进入通道失败!n);sca nf(%s%s,p nu m,p name);printf(这批汽车已经成功进
43、入停车场n);getch();carme nu();void In sertCar(void)/ 单个车辆入站char nu m10,*p num,n ame10,*p name;Car pcar;pnum=num;pn ame=n ame;printf(nn请输入车子的信息(包括车牌号和车主姓名 开):n);sca nf(%s%s,p nu m,p name);strcpy(pcar. nu m,p nu m); strcpy(pcar. name,p name);if(Push(SCar,pcar)=-1)printf(n车站已满!车辆已经入通道!n);(两者之间用空格隔(两者之间用空格隔
44、if(I nsertQueue(QCar,pcar)=-1)printf(n通道已满,进入通道失败!n); getch();carme nu();void ExitCar(void)/ 车辆出站int i,positi on, flag=0;Car x;Stack *S;char nu m10,*p num; pnum=num;if(SCar-top=-1)车站不能为空printf(nn这停车场是空的!n);getch();carme nu();printf(nn请输入车子的车牌号:n);/输入出站车辆的车牌号 sca nf(%s,p nu m);for(i=0;itop+1;i+)if(strcmp(SCar-datai. nu m,p num )=0)positi on=i;flag=1;if(!flag) printf(对不起,没有找到该车的信息!);getch();carme nu();if(S=(Stack *)malloc(sizeof(Stack)=NULL)prin tf(Failed!);exit(1);Ini tStack(S);for(i=SCar-top;ipositio n;i-)Pop(SCar, &x); 车
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文旅融合背景下可移动旅居建筑设计研究-以东桃村“暇享·依山静”民宿改造为例
- DB14-T 3302-2025 中药材产地趁鲜切制技术规程 黄芩
- DB32-T 5094-2025 医疗卫生公共信用信息平台建设技术规范
- 《仓储管理员》中级考试练习题(有答案)
- 金融行业市场调研与风险管理协议
- 成都市二手房买卖合同纠纷解决机制
- 车辆抵押贷款反担保贷款及违约责任合同
- 边沟工程投资管理与施工进度控制合同
- 童话剧剧本创作与演出合作协议
- 车辆租赁保险理赔专项合同
- 6kv变电所及低压配电系统的设计
- 《药品生产质量管理规范(2022年修订)》中药饮片等3个附录
- 管理岗位胜任能力评估表
- 公司组织架构图模板可编辑
- 中南大学电力电子课设单项桥式整流电路设计
- 麦克维尔螺杆冷水机组维修保养手册
- 安全教育记录(通用25篇)
- 企业标准编写范本
- @高支模监测方案
- XXX药店二类医疗器械零售经营备案质量管理制度DOC
- 北京市总工会职工互助保障
评论
0/150
提交评论