停车场管理.docx

上传人:b****2 文档编号:3105867 上传时间:2023-05-05 格式:DOCX 页数:27 大小:141.04KB
下载 相关 举报
停车场管理.docx_第1页
第1页 / 共27页
停车场管理.docx_第2页
第2页 / 共27页
停车场管理.docx_第3页
第3页 / 共27页
停车场管理.docx_第4页
第4页 / 共27页
停车场管理.docx_第5页
第5页 / 共27页
停车场管理.docx_第6页
第6页 / 共27页
停车场管理.docx_第7页
第7页 / 共27页
停车场管理.docx_第8页
第8页 / 共27页
停车场管理.docx_第9页
第9页 / 共27页
停车场管理.docx_第10页
第10页 / 共27页
停车场管理.docx_第11页
第11页 / 共27页
停车场管理.docx_第12页
第12页 / 共27页
停车场管理.docx_第13页
第13页 / 共27页
停车场管理.docx_第14页
第14页 / 共27页
停车场管理.docx_第15页
第15页 / 共27页
停车场管理.docx_第16页
第16页 / 共27页
停车场管理.docx_第17页
第17页 / 共27页
停车场管理.docx_第18页
第18页 / 共27页
停车场管理.docx_第19页
第19页 / 共27页
停车场管理.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

停车场管理.docx

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

停车场管理.docx

停车场管理

*******************

实践教学

*******************

 

兰州理工大学

计算机与通信学院

2011年春季学期

 

数据结构课程设计

 

题目:

专业班级:

姓名:

学号:

指导教师:

成绩:

_________________

目录

摘要3

前言4

正文5

1.采用类c语言定义相关的数据类型5

2.各模块的伪码算法6

3.函数的调用关系图10

4.调试分析11

5.测试结果11

6.源程序(带注释)14

总结23

参考文献24

致谢25

附件部分源程序代码26

 

摘要

通过用数据结构实现对停车场管理的设计,可以加深理解线性表及栈的逻辑结构、存储结构,掌握线性表及栈上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构。

学会如何把学到的知识用于解决实际问题,提高程序开发功能,应用合理的控制流程编写清晰高效的程序。

训练C语言调试能力,培养分析问题、解决问题的能力。

关键词:

数据结构、栈、线性表、C语言。

 

前言

随着人们生活水平的不断提高,各种车辆的数目也急剧增长,传统的人工停车场管理已不能满足当今社会的需求。

因此,一种高效、实用的停车场管理系统将以其明显优势逐渐取代传统的人工管理模式。

本文采用栈和队列来实现停车场的管理,栈和队列都是一种很特别的数据结构,两种数据结构分别采用后进先出和先进先出的顺序进行存取。

将二者的功能结合起来可以很好的实现停车场里的车辆管理。

另外,停车管理系统还具有查看功能,可以很方便的查看车场里的车辆详细信息及在便道上等待的车辆的信息,可以很好的取代传统的人工管理,是适应现代生活的一种很好的停车场管理系统。

 

正文

1.采用类c语言定义相关的数据类型

CarNode-建立车辆信息结点

SeqStackCar-用栈结构来模拟车站

LinkQueueCar-用队列模拟便道

typedefstructnode{

intnum;

intreachtime;

intleavetime;

}CarNode;/*车辆信息结点*/

typedefstructNODE{

CarNode*stack[MAX+1];

inttop;

}SeqStackCar;/*模拟车站*/

typedefstructcar{

CarNode*data;

structcar*next;

}QueueNode;

typedefstructNode{

QueueNode*front;

QueueNode*rear;

}LinkQueueCar;/*模拟通道*/

 

2.各模块的伪码算法

2.1)初始化栈

采用voidInitStack(SeqStackCar*s)来初始化栈,将初始状态置为空,以便用来存储相关的车辆信息。

voidInitStack(SeqStackCar*s)/*初始化栈*/{

inti;

s->top=0;

for(i=0;i<=MAX;i++)

s->stack[s->top]=NULL;

}

2.2)系统操作

使用switch-case语句来完成功能选择,输入A、D、L、E进行不同的操作。

AddRemoveParking(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W){

printf("1.车辆到达请选择A");

printf("2.车辆离开请选择D");

printf("3.车辆信息请选择L");

printf("4.退出程序请选择E");

printf("现在请选择以上信息:

\n");

do{

printf("请输入:

A(到达)、D(离开)、E(结束操作)、L(车辆信息):

");

scanf("%s",选择功能);

switch(){

case;break;

case;break;

case;break;

case;break;

case;break;

}

2.3)车辆到达操作

使用intArrival(SeqStackCar*Enter,LinkQueueCar*W)并结合if-else语句完成到达车辆的记录。

intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/{

CarNode*p;

QueueNode*t;

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

printf("请输入到达车辆车牌号:

");

scanf("%d",车牌号);

if(Enter->top

Enter->top++;

printf("该车辆在停车场的位置是:

%d\n",Enter->top);

printf("请输入该车辆到达的时间:

到达时刻");

scanf("%d",到达时刻);

Enter->stack[Enter->top]=p;

return(TRUE);

}

else/*车场已满,车进便道*/{

printf("\n\t\t\t停车场已满该车辆需在便道上等待!

");

}

2.4)车辆离开

应用voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)及if-else语句记录离开车辆的信息。

voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W){

introom;

CarNode*p,*t;

QueueNode*q;

/*判断车场内是否有车*/

if(Enter->top>0)/*有车*/

{

printf("停车场里停放的车辆总数:

%d",Enter->top);

printf("请输入要离开车辆的车号:

");

scanf("%d",&room);

2.5)显示车场和便道里的车辆信息

定义两个队列List1和List2分别显示车场和便道里的车辆信息,由voidList(SeqStackCar*S,LinkQueueCar*W)和switch-case相关语句控制显示。

voidList1(SeqStackCar*S)/*列表显示车场信息*/

{

inti;

if(S->top>0)/*判断车站内是否有车*/

{

printf("车场:

");

printf("位置到达时间车牌号\n");

for(i=1;i<=S->top;i++)

{

printf("所在位置");

printf("车辆到达时间");

printf("车牌号");

}

}

else

printf("车场里没有车");

}

voidList2(LinkQueueCar*W)/*列表显示便道信息*/

{

QueueNode*p;

p=W->front->next;

if(W->front!

=W->rear)/*判断通道上是否有车*/{

printf("等待车辆的号码为:

");

else

printf("便道里没有车.");

}

voidList(SeqStackCar*S,LinkQueueCar*W){

intflag,tag;

flag=1;

while(flag){

printf("请选择1|2|3:

");

printf("1.车场2.便道3.返回");

while

(1){

scanf("%d",&tag);

if(tag>=1||tag<=3)break;

elseprintf("请选择1|2|3:

");

}

switch(tag){

case1:

显示车场信息;break;

case2:

显示便道信息;break;

case3:

flag=0;break;

default:

break;

}

}

}

 

3.函数的调用关系图

 

4.调试分析

a、调试中遇到的问题及对问题的解决方法

(1)一开始在在调试程序时遇到了内存错误,最终通过网上查资料找到了出错的原因:

在建立对头指针和队尾指针时没有对指针进行初始化,即没有为指针动态分配空间。

(2)Leave函数中一句if(room>=1&&room<=Enter->top)break;出错,导致实现的功能与设想的有出入,无法得到正确的结果。

后来重新考虑后将其删去,对Leave函数进行些许改动,解决了此问题。

(3)题目要求用‘A’表示车辆到达,‘D’表示车辆离开,‘E’表示输入结束。

但在编写程序时按照自己的想法用‘1’表示车辆到达,‘2’表示车辆离开,‘3表示输入结束。

在根据任务书调试程序时发现了该问题并修改成符合程序要求的字母。

(4)开始定义函数时比较混乱,后来在网上搜索和查阅相关书籍,对相关函数有了明确的定义。

5.测试结果

(1)系统界面

(2)车辆到达:

输入A可记录车辆到达信息:

(3)车库容量为2,到达的车数多余2时车场满,后来车辆便道等待:

(4)车辆离开并计费:

输入D完成车辆离开的相关操作:

 

(5)车场里车辆信息:

(6)便道里车辆信息:

(7)退出系统:

6.源程序(带注释)

//tccgl.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include"stdafx.h"

 

#include

#include

#include

#defineMAX10/*车库容量*/

#defineprice1/*每车每时刻费用*/

typedefstructnode

{intnum;

intreachtime;

intleavetime;

}CarNode;/*车辆信息结点*/

typedefstructNODE

{CarNode*stack[MAX+1];

inttop;

}SeqStackCar;/*模拟车站*/

typedefstructcar

{CarNode*data;

structcar*next;

}QueueNode;

typedefstructNode

{QueueNode*head;

QueueNode*rear;

}LinkQueueCar;/*模拟通道*/

/*---------------------------------------------------------------------------*//*函数声明部分*/

voidInitStack(SeqStackCar*);/*初始化栈*/

intInitQueue(LinkQueueCar*);/*初始化便道*/

intArrival(SeqStackCar*,LinkQueueCar*);/*车辆到达*/

voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);/*车辆离开*/

voidList(SeqStackCar,LinkQueueCar);/*显示存车信息*/

voidPRINT(CarNode*p);

/*---------------------------------------------------------------------------*/voidoption()

{inti;

charchoice;

for(i=1;i<=80;i++)

printf("\004");

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

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

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

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

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

for(i=1;i<=80;i++)

printf("\004");

printf("设计者:

周兵\n");

printf("班级:

计算机08—5");

printf("\n********************************************************************************");

printf("\n\n\n是否进入该系统\n(y/n)");

choice=getchar();

if(choice=='N'||choice=='n')

exit(0);

}

voidmain()

{SeqStackCarEnter,Temp;

LinkQueueCarWait;

intch;

option();

InitStack(&Enter);/*初始化车站*/

InitStack(&Temp);/*初始化让路的临时栈*/

InitQueue(&Wait);/*初始化通道*/

while

(1){printf("\n********************************************************************************");

printf("\n\n\t\t\t1.新的车辆到达请选择1");

printf("\n\n\t\t\t2.场内车辆离开请选择2");

printf("\n\n\t\t\t3.查询车辆信息请选择3");

printf("\n\n\t\t\t4.选择退出程序请选择4");

printf("\n\n\t\t\t现在请选择以上信息:

");

while

(1)

{scanf("%d",&ch);

printf("\n");

if(ch>=1&&ch<=4)break;

else

printf("\n\t\t\t错误!

请再次做出选择!

\n\n\t\t\t");

}

switch(ch)

{case1:

Arrival(&Enter,&Wait);break;/*车辆到达*/

case2:

Leave(&Enter,&Temp,&Wait);break;/*车辆离开*/

case3:

List(Enter,Wait);break;/*列表打印信息*/

case4:

exit(0);/*退出主程序*/

default:

break;}

}

}

/*------------------------------------------------------------------------------*/

voidInitStack(SeqStackCar*s)/*初始化栈*/

{inti;

s->top=0;

for(i=0;i<=MAX;i++)

s->stack[s->top]=NULL;

}

intInitQueue(LinkQueueCar*Q)/*初始化便道*/

{Q->head=(QueueNode*)malloc(sizeof(QueueNode));

if(Q->head!

=NULL)

{Q->head->next=NULL;

Q->rear=Q->head;

return

(1);

}

else

return(-1);

}

voidPRINT(CarNode*p)/*打印出站车的信息*/

{intA1,A2;

printf("\n********************************************************************************");

printf("\n\t\t\t请输入离开时间:

");

scanf("%d",&(p->leavetime));

printf("\n\t\t\t离开车辆的车牌号:

%d",p->num);

printf("\n\n\t\t\t离开车辆到达时间:

%d",p->reachtime);

printf("\n\n\t\t\t离开车辆离开时间:

%d",p->leavetime);

A1=p->reachtime;

A2=p->leavetime;

printf("\n\n\t\t\t停车场管理费用:

%d",(A2-A1)*price);

free(p);

}

intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/

{CarNode*p;

QueueNode*t;

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

printf("\t\t\t请输入到达车辆车牌号:

");

scanf("%d",&(p->num));

if(Enter->top

{Enter->top++;

printf("\n\t\t\t该车辆在停车场的位置是:

%d\n",Enter->top);

printf("\n\t\t\t请输入该车辆到达的时间:

");

scanf("%d",&(p->reachtime));

Enter->stack[Enter->top]=p;

return

(1);

}

else/*车场已满,车进便道*/

{printf("\n\t\t\t停车场已满该车辆需在便道上等待!

");

t=(QueueNode*)malloc(sizeof(QueueNode));

t->data=p;

t->next=NULL;

W->rear->next=t;

W->rear=t;

return

(1);

}

}

voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)/*车辆离开*/

{introom;

CarNode*p,*t;

QueueNode*q;

/*判断车场内是否有车*/

printf("\n********************************************************************************");

if(Enter->top>0)/*有车*/

{while

(1)/*输入离开车辆的信息*/

{printf("\t\t\t停车场里停放的车辆总数:

%d",Enter->top);

printf("\n\n\t\t\t请输入要离开车辆的位置:

");

scanf("%d",&room);

if(room>=1&&room<=Enter->top)

break;

}

while(Enter->top>room)/*车辆离开*/

{Temp->top++;

Temp->stack[Temp->top]=Enter->stack[Enter->top];

Enter->stack[Enter->top]=NULL;

Enter->top--;

}

p=Enter->stack[Enter->top];

Enter->stack[Enter->top]=NULL;

Enter->top--;

while(Temp->top>=1)

{Enter->top++;

Enter->stack[Enter->top]=Temp->stack[Temp->top];

Temp->stack[Temp->top]=NULL;

Temp->top--;

}

PRINT(p);

/*判断通道上是否有车及车站是否已满*/

if((W->head!

=W->rear)&&Enter->top

{q=W->head->next;

t=q->data;

Enter->top++;

printf("\n\n\t\t\t便道的%d号车进入车场第%d位置.",t->num,Enter->top);

printf("\n\n\t\t\t请输入现在的时间:

");

scanf("%d",&(t->reachtime));

W->head->next=q->next;

if(q==W->rear)

W->rear=W->head;

Enter->stack[Enter->top]=t;

free(q);

}

else

printf("\n\n\t\t\t便道里没有车.\n");

}

else

printf("\n\n\t\t\t车场里没有车.");/*没车*/

}

voidList1(SeqStackCar*S)/*列表显示车场信息*/

{inti;

if(S->top>0)/*判断车站内是否有车*/

{printf("\n\t\t\t车场:

");

printf("\n\n\t\t\t位置到达时间车牌号\n");

for(i=1;i<=S->top;i++)

{printf("%26d",i);

printf("%6d",S->stack[i]->reachtime);

printf("%10d",S->stack[i]->num);

printf("\n");

}

}

else

printf("\n\t\t\t车场里没有车");

}

voidList2(LinkQueueCar*W)/*列表显示便道信息*/

{QueueNode*p;

p=W->head->next;

if(W->head!

=W->rear)/*判断通道上是否有车*/

{printf("\n\t\t\t等待车辆的号码为:

");

while(p!

=NULL)

{printf("%-10d",p->data->num);

p=p->next;

}

}

printf("\n");}

voidList(SeqStackCarS,LinkQueueCarW)

{intflag,tag;

flag=1;

while(flag)

{

printf("\n\n\t\t\t1.车场\n\n\t\t\t2.便道\n\n\t\t\t3.返回\n\n\t\t\t");

printf("现在请选择以上信息");

while

(1)

{scanf("

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

当前位置:首页 > 自然科学 > 生物学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2