新浪博客

《算法与数据结构》课程设计之停车场的收费管理系统

2014-01-25 20:26阅读:


《算法与数据结构》课程设计


题目:停车场的收费管理系统


一、 设计目的与内容
1. 问题描述
任务:停车场可以同时停放M辆车,停车场的入口和出口可分别有N辆车排队。停车每小时收费5元,每天不超过50元,停车不满半小时不收费,超过半小时按一小时收费。
功能要求:完成停车场进出车的收费管理以及查询每辆车的停车记录(按照车牌号查询);停车场目前的状况(满或空的车位数)。
规定:输入数据形式和范围:车牌号、停车开始时间
输出形式:有中文提示,停车的时间长短、离开停车场的时间、费用
界面要求:有合理的提示。
存储结构:学生自己根据系统功能要求自己设计,但是要求停车记录要存储在数据文件中。
测试数据:要求使用1
、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
2. 基本要求
1停车场管理主要实现以下几个功能:
①、停车场车位的划分。
②、车辆进出管理及收费功能。
③、停车场车辆信息查询功能。
④、退出系统。
2)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
3)栈以顺序结构实现,队列以链表结构实现。
3. 目的:
程序所能达到的功能:

程序主要服务于停车场使用者和停车场管理者。
对于使用停车场的停车者,在其等待期间,系统为使用者提供查询,修改,删除车辆信息的操作。当使用者想要离开停车场,停车场自动计算出停车费用,并自动让正在等待的使用者有序进入停车位。
而管理者可以通过本系统查询过场,在场,等待的车辆信息,也可以统计24小时内的停车收入。
停车场的管理系统利用栈和队列的这些特点来实现模拟停车场和便道。
二、 算法的基本思想
1. 数据结构定义
(1) 队列数据类型定义
ADT Queue{
数据对象:D={ai|aiElemSet, i=1,2,……,n,n0}
数据关系:R1={|ai-1,aiD,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返回Q的队头元素。
EnQueue(&Q, e)
初始条件:队列Q已存在。
操作结果:插入元素eQ的新的队尾元素。
DeQueue(&Q, &e)
初始条件:Q为非空队列。
操作结果:删除Q的队头元素,并用e返回其值。
QueueTraverse(Q, visit())
初始条件:Q已存在且非空。
操作结果:从队头到队尾,依次对Q的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。
}ADT Queue
(2) 栈数据类型定义
ADT stack{
数据对象:D={ai|aicharset, i=1,2,……,n,n0}
数据关系:R1={|ai-1,aiD,i=2……,n}
基本操作:
initstack(&S, n)
操作结果:构造一个空栈S,该栈可存放n个元素。
push(&S, e)
初始条件:栈S已存在。
操作结果:在栈S的栈顶插入新的栈顶元素e
pop(&S, &e)
初始条件:栈S已存在。
操作结果:删除S的栈顶元素,并以e返回其值。
DestroyStack(&S)
初始条件:栈S已存在。
操作结果:销毁栈S
ClearStack(&S)
初始条件:栈S已存在。
操作结果:将S清为空栈。
StackLength(&S)
初始条件:栈S已存在。
操作结果:返回栈S的长度。
StackEmpty(&S)
初始条件:栈S已存在。
操作结果:若S为空栈,则返回TRUE,否则返回FALSE
GetTop(S, &e)
初始条件:栈S已存在。
操作结果:若栈S不空,则以e返回栈顶元素。
StackTraverse(S, visit())
初始条件:栈S已存在。
操作结果:从栈底到栈顶依次对S中的每个元素调用函数visit()
}ADT stack
2. 主程序流程
基本框架:

驶入
驶出
操作
统计
入栈
入队列
出栈
出队列
已收取的总停车费用
查询
修改
删除
过场、在场与等待车辆信息查找(栈 数组)
在场车辆信息修改(栈)
等待车辆队列删除(队列)
1). 车辆信息类型
typedef struct {
int Htime;
int Mtime;
}Time; //简单模拟时间信息,记录小时和分钟

typedef struct {
char num[20];
Time reachtime;
Time leavetime;
}carinfo;
2). 栈类型
typedef struct stack
{ carinfo car[5];
int top;}Stack;
int inistack(Stack *S) //初始化栈
{ S->top=-1;
return 1;
}
void Push(Stack *S,carinfo x) //进栈操作
{ S->top++;
S->car[S->top]=x;
printf('进站成功!');
}
void Pop(Stack *S,carinfo x) //出栈操作
{ if(S->top=-1)
printf('空栈,无法出栈!');
x=S->car[S->top];
S->top--;
printf('出栈成功!');
}
int IsEmpty(Stack *S) //判断栈空
{ if(S->top==-1)
return 1;
else
return 0;
}
3).队列类型(便道)
typedef struct Node{
carinfo data;
struct Node *next;
}QueueNode;

typedef struct {
QueueNode *front;
QueueNode *rear;
}Queue,*linkQueue;
int EnterQ(Queue *Q,carinfo x);

int iniQueue(Queue *Q) //初始化便道

我的更多文章

下载客户端阅读体验更佳

APP专享