数据结构课程设计报告_停车场管理系统Word格式文档下载.docx

上传人:聆听****声音 文档编号:948762 上传时间:2023-04-29 格式:DOCX 页数:29 大小:93.37KB
下载 相关 举报
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第1页
第1页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第2页
第2页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第3页
第3页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第4页
第4页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第5页
第5页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第6页
第6页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第7页
第7页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第8页
第8页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第9页
第9页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第10页
第10页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第11页
第11页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第12页
第12页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第13页
第13页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第14页
第14页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第15页
第15页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第16页
第16页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第17页
第17页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第18页
第18页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第19页
第19页 / 共29页
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计报告_停车场管理系统Word格式文档下载.docx

《数据结构课程设计报告_停车场管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告_停车场管理系统Word格式文档下载.docx(29页珍藏版)》请在冰点文库上搜索。

数据结构课程设计报告_停车场管理系统Word格式文档下载.docx

进度要求

2012.6.25 完成任务的讲解、并接受课程设计任务,选定课程设计的题目

2012.6.26 了解任务的算法、并画出算法的程序流程图,对任务的关键技术进行验证、并确定解决办法

2012.6.27-2012.6.29程序设计及编码,上机调试

2012.7.02 对程序进行调试,设计测试用例进行测试

2012.7.03 整理课程设计的过程、并进行总结,完善程序功能

2012.7.04 编写课程设计报告初稿

2012.7.05 完善课程设计报告、并准备答辨

2012.7.06 提交课程设计报告和程序,进行答辨

参考资料

1.严蔚敏吴伟民,数据结构,清华大学出版社,2007.3

2.程杰,大话数据结构,清华大学出版社,2011.6

3.(美)StephenPrata,CPrimerPlus中文版(第五版),人民邮电出版社,2005.2

其它

1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。

2.若填写内容较多可另纸附后。

3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。

II

系主任:

雷亮 指导教师:

黄永文/王双明/熊茜/彭军/王成敏

2012年6月20日

摘要

在这个科技发达的时代,汽车对于我们来说越来越普遍,而人们对停车场的管理也更加信息化。

本系统主要是对仅有一个门的停车场的简单管理的设计。

对汽车进入停车场,若停车场满,进入便道等候,车场中有车离开后,便道上的车依次进入停车场有一定的管理。

而且停车场也有合理的收费标准。

该系统主要运用的是C语言和数据结构的相关知识,用栈(后进先出)来模拟停车场,队列(先进先出)来模拟便道实现对汽车进入和离开的管理,用简单的数据计算对汽车进行收费标准。

使车主更清楚了解停车场的信息,车主可以根据系统的提示进行每一项的操作。

关键词:

停车场管理 C语言 数据结构 栈 队列

IV

目录

1设计内容和要求 1

1.1设计内容 1

1.2设计要求 1

2概要设计 2

2.1栈的抽象数据类型定义 2

2.2模块的划分 4

3详细设计 5

3.1数据类型的定义 5

3.2主要模块的算法流程图 5

3.3主要模块的算法描述 7

4软件的测试 13

5总结 16

参考文献 17

致谢 18

附录 19

1设计内容和要求

1.1设计内容

当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开时必须按它停留的时间长短交纳费用(在便道上停车不收费)。

1.2设计要求

汽车“到达”或“离去”信息、汽车牌照号码、到达或离去的时刻。

对每一组输入数据进行操作后的输出信息为:

若是车辆离去,则输出汽车在停车场内停留的时间和应

交纳的费用。

22

2概要设计

2.1栈的抽象数据类型定义

(1)栈的抽象数据类型定义

ASTStack{

数据对象:

D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}数据关系:

R1={<

ai-1,ai>

|ai-1,ai∈D,i=2,...,n}约定an端为栈顶,a1端为栈底。

基本操作:

InitStack(&

S)

操作结果:

构造一个空栈S。

DestroyStack(&

初始条件:

栈S已存在。

栈S被销毁。

ClearStack(&

将栈S清为空栈。

StackEmpty(S)

若栈S为空栈,则返回TRUE,否则FALSE。

StackLength(s)

初始条件:

返回S的元素个数,既栈的长度。

GetTop(S,&

e)

栈S已存在且非空。

用e返回S的栈顶元素。

Push(&

S,e)

插入元素e为新的栈顶元素。

Pop(&

S,&

删除S的栈顶元素,并用e返回其值。

StackTraverse(S,visit())

从栈底到栈顶依次对S的每个数据元素调用函数visit()。

一旦

visit()失败,则操作失效。

}ADTStack

(2)队列的抽象数据类型定义

ADTQueue{

D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}数据关系:

|ai-1,ai∈D,i=2,...,n}约定其中a1端为队列头,an为队列尾。

InitQueue(&

Q)

构造一个空队列Q。

DestroyQueue(&

队列Q已存在。

队列Q被销毁,不再存在。

ClearQueue(&

将Q清为空队列。

QueueEmpty(Q)

若Q为空队列,则返回TRUE,否则FALSE。

QueueLength(Q)

返回Q的元素个数,即队列的长度。

GetHead(Q,&

Q为非空队列。

用e返回的队头元素。

EnQueue(&

Q,e)

插入元素e为Q的新的队尾元素。

DeQueue(&

Q,&

删除Q的队头元素,并用e返回其值。

QueueTraverse(Q,visit())

Q已存在且非空。

从队头到队尾,依次对Q的每个数据元素调用函数visit()。

visit()失败,则操作失败。

}ADTQueue

2.2模块的划分

该系统主要有7个模块,即:

主函数模块、栈模块(模拟停车场)、队列模块

(模拟便道)、汽车进入模块、汽车离开模块、系统信息保存模块、系统输出显示模块。

3详细设计

3.1数据类型的定义

typedefstructtime

{

inthour;

intmin;

}Time;

//时间结点typedefstructcarnode

charnum[10];

Timereach;

Timeleave;

}Car;

//车辆信息结点typedefstructnode

Car*stack[100];

inttop;

}SqStack;

//定义栈表示车位typedefstructcar

intnum;

Car*data;

structcar*next;

}QNode;

typedefstructNode

QNode*front;

QNode*rear;

}LinkQueue;

//用队列表示便道道

3.2主要模块的算法流程图

输入停车场的最大容量

菜单

退

图4.1界面显示

有汽车进入停车场

判断停车场是否有空

车位

汽车车进入系统结束

进入便道

进入停车场

输入进入车辆的信息

图4.2汽车进入

有汽车离开

判断它后面是否有车

汽车离开并缴费

后面的车进入临时停车场

输入离开汽车的信息

临时停车场的车回到停车场

判断便道是否有车

车场离开系统结束

便道的车进入停车场

图4.3汽车离开

3.3主要模块的算法描述

(1)汽车进入停车场:

intarrive(SqStack*In,LinkQueue*W,intn)//车辆到达(把元素要入栈中)

{ Car*p;

QNode*t;

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

flushall();

printf("

\n停车场还有%d个停车位(若停车位为0,车可先进入便道等待)"

n-In->

top);

\n请输入车牌号码:

"

);

gets(p->

num);

if(In->

top<

n)//停车场未满,车进车场

{ In->

top++;

\n停车的位置:

%d号停车位。

In->

\n请输入车到达的时间格式为“**:

**”:

scanf("

%d:

%d"

&

(p->

reach.hour),&

reach.min));

fprintf(fpout,"

车牌号为%s的汽车在%d:

%d时进入停车场的%d号车位

\n"

p->

num,p->

reach.hour,p->

reach.min,In->

In->

stack[In->

top]=p;

请按任意键返回"

getch();

return

(1);

}

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

{ printf("

\n停车位已满,该车须在便道等待!

\n停车位已满,车牌号为%s车须在便道等待!

p-

>



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

t->

data=p;

t->

next=NULL;

W->

rear->

next=t;

rear=t;

getch();

开始定义汽车节点指针P和t,先判断停车场内是否有空位,若In->

n则

汽车进入停车场,然后停车场的栈顶In->

top 加1表示增加了新的车辆,接着输入进入车辆的信息。

如果停车场没有空位,则车进入便道,就是把元素压入队列中。

(2)汽车离开停车场:

voidleave(SqStack*In,SqStack*Out,LinkQueue*W)//车辆离开

{ introom;

Car*p,*t;

QNode*q;

//判断车场内是否有车if(In->

top>

0)//有车

{ while

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

\n请输入车在停车场的位置(1-%d):

room);

if(room>

=1&

&

room<

=In->

top)break;

while(In->

room)//车辆离开

{ Out->

Out->

stack[Out->

top]=In->

top];

top]=NULL;

In->

top--;

p=In->

In->

while(Out->

=1)

top]=Out->

Out->

Out->

feiyong(p,room);

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

if(W->

front!

=W->

rear)//便道的车辆进入停车场

{ q=W->

front->

next;

t=q->

data;

\n现在停车场有空位了,便道的%s号车将进入停车场第%d号停车位。

t->

num,In->

\n请输入现在的时间格式为“**:

(t->

现在停车场有空位了,便道的%s号车在%d:

%d时进入停车场第%d号停车位。

\n\n"

top,t->

reach.hour,t->

reach.min);

W->

next=q->

if(q==W->

rear);

rear=W->

front;

In-

top]=t;

free(q);

else{printf("

\n停车场里没有车\n"

}//没车

首先定义一个整型变量room,用来记录要离开的车辆在停车场的位置,定义

车辆结点指针p和t和队列结点指针q,然后判断停车场内是否有车,如果有车,就输入要离开的车辆在停车场的位置。

若栈顶位置In->

top大于要离开的车位置

room,在要离开的车辆后面的车就要先离开,开到临时停车场,,因此Out所表示的临时栈的栈顶top加1,用来表示临时停车场增加1辆车;

接着把该车的信息拷贝到栈Out中,然后删除栈In的栈顶。

直到要离开的车辆后面的车都开到临时停车场之后,该车才离开,离开之后,该车的信息结点In->

top]置空,然后栈顶In->

top减1。

之后就把临时停车场的车开回停车场里,因此停车场的栈顶In-

top加1,然后就把临时停车场的车结点的信息拷贝到停车场的车结点上,接着删除临时停车场车的结点。

最后判断(W->

rear)即便道上是否有车满,如果便道有车且停车场未满,通道的车便可进入停车场,此时指针q指向便道的头,即队头,然后停车场的栈顶In->

top加1以便增加新的车辆,接着输入要进停车场的车的信息,然后便道队列的头结点指向原队列中第二辆车的结点,接着判断刚离开的车是否是最后一辆车,如果是,就把队列置空,即队头等于队尾;

之后就把结点t(即要进入停车场的车)的信息拷贝到停车场栈顶的车中,最后释放p的空间。

(3)显示停车场的出入信息

voidxianshi1(SqStack*S)//列表输出车场信息

{ inti;

if(S->

0)//判断停车场内是否有车

\n车场:

printf("

\n位置到达时间车牌号\n"

\n\车场:

fprintf(fpout,"

for(i=1;

i<

=S->

top;

i++)

%d\t"

i);

%d "

S->

stack[i]->

reach.hour,S->

puts(S->

fprintf(fpout,"

%s"

else{printf("

\n停车场里没有车"

}

voidxianshi2(LinkQueue*W)//显示便道信息

{ QNode*p;

p=W->

rear)//判断通道上是否有车

\n便道中车辆的号码为:

while(p!

=NULL)

puts(p->

data->

p=p->

\n便道里没有车\n"

\n便道里没有车\n\n"

先显示停车场的信息,首先判断停车场里是否有车,如果有就输出车辆信息即

车位,车牌号和到达时间。

如果停车场里没有车,就输出停车场没有车。

再判断便道上是否有车,如果有车就输出便道上车辆的车牌号,若没有就输出便道上没有车。

最后按任意键返回。

(4)计算汽车离开时的收费情况

voidfeiyong(Car*p,introom)//输出停车站车的信息

{ intA1,A2,B1,B2;

ints,sum;

\n请输入车离开的时间格式为“**:

leave.hour),&

leave.min));

\n车牌号码:

puts(p->

\n车到达的时间是:

%d:

车离开的时间是:

leave.hour,p->

leave.min);

%d时离开,"

num,p-

A1=p->

reach.hour;

A2=p->

reach.min;

B1=p->

leave.hour;

B2=p->

leave.min;

s=(B1*60+B2)-(A1*60+A2);

if(s%60>

=30)sum=(s/60+1)*3;

elsesum=s/60*3;

您所需缴纳的费用为:

%d元\n"

sum);

车主需缴纳的费用为:

%d元\n\n"

free(p);

首先让户主输入离开时的时间,然后根据该车到达的时间算出该车总停留的

间,再根据每小时3元,不足一小时四舍五入即s=(B1*60+B2)-(A1*60+A2);

if(s%60>

elsesum=s/60*3;

算出总的费用。

4软件的测试

1.进入界面输入停车场的最大容量为6:

图5.1系统初始化界面图

2.输入8辆车进入停车场,并显示停车场的信息:

图4.2汽车进入停车场的示意图

图4.3汽车进入便道示意图

图4.4显示停车场的信息图

3.使3号位的车离开车场,离开后便道上的车进入停车场,并显示汽车离开后停车场的信息:

图4.5汽车离开车场,便道上的车进入车场的示意图

图4.6显示停车场的信息

4.退出系统:

图4.7退出系统示意图

5.停车场的所有出入信息保存在estdout.pc2文件中:

图4.8车场信息存入磁盘的部分示意图

5总结

通过这次数据结构的程序设计,我更加理解了栈和队列这两种重要的线性结构。

知道了栈和队列的抽象数据类型的定义,知道了栈的顺序存储结构和队列的链式存储结构的定义和算法描述,也充分的理解了用栈和队列实现模拟停车场的基本原理。

学会了编一些简单的停车场的程序。

这次的程序设计总的来说我觉得编写的还可以,但是仍然有一些地方需要完善,如把停车场的信息保存在磁盘上,就有一些困难。

后面还是通过和同学一起讨论才有了大概的思路,知道了从哪里下手。

刚开始看到这个程序

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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