停车场管理系统课程设计报告 2.docx

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

停车场管理系统课程设计报告 2.docx

《停车场管理系统课程设计报告 2.docx》由会员分享,可在线阅读,更多相关《停车场管理系统课程设计报告 2.docx(28页珍藏版)》请在冰点文库上搜索。

停车场管理系统课程设计报告 2.docx

停车场管理系统课程设计报告2

停车场管理系统

1实习目的

通过本次课程设计,了解并初步掌握设计、实现系统的完整过程,包括系统分析、编码设计、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。

2问题描述

停车场是一条可以停放n辆车的狭窄通道,且只有一个大门汽车停放安到达时间的先后依次由北向南排列(大门在最南端,最先到达的第一辆车停在最北端)若停车场已经停满n辆车,后来的汽车在便道上等候,一旦有车开走,排在便道上的第一辆车可以开入;当停车场的某辆车要离开时,停在他后面的车要先后退为他让路,等它开出后其他车在按照原次序开入车场,每两停在车场的车要安时间长短缴费。

基本要求

(1)以栈模拟停车场,以队列车场外的便道,按照从终端输入的数据序列进行模拟管理。

每一组数据包括三个数据项:

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

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

若是车辆到达,则输出汽车在停车场的内或便道上的位置:

若是车辆离去则输出汽车在停车场内的停留时间和应缴纳的费用(在便道上的停留时间不收费)。

栈以顺序结构实现,队列以链表结构实现。

(2)友好性:

界面要友好,输入有提示,尽量展示人性化。

(3)可读性:

源程序代码清晰、有层次,必要时给出注释。

(4)健壮性:

用户输入非法数据时,系统要及时给出警告信息。

(5)测试数据:

要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。

进行程序测试,以保证程序的稳定。

测试数据及测试结果请在上交的资料中写明。

3需求分析

停车场是一条可以停放n辆车的狭窄通道,且只有一个大门。

汽车停放按到达时间的先后排列。

若停车场已经停满n辆车,后来的汽车在便道上等候。

一旦有车开走,排在便道上的第一辆车可以开入;当停车场的某辆车要离开时,停在他后面的车要先后退为他让路。

等它开出后,其他车再按照原次序开入车场,每辆停在车场的车要按时间长短缴费。

3.1设计基本要求

(1)以栈模拟停车场,以队列模拟车场外的便道,按照从终端输入的数据序列进行模拟管理。

每一组数据包括三个数据项:

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

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

若是车辆到达,则输出汽车在停车场的内或便道上的位置:

若是车辆离去则输出汽车在停车场内的停留时间和应缴纳的费用(在便道上的停留时间不收费)。

栈以顺序结构实现,队列以链表结构实现。

(2)友好性:

界面要友好,输入有提示,尽量展示人性化。

(3)可读性:

源程序代码清晰、有层次,必要时给出注释。

(4)健壮性:

用户输入非法数据时,系统要及时给出警告信息。

(5)测试数据:

要求使用全部合法数据、整体非法数据、局部非法数据进行程序测试,以保证程序的稳定。

测试数据及测试结果请在上交的资料中写明。

3.2停车场管理系统的主要功能

(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。

(2)该程序设计能够通过车牌号查到该车辆在停车场或便道中的位置。

(3)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。

实现停车场的调度功能。

该程序设计可以完整的模拟停车场的管理过程。

4详细设计

4.1数据结构的设计

程序中使用了一个类,五个结构体,两个栈(模拟停车场,其中一个为临时栈),一个队列(模拟便道)。

(1)车辆信息的表示

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

车牌号码,车辆的进站时间和离开停车场的时间,定义如下:

typedefstructnode{

charnum[10];//车牌号码Timereach;//到站时间

Timeleave;//离开时间

}CarNode;

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

时间是由小时和分钟表示的,有两部分数据,设计两个变量分别存储小时和分钟,定义如下:

typedefstructtime{

inthour;

intmin;

}Time;

停车场内用栈表示:

typedefstructNODE{

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

}SeqStackCar;

SeqStackCarEnter,Temp;InitStack(&Temp)

在车辆离开时,应用temp临时栈把将要离开的车辆后续车辆压入,等车辆离开后压回原栈stack。

便道上的车辆表示:

typedefstructcar{

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

structcar*next;

}QueueNode;

typedefstructNode{

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

QueueNode*rear;

}LinkQueueCar;

4.2算法的设计思想及流程图

4.2.1主要函数的功能说明

(1)voidInitStack(SeqStackCar*);//车辆节点进栈。

即当栈未满时,就把到达的车辆进栈。

(2)intInitQueue(LinkQueueCar*);//车辆节点进队列。

即当栈已满时,车辆就进入便道上的队列中

(3)intArrival(SeqStackCar*,LinkQueueCar*);//车辆到达登记。

即车辆到达时,先登记车辆车牌号码。

然后再判断停车场有没有停满,没停满就进栈,停满了就停在便道上,即进队列。

(4)voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);//车辆离开处理。

即通过输入离开车辆的位置处理,然后调用PRINT(CarNode*p,introom);函数进行收费。

然后再判断便道上有没有车,如果有,就把便道上的车进停车场内。

(5)voidList(SeqStackCar,LinkQueueCar);//显示车场内和便道上的车辆情况。

利用switch();函数选择显示车场内或是便道上的车辆情况,包括对下面两个子函数的调用:

voidList1(SeqStackCar*S);voidList2(LinkQueueCar*W);//分别用来显示车场和便道上的车辆情况

(6)voidPRINT(CarNode*p,introom);//车辆离开时的收费。

即这个函数由车辆离开的函数调用,以分钟计时算费,但只能计算当天之内的费用,如果第二天的话会导致计费为负或减少。

即只能当天停,当天开走。

4.2.2停车场管理系统流程图

经过对车辆的进出分析以及对该系统的详细设计,绘制停车场管理系统流程图如图1.

图1停车场管理系统流程图

4.2.3主要模块算法描述

本程序最主要的算法就是车辆到达登记的和车辆离开时的登记。

(1)车辆到达:

intArrival(SeqStackCar*Enter,LinkQueueCar*W)//首先定义一个栈和队列的结构体指针为:

*p,*t。

然后申请一个车辆信息的内存空间,并把它赋给栈指针。

车辆到达时就输入车牌号,并通过if(Enter->top

如果是else就显示该车要停在便道上,并进行进队列的操作。

(2)车辆离开:

voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)//定义一个整型变量room记录要离开车辆的位置,定义两个栈指针和一个队列指针,用个if(Enter->top>0)确保栈不空,然后用个while

(1)确保输入的车辆离开位置的合法性。

如果不合法,显示输入有误,要重新输入。

通过while(Enter->top>room)判断离开车辆的位置,如果是中间位置,就要再用一个临时栈放置前面临时开出来的车,等要开出的车开出后,再把临时栈内的车开进停车场内,并调用PRINT(p,room);这个函数计算显示费用。

然后还要用if((W->head!

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

并要进行相应的出队列和进栈操作。

5测试分析

5.1测试用例

说明:

测试用例要合理并且足够,既要有正确用例,也要有错误用例,同时检验程序的正确性和强壮性。

5.1.1第一组测试用例

(1)测试输入:

停车场的车辆离开,如表1所示:

 

表1:

车辆离开测试

服务选择

车牌号/车位

到达/离开时间

1

京A1212

12:

12

1

津S1212

12:

13

1

鲁D1212

12:

14

2

1

14:

12

2

1

25:

65(错误)

(2)测试目的:

测试离开方法时间格式控制以及费用计算是否正确。

(3)正确输出:

第一次离开的是京A1212,应交费2.4元。

第二次时,当在输入65时,应该提示输入错误,重输。

(4)实际输出:

图2测试离开方式时间格式及费用计算图

图3测试车辆离开错误图

(5)错误原因:

第一个正确,第二个错误,原因是没有对时间格式控制。

(6)当前状态:

已改正

5.1.2第二组测试用例

(1)测试输入:

连续5辆车到达,如表2所示:

表2:

连续5辆车到达测试

服务选择

车牌号/车位

到达时间

1

京A1212

12:

12

1

津S1212

12:

13

1

鲁D1212

12:

14

1

豫F1212

12:

15

1

沪G1212

12:

16

2

1

14:

12

(2)测试目的:

测试到达方法与列表显示方法能否正确完成。

(3)正确输出:

先到达的三辆车先进入停车场,最后到达的两辆在便道等候。

(4)实际输出:

表4车辆到达方式测试

图5车辆进入提示图

(5)错误原因:

没有错误。

(6)当前状态:

通过。

5.1.3第三组测试用例

(1)测试输入:

接上一步输入离开信息,如表3所示:

表3:

接上一步离开信息测试

服务选择

离开车位

离开时间

便道车进入时间

2

1

14:

12

14:

13

(2)测试目的:

测试离开方法功能是否成功以及便道进入车场是否正确。

(3)正确输出:

输出1号车位的车辆离开信息清单,便道1号车进入停车场。

(4)实际输出:

图6测试离开方法功能是否成功图

(5)错误原因:

没有错误。

(6)当前状态:

通过

5.2测试结果分析

经过我们小组一天的调试,我们终于把各模块整合起来了。

在这过程中,我们遇到了很多问题,像数据不匹配、括号不配对、赋值重复等。

因为C语言的语法限制不太严格,对变量的类型约束不严格,对数组下标越界不做检查等原因,所以,我们的修改工作难度加大。

但经过我们这小组共同的努力。

此停车管理系统可以基本实现一个小的停车场的管理,其“到达”与“离开”方法都相对比较完整,费用结算清单直观。

在输入数据时,要按照严格的格式输入,否则有可能出现死去或崩溃。

若本系统能加上保存功能就更好了,因为一个系统在使用过程中总会关机等,而此系统的缺点却是没有保存功能,关闭之后数据丢失。

现受限于各种条件,又因为要求中并未提及,所以本程序暂时没有加入保存功能。

6使用说明

(1)运行程序,首先出现主界面。

主界面包括四个选项:

选项1:

车辆到达登记,选择该项可进行车辆到达停车场情况登记;选项2:

车辆离开登记,选择该项可进行车辆离开停车场情况登记;选项3:

车辆列表显示,选择该项可查看车辆列表显示的所有信息,包括停车场列表和便道列表的全部信息;选项4:

退出系统,选择该项将退出程序。

图7程序初始界面图

(2)车辆列表显示界面包括3个选项:

选项1:

停车场列表,选择该项可以查看停车场列表的所有车辆的全部信息;选项2:

便道列表,选择该项可以查看便道列表显示的全部信息;选项3:

返回主菜单,可返回主界面。

图8车辆列表显示界面图

7总结

总体来说,这次的课程设计比去年的c语言的课程设计稍难。

我这次的课程设计题目:

停车场问题。

相比其他课题来说,这个题目还是比较简单的,主要是运用了数据结构中栈和队列的知识和操作。

程序能够实现基本的车辆到达、离开、收费、遍历显示等主要功能。

但我觉得这个程序还有很多小的地方是可以完善的,比如:

在计算收费时如果离开时间是到了第二天,这样就会导致收费是负的或减少很多。

也就是说,该程序限制于只能规定当天停,当天开走。

至于加算天数的功能我改了几次改不好,又鉴于程序要求中也没有提及并且时间紧张,所以也就没再去研究实现。

只要能实现主要的功能就好了。

当然,这次的课程设计、编程实践还是收获颇丰的。

通过实习我的收获如下:

(1)我知道了怎样去简化程序,减少他的时间复杂度和空间复杂度。

还知道了怎样去完善程序,使其更具健壮性。

(2)巩固和加深了对数据结构相关知识的理解,提高综合运用本课程所学知识的能力。

(3)培养了我选用参考书,查阅手册及文献资料的能力。

培养独立思考、深入研究、分析问题、解决问题的能力。

(4)通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法。

(5)通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。

根据我在实习中遇到的问题,我将在以后的学习过程中注意以下几点:

(1)认真上好专业实验课,多在实践中锻炼自己。

更让我懂得实践是检验和掌握真理的最好办法。

(2)写程序的过程中要考虑周到、严密。

需求分析需要反复思考修正。

(3)在做课程设计的时候要有信心、有耐心,切勿浮躁。

(4)认真学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。

(5)在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。

总之,本次课程设计不仅加深了我们对栈和队列等数据结构的理解和掌握,同时一定程度上提高了我们程序设计和阅读程序的能力。

本次课程设计提高了我们的专业知识,使自己所学的内容运用到实际中来,也增强了实际操作能力,为以后的工作学习提供了一个良好的铺垫。

参考文献

[1]严蔚敏,吴伟民.数据结构[M].北京:

清华大学出版社,2004.

[2]李春葆.数据结构解析[M].北京:

清华大学出版社,2001.

[3]谭浩强.C语言程序设计[M].北京:

清华大学出版社,2005.

[4]朱战立,张选平.数据结构学习指导与典型题解[M].西安:

西安交通大学出版社,2002.

[5]张玲,席德春,刘晓杰.C语言上机实践指导教程[M].北京:

机械工业出版社,2004.

[6]罗文劼,王苗,石强.数据结构习题解答与实验指导[M].北京:

中国铁道出版社,2004.

[7]殷人昆,陶永雷,谢若阳等.数据结构[M].北京:

清华大学出版社,2005.

附录

//系统说明:

本系统适应于小型停车场,且停车时间在一天之内的短期停放停车场。

//在此系统中,车库容量设置为3,便于测试。

在实际使用中可以对容量大小按实际情况设置。

#include

#include

#include

#defineMAX3//停车场最大容量为3辆,便于观察

#defineprice0.02

//定义时间结构体

typedefstructtime

{

inthour;

intmin;

}Time;

//定义车辆信息结构体

typedefstructnode

{

charnum[10];

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*);//车辆离开

voidPRINT(CarNode*p,introom);//车辆收费

voidList1(SeqStackCar*S);//显示车场里的车辆情况

voidList2(LinkQueueCar*W);//显示便道上的车辆情况

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

//voidsavecar(CarNode*);//保存车辆信息

//自定义函数

/*voidsavecar(CarNode*p1)//保存车辆信息

{

FILE*fp1;

if((fp1=fopen("car1.txt","w"))==NULL)

{

printf("\n\t◆不能保存车辆信息◆\n");

return;

}

while(p1)

{

fwrite(p1,sizeof(structnode),1,fp1);

p1=p1->next;

}

}*/

//栈的初始化

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,introom)

{

intA1,A2,B1,B2;

printf("\n■请输入车辆离开的时间:

(小时:

分钟)");

scanf("%d:

%d",&(p->leave.hour),&(p->leave.min));

while(p->leave.hour<0||p->leave.hour>23)

{

printf("◆您的输入有误!

");

printf("■请重新输入离开时间的'时'(0-23):

");

scanf("%d",&(p->leave.hour));

}

if(p->leave.min<0||p->leave.min>59)

{

printf("◆您的输入有误!

");

printf("■请重新输入离开时间的'分'(0-59):

");

scanf("%d",&(p->leave.min));

}

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

");

puts(p->num);

printf("\n●该车到达时间为:

%d:

%d",p->reach.hour,p->reach.min);

printf("\n●该车离开时间为:

%d:

%d",p->leave.hour,p->leave.min);

A1=p->reach.hour;

A2=p->reach.min;

B1=p->leave.hour;

B2=p->leave.min;

printf("\n●应交费用为:

%2.1f元!

",((B1-A1)*60+(B2-A2))*price);

free(p);

}

//车辆的到达登记

intArrival(SeqStackCar*Enter,LinkQueueCar*W)

{

//charnum[10];

//inta;

CarNode*p;

QueueNode*t;

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

flushall();//清空缓存输入的作用

printf("\n■请输入车牌号(例:

豫B1234):

");

gets(p->num);

/*a=Enter->top;

loop:

scanf("%s",&num);

if(a==0)

{

strcpy(p->num,num);

a++;

}

while(a)

{

if(strcmp(num,Enter->stack[a]->num)==0)

{

printf("您输入的车牌号重复,请重新输入!

");

gotoloop;

}

}*/

if(Enter->top

{

Enter->top++;

printf("\n●车辆在车场第%d位置.",Enter->top);

printf("\n●车辆到达时间:

");

scanf("%d:

%d",&(p->reach.hour),&(p->reach.min));

while(p->reach.hour<0||p->reach.hour>23)//控制时间格式正确

{

printf("◆您的输入有误!

");

printf("■请重新输入到达时间的'时'(0-23):

");

scanf("%d",&(p->reach.hour));

}

while(p->reach.min<0||p->reach.min>59)//控制分钟输入正确

{

printf("◆您的输入有误!

");

printf("■请重新输入到达时间的'分'(0-59):

");

scanf("%d",&(p->reach.min));

}

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

printf("\n●恭喜您登记成功!

");

//savecar(?

?

);

printf("\n");

return

(1);

}

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

{

printf("\n◆您好,停车场车位已满,请该车在便道上等待!

有空余车位时才能进入停车场!

/n");

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)

{

int

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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