大数据结构作业停车场管理系统文档格式.docx

上传人:b****6 文档编号:21329771 上传时间:2023-01-29 格式:DOCX 页数:19 大小:249.39KB
下载 相关 举报
大数据结构作业停车场管理系统文档格式.docx_第1页
第1页 / 共19页
大数据结构作业停车场管理系统文档格式.docx_第2页
第2页 / 共19页
大数据结构作业停车场管理系统文档格式.docx_第3页
第3页 / 共19页
大数据结构作业停车场管理系统文档格式.docx_第4页
第4页 / 共19页
大数据结构作业停车场管理系统文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

大数据结构作业停车场管理系统文档格式.docx

《大数据结构作业停车场管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《大数据结构作业停车场管理系统文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

大数据结构作业停车场管理系统文档格式.docx

这个时间管理员,可以对照表收费了。

6.查看当你要查看停车场所停车的信息时,你可以选择3。

同样,选择3确定后会提示你要查看的车号,然后则会把信息打印在界面上:

系统会告诉你这俩停在停车场里面的那个位置上。

7.退出当你一切操作完了后,就可以选择退出了,输入4停车场管理系统随便按个键就退出该系统了。

四、程序代码

#include<

iostream>

conio.h>

iomanip>

fstream>

string>

#include<

stdlib.h>

windows.h>

usingnamespacestd;

#defineMax_Size2//停车的最大容量

#defineHourFare2//每小时的停车费用

intCountForStack=0;

//栈里现有的车数

intCountForQueue=0;

//排队等候的车数

typedefstruct

{

charCondition;

//到达或者离开的状态

intArrivetime;

//到达时间,默认为-1,表示没有到达

intLeavetime;

//离开时间,默认为-1,表示没有离开

intLicense;

//车牌号

}

CarNode;

//保存每辆车的信息

typedefstruct//栈的定义

{

CarNode*base;

//栈底指针

CarNode*top;

//栈顶指针

intStacksize;

//栈的最大容量

CarStack;

typedefstructQNode

charCondition;

//到达或者离开的状态

QNode*next;

QNode;

typedefstruct//队列的定义

QNode*front;

//对头指针

QNode*rear;

//队尾指针

Queue;

boolInitStack(CarStack&

S1)//初始化栈S1

S1.base=(CarNode*)malloc(Max_Size*sizeof(CarNode));

if(!

S1.base)

cout<

<

"

栈S1内存分配失败"

endl;

returnfalse;

}

S1.top=S1.base;

S1.Stacksize=Max_Size;

returntrue;

boolInitQueue(Queue&

Q)

Q.front=(QNode*)malloc(sizeof(QNode));

Q.front)

{

cout<

队列Q内存分配失败!

}

Q.rear=Q.front;

Q.front->

next=NULL;

boolEnQueue(Queue&

Q,QNode&

e)//插入元素e为Q的新的队尾元素

QNode*p=(QNode*)malloc(sizeof(QNode));

p)

p内存分配失败"

p->

Arrivetime=e.Arrivetime;

Leavetime=e.Leavetime;

Condition=e.Condition;

License=e.License;

//将e赋给P

Q.rear->

next=p;

Q.rear=p;

}

boolDeQueue(Queue&

t)//出队列函数

if(Q.front==Q.rear)

队列为空!

QNode*p=Q.front->

next;

t.Arrivetime=p->

Arrivetime;

t.Condition=p->

Condition;

t.Leavetime=p->

Leavetime;

t.License=p->

License;

next=p->

if(Q.rear==p)

Q.rear=Q.front;

free(p);

voidInitCarNode(CarNode&

C,charcondition,intarrivetime,intleavetime,intlicense)

C.Arrivetime=arrivetime;

C.Condition=condition;

C.Leavetime=leavetime;

C.License=license;

boolPush(CarStack&

S1,CarNode&

car)//插入新的元素car为的栈顶元素

if(S1.top-S1.base>

=S1.Stacksize)

此栈已满,不能压入新的信息"

returnfalse;

(*S1.top).Arrivetime=car.Arrivetime;

(*S1.top).Condition=car.Condition;

(*S1.top).Leavetime=car.Leavetime;

(*S1.top).License=car.License;

++S1.top;

//栈顶指针上移

boolPop(CarStack&

t)//出栈操作

if(S1.top==S1.base)

栈S1为空,不能执行出栈操作"

--S1.top;

//栈顶指针下移

t.Arrivetime=(*S1.top).Arrivetime;

t.Condition=(*S1.top).Condition;

t.Leavetime=(*S1.top).Leavetime;

t.License=(*S1.top).License;

boolIsStackFull(CarStack&

S1)//判断S1栈是否已满

returntrue;

else

boolIsStackEmpty(CarStack&

S1)//判断S1栈是否已空

if(S1.top==S1.base)

else

boolIsQueueEmpty(Queue&

Q)//判断队列是否为空

if(Q.front==Q.rear)

boolSearchInStack(CarStack&

S1,inta)//a表示要查找的车牌号,如果在停车场里面,就返回true

booltag=false;

IsStackEmpty(S1))//如果栈S1非空

CarNode*p=S1.top-1;

while(p!

=S1.base)

{

if((*p).License==a)

tag=true;

--p;

if((*p).License==a)

tag=true;

returntag;

boolSearchInQueue(Queue&

Q,inta)//a表示要查找的车牌号,如果在通道里面,就返回true

IsQueueEmpty(Q))//如果队列非空

QNode*p=Q.front->

while(p!

=Q.rear)

if((*p).License==a)

tag=true;

p=p->

}//退出此while循环时p指向最后一个元素

if((*p).License==a)

voidInCar(CarStack&

S1,Queue&

Q,inta1,inta2)//表示进入车辆,a1表示到达时间,a2表示车牌号码

if(SearchInStack(S1,a2))

车号"

a2<

已经存在于停车场内,输入有误"

return;

if(SearchInQueue(Q,a2))

已经存在于通道内,输入有误"

if(IsStackFull(S1))//如果堆栈已满,说明停车场已满,需要停车在通道里面

QNodeqnode;

qnode.Arrivetime=-1;

//在通道里面不收费,所以不计时

qnode.Condition='

A'

;

qnode.Leavetime=-1;

//定义为-1,说明还没有开始离开

qnode.License=a2;

EnQueue(Q,qnode);

//停在通道上

++CountForQueue;

车号:

qnode.License<

停在通道的第"

CountForQueue<

号位置"

CarNodecarnode;

carnode.Arrivetime=a1;

carnode.Condition='

carnode.Leavetime=-1;

carnode.License=a2;

Push(S1,carnode);

++CountForStack;

车号:

"

carnode.License<

,到达时间:

carnode.Arrivetime<

点,停在停车场的第"

CountForStack<

号位置"

voidSreach(CarStack&

Q,inta)

if(SearchInStack(S1,a))

a<

已存在停车场里面的第"

号位置"

if(SearchInQueue(Q,a))

cout<

停车场已满,车号"

存在于通道里面的第"

号位置,在次等候"

return;

else

对不起!

你查找的车号不在停车场里面"

voidOutCar(CarStack&

Q,inta1,inta2)//出车函数,a1表示离开时间,a2表示车牌号码

if(SearchInQueue(Q,a2))

存在于通道里面,还没有进入停车场,不能离开"

SearchInStack(S1,a2))

该车不在停车场内"

return;

CarStacktempstack;

InitStack(tempstack);

//新建一个栈,存放让路的汽车

booltag1=false;

//标志这个停车场出车以前是否已满,默认为没有满

tag1=IsStackFull(S1);

booltag2=true;

//标志通道是否有汽车在等待,默认为通道为空

tag2=IsQueueEmpty(Q);

CarNodetemp;

//用来保存暂时取出的汽车

booltag3=false;

while

(1)

Pop(S1,temp);

if(temp.License==a2)

if(a1<

temp.Arrivetime)

{

cout<

离开失败!

tag3=true;

Push(tempstack,temp);

}

else

现在离开停车场,所用时间为:

a1-temp.Arrivetime<

小时,应收RMB为:

(a1-temp.Arrivetime)*HourFare<

元"

}

break;

Push(tempstack,temp);

//进入暂存栈}则把前面倒出的车再次放

while(!

IsStackEmpty(tempstack))//如果临时栈不空,入停车场

Pop(tempstack,temp);

Push(S1,temp);

}

QNodetempqnode;

//用来暂时保存从通道出来的汽车

if(tag1==true&

&

tag2==false&

tag3==false)//如果出车前停车场已满,并且通道不为空,并且离开没有失败

DeQueue(Q,tempqnode);

--CountForQueue;

temp.Arrivetime=a1;

temp.Condition=tempqnode.Condition;

temp.Leavetime=tempqnode.Leavetime;

temp.License=tempqnode.License;

Push(S1,temp);

if(tag3==false)//如果停车通道是空的,停车场没有满,并且离开成功

--CountForStack;

voidshowmenu(CarStack&

******************************选择菜单*******************************"

1:

停车"

2:

离开停车场"

3:

查看车辆信息"

4:

退出系统"

*****************************请按键选择******************************"

inttag;

cin>

>

tag;

while(tag!

=1&

tag!

=2&

=3&

=4)

inta1;

unsignedinta2;

switch(tag)

case1:

请输入到达的车号:

cin>

a1;

请输入到达的时间:

a2;

InCar(S1,Q,a2,a1);

Sreach(S1,Q,a1);

break;

case2:

请输入离开的车号:

请输入离开的时间:

OutCar(S1,Q,a2,a1);

case3:

请输入你要查看的车号:

Sreach(S1,Q,a1);

case4:

showmenu(S1,Q);

voidloging(CarStack&

{

charAdministrator[15],password[15];

inta;

printf("

\t*****************************************************\n"

);

\t****\n"

\t**欢迎使用停车场管理系统**\n"

printf("

\n\t(提示:

账号跟密码一样就行)"

\n\n\n\n\t请输入管理员帐号:

fflush(stdin);

gets(Administrator);

\t\t\t\t\t\t\t\t\t\t\t请输入密码:

fflush(stdin);

gets(password);

//比较用户名和密码

if(strcmp(Administrator,Administrator)==0&

strcmp(password,Administrator)==0)

\n\n\t\t\t您已成功登陆,请稍侯!

\n\n\t\t\t"

//延迟

for(a=0;

20;

a++)

Sleep(150);

//进入页面时清屏

system("

cls"

\n\n\t\t\t您输入的帐号或者密码错误!

voidmain()

CarStackcarstack;

InitStack(carstack);

//建立并且初始化用于停车场的堆栈

QueuecarQueue;

InitQueue(carQueue);

//建立并且初始化用于通道的队列

loging(carstack,carQueue);

}

五、心的体会

在生活与工作中许多领域都用到数据结构,但关键是如何将问题模型转换,变换成我们熟知的知识应用,即抽象具体化。

首先是要把所学的知识重新好好巩固下,其次,每次课程设计总会有些东西不懂的,这时我们就要上网去查资料,这样会让我们养成一个好的自主学习的习惯。

这次的课程设计,我开始是分析了这个系统需要做些什么,然后分析要用到哪些代码,哪些结构,哪些算法开实现这些功能。

它让我明白了栈和队列实际会用在哪些方面,同时我有些不懂的,我会看书,或是在网上找,慢慢的也增加了自己的知识量。

这次的停车场系统做的很简单,和真正的停车场系统来比,根本就不算什么了。

真正的停车场是不会那么退出停车场的,每次离开都要人家后面的让道,还不被

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

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1