大学设计方案方案——利用所学C语言知识方案报告停车场管理系统.docx

上传人:scccc 文档编号:12964679 上传时间:2021-12-08 格式:DOCX 页数:15 大小:162.60KB
返回 下载 相关 举报
大学设计方案方案——利用所学C语言知识方案报告停车场管理系统.docx_第1页
第1页 / 共15页
大学设计方案方案——利用所学C语言知识方案报告停车场管理系统.docx_第2页
第2页 / 共15页
大学设计方案方案——利用所学C语言知识方案报告停车场管理系统.docx_第3页
第3页 / 共15页
大学设计方案方案——利用所学C语言知识方案报告停车场管理系统.docx_第4页
第4页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《大学设计方案方案——利用所学C语言知识方案报告停车场管理系统.docx》由会员分享,可在线阅读,更多相关《大学设计方案方案——利用所学C语言知识方案报告停车场管理系统.docx(15页珍藏版)》请在三一文库上搜索。

1、班级: 55071 28学号: 20071003753指导教师:刘文中姓名:谢永诚停车场管理一一. 要求:1. 设计一个停车场用长度为N 的堆栈来模拟。由于停车场内如有某辆车要开走,在它之后进来的车都必须先退出为它让道,待其开出停车场后,这些车再依原来的顺序进入。2. 程序输出每辆车到达后的停车位置,以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。二、程序中所采用的数据结构及存储结构的说明以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。栈以顺序结构实现,队列以链表实现。程序中分别采用了“栈”和“队列”作为其存储结构。“栈”的定义可知,每一次入栈的元

2、素都在原栈顶元素之上成为新的元素,每一次出栈的元素总是当前栈顶元素使次栈元素成为新的栈顶元素,即最后进栈者先出栈。程序中采用的结构是:typedef struct NODECarNode *stackMAX+1。int top。SeqStackCar 。 /* 模拟车库 */“队列”是限定所有插入操作只能在表的一端进行,而所有的删除操作都只能在表的另一端进行。插入端叫队尾,梦芭莎优惠券删除端叫对头。按先进先出规则进行。程序中采用的结构是:typedef struct NodeQueueNode *head 。QueueNode *rear 。LinkQueueCar 。 /* 模拟通道 */三

3、、算法的设计思想由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,问题要求汽车停车场内按车辆到达时间的先后顺序,依次由北向南排列。由此很容易联想到数据结构中的堆栈模型,因此可首先设计一个堆栈,以堆栈来模拟停车场,又每个汽车的车牌号都不一样,这样一来可以根据车牌号准确找到汽车位置,所以堆栈里的数据元素我设计成汽车的车牌号。当停车场内某辆车要离开时,在他之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场。这是个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个堆栈,以之来暂时存放为出站汽车暂时让道的汽车车牌号。当停车场满后,继续进来的汽

4、车需要停放在停车场旁边的便道上等候,若停车场有汽车开走,则按排队的先后顺序依次进站,最先进入便道的汽车将会最先进入停车场,好乐买优惠券这完全是一个先进先出模型,因此可设计一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。另外,停车场根据汽车在停车场内停放的总时长来收费的,在便道上的时间不计费,因此必须记录车辆进入停车场时的时间,车辆离开停车场时的时间不需要记录,当从终端输入时可直接使用。由于时间不象汽车一样需要让道,我设计了一个顺序表来存放时间。又用顺序表用派生法设计了一个堆栈,恰好满足上面模拟停车场的需要。四. 设计原理、框图以堆栈来模拟停车场 和以堆栈里的数据元素我设计成汽车的车

5、牌号初始化车站 , 初始化让路的临时栈 , 初始化通道车辆到达车场未满,车进车场输入车子到达时间, 车牌号判断车场内是否有车车场已满,车进便道判断车场是否已满未满车进入车场不做任何计算无有输入离开车辆的离开时间,进行停车费用的计算此车后面的车辆退出并进入临时栈车子离开五 . 运行结果车辆进入车场:车场已满:车辆离开,并收费:列出车场信息:列出车道信息六 .程序#include<stdio.h>#include<stdlib.h>#include<string.h>/*-*/#define MAX 3 /*车库容量*/#define price 0.5 /*每

6、车每分钟费用*/typedef struct timeint hour 。int min。Time 。 /* 时间结点 typedef struct node*/char num10。Time reach。Time leave。CarNode 。 /* 车辆信息结点*/typedef struct NODE。int top 。SeqStackCar 。typedef struct carCarNode *data 。struct car *next 。QueueNode 。typedef struct NodeQueueNode *head。QueueNode *rear。LinkQueueC

7、ar 。 /* 模拟通道 */*-*/void InitStack(SeqStackCar *)。 /* 初始化栈*/int InitQueue(LinkQueueCar *)。 /* 初始化便道*/。 /* 车辆到达 */void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *)。 /* 车辆离开 */void List(SeqStackCar,LinkQueueCar) 。 /* 显示存车信息*/*-*/void main()SeqStackCar Enter,Temp。LinkQueueCar Wait 。int ch 。InitStac

8、k(&Enter) 。 /* 初始化车站 */InitStack(&Temp) 。 /* 初始化让路的临时栈*/InitQueue(&Wait) 。 /* 初始化通道 */printf(" 欢迎光临 ") 。printf("n") 。while(1)printf("n1. 车辆到达 ") 。printf(" 2. 车辆离开 ") 。printf(" 3. 列表显示 ") 。printf(" 4. 退出系统 ") 。while(1)scanf("

9、;%d",&ch) 。if(ch>=1&&ch<=4)break。else printf("nplease choose : 1|2|3|4.")。switch(ch)case 1:Arrival(&Enter,&Wait)。 break。 /* 车辆到达 */。 break。 /* 车辆离开 */ case 3:List(Enter,Wait) 。 break。 /* 打印列表信息 */case 4:exit(0) 。/* 退出主程序*/default: break 。/*-*/void InitStack(S

10、eqStackCar *s) /*初始化栈*/int i 。s->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

11、*p,int room) /*打印出场车的信息*/int A1,A2,B1,B2 。printf("n 请输入离开的时间:/*:*/")。scanf("%d:%d",&(p->leave.hour),&(p->leave.min)。printf("n 离开车辆的车牌号为:")。puts(p->num) 。printf("n 其到达时间为 : %d:%d",p->reach.hour,p->reach.min) 。printf(" 离开时间为 : %d:%d&q

12、uot;,p->leave.hour,p->leave.min) 。A1=p->reach.hour 。A2=p->reach.min 。B1=p->leave.hour 。B2=p->leave.min 。printf("n 应交费用为元 ",(B1-A1)*60+(B2-A2)*price)。free(p)。int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达 */CarNode *p 。QueueNode *t 。p=(CarNode *)malloc(sizeof(CarNo

13、de)。flushall() 。printf("n 请输入车牌号 (例如:鄂A1902):") 。gets(p->num) 。if(Enter->top<MAX) /*车场未满,车进车场*/Enter->top+ 。printf("n 车辆在车场第 %d 位置 .",Enter->top) 。printf("n 请输入到达时间:/*:*/")。scanf("%d:%d",&(p->reach.hour),&(p->reach.min)。Enter->s

14、tackEnter->top=p 。return(1) 。else /*车场已满,车进便道*/printf("n 该车须在便道等待!") 。t=(QueueNode *)malloc(sizeof(QueueNode) 。t->data=p 。t->next=NULL 。W->rear->next=t 。W->rear=t 。return(1) 。void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*车辆离开*/int i, room 。CarNode *p,

15、*t。QueueNode *q 。/* 判断车场内是否有车*/if(Enter->top>0) /* 有车 */while(1) /*输入车辆离开的信息*/printf("n请输入车在车场的位置/1-%d/ : ",Enter->top) 。scanf("%d",&room)。while(Enter->top>room) /*聚尚网优惠券*/Temp->top+ 。Temp->stackTemp->top=Enter->stackEnter->top。Enter->stackEnt

16、er->top=NULL。Enter->top- 。p=Enter->stackEnter->top 。Enter->stackEnter->top=NULL。Enter->top- 。while(Temp->top>=1)Enter->top+ 。Enter->stackEnter->top=Temp->stackTemp->top。Temp->stackTemp->top=NULL。Temp->top- 。PRINT(p,room)。 /* 判断通道上是否有车及车站是否已满*/if(W-&

17、gt;head!=W->rear)&&Enter->top<MAX) /*便道的车辆进入车场*/q=W->head->next 。t=q->data 。Enter->top+ 。printf("n便道的 %s 号车进入车场第%d 位置 .",t->num,Enter->top)。printf("n请输入现在的时间/*:*/:")。scanf("%d:%d",&(t->reach.hour),&(t->reach.min)。W->he

18、ad->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(

19、"n 位置 到达时间车牌号 n") 。for(i=1 。 i<=S->top 。 i+)printf(" %d ",i) 。printf("%d:%d ",S->stacki->reach.hour,S->stacki->reach.min)。puts(S->stacki->num) 。else printf("n 车场里没有车") 。void List2(LinkQueueCar *W) /*列表显示便道信息*/QueueNode *p 。p=W->head-

20、>next 。if(W->head!=W->rear) /*判断通道上是否有车*/printf("n 等待车辆的号码为:") 。while(p!=NULL)puts(p->data->num) 。p=p->next 。else printf("n 便道里没有车.")。void List(SeqStackCar S,LinkQueueCar W)int flag,tag 。flag=1 。while(flag)printf("n 请选择 1|2|3:") 。printf("n1. 车场 n2.便道 n3.返回 n") 。while(1)scanf("%d",&tag) 。if(tag>=1|tag<=3) break 。else printf("n 请选择 1|2|3:") 。switch(tag)case 1:List1(&S) 。break。/* 列表显示车场信息*/case 2:List2(&W) 。 break。 /* 列表显示便到信息*/case 3:flag=0。 break。default: break 。七 结果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1