毕业设计数据结构a类停车场管理系统.docx

上传人:b****7 文档编号:9571253 上传时间:2023-02-05 格式:DOCX 页数:59 大小:513.29KB
下载 相关 举报
毕业设计数据结构a类停车场管理系统.docx_第1页
第1页 / 共59页
毕业设计数据结构a类停车场管理系统.docx_第2页
第2页 / 共59页
毕业设计数据结构a类停车场管理系统.docx_第3页
第3页 / 共59页
毕业设计数据结构a类停车场管理系统.docx_第4页
第4页 / 共59页
毕业设计数据结构a类停车场管理系统.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

毕业设计数据结构a类停车场管理系统.docx

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

毕业设计数据结构a类停车场管理系统.docx

毕业设计数据结构a类停车场管理系统

东北大学信息科学与工程学院

数据结构课程设计报告

题目立体化停车场管理

课题组长张晓峰

课题组成员曹乔家王子骄

 

专业名称计算机科学与技术

班级计1307

指导教师杨雷

2015年1月

课程设计任务书

题目:

立体化停车场管理

问题描述:

设停车场有地上和地下两层,统一管理。

地下停车场采用单入口和单出口。

地上停车场采用南北方向的双口,每个口都有一个入口和出口。

停车顺序先地上,后地下。

地上入口处各有一个单车道的等候通道,并允许等候的车辆因急事从等候通道直接开走。

设计要求:

设计停车场模拟管理程序。

(1)采用栈、队列和有序表等数据结构。

(2)等候车辆的管理。

(3)地下、地上停车位的管理。

(4)停车计费功能。

(5)其它完善性功能。

            

指导教师签字:

年  月  日

1课题概述1

1.1课题任务1

1.2课题原理1

1.3相关知识1

2需求分析1

2.1课题调研1

2.2用户需求分析1

3方案设计2

3.1总体功能设计2

3.2数据结构设计2

3.3函数原型设计3

3.4主算法设计4

3.5用户界面设计4

4方案实现4

4.1开发环境与工具4

4.2程序设计关键技术4

4.3个人设计实现4

4.3.1张晓峰设计实现4

4.3.2曹乔家设计实现11

4.3.3王子骄设计实现15

5测试与调试19

5.1个人测试19

5.1.1张晓峰测试19

5.1.2曹乔家测试20

5.1.3王子骄测试21

5.2组装与系统测试21

5.3系统运行22

6课题总结24

6.1课题评价24

6.2团队协作25

6.3团队协作25

6.4个人设计小结25

6.4.1张晓峰设计小结25

6.4.2曹乔家设计小结25

6.4.3王子骄设计小结25

7附录A课题任务分工26

A-1课题程序设计分工26

A-2课题报告分工27

附录B课题设计文档(光盘)28

B-1课程设计报告(电子版)28

B-2源程序代码(*.H,*.CPP)28

B-3工程与可执行文件)28

B-4屏幕演示录像文件(可选)28

附录C用户操作手册(可选)28

C.1运行环境说明28

C.2操作说明28

 

1课题概述

1.1课题任务

【问题描述】

设停车场有地上和地下两层,统一管理。

地下停车场采用单入口和单出口。

地上停车场采用南北方向的双口,每个口都有一个入口和出口。

停车顺序先地上,后地下。

地上入口处各有一个单车道的等候通道,并允许等候的车辆因急事从等待通道直接开走。

【设计要求】

设计停车场模拟管理程序。

(1)采用栈、队列和有序表等数据结构。

(2)等候车辆的管理。

(3)地下、地上停车位的管理。

(4)停车计费功能。

(5)其它完善性功能。

1.2课题原理

本程序主要运用栈来模拟停车场,建立上下两个栈来模拟上下停车场,一列表模拟车场便道,按照从终端输入的数据序列进行模拟管理,把停车的车位信息保存在新建的链表中,每组输入的数据保存车牌号,自动生成车位号和车辆到达时间保存在链表中,对每一组的数据输出信息,包括车辆到达时间,离开时间,及停车费用,用队列保存便车道停靠的车辆,以及车辆的登记和离开,最后的栈是以顺序栈结构实现,队列和链表以链式结构实现。

1.3相关知识

本实验主要运用链表、栈、队列等数据结构,运用C语言中的指针、数组字符串等相关知识。

2需求分析

2.1课题调研

通过在网上对各个停车场的调查,我们查到停车场有车辆的入场登记,车辆的离开及费用,还有就是车辆的信息保存,每个车辆有车牌号,到达和离开时间及停车费用等等。

2.2用户需求分析

本程序采用简单的界面,使使用者可以简单可了解软件的使用,界面简单、大方。

链表保存的车位信息,只需输入车牌号,其他车位信息自动由系统生成,

可以免去使用的其他操作,为使用者省事,省力。

同时本软件的使用达到人性化,方便化,便于使用者的使用。

3方案设计

3.1总体功能设计

本软件要实现对进入停车场的车辆登记功能,车辆离开的收费功能,以及车辆进入便车道的等待及从便车道,还有对车辆信息的查询和对车场进入和离开车辆的统计。

3.2数据结构设计

(1)时间的结构体

structnow_time{

intmday;

inthour;

intmin;

}

(2)车位信息的结构体

structinformation

{

intsetnumber;

charnum[10];

structnow_timereach;

structnow_timeleave;

}set[MAX*2]

(3)便车道队列

typedefstruct

{

char*base;

intfront;

intrear;

}SqQueue

(4)停车场的栈

typedefstruct

{

int*base;

int*top;

intstacksize;

}SqStack

(5)车位信息的链表

typedefstructLNode

{

struct

{

intstnumber;

charnum[10];

structnow_timereach;

structnow_timeleave;

floatfee;

inttotalhour;

}data;

structLNode*next;

}LNode,*LinkList

3.3函数原型设计

()voidCreateList_L(LinkList&L)建立车辆信息链表

()StatusinitStack1(SqStack&S)建立地上停车场的栈

()StatusinitStack2(SqStack&S)建立地下停车场的栈

()StatusPush(SqStack&S,inte)车辆入栈即出场

()StatusPop(SqStack&S,int&e)车辆出栈即入场

()StatusinitQueue(SqQueue&Q)建立便车道的队列

()StatusQueueLength(SqQueueQ)计算便车道的车辆数量

()Statusstack_empty(SqStackS)判断停车场是否车满

()voidenterstop(LinkListclist,SqStack&S,charnumber[10],int*come,inti)车辆进入停车场

()Statusleavestop(LinkListllist,LinkListclist,SqStack&S,SqQueue&Q,int*come,int*leave,inti)车辆离开停车场

()voidccord(LinkListclist,inti,intsetnumber)信息登记

()StatusListInsert_Link(LinkList&L,inti,intsetnumber)保存车辆到来的信息

()voidcopy(char*a,char*b)进行车位号的比对

()StatuslListInsert_Link(LinkList&llist,inti,intlset,inttotalhour,floatfee,intday,inthour,intmin)保存车辆离开的信息

()voidshowcome(LinkListlist)显示车辆到来时间

()voidshowleave(LinkListlist)显示车辆离开时间

3.4主算法设计

程序运行时,当车辆入场时,车辆信息保存在链表里,并出栈来表示进入一辆车,其车位和时间自动生成,当汽车离场时,输入车位信息,显示时间,费用。

并把车辆离开时间等保存在离开的链表里,然后通过车位信息的输入,即出场和离场链表表示输出。

3.5用户界面设计

主界面分别有车辆登记,车辆离场,车场信息,退出系统四个功能,进入车辆登记窗口输入车牌号,自动生成车位信息显示。

车辆离场窗口进入输入车场及车位信息,即弹出车位信息及停车费用。

车位信息即显示地上下停车场进出车辆的车辆信息,包括到达时间、离开时间、车位号、车牌号、停车费用等。

退出系统即退出本软件。

4方案实现

4.1开发环境与工具

本程序在window7下实现和运行,并使用VisualC++6.0编译的。

4.2程序设计关键技术

本程序主要用栈来保存车位车位的信息,当车场为空时,栈此时是满的,而当车场满时,栈是空的。

所以当车辆入场时是出栈,而车辆进场时时出栈。

此外就是车辆信息的保存在链表里。

因为是地上下两个停车场,故我们采用两个栈和两个链表来保存其对应的信息,我们还采用了系统时间,减少了使用者的输入。

4.3个人设计实现

4.3.1张晓峰设计实现

设计时间车位两个结构体,以及时间函数。

主函数的设计。

保存车辆到达与离开信息(利用链表)

(1)时间与车位信息的结构体源程序:

structnow_time

{

intmday;

inthour;

intmin;

};

structinformation

{

intsetnumber;

charnum[10];

structnow_timereach;

structnow_timeleave;

}set[MAX*2];

(2)保存车辆到来信息源程序:

车辆信息,包括车牌号,到达时间。

储存在链表中,后续查询车场信息中利用此函数。

StatusListInsert_Link(LinkList&L,inti,intsetnumber)

{

LNode*p,*s;

intj;

p=L;

j=0;

while(p&&j

{

p=p->next;

++j;

}

if(!

p||j>i-1)

returnERROR;

s=(LinkList)malloc(sizeof(LNode));

s->data.stnumber=set[setnumber].setnumber;

s->data.reach.hour=set[setnumber].reach.hour;

s->data.reach.mday=set[setnumber].reach.mday;

s->data.reach.min=set[setnumber].reach.min;

copy(s->data.num,set[setnumber].num);

s->next=p->next;

p->next=s;

returnOK;

}

(3)保存车辆离开

离开时,记录离开时间,算出总时间,为后续计算费用做铺垫。

同样将信息储存在链表中,在离开停车场函数中利用该函数。

StatuslListInsert_Link(LinkList&llist,inti,intlset,inttotalhour,floatfee,intday,inthour,intmin)

{

LNode*p,*s;

intj;

p=llist;

j=0;

while(p&&j

{

p=p->next;

++j;

}

if(!

p||j>i-1)

returnERROR;

s=(LinkList)malloc(sizeof(LNode));

s->data.fee=fee;

s->data.totalhour=totalhour;

s->data.stnumber=lset;

s->data.leave.mday=day;

s->data.leave.hour=hour;

s->data.leave.min=min;

copy(s->data.num,set[lset].num);

s->next=p->next;

p->next=s;

returnOK;

}

(4)时间函数源代码:

采用系统时间,日小时分钟格式。

分为入场时间和出场时间。

voidshowcome(LinkListlist)

{

LNode*p;

p=list->next;

while(p)

{

printf("\n%s\t%d号\t%d日%d时%d分",p->data.num,p->data.stnumber,p->data.reach.mday,p->data.reach.hour,p->data.reach.min);

p=p->next;

}

}

voidshowleave(LinkListlist)

{

LNode*p;

p=list->next;

while(p)

{

printf("\n%s\t%d号\t%d日%d时%d分",p->data.num,p->data.stnumber,p->data.leave.mday,p->data.leave.hour,p->data.leave.min);

p=p->next;

}

}

(5)主函数:

本程序的关键所在。

对所有函数进行调用,并实现界面的显示。

登记,离开,查询,退出四个部分。

主菜单的建立,界面设计等。

voidmain()

{

intchoice1,choice2,choice3,wait,ture=1;

inti;

intcome1=0;

intleave2=0;

intcome3=0;

intleave4=0;

int*p1,*p2,*p3,*p4;

p1=&come1;

p2=&leave2;

p3=&come3;

p4=&leave4;

charnumber[10];

SqStackstack_set1;

SqStackstack_set2;

SqQueuequeue_turn;

initStack1(stack_set1);

initStack2(stack_set2);

initQueue(queue_turn);

LinkListllist1,llist2,clist1,clist2;

CreateList_L(llist1);

CreateList_L(clist1);

CreateList_L(llist2);

CreateList_L(clist2);

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

{

set[i].setnumber=i;

set[i].num[1]='#';

}

system("color3B");

printf("\n\n\n\n\n\n\n\n\n*******************欢迎使用停车场管理系统,按任意键进入主菜单******************");

do

{

getchar();

system("cls");

printf("欢迎使用停车场管理系统\n\n\n");

printf("主菜单\n\n");

printf("*1*汽车登记\n");

printf("*2*汽车离场\n");

printf("*3*车场信息\n");

printf("*0*退出系统\n\n");

printf("***请按提示输入:

\n");

scanf("%d",&choice1);

switch(choice1)

{

case1:

system("cls");

printf("***********************汽车登记******************\n\n\n");

if(!

stack_empty(stack_set1))//进入停车场

{

printf("\n*请输入您的车牌号(例:

辽A3475):

");

scanf("%s",number);

enterstop(clist1,stack_set1,number,p1,1);

}

elseif(!

stack_empty(stack_set2))

{

printf("\n*请输入您的车牌号(例:

辽A3475):

");

scanf("%s",number);

enterstop(clist2,stack_set2,number,p3,2);

}

else//进入便车道等待

{

wait=w_total(queue_turn);

printf("******您好,当前停车场已满,有%d在等待!

*****\n您是否愿意进入便车道等待:

\n",wait);

printf("*1*:

愿意等待!

\t\t*2*:

不愿意等待\n");

while(ture==1)

{

scanf("%d",&choice3);

getchar();

switch(choice3)

{

case1:

enterlane(queue_turn,wait);//汽车进入便车道

printf("***您好,请进入便车道等待***!

");

ture=0;

break;

case2:

printf("\n***汽车离开!

");

ture=0;

break;

default:

printf("\n***您好,输入错误,请重新输入!

");

}

}

ture=1;

}

break;

case2:

system("cls");

printf("***********************汽车离场******************\n\n\n");

printf("*1*地上车场\n");

printf("*2*地下车场\n");

scanf("%d",&choice2);

switch(choice2)

{

case1:

printf("****************地上停车场******************\n");

leavestop(llist1,clist1,stack_set1,queue_turn,p1,p2,1);

break;

case2:

printf("*****************地下停车场*****************\n");

leavestop(llist2,clist2,stack_set2,queue_turn,p3,p4,2);

break;

default:

printf("***您输入的有误,请重新输入:

");

}

break;

case3:

/*今天信息的显示*/

system("cls");

printf("***********************车场信息******************\n\n");

if((come1+come3)==0)

printf("**********无车辆到达!

\n");

else

{

printf("**********到达%d辆车:

",come1+come3);

printf("\n**汽车信息*车牌号*\t*车位号*\t*到达时间*\t");

printf("\n*地上车场*\t");

showcome(clist1);

printf("\n*地下车场*\t");

showcome(clist2);

printf("\n");

}

if((leave2+leave4)==0)

printf("**********无车辆离开!

\n");

else

{

printf("**********离开%d辆车:

",leave2+leave4);

printf("\n**汽车信息:

**车牌号**\t**车位号**\t**到达时间**\t");

printf("\n**地上车场:

\t");

showleave(llist1);

printf("\n**地下车场:

\t");

showleave(llist2);

}

break;

case0:

system("cls");

printf("***************退出停车系统!

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

break;

default:

printf("***您输入的有误,请重新输入:

");

}

getchar();

}

while(choice1!

=0);

}

4.3.2曹乔家设计实现

设计进入停车场和离开停车场函数,结合之前栈,链表,队列以及数组。

(1)进入停车场源代码:

voidenterstop(LinkListclist,SqStack&S,charnumber[10],int*come,inti)

{

inte;

*come=*come+1;

Pop(S,e);

set[e].setnumber=e;

copy(set[e].num,number);

structtm*newtime;

charam_pm[]="AM";

time_tlong_time;

time(&long_time);

newtime=localtime(&long_time);

set[e].reach.hour=newtime->tm_hour;

set[e].reach.mday=newtime->tm_mday;

set[e].reach.min=newtime->tm_min;

printf("\n\n************请核对您的停车信息***************\n");

printf("*停车牌号*:

%s\n",set[e].num);

if(i==1)

printf("*地上车场*:

%d\n",set[e].setnumber);

if(i==2)

printf("*地下车场*:

%d\n",set[e].setnumber);

printf("*到达时间*:

%d:

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

当前位置:首页 > 求职职场 > 面试

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

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