停车场管理
源代码下载链接
1.课程设计目的
(1)、 通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固。
(2)、 通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合
理的模块化结构。
(3)、 通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
(4)、 通过课程设计,训练 C 程序调试能力,能将一个中小型各级组织系统联调通过。
(5)、 通过课程设计,开发一个中小型系统,掌握系统研发全过程。
(6)、 通话课程设计,培养分析问题、解决实际问题的能力
2. 课程设计内容和要求
2.1问题描述:
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
2.2设计要求:
要求设计程序输出如下:
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表实现。
3.课程设计总体方案及分析
3.1问题分析
1、算法思想分析
由于停车场是一个狭窄通道, 而且只有一个大门可供汽车进出, 问题要求汽 车停车场内按车辆到达时间的先后顺序, 依次由北向南排列。 由此很容易联想到 数据结构中的堆栈模型, 因此可首先设计一个堆栈, 以堆栈来模拟停车场, 又因 为每个汽车的车牌号都不一样, 这样一来可以根据车牌号准确找到汽车位置, 所 以堆栈里的数据元素我设计成汽车的车牌号。 当停车场内某辆车要离开时, 在他 之后进入的车辆必须先退出车场为它让路, 待该辆车开出大门外, 其他车辆再按 原次序进入停车场。 这是个一退一进的过程, 而且让道的汽车必须保持原有的先 后顺序,因此可再设计一个堆栈, 以之来暂时存放为出站汽车暂时让道的汽车车 牌号。当停车场满后, 继续进来的汽车需要停放在停车场旁边的便道上等候, 若 停车场有汽车开走, 则按排队的先后顺序依次进站, 最先进入便道的汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计一个队列来模拟便道, 队列中的数据元素仍然设计成汽车的车牌号。 另外,停车场根据汽车在停车场内 停放的总时长来收费的, 在便道上的时间不计费, 因此必须记录车辆进入停车场 时的时间,车辆离开停车场时的时间不需要记录,当从终端输入时可直接使用。 由于时间不像汽车一样需要让道, 我设计了一个顺序表来存放时间。 又用顺序表 用派生法设计了一个堆栈,恰好满足上面模拟停车场的需要。
2、实现方法
离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。对于此停车场管理系统的实现, 就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。 至于通道上车辆的停放则用一个链队列来实现, 此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。 对于要对停车场内的车辆根据其停放时间收取相应的停车费用, 可以记录下车辆进入以及
3.2 概要设计
1.构建结构体
(1)定义车辆结构体函数
struct BUS
{
int num;
int intime;
int outtime;
}bus[10000],buss[1000];
其中定义了车辆的车牌、车辆停的位置、车辆停留的时间的数据类型,和进入停车场车辆的最大的数用一个数组表示最大数不超过10000 便道不能超多1000辆。
(2)定义停车场结构体函数
struct seq//停车场
{
int bus[10000];
int top;
};
其中定义了停车场所停车辆的数据类型,和停的车辆数的数据类型。
(3)定义便道结构体函数
struct Biandao
{
int data;
int time;
int num;
struct Biandao *next;
};
struct biandao
{
Biandao *first;
Biandao *rear;
}biandao;
其中定义了进入便道的时间、车牌。和车辆入栈的位置。
2.创建主函数
int main()
{
int x,t;//记录时间,位置的变量
int n;//记录主车道车位数量的变量
printf("请输入停车场主车位数量:");
cin >> n;//键盘输入主车道车位数量
char a[7],b[7];//a数组记录停放车辆和取车以及退出系统关键字,b数组作为记录车辆牌号信息的数组
seq s;
s.top=0;//初始化栈
seqq ss;
ss.topp=0;
biandao.first=NULL;//初始化链队 首尾置空
biandao.rear =NULL;
int num = 0;
printf("输入start进入停车厂,take取车,quit退出:");
while (cin>>a)//给A数组赋值
{
if(strcmp(a,"start")==0){
//用比较字符串比较A数组中记录的关键字是否与start相等
printf("输入车牌号信息:");
cin>>b;//输入车牌号
printf("输入停车位置(1-%d):",n);
cin>>x;//输入位置
printf("原定停车时间:");
cin>>t;//输入预约时间
if ( s.top >= n )//如果停车场已满
{
printf("主道已满,只能听在辅道了!!!\n");
Biandao *p;//一个新结点P
p=(Biandao *)malloc(sizeof(Biandao));
p->data=x;//把位置存放在p结点的data域中
p->time=t;//把时间信息存放在p结点time域中
strcpy(p->we,b);//用字符串复制函数把b存放的牌号信息复制到p结点的we域
num++;
p->next=NULL;//将P结点的next域置空
if (biandao.rear != NULL){
//队尾不为空
biandao.rear->next=p;//将p结点的信息赋值队尾
biandao.rear=p;
}
if (biandao.first==NULL){
//队头为空
biandao.first