数据结构课程设计(停车场管理)_第1页
数据结构课程设计(停车场管理)_第2页
数据结构课程设计(停车场管理)_第3页
数据结构课程设计(停车场管理)_第4页
数据结构课程设计(停车场管理)_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、指导教师普田粤院PUTIAN UNIVERSITY数据结构与算法课程设计报告题 目: 停车场管理系统姓 名:专 业: 智能科学与技术班 级:学 号:指导教师: 新工科产业学院2021年12月 日return 0;7. 8 DeleteQueue 函数CarNode *DeleteQueue (LinkQueueCar *W, CarNode *x, int m) /出队 QueueNode *p,*q; int i;p=W-head-next;q=W-head;if (W-head=W-rear) return 0;队列为空 for(i=l;inext; q-next=p-next;if (W

2、-rear=q)/如果队中只有一个元素那么p出队以后成为空队 W-rear=W-head;x=p-data;free (p);W-num一一; return x;)7. 9 leavel 函数void leavel (SeqStackCar *Enter, LinkQueueCar *W) 停车场的车离开 int room;CarNode *p, *x;if (Enter-top0T) 判断车场是否为空 while (1) (printf (ntt 请输入车在车场的位置/I-%d/:, Enter-top0+l); scanf (d, &room); 获取停车位 room;if(room=0&

3、roomtop0) break;/判断输入位置是否有效 else printf (ntt 输入有误,请重输:);)while(Enter-top0rooni)把要删除的车辆的前面的车开出来,进临时栈。 (x=Pop (Enter,0);Push (Enter, x, 1);)p=Pop (Enter,0);PRINT(p, 1);/调用计费函数计费 if(W-head! =W-rear) 假设便道不为空p=DeleteQueue (W, p, 1);Push (Enter, p, 0);printf (n便道里的车进入停车场n);while (Enter-toplMAX) 再把临时栈里辆进停车

4、场x=Pop (Enter, 1);Push (Enter, x, 0);else printf (/zntt车场里没有车.n);停车场空直接出去)7. 10 leave2 函数void leave2 (LinkQueueCar *W) 便道离开函数int room;CarNode *p;if (W-head! =W-rear) 队列不为空while (1)(printf (ntt 请输入车在便道的位置/I-%d/:, W-num);scanf (%d, &room);if(room=l&roomnum) break;判断输入位置是否有效 else printf (ntt 输入有误,请重输:)

5、;)p=DeleteQueue(W, p, room);PRINT (p, 2);)else printf (/ztt便道里没有车);)7. 11 Arrival 函数int Arrival (SeqStackCar *Enter, LinkQueueCar *W) 车辆进入函数 CarNode *p;p= (CarNode *) malloc (sizeof (CarNode); 生成车辆节点printf (ntt 请输入车牌号(例:豫 B1234): );scanf(%s,p-num);printf (ntt车辆到达时间:);scanf(%d:%d, &(p-reach. hour), &

6、(p-reach. min);if(Enter-topLOj +ltopLlJ) Push (Enter, p, 0);printf (ntt 车辆在车场第%d 位置. nn, Enter-top0 +1);system (pause);return (1);else停车场已满需要进入便道等待,便道用队列实现printf (ntt该车须在便道等待!有车位0寸进入车场nrT);EnterQue (W, p);return (1);)7. 12 leave 函数void Leave (SeqStackCar *Enter, LinkQueueCar *W) 车辆离开函数(车辆的离开int a=l,

7、 b=0; while(a)欢迎使用停车场系统.tn);11停车场.tn欢迎使用停车场系统.tn);11停车场.tn);2便道.tn);0返回上一级.tn););););printf (nttttt printf (nttttt printf (/znttttt printf (/znttttt printf (ttprintf (/zntt请选择您需要出库车辆的存在场地:); scanf(d,&b);switch(b)case 0:a=0;break;leavel (Enter, W);break;leave2(W);break;default: printf (/zntt 输入错误请重新输

8、入:);break;system(pause);)7. 13 Listl 函数void Listl (SeqStackCar S)显示车场里的车辆情况int i;if (S. top0=0)(printf (/zntt 车场:n);printf (/zntt位置t到达时间t车牌号nn);10for(i=0;ireach. hour, S. stacki-reach. min); puts(S. stacki-num);printf (n);)else printf (z,ntt 车场里没有车nn);)7. 14 List2 函数void List2(LinkQueueCar *W)显示便道上的

9、车辆情况QueueNode *p; int i;p邛一head-next;if (W-head!=W-rear)printf (ntt 便道:n);for (i=l; (p!=NULL); i+) printf (ntt 第 %d 辆车:,i); puts(p-data-num);p=p-next;else printf (z,ntt 便道里没有车nn);)7. 15 List 函数void List (SeqStackCar S, LinkQueueCar W) 查看列表显示,遍历 (int flag, tag;flag=l;while (flag)system(cls); printf(n

10、ttprintf (printf (/znttttt printf (/znttttt printf (z,nttttt printf (ntttttprintf (/znttttt printf (printf (/znttttt printf (/znttttt printf (z,nttttt printf (nttttt查看车辆列表显示tn);1车场列表.tn);2便道列表.tn); 0返回主菜单.tn);1111);11printf (ntt 请选择 02:);while (1)(scanf(d, &tag);if(tag=0 & tag=2)break;elseprintf (nt

11、t输入有误,请重新选择02 :);)switch(tag)(case 1:Listl (S);system(pause);break;case 2:List2(&W);printf (n);system(pause);break;case 0:flag=0;break;default:break;system(cls);)八、测试运行8. 1主页面测试12回 C:Users86152Desktoptest(2) X +欢迎使用停车场系统.1车辆到达登记.2车辆离开登记.3车辆列表显示.0退出管理系统.【本停车场收费标准为一分钟0.05元,便道停车0.02 一分钟望周知】请选择:8. 2车辆到达

12、登记功能测试固 C:Users86152Desktoptest(2) X +一 X欢迎使用停车场系统.1车辆到达登记.2车辆离开登记.3车辆列表显示.0退出管理系统.【本停车场收费标准为一分钟.05元,便道停车0.02 一分钟望周知】请选择:1请输入车牌号(例:豫B1234) : 123车辆到达时间:12:22车辆在车场第1位置.请按任意键继续.8. 3车辆离开停车场功能测试13国 C:Users86152Desktoptest(2) X +欢迎使用停车场系统.1停车场.2便道.0返回上一级.if匿由,车赢而百茬荡施;请输入车在车场的位置/11/: 1车辆离开的时间:12:33离开车辆的车牌号

13、为:123其到达时间为:12:22离开时间为:12:33应交费用为:.6元请按任意键继续.8. 4车辆停入便道功能测试固 C:Users86152Desktoptest(2) X +一 X欢迎使用停车场系统.1车辆到达登记.2车辆离开登记.3车辆列表显示.0退出管理系统.【本停车场收费标准为一分钟0.05元,便道停车。.02一分钟望周知】请选择:1请输入车牌号(例:豫B1234) :567车辆到达时间:15:U该车须在便道等待!有车位时进入车场请按任意键继续.8. 5查看停车场车辆信息功能测试14国 C:Users86152Desktoptest(2) 国 C:Users86152Deskto

14、ptest(2) X国 C:Users86152Desktoptest(2) X国 C:Users86152Desktoptest(2) XX1车场列表.2便道列表.0返回主菜单.请选择0-2:1车场:位置到达时间车牌号112:11123213:22234314:333458. 6查看便道车辆信息功能测试固 C:Users86152Desktoptest(2) X +一 口 X查看车辆列表显示1车场列表.2便道列表.【0】返回主菜单.瓦荏 二5;便道:第1辆车:567第2辆车:789请按任意键继续.8.7车辆从便道离开功能测试15回 C:Users86152Desktoptest X +一 口

15、 X欢迎使用停车场系统.1停车场.2便道.0返回上一级.备还荏惠需萋由豆至赢而音茬荡施;请输入车在便道的位置/1-2/: 1车辆离开的时间:15:33离开车辆的车牌号为:567其到达时间为:15:11离开时间为:15:33应交费用为:元请按任意键继续.8.7当便道有车辆时车辆从停车场第一位置离开功能测试囤 C:Users86152Desktoptest(2) X + z一 口 X欢迎使用停车场系统.1停车场.2便道.0返回上一级.圣瓦加音茬荡布G请输入车在车场的位置/1一3/: 1车辆离开的时间:13:22离开车辆的车牌号为:123其到达时间为:12:11离开时间为:13:22应交费用为:3.

16、5元便道里的车进入停车场请按任意键继续.8.7便道车辆进入停车场后查看停车场车辆信息16国 C:Users86152Desktoptest(2) X查看车辆列表显示1车场列表.2便道列表.0返回主菜单.请选择0-2:1车场:位置到达时间车牌号116:11789213:22234314:33345请按任意键继续.九、工程总结本次工程是栈和队列的基本算法,是基础练习,关键是车辆的离开,具体谈谈我理解的停车 场。停车场系统总的来说分为五大块,第一块和第二块属于基本操作,包括初始化栈和队列; 第三块是车到达,分为两个层次:.车到达了进栈.栈满,进队列。第四块是车离开,分为五个层次:.车离开,判断该车后

17、面是否还有车.有车的话,后面的车让路,进临时栈.然后该车离开,打印出离开信息.离开后,判断临时栈上是否有车,有车重新进车站.再判断便道上是否有车,有车也进车站。第五块是显示车站信息,分为三个层次:.显示车站信息.显示便道信息.返回。17 TOC o 1-5 h z HYPERLINK l bookmark36 o Current Document 1、工程简介1 HYPERLINK l bookmark38 o Current Document 2、设计要求23、引言34、需求分析4 HYPERLINK l bookmark44 o Current Document 5、可行性分析5 HYPE

18、RLINK l bookmark46 o Current Document 6、系统分析与设计6 HYPERLINK l bookmark48 o Current Document 7、代码实现7 HYPERLINK l bookmark4 o Current Document 8、测试运行8 HYPERLINK l bookmark30 o Current Document 9、工程总结9附录:(程序源代码)/头文件#ifndef CarParking_HNCLUDED#define CarParking_HJNCLUDED#define MAX 3/*5*1* *1* *.1 *17,*!

19、*、!、! *1* *!* *1*?*、!. *?* *!*、, *!*1* *1*1*1* *1* A* *5*!* *1* *i* *3*/ 、q、?、q、q、?、?、rjw 乙、q、q、?、q、rjw rjw 乙、乙、q、*J、*2* *4* 4、*Z、*Z、*1、?、*4* *J*功能描述:头文件*其它说明:消息字段之间用分号(;)分隔kJ* *7,.!* .!*7, 7,7,*1* .!* *1*kJ* *2*7, 7,7,*1* *2* *2*7,7,*1* *1*k2* *2* 7/ 7,7* *1.!* *3* *2*7,7,*1* *1*k1 k2* *2* 7/ 7,7*

20、*1. /*J、,、.、,卜.、,、,卜,、(、,j、.、,;、*1* ,j、,、,卜rjw*J、,、.、,卜,卜1、,j、,卜,(、(、,j、.、,;、*rw 1typedef struct int hour;int min;Time;typedef struct node/定义车辆信息结构体char num10;Time reach;到达时间Time leave;/离开时间JCarNode;typedef struct NODE用顺序栈栈表示停车场CarNode *stackMAX+l;int top2;JSeqStackCar;typedef struct car 便道结点 CarNod

21、e *data;struct car *next;JQueueNode;typedef struct Node链队列实现便道 QueueNode *head;头指针 QueueNode *rear;尾指针 int num;JLinkQueueCar;void showlist();void InitStack(SeqStackCar *);int InitQueue(LinkQueueCar *);int Arrival(SeqStackCar *,LinkQueueCar *);void Leave(SeqStackCar *,LinkQueueCar *);void List(ScqSta

22、ckCar,LinkQucucCar);void leave 1 (SeqStackCar *Enter,LinkQueueCar *W);void leave2(LinkQueueCar *W);int Push(SeqStackCar *s,CarNode *p,int i);CarNode *Pop(SeqStackCar *s,int i);int EnterQue(LinkQueueCar *W,CarNode *p);#endif/ CarParking_HJNCLUDED18#include#include#include test.h主程序int main()(SeqStack

23、Car Enter; 定义栈和便道LinkQueueCar Wait;int ch;system(color 09);InitStack(&Enter);对栈进行初始化InitQueue(&Wait); 队列初始化while(l)(showlist();printf( nntt 请选择:);scanf(”d”,&ch);switch(ch)(Arrival(&Enter,&Wait);break;Leave(&Enter,&Wait);break;List(Enter,Wait);break;case 0:exit(O);default:printf(nn输入有误,请重新选择:03: ”);

24、break;)system(cls);)/自定义函数#include#include#include #include#include /停车场最大容量为3辆,便于观察#define PRICE 1 0.05#define PRICE2 0.02#include test.hvoid showlist()19printf(untt );printf(Hntt,);printf(nnttttt欢迎使用停车场系统.tn”);printf(Hntttttprintf(nntttttprintf(Hnttttt11printf(Hntttttprintf(nntttttprintf(Hntttttpr

25、intf(nntt【本停车场收费标准为一分钟0.05元,便道停车0.02 一分钟望周知】n”);printf(ntt );)void PRINT(CarNode *p,int i)/ 车辆收费 int A1,A2,BI,B2;float m;printf(Hntt车辆离开的时间scanf(n%d:%dn,&(p-leave.hour),&(p-leave.min);printf(nntt离开车辆的车牌号为:”);puts(p-num);A1 =p-reach.hour;A2=p-reach.min;Bl=p-leave.hour;B2=p-leave.min;printf(Hntt 其到达时间

26、为:%d:%dnH,Al,A2);printf(Hntt 离开时间为:%d:%dnn,Bl,B2);switch(i)m=(Bl-Al)*60+(B2-A2)*PRICEl;break;小时跟小时求差换算成分与分钟求和得出价格m=(B 1-A l)*60+(B2-A2)*PRICE2;break;)if(m0)printf(ntt 应交费用为:%2.1f 元n”,m);elseprintf(ntt 无需收费n);free(p);)void InitStack(SeqStackCar *s)/ 栈的初始化int i;s-top0=-l;s-topfll=MAX;for(i=0;istacki=N

27、ULL;)int InitQueue(LinkQueueCar *Q)/ 队列的初始化Q-head=(QueueNode *)malloc(sizeof(QueueNode);头结点生成 if(Q-head!=NULL)Q-head-next=NULL;头指针 next 域置空20Q-rear=Q-head;尾指针指向头结点Q-num=O;return(l);)else return(-l);)int Push(SeqStackCar *s,CarNode *p,int i) 入栈 if(s-top0+l =s-top 1 ) return 0;栈满 switch(i)case 0:s-top

28、|0|+;s-stacks-top0=p;break;case 1:s-topl-;s-stacks-top 1 =p;break;default:return 0;)return 1;)CarNode *Pop(SeqStackCar *s,int i)出栈CarNode *p;switch(i)case 0:if(s-top0=-l) return NULL;p=s-stacks-top0;/0 号栈元素出栈 s-top0-;break;case 1:if(s-toplJ=MAX) return NULL;p=s-stacks-top 1 ;/0 号栈元素出栈 s-topl+;break;

29、default: return NULL;) return p;)int EnterQue(LinkQueueCar *W,CarNode *p)链队列入队,生成队列节点,存入节点信息,将尾指针的next指向它,移动尾指针 QueueNode *t;t=(QueueNode *)malloc(sizeof(QueueNode);生成队列结点空间if(t!=NULL)t-data=p;t-next=NULL;W-rear-next=t;21W-rear=t;W-num+;system(pausen); return I;)elsereturn 0;)CarNode *DeleteQueue(Li

30、nkQueueCar *W,CarNode *x,int m)出队QueueNode *p,*q;int i;p=W-head-next;q=W-head;if(W-head=W-rear) return 0;/队列为空for(i=l;inext;)q-next=p-next;if(W-rear=q)如果队中只有一个元素那么p出队以后成为空队W-rear=W-head;x=p-data;free(p);W-num;return x;)void leave 1 (SeqStackCar *Enter,LinkQueueCar *W)停车场的车离开int room;CarNode *p,*x;if

31、(Enter-top0-l)/判断车场是否为空(while(l)(printf(ntt 请输入车在车场的位置/l%d/: ”,Enter-top0+l);scanf(d”,&room); 获取停车位room;if(room=0&roomtop0J) break;/判断输入位置是否有效 else printf(ntt 输入有误,请重输:); )while(Enter-top0room)把要删除的车辆的前面的车开出来,进临时栈。 (x=Pop(Enter,0);Push(Enter,x,l);p=Pop(Enter,0);PRINT(p,l);/调用计费函数计费if(W-head!=W-rear)

32、 /假设便道不为空22 p=DeleteQueue(W,p, 1);Push(Enter,p,O);printf(Hn便道里的车进入停车场n”);)while(Entertoplhead! =W-rear) / 队列不为空while(l)(printf(untt 请输入车在便道的位置”,W-num);scanf(,%d,&room);if(room= 1 &roomnum) break;判断输入位置是否有效 else printf(Hntt 输入有误,请重输:”);)p=DeleteQueue(W,p,room);PRINT(p,2);)elseprintf(Htt便道里没有车”);)int

33、Arrival(SeqStackCar *Enter,LinkQueueCar *W) 车辆进入函数CarNode *p;p=(CarNode *)malloc(sizeof(CarNode);生成车辆节点printf(Hntt 请输入车牌号(例:豫 B1234):);scanf(%sn,p-num);printf(ntt车辆到达时间:”);scanf(%d:%dH,&(p-reach.hour),&(p-reach.niin);if(Enter-top0+ ltopl)Push(Enter,p,O);printf(ntt 车辆在车场第d 位置.nn”,Entertop0+l);system(

34、npause);return(l);else/停车场已满需要进入便道等待,便道用队列实现23printf(”ntt该车须在便道等待!有车位时进入车场nn);EnterQue(W,p);return(l);void Leave(SeqStackCar *Enter,LinkQueueCar *W)车辆离开函数 (/车辆的离开int a=l,b=0;while(a)system(clsn);printf(ntt );printf(ntt ”);printf(ntttttprintf(ntttttprintf(ntttttprintf(nttttt欢迎使用停车场系统.tn”);printf(nttt

35、ttprintf(ntttttprintf(ntttttprintf(nttttt【1】停车场.tn”);2便道.tn);0返回上一级.tn);printf(tt );printf(”nN请选择您需要出库车辆的存在场地:); scanf(%d,&b);switch(b)case 0:a=0;break;leave 1 (Enter,W);break;leave2(W);break;default: printf(ntt 输入错误请重新输入:);break;)systemCpause);)void Listl(SeqStackCar S)显示车场里的车辆情况(int i;if(S.top0=0)

36、printf(Hntt 车场:n);printf(ntt位置t到达时间t车牌号nn“);for(i=0;ireach.hour,S.stack|i|-reach.min);puts(S.stacki-num);printf(nH);else printf(Hntt 车场里没有车nn);24void List2(LinkQueueCar *W)显示便道上的车辆情况QueueNode *p;int i;p=W-head-next;if(W-head !=W-rear)(printf(Hntt 便道:n);for(i=l; (p!=NULL); i+) (printf(ntt 第 %d 辆车:二i)

37、; puts(p-data-num);p=p-next;)else printf(Hntt 便道里没有车nn);void List(SeqStackCar S,LinkQueueCar W) /查看列表显示,遍历 int flag,tag;flag=l;while(flag)system(ncls);”);printf(Hnttprintf(ntt ”);”);printf(ntttttprintf(ntttttprintf(ntttttprintf(nttttt查看车辆列表显示tn);printf(ntttttprintf(ntttttprintf(ntttttprintf(nttttt1车场列表.tn”);2便道列表.tn);0返回主菜单.tn);printf(tt );printf(ntt 请选择 0-2:);while(l)scanf(%dn,&tag);if(tag=0 & tagleave. hour), &(p-leave. min);printf (ntt离开车辆的车牌号为:);puts(p-num);Al=p-reach. hour;A2=p-reach. min;Bl=p-leave. hour;B2=p-leave, min;printf (ntt 其到达时间为:%d:%

温馨提示

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

评论

0/150

提交评论