没有合适的资源?快使用搜索试试~ 我知道了~
首页应用程序课程设计--停车场管理 C语言实现
【问题描述】 设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 需求分析 1.序主要模拟停车场管理系统,以栈模拟停车场,以队列模拟车场 外的便道,按照从终段读入的输入数据序列进行模拟管理。栈以顺序结构实现,队列以链表结构实现。 2. 栈与队列中的每一个元素均表示一辆汽车,其中每辆汽车的信息包含车号以及进入停车场的时间。当栈所模拟的车场内满后,外来车辆便会进入便道。 3.系统中车库的容量以及停车费用可由用户随时设定。 4.该程序中包含的命令有车辆的到达‘A’、离开‘D’和系统的结束‘E’。 5. 设n=2,输入数据为:(‘A’ 1,5),(‘A’ 2,10),(‘D’ 1,15),(‘A’ 3,20),(‘A’ 4,25),(‘A’ 5,30),(‘D’ 2,35),(‘D’ 4,40),(‘E’)。
资源详情
资源评论
资源推荐

题目二.停车场管理
【问题描述】
设停车场内只有一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出。汽
车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达
的第一辆车停放在车场的最北端),若车场内已停满 n 辆汽车,则后来的汽车只能在门外
的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要
离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆
再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交
纳费用。试为停车场编制按上述要求进行管理的模拟程序。
一.需求分析
1.序主要模拟停车场管理系统,以栈模拟停车场,以队列模拟车场
外的便道,按照从终段读入的输入数据序列进行模拟管理。栈以顺序结构实现,队列
以链表结构实现。
2. 栈与队列中的每一个元素均表示一辆汽车,其中每辆汽车的信息包含车号以及进
入停车场的时间。当栈所模拟的车场内满后,外来车辆便会进入便道。
3.系统中车库的容量以及停车费用可由用户随时设定。
4.该程序中包含的命令有车辆的到达‘A’、离开‘D’和系统的结束‘E’。
5. 设 n=2,输入数据为:(‘A’ 1,5),(‘ A’ 2,10),(‘ D’ 1,15),(‘ A’ 3,20),
(‘ A’ 4,25),(‘ A’ 5,30),(‘ D’ 2,35),(‘ D’ 4,40),(‘ E’)。
二.概要设计
1)设定栈的抽象数据类型定义为:
ADT stack{
数据对象:D={ai|ai∈charset,I=1,2,……,n,n>=0}
数据关系:R1={<ai-1,ai>ai-1,ai∈D,I=2……,n}
基本操作:
Initstack(&S)
操作结果:构造一个空栈 S。
DestroyStack(&S)
初始条件:栈 S 已经存在。
操作结果:操作结果:销毁栈 S。
ClaerStack(&S)
初始条件:栈 S 已经存在。
操作结果:将 S 清空为空栈。
StackLength(&S)
初始条件:栈 S 已经存在。
操作结果:返回栈 S 的长度。
StackEmpty(&S)
初始条件:栈 S 已经存在。
操作结果:若 S 为空栈,则返回 TURE,否则返回 FALSE。

GetTop(S,&e)
初始条件:栈 S 已经存在。
操作结果:若栈 S 不空,则以 e 返回栈顶元素。
Push(&S,e)
初始条件:栈 S 已经存在。
操作结果:在栈 S 的栈顶插入新的栈顶元素 e。
Pop(&S,&e)
初始条件:栈 S 已经存在。
操作结果:删除 S 的栈顶元素,并以 e 返回其值。
StackTraverse(S,visit())
初始条件:栈 S 已经存在。
操作结果:从栈底到栈顶依次对 S 中的每个元素调用函数 visit( )。
}ADT stack
2)设定队列的抽象数据类型定义为:
typedef struct QNode{
ElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front; /*队头指针*/
QueuePtr rear; /*队尾指针*/
}LinkQueue;
ADT Queue{
数据对象:D={ai|ai∈ElemSet,i=1,2,……,n,n>=0}
数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,……,n}
约定其中端为队列头,端为队列尾。
基本操作:
InitQueue(&Q)
操作结果:构造一个空队列 Q。
DestroyQueue(&Q)
初始条件:队列 Q 已经存在。
操作结果:队列 Q 被销毁,不再存在。
ClearQueue(&Q)
初始条件:队列 Q 已经存在。
操作结果:将 Q 清为空队列。
QueueEmpty(Q)
初始条件:队列 Q 已经存在。
操作结果:若 Q 为空队列,则返回 TRUE,否则 FALSE。
QueueLength(Q)
初始条件:队列 Q 已经存在。
操作结果:返回 Q 的元素个数,即队列的长度。
GetHead(Q,&e)
初始条件:Q 为非空队列。
操作结果:用 e 返回的 e 队头元素。

EnQueue(&Q,e)
初始条件:队列 Q 已经存在。
操作结果:插入元素 e 为 Q 的新的队尾元素。
DeQueue(&Q,&e)
初始条件:Q 为非空队列。
操作结果:删除 Q 的队头元素,并用 e 返回其值。
QueueTraverse(Q,visit())
初始条件:Q 已经存在且非空。
操作结果:从队头到队尾,依次对 Q 的每个数据元素调用函数 visit()。一旦 visit()
失败,则操作失败。
3)本程序包含三个模块:
主程序模块
void main()
{
初始化
while{
接受命令:
处理命令:
}switch(命令!=“退出”);
}
车模块——实现抽象数据类型
栈模块——实现栈抽象数据类型
队列模块——实现队列抽象数据类型
出车操作,入车操作,结账操作。
各模块之间调用关系如下:
车辆入库的基本算法:
车库未满,进行入栈操作;
否则,进行入队操作。
支付信息的基本算法:
结账
主函数
入车
出车
退出
栈模块
队列模块
车模块

返回的时间是否为负值,如果为负值,则返回车辆不存在的信息;
如果不是负值,则判断是否为零值,如果为零值,则返回不需要付款的信息;
否则,输出付费信息。
三.详细设计
1. 车类型定义:
typedef struct ElemType{
int code; /*车辆编号*/
int time; / *时间*/
}ElemType;
2. 栈的基本操作:
typedef struct{
ElemType *base;
ElemType *top;
int stacksize;
}SqStack;
int InitStack(SqStack *S) /*构造空栈*/
{
S->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!S->base) exit(OVERFLOW); /*存储分配失败*/
S->top=S->base;
S->stacksize=N;
return OK;
}
int Push(SqStack *S,ElemType e) /*进栈*/
{ if(S->top-S->base >= S->stacksize) /*栈满*/
return ERROR; /*返回 0*/
*(S->top)=e;
(S->top)++;
return OK; /*返回 1*/
}
int Pop(SqStack *S,ElemType *e) /*出栈*/
{ if(S->top==S->base) return ERROR;/*空栈 返回 0*/
e=(S->top-1);
(S->top)--;
return OK;
}
int GetTop(SqStack S,ElemType *e) /*读栈顶元素*/
{
if(S.top==S.base) return ERROR; /*栈为空*/
e=(S.top-1);
剩余17页未读,继续阅读












安全验证
文档复制为VIP权益,开通VIP直接复制

评论4