停车场管理系统.docx

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

停车场管理系统.docx

《停车场管理系统.docx》由会员分享,可在线阅读,更多相关《停车场管理系统.docx(13页珍藏版)》请在冰豆网上搜索。

停车场管理系统.docx

停车场管理系统

 

《数据结构》

课程设计报告

 

课程设计题目:

停车场管理系统

 

学生姓名

专业

班级

指导教师

2014年06月20日

一课程设计目的

设计停车场管理系统,运用栈与队列,设计函数。

实现车来车去计费计时的功能。

设计了解掌握栈与队列及其他知识。

二题目简介

设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。

车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。

如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。

停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。

每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。

如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。

编制一程序模拟该停车场的管理。

三流程图或模块图

 

四程序清单和运行结果

代码部分:

//头文件

#include

#include

#include

#include

//常量定义

#defineMAX_STOP4//定义停车场最大停车数

#defineTIME_COUNT"秒"//定义时间单位

#defineTIME_MS_TO_CONUT1000//定义时间进制,意为由TIME_COUNT到毫秒的进制

#defineUNIT_PRICE1//定义单位时间收费标准

//定义存储汽车信息的结构体

typedefstruct

{

charlicense[20];//汽车牌照号码,定义为一个字符指针类型

charstate;//汽车当前状态,字符p表示停放在停车位上,字符s表示停放在便道上,每辆车的初始状态用字符i来进行表示

inttime;//汽车停入停车场时的时间,用来计时收费

}Car;

//定义模拟停车场的栈结构

typedefstruct

{

Carcar[MAX_STOP];//汽车信息的存储空间

inttop;//用来指示栈顶位置的静态指针

}Stack;

//定义模拟便道的队列结构

typedefstructQNode

{

CarWAIT;//汽车信息的存储空间

structQNode*next;//用来指示队列位置的动态指针

}QNode;//链队列节点的类型

//定义链队列的收尾指针

typedefstruct

{

QNode*front,*rear;

}Queue;//将头尾指针封装在一起的链队

/*************************以下为栈操作********************************/

//初始化栈

voidInitStack(Stack&stack)

{

stack.top=-1;

}

//判栈空

intStackEmpty(Stackstack)

{

if(stack.top==-1)

return1;

else

return0;

}

//判栈满

intStackFull(Stackstack)

{

if(stack.top==MAX_STOP-1)

return1;

else

return0;

}

//入栈

voidStackPush(Stack&stack,char*license,intstop_time)

{

stack.top++;//栈队自加

strcpy(stack.car[stack.top].license,license);//复制出车牌号给记录栈顶车牌指针

stack.car[stack.top].state='p';//记录汽车的停车状态

stack.car[stack.top].time=stop_time;//记录汽车的停车时间

}

//出栈返回栈顶指针

intStackPop(Stack&stack)

{

if(StackEmpty(stack))//判断栈的长度,返回1执行

return0;//返回1执行

else

returnstack.top--;//返回0执行,栈顶指针自减,

}

//取栈顶元素

intStackTop(Stackstack,char*license,int&time)

{

if(StackEmpty(stack))//判断栈的长度,返回1执行

return0;

else

{

strcpy(license,stack.car[stack.top].license);//栈顶车牌赋值给license指针

time=stack.car[stack.top].time;//栈顶的停车时间赋值给time

return1;

}

}

//显示所有

voidDisplay(Stackstack)

{

if(stack.top==-1)//判断栈空

printf("停车场为空\n");

else

{

while(stack.top!

=-1)

{

printf("车牌号为:

%s",stack.car[stack.top].license);

printf(",停在%d号车位上",stack.top+1);

printf(",停车时间为%d秒\n",(GetTickCount()-stack.car[stack.top].time)/TIME_MS_TO_CONUT);

stack.top--;

}

}

}

/********************队列操作***********************************/

//初始化队列

voidInitList(Queue*&queue)

{

queue=(Queue*)malloc(sizeof(Queue));//创建队的内存单位

queue->front=queue->rear=NULL;//空队

}

//判队空

intEmpty_LQueue(Queue*q)

{

if(q->front==NULL)

return1;

else

return0;

}

//判队长度返回队长

intQueueLength(Queue*q)

{

QNode*p=q->front;

inti=0;

while(p!

=NULL)

{

i++;

p=p->next;

}

returni;

}

//入队

voidIn_LQueue(Queue*&queue,char*license)

{

QNode*tmp;

tmp=(QNode*)malloc(sizeof(QNode));//创建链队内存空间

strcpy(tmp->WAIT.license,license);//将数据写入节点

tmp->WAIT.state='s';//写入停车信息

tmp->WAIT.time=GetTickCount();//写入停车时间

tmp->next=NULL;

if(Empty_LQueue(queue))

queue->front=queue->rear=tmp;

else

{

//队非空插入队尾

queue->rear->next=tmp;

queue->rear=tmp;

}

}

//出队成功返回1队空返回0

intOut_LQueue(Queue*&queue,char*license)

{

QNode*tmp;

if(Empty_LQueue(queue))//如果队空返回0

return0;

tmp=queue->front;

strcpy(license,tmp->WAIT.license);//取出队头元素

if(queue->front==queue->rear)//队中只有一个元素

queue->front=queue->rear=NULL;//删除元素

else

queue->front=queue->front->next;//队头指针后移

free(tmp);//释放指针

return1;

}

/*******************************************************************/

//有车到来时的操作

voidCar_Is_Coming(Stack&stack,Queue*&queue)

{

//定义变量

charlicense[20];

printf("请输入车辆的车牌号码:

");

scanf("%s",&license);

//判断停车场是否已满,满则进入便道,不满进入停车场

if(StackFull(stack))

{

In_LQueue(queue,license);//进入便道

printf("停车场已满请在便道等候,您的位置为%d\n",QueueLength(queue));

}

else

{

StackPush(stack,license,GetTickCount());//进入停车场

printf("请进入停车场中的%d号停车位\n",stack.top+1);

}

}

//检查离开的车是否在停车场中返回车在停车场中位置不在则返回0

intLeaveCheck(Stackstack,char*license)

{

intflag=stack.top+1;//定义变量记录当前车在停车场中位置

  if(StackEmpty(stack))

return0;

else

{

//查找离开车所在位置

while(stack.top!

=-1&&strcmp(stack.car[stack.top].license,license)!

=0)

{

flag--;

stack.top--;

}

returnflag;

}

}

//有车离开时的操作

voidCar_Is_Leaving(Stack&stack,Queue*&queue)

{

//定义变量

StacktmpStack;//定义临时停车场

charleave_license[20];//要离开的车牌号

charlicense[20];//存放从停车场中读出来的车牌信息

inttime;

InitStack(tmpStack);//初始化临时停车场

//判断停车场中是否有车

if(StackEmpty(stack))

{

printf("当前停车场中没有车\n");

return;//退出子函数

}

 printf("请输入要离开的车牌照:

");

scanf("%s",&leave_license);

if(LeaveCheck(stack,leave_license))//判断车是否在停车场中

{

//车在停车场中

printf("您的车在%d号车位上\n",LeaveCheck(stack,leave_license));

while(StackTop(stack,license,time)

&&(strcmp(stack.car[stack.top].license,leave_license)!

=0))

{

strcpy(stack.car[stack.top].license,license);

printf("牌照为%s的车暂时退出停车场%d号位\n",license,stack.top+1);

StackPush(tmpStack,license,time);//停车场中的车暂时退出进入临时停车场

StackPop(stack);//出栈

}

    printf("牌照为%s的车离开停车场%d号位\n",license,stack.top+1);

printf("您在停车场中停了%d秒\n",(GetTickCount()-time)/TIME_MS_TO_CONUT);

printf("应缴费用为%d元\n",(GetTickCount()-time)/TIME_MS_TO_CONUT*UNIT_PRICE);

StackPop(stack);//出栈

//将临时停车场中的车停回停车场

while(StackEmpty(tmpStack)!

=1)

{

StackTop(tmpStack,license,time);

StackPush(stack,license,time);

     printf("牌照为%s的车进入停车场%d号位\n",license,stack.top+1);

license[0]='\0';

StackPop(tmpStack);

}

    if(stack.top+1==MAX_STOP-1)//判断车离开前停车场是否停满

{

if(QueueLength(queue))//如果停满则判断便道上是否有车

{

//便道中有车则从便道中停入停车场

Out_LQueue(queue,license);//出队

StackPush(stack,license,GetTickCount());//入栈

printf("在便道中牌照为%s的车进入停车场%d号位\n",license,stack.top+1);

}

}

}

else

//车不在停车场中

printf("您的车不在停车场中!

\n");

voidmain()

{ //定义变量

Stackparking;

Queue*sidewalk=NULL;

char*choice=newchar;

intsel=11;//定义一个变量判断是否退出

//初始化一个为空的停车场

InitStack(parking);

//初始化一个为空的便道

InitList(sidewalk);

//运行界面及功能选择

while(sel)

{

printf("---------------------------\n");

printf("停车场模拟管理系统\n");

printf("1车来\n");

printf("2车走\n");

printf("3查看\n");

printf("0退出\n");

printf("----------------------------\n");

printf("请选择操作:

");

scanf("%d",&sel);

    switch(sel){

case0:

return;

case1:

Car_Is_Coming(parking,sidewalk);

break;

case2:

Car_Is_Leaving(parking,sidewalk);

break;

case3:

Display(parking);

break;

default:

printf("请正确输入选项!

");

break;

}

}

}

 

运行结果

 

五 小结(收获和体会)

通过此次数据结构的课程设计,我对程序的编程,编译,执行等有了更深的认识。

理解到思路对于一个程序的重要性,在整个设计过程中,遇到了很多不同的问题,但通过尝试,努力和老师的帮助最终都解决了,感到很有成就感。

从中,我意识到程序的成功不仅仅是消除语法上的错误,而且还要执行成功。

缺乏完整的思路,尽管语法正确,程序还是无法执行。

数据结构的设计考验的不仅仅是我们对书本知识的理解,还考验了我们分析事物时思维的逻辑紧密性,加深并巩固了我对数据结构的认识。

总的来说,这次的数据结构课程设计加深了我对数据结构的认识,也学到了相关的知识,并且巩固了课堂上所学的知识,还锻炼了实践的应用操作能力,感受颇深,也收获了成功的喜悦。

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

当前位置:首页 > 表格模板 > 合同协议

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

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