


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计报告信息工程学院软件工程专业题目:停车场管理系统 班级:软件1班第1组学号:学号:组长:姓名:王崇文组员:姓名:谢天航指导老师:曲朝阳、郭晓利、刘志颖日期:2012年12月26日一、程序设计目标1. 训练学生灵活应用所学数据结构知识,独立完成问题分析, 结合数据结构理论知识, 编写程序求解指定问题。2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4. 训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作
2、作风。矚慫润厲钐瘗睞枥庑赖。二、问题描述设有一个可以停放 n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达 停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满 n辆车,则后来的车辆只能在停车场大门外的便道上等待,一 旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时, 都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然
3、保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理。要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时 间。以栈模拟停车场,以队列模拟停车场外的便道,按照从终端读入的输入数据序列进行模 拟管理。聞創沟燴鐺險爱氇谴净。三、需求分析本次数据结构课程设计的具体内容是停车场管理系统,该系统用栈结构模拟停车场,限定停车场的容量为 n,用队列结构模拟等待的便道,空间不限制。残骛楼諍锩瀨濟溆塹籟。车辆的信息包括:车牌号、汽车到达/离去标志、到达/离去时刻等。按照从终端读入的 数据序列进行模拟管理。 每辆车需要四个数据,其中车辆数据为:1表示
4、到达,2表示离去,3表示车辆显示列表,4表示程序结束。车辆牌照为整型数据。进场或离场时间同样为整型 数据。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。酽锕极額閉镇桧猪訣锥。停车场管理系统主要实现以下几个功能:(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。(2)该程序设计能够通过车牌号能查到该车辆在停车场或便道中的位置。(3)当有车辆从停车场离开时, 等待的车辆按顺序进入停车场停放。实现停车场的调度功能。该程序设计可以完整的模拟停车场的管
5、理过程。每一组输入数据包含三个数据项:汽车“到达”或“离去”信息,汽车牌照号码以及汽车到达或离去的时刻。对每一组输入数据操作后的输出结果为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是汽车离去,则输出汽车在停车场内的停留时间和应缴纳的费用(在便道上停留的时间不收费)。彈贸摄尔霁毙攬砖卤庑。1所示。栈以顺序结构实现,队列以链表结构实现。本设计的小组分工如表 表1小组分工题目停车场管理王崇文车辆到达、车辆离开模块谢天航停车场内停放车辆的信息以及退出程序四、概要设计按照题目的要求,此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,
6、在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能。謀荞抟箧飆鐸怼类蒋薔。因此,可以设计两个堆栈, 其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。当停车场内开走一辆车时, 通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。厦礴恳蹒骈時盡继價
7、骚。对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为 其它车辆让路时退出停车的临时停放地点。至于通道上车辆的停放则用一个链队列来实现, 此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时 间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。我主要实现车辆停车场内停放车辆的信息模块和退出程序模块。茕桢广鳓鯡选块网羈泪。首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。在用户的选择过程中
8、, 程序又分别调用车辆的到达、车辆的离开这两个函数模块。其中,在车辆的离开那个模块函数中又调用了车辆的离开那个模块函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。最后,从调出的这四个函数中回到主函数结束整个程序的运行。鹅娅尽損鹌惨歷茏鴛賴。以上两个模块中,出现的调用的函数为:车辆到达登记籟丛妈羥为贍债a) int Arrival(SeqStackCar *,Li nkQueueCar *);/蛏练淨。车辆到达时,先登记车辆车牌号码。然后再判断停车场有没有停满,没停满就进栈,停满了就停在便道上,即进队列。預頌圣鉉儐歲龈讶骅籴。b)
9、 void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /车辆离开处理 渗釤呛俨匀谔鱉调硯錦。通过输入离开车辆的位置处理,然后调用PRINT(CarNode *p,int room);函数进行收费。然后再判断便道上有没有车,如果有,就把便道上的车进停车场内。铙誅卧泻噦圣骋贶頂廡。c) void List(SeqStackCar,LinkQueueCar); /显示车场内和便道上的车辆情况 擁締凤袜备訊顎轮烂蔷。用个switch();函数选择显示车场内或是便道上的车辆情况。包括对下面两个子函数的调用:void List1(SeqStack
10、Car *S);void List2(L in kQueueCar *W); /分别为显示车场和便道上的车辆情况贓熱俣阃歲匱阊邺镓騷。d) void PRINT(CarNode *p,i nt room); /车辆离开时的收费这个函数由车辆离开的函数调用,以分钟计时算费,但只能计算当天之内的费用,如果第二天的话会导致计费为负或减少。即只能当天停,当天开走。坛搏乡囂忏蒌鍥铃氈淚。算法流程图r"r开始以堆栈来模拟停车场和以堆栈里的数据元素模拟设计成汽车的车牌号,以队列来模拟停车场外的通道且也将其储存的数据元素设计成汽车的车牌号便道内的车进入停车场五、详细设计(I)车辆信息的表示车辆可看成
11、是一个节点,设计成一个结构体,车辆信息包括:车牌号码,车辆的进站时间和离开停车的时间,定义如下:買鯛鴯譖昙膚遙闫撷凄。typedef struct no dechar num10;/车牌号码Time reach; /到站时间Time leave; /离开时间CarNode;(n)时间、栈和队列的定义时间是由小时和分钟表示的,有两部分数据,所以,类似于复数的表示一样,设计两个变量分别存储小时和分钟。如:綾镝鯛駕櫬鹕踪韦辚糴。typedef struct timeint hour;int min;Time;停车场内用栈表示:typedef struct NODECarNode *stackMAX+
12、1; /栈用顺序表示int top;SeqStackCar;便道上的车辆表示:typedef struct carCarNode *data; /便道上的车用链表表示struct car *n ext;QueueNode;typedef struct NodeQueueNode *head; /设置头指针、尾指针。QueueNode *rear;Lin kQueueCar六、软件说明书本系统为存车信息管理软件,能实现车场存车及便道存车信息的输入,输出,查找等功能,并建立和更新的存车费用信息保存于文件输出或打印。对于查找等功能能够按存车位置及车牌号分别进行。每辆车的相关信息包括:车牌号,进站时间
13、,出站时间,存车位置,停车费用等。驅踬髏彦浃绥譎饴憂锦本系统功能还需完善,操作简单,只是供学习之用,并不能作为实际生活使用。下面介绍了此软件的使用说明:1. 停车场.exe ;2. 进入演示系统后首先是一个用户及管理员使用注意事项界面,进入后会出现菜单选项。1.车辆进站 2.车辆出站 3.存车信息 4.离开系统请选择:1|2|3|4.这时可按照提示进行你想要的操作。3. 对于1- 4的具体操作与内容请详见前面的调试分析,您便可以轻松操作了!七、源程序清单#in clude<stdio.h>#in clude<stdlib.h>#in clude<stri ng.h
14、>#defi ne MAX 3 #defi ne price 0.05 typedef struct time int hour;int min;Time;/停车场最大容量为3辆,便于观察/每分钟单价/定义时间结构体typedef struct no de char num10; Time reach; Time leave;/定义车辆信息结构体/字符数组表示车牌号/到达时间/离开时间CarNode;/车辆信息节点typedef struct NODECarNode *stackMAX+1; int top;/栈指针SeqStackCar;模拟车场typedef struct carCa
15、rNode *data;struct car *n ext;QueueNode;模拟通道typedef struct NodeQueueNode *head;设置头指针QueueNode *rear;设置尾指针Lin kQueueCar;void In itStack(SeqStackCar *);int In itQueue(L in kQueueCar *);int Arrival(SeqStackCar *,Li nkQueueCar *);void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);猫虿驢绘燈鮒诛髅貺庑。void Lis
16、t(SeqStackCar,L in kQueueCar);void optio n()int i;char choice;for(i=1;i<=240;i+) prin tf("OO4");prin tf("nnnt数据结构课程设计");prin tf("nnnt小组成员:王崇文 谢天航");锹籁饗迳琐筆襖鸥娅薔。prin tf("nnnt班级:软件111");是否进入停车场管理系统(y/n) ?");輒峄陽/函数及变量的声明定义SeqStackCar数据类型/定义LinkQueueCar数据类型
17、的 Wait;int ch;/定义ch的类型为int来控制你的选择输入;*");構氽頑黉碩饨荠龈话骛。prin tf("nnnt檉簖疖網儂號泶。choice=getchar(); if(choice='N'|choice=' n') exit(0);void mai n()SeqStackCar En ter,Temp;的Enter,Temp;尧侧閆繭絳闕绚勵蜆贅。Lin kQueueCar Wait;system("color 1A");/ 控制屏幕颜色InitStack(&Enter);/ 模拟停车场InitS
18、tack(&Enter),将 Enter 的地址传给子函数InitStack进行初始化车站;识饒鎂錕缢灩筧嚌俨淒。InitStack(&Temp);/ 模拟通道InitStack(&Temp),将 Temp 的地址传给子函数InitStack进行初始化让路的临时栈;凍鈹鋨劳臘错痫婦胫籴。InitQueue(&Wait);/模拟通道InitQueue(&Wait),将 Wait 的地址传给函数InitQueue进行初始化通道;恥諤銪灭萦欢煬鞏鹜錦。opti on();while(1)printf("n§擬族§ 欢迎进 入停 车
19、 场 管 理 系统. § § § § §tnn");鯊腎鑰诎漣鉀沩懼統庫。prin tf("nt1.车辆到达登记tn");prin tf("nt2.车辆离开登记tn");prin tf("nt3.车辆列表显示tn");prin tf("nt4.退出系统. tnn");while(1)printf("请选择:");scan f("%d",&ch);if(ch>=1 &&ch<=4)b
20、reak;else printf("n 输入有误,请重新选择:14:");switch(ch)case 1:Arrival(&En ter,&Wait);break;case 2:Leave (&En ter, &Temp,&Wait);break;case 3:List(E nter,Wait);break;case 4:exit(0);default: break;/自定义函数/=初始化栈=硕癘鄴颃诌攆檸攜驤蔹。void In itStack(SeqStackCar *s)int i;s_>top=O;for(i=0;i&l
21、t;=MAX;i+)s->stacks->top=NULL;/=初始化链表=int Ini tQueue(L in kQueueCar *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 room)/ 车辆收费int A1,A2,B1,B2;printf("n车辆离开的时间:”);sc
22、an f("%d:%d", &(p->leave.hour),&(p->leave.mi n);printf("n离开车辆的车牌号为:");puts(p->nu m);printf("n其到达时间为:%d:%d",p->reach.hour,p->reach.min);阌擻輳嬪諫迁择植秘騖。printf("n 离开时间为:%d:%d",p->leave.hour,p->leave.min);氬嚕躑竄贸恳彈濾颔澩。 A1=p->reach.hour;A2
23、=p->reach. min;B1=p->leave.hour;B2=p->leave .min;printf("n应交费用为:%2.1f元",(B1-A1)*60+(B2-A2)*price);釷鹆資贏車贖孙滅獅赘。free(p);/=车辆至 y达= int Arrival(SeqStackCar *E nter,Li nkQueueCar *W)CarNode *p;/定义p指针类行为 CarNodeQueueNode *t;定义 t 指针类行为 QueueNodep=(CarNode *)malloc(sizeof(CarNode);用 malloc
24、 开辟车子结点 CarNode 的空间,同时用p指针指向新开辟空间的首地址;怂阐譜鯪迳導嘯畫長凉。flushall();刷新缓冲区,printf("n请输入车牌号(例吉 B6666):");gets(p->nu m);if(E nter->top<MAX) 大值)En ter->top+;/输入车牌号信息/判断车场是否满了(进入的车辆数小于存储车辆的最II进入的车辆数量加1 ;printf("n车辆在车场第 printf("n车辆到达时间%d 位置.",Enter->top);:");t->data
25、=p;t->data 储存t-> next=NULL;W->rear- >n ext=t;W->rear=t;return(1);/=车辆离开=熒绐譏钲鏌觶鷹緇scan f("%d:%d",&(p->reach.hour), &(p->reach.mi n);Enter->stackEnter->top=p;将p指针里包含的所有信息赋值给停车场栈的结点里;谚辞調担鈧谄动禪泻類。return(1);elseII (输入的车辆数大于车场的存储量)printf("n该车须在便道等待!有车位时进入车场&
26、quot;);t=(QueueNode *)malloc(sizeof(QueueNode);II 站满入队列(用 malloc 开辟便道的存储空间(即一个结点信息),同时用 QueueNode型指针接收新开辟结点的首地址;)嘰觐詿缧铴嗫偽純铪锩。II将 p指针里包含的所有信息赋值给通道的结点里,用II令 t->next=NULL ;/让新到的暂停车子连接到队尾上,同时将队尾挪移到下一位;機库void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)鶼渍螻偉阅劍鲰腎邏蘞。 int room;定义room的类型为int:
27、记录车辆在停车场中的位置CarNode *p,*t;II定义p、t的指针类型为 CarNode: p指针用来储存离开车辆的信息,t指针用来储存从通道上入停车场的车辆信息纣忧蔣氳頑莶驅藥悯骛。QueueNode *q;II定义q的指针类型为 QueueNode:用q指针控制通道车子的移动if(E nter->top>0)II判断车场是否为空(停车场内车辆的数量大于0,即有车)颖刍莖峽饽亿顿裊赔泷。while(1) printf("n 请输入车在车场的位置 /1-%d/:",Enter->top);scan f("%d",&room
28、);if(room>=1 &&room<=E nter->top) break;/ 输入的要离开的车子的位置不小于1且不大于停车场内最大停放数量就跳出循环;濫驂膽閉驟羥闈詔寢賻。else printf("n 输入有误,请重输:");while(E nter->top>room)/把要删除的车辆的前面的车开出来,进临时栈。(停车场内停放车辆的位置大于输入的要离开车子的位置)銚銻縵哜鳗鸿锓謎諏涼。Temp->top+;/靠近大门的车子就要退出让道,安置到临时栈中且同时位置加1;Temp->stackTemp->to
29、p=Enter->stackEnter->top; 将停车场内栈顶信息赋给 临时栈的栈顶挤貼綬电麥结鈺贖哓类。En ter->stackE nter->top=NULL;/然后将停车场内栈顶设置为空En ter->top-;位置减 1p=E nter->stackE nter->top;/把要删除的车辆节点赋给p。便于车子信息的打印赔荊紳谘侖驟辽輩袜錈。En ter->stackE nter->top=NULL;/将停车场内栈顶设置为空En ter->top-;while(Temp->top>=1) / 再把临时栈里的车辆
30、进停车场En ter->top+;将停车场内栈顶位置加1En ter->stackE nter->top=Temp->stackTemp->top;将临时栈的栈顶信息赋给停车场内的栈顶 塤礙籟馐决穩賽釙冊庫。/将临时栈栈顶设置为空Temp->stackTemp->top=NULL;Temp_>top_;PRINT(p,room);/调用计费函数计费。将要离开的车子的信息打印出if(W->head!=W->rear)&&En ter->top<MAX)/判断便道上有车,则再开进停车场。便道不为空同时满足停车场
31、内的栈顶小于3裊樣祕廬廂颤谚鍘芈蔺。q=W->head->n ext; t=q->data;En ter->top+;/用 q指针指向便道头指针的后继/再将q的存储车子信息数据赋给指针t将停车场内栈顶位置加1printf("n便道的%s号车进入车场第 %d位置.",t->num,Enter->top); printf("n请输入%s号车进入车场的时间:",t->num);scan f("%d:%d", &( t->reach.hour),&(t->reach.mi
32、n);W->head->n ext=q->n ext; if(q=W->rear) W->rear=W->head;En ter->stackE nter->top=t;free(q);else printf("n 便道里没有车.n");else printf("n车场里没有车.");/=打印出车场的信息= 仓嫗盤紲嘱珑詁 鍬齊驚。void List1(SeqStackCar *S)/ 车场信息引用 SeqStackCar 的栈 S;定义 int 类型的变量i,来控制移动绽萬璉轆娛閬蛏鬮绾瀧。int i;i
33、f(S->top>0)printf("n 车场:”);printf("n位置到达时间 车牌号n");for(i=1;i<=S_>top;i+)prin tf("%d”,i);prin tf("%d:%d”,S->stacki->reach.hour,S->stacki->reach.mi n);骁顾燁鶚巯瀆蕪領鲡赙。puts(S->stacki->nu m);else printf("n车场里没有车”);void List2(LinkQueueCar *W)显示便道上的车辆情
34、况,引用类型为LinkQueueCar的队列W ;瑣钋濺暧惲锟缟馭篩凉。QueueNode *p;int i;p=W->head->next;/定义类型为QueueNode的指针P,且指向队头的后继if(W->head!=W->rear)printf("n等待车辆的号码为:”);for(i=1; (p!=NULL); i+)printf("n 第 %d 车辆.",i);puts(p->data->nu m);p=p->n ext ;else printf("n便道里没有车.");prin tf(&quo
35、t;n");void List(SeqStackCar S,LinkQueueCar W) /显示,遍历int flag,tag;定义int型的flag , tag;且初始化令flag=1 (用于跳出循环的变量)鎦诗涇艳损楼紲鯗餳類。flag=1;while(flag)prin tf("查看车辆列表显示:”);printf("n 1.车场列表n 2.便道列表n 3返回主菜单n");printf("n 请选择 13:");while(1)scan f("%d", &tag);if(tag>=1 &
36、;& tag<=3) break;else printf("n输入有误,请重新选择 13:");switch(tag)case 1:List1(&S);break;case 2:List2(&W);break;case 3:flag=0; system("cls"); break;default: break;八、测试报告以下是程序运行的界面截图,显示了运行的一些主要过程。(1 )停车场系统的登录界面,如图3所示盂 EADebnEIlJ. eze§紀脳§沁稔欢迎使用停车场系统脳§紀離洪討絶絶絶絶酥絶1-车瀚到达登记訣。00车辆离开登记訣 缺。絶©2.絶酬絶3.车辆列表並示訣©©4.退出系纟充.絶絶睛选择:图3停车场的登录界面(2)车场内车辆离开时,输入离开时间,然后计算、显示费用,如果便道上有车
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度技术升级借款合同模板
- 2025如何制定租赁合同范文
- 2025咸宁市园林绿化施工承包合同
- 2025员工与公司协商终止的合同协议
- 2025【村路面硬化工程施工合同】村基础设施提升项目施工合同
- 2025【合同转让协议书】普通商品转让合同范本
- 2025企业技术研发人员劳动合同
- 2025企业间借款的合同协议书
- 2025买卖合同争议解决方法
- 2025版权授权合同协议书范本
- 不良资产项目律师法律尽调报告(模板)
- 临建工程施工技术交底
- 浅谈男女二重唱《让我们携手同行》声音的情感处理
- 机械设备租赁合同范本简洁版
- 初中音乐《花儿与少年》教学课件
- 八下可爱的四川教案
- 中考英语适当形式填空专项练习(含参考答案)
- 压覆矿产资源评估服务方案
- 三联图书馆管理系统2013压缩版常见问题与解答
- 48V100A-储能-BMS规格书(带RS232 RS485 CAN通讯)
- 化妆品年度全套内部审核检查计划、内审记录表及内审报告
评论
0/150
提交评论