数据结构停车场停车管理系统.docx

上传人:b****3 文档编号:3900867 上传时间:2022-11-26 格式:DOCX 页数:30 大小:81.11KB
下载 相关 举报
数据结构停车场停车管理系统.docx_第1页
第1页 / 共30页
数据结构停车场停车管理系统.docx_第2页
第2页 / 共30页
数据结构停车场停车管理系统.docx_第3页
第3页 / 共30页
数据结构停车场停车管理系统.docx_第4页
第4页 / 共30页
数据结构停车场停车管理系统.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

数据结构停车场停车管理系统.docx

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

数据结构停车场停车管理系统.docx

数据结构停车场停车管理系统

数据结构课外实践报告

 

项目名称:

停车场停车管理系统

所在班级:

10级信管1班

小组成员:

杨剑楠孙迎张可可吴亮

指导教师:

王希杰

起止时间:

12月4日——12月22日

项目基本信息

项目名称

停车场停车管理系统

项目简介

本项目是对停车场停车管理系统的简单模拟,以完成停车场的停车、出车、收费及查询停车场或便道信息等的功能。

小组成员

杨剑楠孙迎张可可吴亮

任务分工

张可可100903045:

InitStack();Pop();Push();

InitQueue();EnQueue();DeQueue();

getpas();login();

杨剑楠100903043:

reachtime();leavetime();Arrival();

孙迎100903038:

Leave();Bill();

吴亮100903012:

List();List1();List2();main();

课外实践评定成绩记录

指导教师意见

系统完成情况:

优良中差

报告完成情况:

优良中差

答辩评定成绩

团队整体成绩:

成员成绩

综合成绩

一、

问题描述及分析

1、问题描述:

停车场停车管理系统:

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

汽车在停车场内按车辆到达时间的先后顺序停放,若车场内已停满n辆车,那么后来的车只能在门外的便道上等候;一旦有车开走,则排在便道上的第一辆车即可开入。

当停车场内某辆车要离开时,在它之后进入的车辆必须先依次退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场。

每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

2、需求分析:

(1)题目中要根据车辆停留时间收费,故在定义结构体时还需要一个时间的结构体用来保存车辆到达和离开的时间。

(2)由于停车场的进出符合栈的“后进先出,先进后出”的操作特点,因此,需要设一个栈来模拟停车场。

(3)根据便道停车的特点,先排队的车辆先离开便道进入停车场,符合队列的“先进先出,后进后出”的操作特点,因此,需要用一个队列来模拟便道。

(4)而中间车辆提出离开停车场,后到达的车辆都须先离开停车场为它让路,然后这些车辆再依原来次序进入停车场,而这个同样符合“后进先出,先进后出”的特点,因此还需一个栈来作为临时保存车辆的地方。

二、功能模块及数据结构描述

1、功能模块:

★主要功能:

(1)车辆到达

(2)车辆离开

(3)信息查询

★功能模块图:

图1.功能模块图

2、数据结构描述:

(1)车辆信息的表示

车辆可以看成是一个节点,设计成一个结构题,车辆信息包括:

车牌号,车辆到达时间,车辆离开时间,定义如下:

typedefstructnode

{

charnum[10];//车牌号

Timereach;//保存车辆到达的时间

Timeleave;//保存车辆离开的时间

}CarNode;

(2)时间、栈和队列的定义

时间有小时、分钟和秒表示,即设计三个变量分别表示如下:

typedefstructtime

{

inthour;

intmin;

intsec;

}Time;

停车场内用栈表示:

typedefstructNODE

{

CarNode*stack[Max+1];//栈用顺序表示

inttop;

}SqStackCar;

便道上的车辆表示:

typedefstructcar

{

CarNode*data;//便道上的车用链表表示

structcar*next;

}QueueNode;

typedefstructNode

{

QueueNode*head;//设置头指针、尾指针

QueueNode*rear;

}LinkQueueCar;

三、主要算法流程描述及部分核心算法

(1)主函数的算法流程描述:

图2.主函数流程图

(2)核心算法流程描述:

☆车辆到达:

Arrival函数

主要通过if(Enter->top

车辆到达函数的算法流程如下图:

图3.车辆到达流程图

☆车辆到达:

Leave函数

首先定义一个position变量来记录要离开车辆的位置,用if(Enter->top>0)来保证栈不空,进而执行以下操作,然后用while

(1)来确保输入要离开车辆位置的合法性,在由while(Enter->top>position)来判断离开车辆位置是否在最后,若在最后可直接离开,并打印账单;若不是最后,则用临时栈执行操作。

车辆离开函数的算法流程如下图:

图4.车辆离开流程图

四、使用说明

程序名为停车场停车管理系统.exe,运行环境为VisualC++6.0。

★测试数据:

最大容量Max定义为3,收费标准为0.05元/秒

默认密码为:

abc

依次选择1并录入的车牌号信息为:

aaa,bbb,ccc,ddd,eee,fff。

选择2并输入车辆离开位置为2。

★程序执行后显示:

图5.身份验证界面

输入密码正确后进入如下界面:

图6.登陆后界面

输入收费标准(任意数字)后,进入主界面:

图7.主菜单界面

SELECT:

在select后输入数字选择执行不同的功能。

选择1:

之后输入车牌号,打印出车辆到达信息。

然后返回主界面。

图8.车辆到达界面

选择2:

之后输入要离开车辆的位置,打印出车辆的离开信息及账单,并显示便道车辆进入停车场的信息。

然后返回主界面。

图9.车辆离开界面

选择3:

进入信息查询菜单,分为停车场信息、便道信息和返回主菜单选项。

图10.查询停车场信息界面

图11.查询便道信息界面

五、问题及解决办法

这次设计,总的来说,题目是比较简单的,主要运用了栈和队列的一些知识,但在执行是还是遇到了一些问题。

1、怎样来获取车辆到达和离开的时间信息?

解决途径:

通过查询相关书籍,调用time.h和conio.h的头文件及相关函数,可以获取系统当前的时间。

2、在开始输入车牌号的字符串时总是出错,便不能再执行。

解决途径:

通过上网查资料知道,输入字符时习惯性的会加Enter键然后再输下一个,这样相当于Enter也作为一个字符读入,在输入前加上flushall()函数,用于清除输入的所有缓冲区即可。

3、车辆离开时的输出信息中位置和车牌号不相符,导致信息查询中的信息也不正确。

解决途径:

经分析知道,开始出栈入栈的具体过程还没有分析透彻,中间车辆离开时,在其后的车辆进临时栈后要再调用Pop函数,其才能出栈成功,否则,相当于没有离开停车场,打印信息便会出错。

但是这个程序目前还是有缺点尚未解决,如:

1、可以记录车辆停留多天的记录而不是当天。

2、如果便道的车离开,可以实现其离开且不收费。

3、若输入车牌号信息重复,则显示输入错误。

六、课外实践总结

通过这次对于停车场停车管理系统的设计,我们的收获如下:

1、我们更深一步地体会到算法的应用,它的灵活性决定了它的广泛用途。

2、并且通过这个课程设计,我们加强了对数据结构知识的理解和掌握,尤其是栈和队列的应用。

3、培养了我们严肃认真的做事作风,如果想要完成一项完美的设计,是需要正视的态度,绝对的耐心和缜密的思维的。

4、这个设计培养了我们发现并解决问题的能力,学会查找相关资料来寻找解决方案,并扩展了知识面。

5、最重要的是,通过我们共同完成这个设计,我们体会到团队之间协调与合作的重要性,如果没有团队的共同努力,一个完美的程序是很难实现的。

总之,现在我们的知识面还是很窄,需要学习的东西还很多,在之后的学习中,我们更加要多看相关的资料,多实践,只有在实践中才能真正的进步。

 

源程序(附录)

#include

#include

#include

#include

#include

#include

#defineMax10/*停车场容量*/

#definePS"abc"/*默认密码*/

#defineMPS3/*失败重试次数*/

 

/*定义全局变量*/

floatprice;

time_tstart,end;

/*定义时间的结构体,hour为时,min为分,sec为秒*/

typedefstructtime

{

inthour;

intmin;

intsec;

}Time;

/*定义车的结构体*/

typedefstructnode

{

charnum[10];//车牌号

Timereach;//保存车辆到达的时间

Timeleave;//保存车辆离开的时间

}CarNode;

/*定义栈结构*/

typedefstructNODE

{

CarNode*stack[Max+1];

inttop;

}SqStackCar;

/*定义队列中的结点*/

typedefstructcar

{

CarNode*data;

structcar*next;

}QueueNode;

/*定义队列结构*/

typedefstructNode

{

QueueNode*head;

QueueNode*rear;

}LinkQueueCar;

/*-------------------------------用到的所有函数(及函数声明部分)----------------------*/

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

//intPop(SqStackCar*,CarNode*);

//intPush(SqStackCar*,CarNode*);

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

//intEnQueue(LinkQueueCar*,QueueNode*,CarNode*);

//intDeQueue(LinkQueueCar*,QueueNode,CarNode*);

//char*getpas(char*,int);//关于密码验证的函数

//intlogin();

//voidreachtime(CarNode*);//获取到达的系统时间

//voidleavetime(CarNode*);//获取离开的系统时间

voidArrival(SqStackCar*,LinkQueueCar*,QueueNode*,CarNode*);//车辆到达的函数

voidLeave(SqStackCar*,SqStackCar*,LinkQueueCar*,CarNode*);//车辆离开的函数

voidBill(CarNode*);//打印账单的函数

voidList(SqStackCar,LinkQueueCar);//查询的函数

//voidList1(SqStackCar*);

//voidList2(LinkQueueCar*);

/*-----------------------关于管理员进入的密码验证部分----------------------------------*/

/*输入密码,并返回输入的值*/

char*getpas(char*s,intn)

{

charc;

inti;

memset(s,0,n);

for(i=0;i

{

c=getch();

if(isprint(c))

{

s[i]=c=='\r'?

'\0':

c;

putchar('*');

}

if(c=='\r')break;

}

putchar('\n');

returns;

}

/*密码验证函数,如果通过验证则返回1,否则返回0*/

intlogin()

{

charap[80];

intfg=1;

do

{

if(strcmp(getpas(ap,80),PS)&&fg<=MPS)

{

printf("\n");

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

printf("\t\t|-------------输入有误,还有%d次机会!

----------|\n",MPS-fg);

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

printf("\t\t       密码:

");

fg++;

}

else

{

system("cls");

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

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

printf("\t\t|--------------------密码正确!

-----------------|\n");

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

return1;

}

}while(fg<=MPS);

return0;

}

/*-----------------------主函数入口----------------------------------*/

voidmain()

{

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

printf("\t  ↓     ↓      ↓      ↓     ↓\n");

printf("\t ☆★☆   ☆★☆    ☆★☆    ☆★☆   ☆★☆\n");

printf("\t☆ 安 ☆ ☆ 师 ☆  ☆ 停 ☆  ☆ 车 ☆ ☆ 场 ☆\n");

printf("\t ☆★☆   ☆★☆    ☆★☆    ☆★☆   ☆★☆\n");

printf("\t  ↓     ↓      ↓      ↓     ↓ \n");

printf("\t  ※     ※      ※      ※     ※\n");

start=time(NULL);

end=time(NULL);

while(end-start<2)//延时2秒执行以下程序

{

end=time(NULL);

}

system("cls");

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

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

printf("\t\t|       身份验证      |\n");

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

printf("\t\t     请输入密码(默认abc):

");

if(login())

{

printf("\t\t\t\t\tLoading……");

start=time(NULL);

end=time(NULL);

while(end-start<2)//延时2秒执行以下程序

{

end=time(NULL);

}

system("cls");

SqStackCarEnter,Temp;

LinkQueueCarWait;

QueueNodeq;

CarNodee;

intch;

InitStack(&Enter);

InitStack(&Temp);

InitQueue(&Wait);

printf("._________________.\n");

printf("|_______________|\n");

printf("|II|\n");

printf("|II|\n");

printf("|II|\n");

printf("|II|\n");

printf("|I_____________I|\n");

printf("!

_________________!

\n");

printf("._[_______]_.\n");

printf(".__|___________|____.\n");

printf("|:

:

:

____|\n");

printf("|~~~~[CD-ROM]|\n");

printf("!

___________________!

\n\n");

printf("单日停车场管理系统操作室\n");

printf("请输入收费标准(以秒为单位):

");

scanf("%f",&price);

while

(1)

{

system("cls");

printf("\n\n");

printf("\t\t\t******停车场最大容量:

%d*********\n",Max);

printf("\t\t\t******停车场收费标准:

%2.2f元/秒*****\n",price);

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

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

printf("\t\t\t*1-到达登记*\n");

printf("\t\t\t*2-离开登记*\n");

printf("\t\t\t*3-信息查询*\n");

printf("\t\t\t*0-退出*\n");

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

printf("\t\t\t\t请选择(1|2|3|0):

");

scanf("%d",&ch);

if(ch<0&&ch>3)

{

printf("\n\t\t\t您输入的选项不存在,请重新选择!

\n");

}

else

{

system("cls");

switch(ch)

{

case1:

Arrival(&Enter,&Wait,&q,&e);

break;

case2:

Leave(&Enter,&Temp,&Wait,&e);

break;

case3:

List(Enter,Wait);

break;

case0:

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

printf("\t*************************谢谢使用!

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

exit(0);

default:

break;

}

}

}

}

else

{

system("cls");

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

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

printf("\t\t|       无此权限      |\n");

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

start=time(NULL);

end=time(NULL);

while(end-start<2)//延时2秒执行以下程序

{

end=time(NULL);

}

system("cls");

main();

}

}

/*----------------------有关栈和队列的函数部分-----------------------------------*/

/*初始化栈*/

voidInitStack(SqStackCar*s)

{

inti;

s->top=0;

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

s->stack[i]=NULL;

}

/*入栈*/

intPush(SqStackCar*S,CarNode*e)

{

if(S->top

{

S->top++;

S->stack[S->top]=e;

return1;

}

else

{

return0;

}

}

/*出栈*/

intPop(SqStackCar*S,CarNode*e)

{

if(S->top!

=0)

{

e=S->stack[S->top];

S->top--;

return1;

}

else

{

return0;

}

}

/*初始化队列*/

intInitQueue(LinkQueueCar*Q)

{

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

if(Q->head!

=NULL)

{

Q->head->next=NULL;

Q->rear=Q->head;

return1;

}

else

return0;

}

/*入队列*/

intEnQueue(LinkQueueCar*Q,QueueNode*t,CarNode*e)

{

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

t->data=e;

t->next=NULL;

if(Q->head==NULL)

{

Q->rear=Q->head=t;

return0;

}

else

{

Q->rear->next=t;

Q->rear=t;

printf("\n\t\t\t%s车进入便道等候!

",e->num);

return1;

}

}

/*出队列*/

intDeQueue(LinkQueueCar*Q,QueueNode*q,CarNode*e)

{

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

当前位置:首页 > 总结汇报 > 工作总结汇报

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

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