数据结构课程设计停车场模拟管理系统报告.docx

上传人:b****6 文档编号:4511183 上传时间:2022-12-01 格式:DOCX 页数:16 大小:32.89KB
下载 相关 举报
数据结构课程设计停车场模拟管理系统报告.docx_第1页
第1页 / 共16页
数据结构课程设计停车场模拟管理系统报告.docx_第2页
第2页 / 共16页
数据结构课程设计停车场模拟管理系统报告.docx_第3页
第3页 / 共16页
数据结构课程设计停车场模拟管理系统报告.docx_第4页
第4页 / 共16页
数据结构课程设计停车场模拟管理系统报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数据结构课程设计停车场模拟管理系统报告.docx

《数据结构课程设计停车场模拟管理系统报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计停车场模拟管理系统报告.docx(16页珍藏版)》请在冰豆网上搜索。

数据结构课程设计停车场模拟管理系统报告.docx

数据结构课程设计停车场模拟管理系统报告

计算机科学技术学院

《数据结构课程设计》报告

专业:

计算机科学与技术

班级:

计13-1

学号:

24、25

姓名:

王莹、肖林英

课设题目:

停车场模拟管理系统

指导教师:

姜卓

2014-12-23

一、设计题目1

二、设计目的1

三、总体设计1

(一)问题描述1

(二)设计要求1

(三)数据结构1

四、详细设计2

(一)分析与实现2

(二)系统模块设计2

(三)界面设计3

五、设计结果与分析4

六、总结(收获和不足)5

(一)课设的不足5

(二)课设的收获5

附录程序源码5

参考文献:

16

指导教师意见16

一、设计题目

停车场模拟管理系统。

二、设计目的

利用所学的知识,模拟设计一个停车场管理系统。

通过程序设计,了解停车场的工作情况以及是怎么实现停车的,模拟车辆的进入停车场、离开停车场的情况,和收费情况。

三、总体设计

(一)问题描述

假设停车场可以停放n辆车的狭长通道,而且只有一个入口出口,汽车进入停车场的停放按照先进先放的顺序,依次排满车道。

当停车场已经停满时(已存放了n辆汽车),想进入停车场的车就只能在便道上等待,等到停车有车离开时,便道上的第一辆车进入停车场。

当停车场内的某辆车要离开时,在它后面的车必须离开让出一条道路来,待车开走后,让路的车依次进入停车场,车辆离开时,按时间缴纳费用。

(二)设计要求

用栈模拟停车场,用队列模拟停车场外面的等车便道,按照终端输入数据的方式进行模拟管理。

输入1,表示车辆到达;输入2,表示车辆离开;输入3,表示列表显示停车场内外情况;输入4,表示系统帮助;输入5,表示查询车辆;输入0,表示退出程序。

车辆进入停车时,要输入车牌号码和到达时间;车辆离开时,要输入停车场车位号和离开时间,并显示应收费额;车辆查询时,要输入车牌号码;系统帮助,则是一些关于本系统的操作介绍。

(三)数据结构

本课程设计使用的数据结构有:

顺序栈和链式队列。

四、详细设计

(一)分析与实现

1、模拟停车场的车辆进出需要输入车辆的信息,比如车辆的车牌号码、到达时间、离开时间,因此,可以定义一个车辆信息结点类型和一个时间节点类型,在顺序栈和链式队列中定义结点类型为车辆信息结点类型。

2、车辆离开时,需要打印输出车辆的车位号、到达时间、离开时间以及应缴纳的费用。

定义print()函数实现。

3、车辆到达时要输入车辆的信息,并以此存放在停车场内;没进入一辆车,要判断停车场(顺序栈)是否已经停满,若已满,则提示该车要在便道上等待;若未满,则进行进栈操作。

4、车辆的离开,要另外设计一个栈,当一辆汽车要离开时,在其后的车辆要给其让路,让路的汽车就暂时停放在这个栈中。

车辆离开后,要判断便道上是否有车辆在等待,若有则进行入栈操作,即将车辆的信息结点进行入栈操作,这时要输入当前时间,今儿进行出队操作,表示车辆已经离开便道进入停车场。

5、系统帮助则只需设计一个函数,将要说明的东西写进去,可以直接调用。

6、车辆的查询,既可以查询停车场内的车辆,也可以查询便道上等待的车辆,查询时要输入正确的车牌号码,并显示车辆的当前情况。

(二)系统模块设计

(三)界面设计

1、主菜单界面

2、车辆到达界面

3、车辆离开界面

4、车辆停靠界面

停车场情况

便道停车情况

5、退出系统

五、设计结果与分析

测试结果已达到我们预期的结果,可以模拟实现车辆的进入、离开停车场,可以大体上让人了解到停车场的工作情况。

六、总结(收获和不足)

(一)课设的不足

本次课程设计完成的系统,只能简单的模拟停车场的车辆进出、收费情况和查询功能,没有将进入停车场的车辆信息进行存盘保存。

而且功能单一,有车离开时,还有可能要其他的车退出停车场让车(不够人性化);模拟的停车场只是一个狭长的通道,存放的车辆只能是一种类型的,即占地面积是一样的;按道理停车场可以存放各种类型的车,各种车的收费标准也应该不一样,这都应该是要完善的。

(二)课设的收获

本次课设,我们组选了停车场模拟管理系统来做,在这个题目里,只用到了两个数据结构:

顺序栈和链式队列。

顺序栈模拟停车场,队列模拟便道。

通过这次课设,确实对我们的水平提高了很多,至少再次熟悉了本学期所学的栈和队列的使用和应用。

记得在刚开始的时候,看到课设指导书上面的题目,感觉自己什么都做不出来,所以迟迟不敢动手。

当时间一天天逼近时,不能再拖了,就只能开工了。

抱着试一试的心态,我们参考着资料上面的指示,一步一步地做,居然做出了一个简单的系统;最后,对系统做了些完善(虽然还不是很完善),在此对同组的小伙伴表示感谢!

通过这次课设,我们再次强烈的感受到:

只要敢于尝试,很多我们自己认为做不到的事情都是可能做到的。

勇于尝试,定有收获!

附录程序源码

#include

#include

#include

#include

#include

#include

usingnamespacestd;

#defineMAX3//停车场车位数

#defineprice0.05//每分钟收取的费用

typedefstructtime

{

inthour;

intmin;

}Time;//定义时间结点

typedefstructnode

{

stringnum;

Timereach;

Timeleave;

}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);//查看停车场内车辆情况及便道上车辆情况的函数声明

voidmyouttextxy(intx,inty,LPCTSTRs);

//绘制滚动文字

voidmyouttextxy(intx,inty,LPCTSTRs)

{

staticIMAGEtmp;//用来保存被文字覆盖的区域背景

if(s==NULL)

{

//恢复区域

putimage(x,y,&tmp);

}

else

{

intw=textwidth(s);//获取字符串占用的宽度

inth=textheight(s);//获取字符串占用的高度

//保存区域

getimage(&tmp,x,y,w,h);

//文字输出

outtextxy(x,y,s);

}

}

//车辆进入

intArrival(SeqStackCar*Enter,LinkQueueCar*W)

{

CarNode*p;

QueueNode*t;

p=newCarNode;

cout<<"--------------------------------------------------------------------"<

cout<<"车辆到达登记开始:

"<

cout<

";

cin>>p->num;

if(Enter->top

{

Enter->top++;

cout<top<<"位置."<

cout<

";

cout<<"(例:

1111)"<

cin>>p->reach.hour>>p->reach.min;

cout<

"<

cout<<"--------------------------------------------------------------------"<

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

return1;

}

else//如果车位已满,则停靠在便道上

{

cout<<"--------------------------------------------------------------------"<

cout<

t=newQueueNode;

t->data=p;

t->next=NULL;

W->rear->next=t;

W->rear=t;

return1;

}

}

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

{

s->top=0;

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

}

intInitQueue(LinkQueueCar*Q)//队列初始化

{

Q->head=newQueueNode;

if(Q->head!

=NULL)

{

Q->head->next=NULL;

Q->rear=Q->head;

return1;

}

elsereturn-1;

}

voidPRINT(CarNode*p,introom)//输出离开停车场的车辆情况

{

intA,B,C,D;

cout<<"\n车辆离开的时间:

";

cout<<"(例:

1111)"<

cin>>p->leave.hour>>p->leave.min;

cout<<"离开车辆的车牌号为:

";

cout<num;

cout<

"<reach.hour<<":

"<reach.min;

cout<<"离开时间为:

"<leave.hour<<":

"<leave.min;

A=p->reach.hour;

B=p->reach.min;

C=p->leave.hour;

D=p->leave.min;

cout<

"<<((C-A)*60+(D-B))*price<<"元"<

deletep;

}

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

{

introom;

CarNode*p,*t;

QueueNode*q;

if(Enter->top>0)

{

while

(1)

{

cout<<"--------------------------------------------------------------------"<

cout<<"车辆离开登记开始:

"<

cout<top<<"/:

";

cin>>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--;

}

cout<<"---------------------------------------------------------------------"<

cout<<"车辆离开登记结算:

"<

PRINT(p,room);

if((W->head!

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

{

q=W->head->next;

t=q->data;

Enter->top++;

cout<num<<"号车进入车场第";

cout<top<<"位置."<

cout<<"请输入"<num<<"号车进入车场的时间:

";

cin>>t->reach.hour>>t->reach.min;

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

if(q==W->rear)W->rear=W->head;

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

deleteq;

}

elsecout<

}

elsecout<

}

voidList1(SeqStackCar*S)//查看停车场内车辆情况的函数定义

{

inti;

if(S->top>0)

{

cout<<"-------------------------------------------------------------------"<

cout<

"<

cout<

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

{

cout<

cout<<""<stack[i]->reach.hour<<":

"<stack[i]->reach.min;

cout<<""<stack[i]->num<

}

}

elsecout<

cout<<"-------------------------------------------------------------------"<

}

voidList2(LinkQueueCar*W)//查看便道上停靠车辆情况的函数定义

{

QueueNode*p;

p=W->head->next;

if(W->head!

=W->rear)

{

cout<<"---------------------------------------------------------------------"<

cout<

"<

while(p!

=NULL)

{

cout<

";

cout<data->num<

p=p->next;

}

}

elsecout<

cout<<"---------------------------------------------------------------------"<

}

voidList(SeqStackCarS,LinkQueueCarW)//车辆列表显示函数

{

intflag,tag;

flag=1;

while(flag)

{

cout<<"---------------------------------------------------------------------"<

cout<<"车辆停靠查询开始:

"<

cout<

"<

cout<<"1.车场列表"<

while

(1)

{

cin>>tag;

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

elsecout<

cout<<"错误,请选择1~3任意数字:

";

}

switch(tag)

{

case1:

List1(&S);

cout<<"车辆停靠查询结束!

"<

case2:

List2(&W);

cout<<"车辆停靠查询结束!

"<

case3:

flag=0;break;

default:

break;

}

}

cout<<"-----------------------------------------------------------------------"<

//主函数

intmain()

{

system("color5F");

//创建绘图窗口

initgraph(640,480);

//定义字符串

TCHARs[]=_T("制作人:

王莹肖林英");

TCHARss[]=_T("请按“Esc”键进入管理系统");

TCHARssss[]=_T("计算机科学与技术专业13-1班");

TCHARsss[]=_T("数据结构课程设计:

停车场管理系统");

//创建绘图窗口

//初始化

intw=textwidth(s);//获取字符串占用的宽度

inth=textheight(s);//获取字符串占用的高度

IMAGEtmp;//定义临时对象,保存被文字破坏的背景

//绘制背景

for(inti=0;i<640;i++)

{

setlinecolor(HSLtoRGB((float)i,1.0,0.3));

line(i,0,i,479);

}

//设置文字效果

settextcolor(WHITE);//设置文字颜色为白色

setbkmode(TRANSPARENT);//设置文字背景为透明色

//绘制移动的文字

for(intj=0;j<600;j++)

{

//绘制文字

myouttextxy(j,200,s);

myouttextxy(j,250,ss);

myouttextxy(j,150,ssss);

myouttextxy(j,100,sss);

Sleep(10);

//擦掉文字

myouttextxy(j,200,NULL);

myouttextxy(j,250,NULL);

myouttextxy(j,150,NULL);

myouttextxy(j,100,NULL);

}

//退出

_getch();

closegraph();

SeqStackCarEnter,Temp;//初始栈,中转栈

LinkQueueCarWait;//便道队列

inta;

InitStack(&Enter);

InitStack(&Temp);

InitQueue(&Wait);//初始化

while

(1)

{

cout<<"********************************************************************"<

cout<<"*(∩_∩)欢迎光临停车场(≧▽≦)*"<

cout<<"*.----------.*"<

cout<<"**"<

cout<<"*/\*"<

cout<<"*_(.-._...._.-.)_*"<

cout<<"*(_)`-'__()__`-'(_)*"<

cout<<"*(....__|LESTER|__....)(∩_∩)欢迎光临停车场(≧▽≦)*"<

cout<<"*||~~~~~~~~||*"<

cout<<"*`-'`-'*"<

cout<<"**"<

cout<<"**"<

cout<<"*"<

cout<<"**"<

cout<<"**"<

out<<"********************************************************************"<

cout<请按1"<

cout<<"\n车辆离开登记->请按2"<

cout<<"\n车辆停靠查询->请按3"<

cout<<"\n退出系统->请按4"<

cout<<"********************************************************************"<

//系统选项设置

while

(1)

{

cin>>a;

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

elsecout<

1~4.";

}

switch(a)

{

case1:

Arrival(&Enter,&Wait);break;//调用入停车场函数

case2:

Leave(&Enter,&Temp,&Wait)

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

当前位置:首页 > 外语学习 > 其它语言学习

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

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