数据结构课程设计报告收费停车场管理系统.docx
- 文档编号:10480637
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:21
- 大小:281.23KB
数据结构课程设计报告收费停车场管理系统.docx
《数据结构课程设计报告收费停车场管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告收费停车场管理系统.docx(21页珍藏版)》请在冰点文库上搜索。
数据结构课程设计报告收费停车场管理系统
XX大学计算机与电子信息学院《数据结构》课程设计报告---收费停车场管理系统
《数据结构》课程设计
停
车
场
管
理
系
统
学院:
计电学院班级:
计网112
学号:
11073XXX姓名:
XXX
日期:
2013年6月4日
目录
一、题目及功能说明1
1.[问题描述]1
2.[基本要求]:
1
二、环境要求1
1硬件1
2软件1
三、概要设计2
1、设计思想2
2、实现方法2
3、主要模块3
①此停车场管理系统,主要分为以下若干模块:
3
②在以上各个模块中,出现的调用的函数为:
3
4、模块间关系4
四、调试分析5
(1)调试过程中的主要问题5
(2)调试截图5
1设定车容和收费5
2选择功能6
3停入第一辆车6
4查看停车信息7
5车位已满、车要停在车道7
6查看车场情况8
7车辆离开付费,车道车进入车位8
8车辆继续离开9
9车场情况9
10所有车都离开10
11继续停车10
五、附录11
源程序代码11
六、设计体会17
一、题目及功能说明
1.[问题描述]:
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等待,一旦有车开走,则排在便道上的第一辆车即可开入;每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
2.[基本要求]:
以线性表模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:
汽车“到达”或“离去”信息、汽车牌照号码以及“到达”或“离去”的时刻。
对每一组输入数据进行操作后的输出信息为:
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
线性表以顺序结构实现,队列以链表结构实现。
二、环境要求
1硬件:
联想笔记本电脑Z485型
2软件:
windows7系统、Visualc++6.0
三、概要设计
1、设计思想
此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。
至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。
当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。
2、实现方法
对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。
至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。
对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。
3、主要模块
①此停车场管理系统,主要分为以下若干模块:
首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。
在主函数中首先调用option()函数,出现欢迎用户使用的主界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的界面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内停放车辆的信息以及退出程序这四个函数模块。
其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。
最后,从调鼐的这四个函数中回到主函数结束整个程序的运行。
②在以上各个模块中,出现的调用的函数为:
voidInitStack(SeqStackCar*s);
intInitQueue(LinkQueueCar*Q);
option();
intArrival(SeqStackCar*Enter,LinkQueueCar*W);
voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W);
voidPRINT(CarNode*p);
voidList(SeqStackCarS,LinkQueueCarW);
voidList1(SeqStackCar*S);
voidList2(LinkQueueCar*W);
4、模块间关系
四、调试分析
(1)调试过程中的主要问题
由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使用了清屏函数,所以,运行时用户选择任务并且执行完任务后,又会回到供用户选择功能的主界面,因此整个程序从整体上来讲结构清晰,使用方便。
本程序的调试运行,总体上情况良好,但中间也出现了一些小问题。
(2)调试截图
1设定车容和收费
2选择功能
3停入第一辆车
4查看停车信息
5车位已满、车要停在车道
6查看车场情况
7车辆离开付费,车道车进入车位
8车辆继续离开
9车场情况
10所有车都离开
11继续停车
五、附录
源程序代码
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#include
intMAX;/*定义一个全局变量用来存储车库最大容量*/
floatprice;/*每车每小时的费用*/
typedefstructtime
{
inthour;
intmin;
}Time;/*时间结点*/
typedefstructnode
{
charnum[10];
Timereach;
Timeleave;
}Car;/*车辆信息结点*/
typedefstructNODE
{
Car*stack[100];
inttop;
}SqStack;/*停车站*/
typedefstructcar
{
Car*data;
structcar*next;
}QNode;
typedefstructNode
{
QNode*head;
QNode*rear;
}LinkQueue;/*通道*/
voidInitStack(SqStack*);/*初始化栈*/
intInitQueue(LinkQueue*);/*初始化便道*/
intarrive(SqStack*,LinkQueue*);/*车辆到达*/
voidleave(SqStack*,SqStack*,LinkQueue*);/*车辆离开*/
voidinfo(SqStack,LinkQueue);/*显示停车场信息*/
voidPRINT(Car*p,introom);
voidInitStack(SqStack*s)/*初始化栈*/
{
inti;
s->top=0;
for(i=0;i<=MAX;i++)
s->stack[s->top]=NULL;
}
intInitQueue(LinkQueue*Q)/*初始化便道*/
{
Q->head=(QNode*)malloc(sizeof(QNode));
if(Q->head!
=NULL)
{
Q->head->next=NULL;
Q->rear=Q->head;
return
(1);
}
elsereturn(-1);
}
voidmain()
{system("colorB5");
SqStackIn,Out;
LinkQueueWait;
intch;
InitStack(&In);/*初始化停车站*/
InitStack(&Out);/*初始化让路的临时栈*/
InitQueue(&Wait);/*初始化通道*/
while
(1)
{
printf("\t------------------欢迎使用停车场管理系统--------------------\n");
printf("\t--------------这里是广西大学10栋宿舍的小停车场-------------\n\n");
printf("请输入停车场的容量:
");
scanf("%d",&MAX);
printf("请输入停车场的收费标准(元/小时):
");
scanf("%f",&price);
printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。
\n",MAX,price);
printf("\n
(1)车辆到达\n
(2)车辆离开\n(3)停车场信息\n(4)退出系统\n请选择\n");
while
(1)
{
ch=getch();
switch(ch)
{
case49:
arrive(&In,&Wait);break;/*车辆到达*/
case50:
leave(&In,&Out,&Wait);break;/*车辆离开*/
case51:
info(In,Wait);break;/*输出车站信息*/
case52:
{printf("谢谢使用!
");exit(0);}/*退出主程序*/
default:
printf("\n按键无效,请重新按键选择!
");
}/*49-52分别表示"1"-"4"这四个按键的键值*/
system("CLS");
printf("--------------------欢迎使用停车场管理系统--------------------\n");
printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。
\n",MAX,price);
printf("\n
(1)车辆到达\n
(2)车辆离开\n(3)停车场信息\n(4)退出系统\n请选择\n");
}
}
}
intarrive(SqStack*In,LinkQueue*W)/*车辆到达*/
{
Car*p;
QNode*t;
p=(Car*)malloc(sizeof(Car));
flushall();
printf("\n停车场还有%d停车位(若停车位为0,车可先进入便道等待)",MAX-In->top);
printf("\n请输入车牌号码(例:
桂A8888):
");
gets(p->num);
if(In->top { In->top++; printf("\n停车的位置: %d号停车位。 ",In->top); printf("\n请输入车到达的时间: "); scanf("%d: %d",&(p->reach.hour),&(p->reach.min)); In->stack[In->top]=p; printf("请按任意键返回"); getch(); return (1); } else/*停车场已满,车进便道*/ { printf("\n停车位已满,该车须在便道等待! "); t=(QNode*)malloc(sizeof(QNode)); t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; printf("请按任意键返回"); getch(); return (1); } } voidleave(SqStack*In,SqStack*Out,LinkQueue*W) {/*车辆离开*/ introom; Car*p,*t; QNode*q; /*判断车场内是否有车*/ if(In->top>0)/*有车*/ { while (1)/*输入离开车辆的信息*/ { printf("\n请输入车在停车场的位置(1-%d): ",In->top); scanf("%d",&room); if(room>=1&&room<=In->top)break; } while(In->top>room)/*车辆离开*/ { Out->top++; Out->stack[Out->top]=In->stack[In->top]; In->stack[In->top]=NULL; In->top--; } p=In->stack[In->top]; In->stack[In->top]=NULL; In->top--; while(Out->top>=1) { In->top++; In->stack[In->top]=Out->stack[Out->top]; Out->stack[Out->top]=NULL; Out->top--; } PRINT(p,room); /*判断通道上是否有车及车站是否已满*/ if((W->head! =W->rear)&&In->top { q=W->head->next; t=q->data; In->top++; printf("\n便道的%s号车进入车场第%d号停车位。 ",t->num,In->top); printf("\n请输入现在的时间"); scanf("%d: %d",&(t->reach.hour),&(t->reach.min)); W->head->next=q->next; if(q==W->rear)W->rear=W->head; In->stack[In->top]=t; free(q); } } elseprintf("\n停车场里没有车\n");/*没车*/ printf("请按任意键返回"); getch(); } voidinfo1(SqStack*S)/*列表输出车场信息*/ { inti; if(S->top>0)/*判断停车场内是否有车*/ { printf("\n车场: "); printf("\n位置到达时间车牌号\n"); for(i=1;i<=S->top;i++) { printf("%d\t",i); printf("%d: %d",S->stack[i]->reach.hour,S->stack[i]->reach.min); puts(S->stack[i]->num); } } elseprintf("\n停车场里没有车"); } voidinfo2(LinkQueue*W)/*显示便道信息*/ { QNode*p; p=W->head->next; if(W->head! =W->rear)/*判断通道上是否有车*/ { printf("\n便道中车辆的号码为: \n"); while(p! =NULL) { puts(p->data->num); p=p->next; } } elseprintf("\n便道里没有车\n"); printf("请按任意键返回"); getch(); } voidinfo(SqStackS,LinkQueueW) { info1(&S);/*显示停车场信息*/ info2(&W);/*显示停便道信息*/ } voidPRINT(Car*p,introom)/*输出停车站车的信息*/ { intA1,A2,B1,B2; printf("\n请输入车离开的时间: "); scanf("%d: %d",&(p->leave.hour),&(p->leave.min)); printf("\n车牌号码: "); puts(p->num); printf("\n车到达的时间是: %d: %d",p->reach.hour,p->reach.min); printf("车离开的时间是: %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)+(B2-A2)/60.0)*price); free(p); } 六、设计体会 通过这一次的课程设计,加深了我对《数据结构》这门课程所学内容的进一步的理解与掌握;同时,通过对停车场管理系统的开发,使得我将计算机课程所学知识与实际问题很好地相联接在了一起。 在这次课程设计中,不仅培养了我开发一个中小型程序的能力,而且也激励我的斗志。 在这次对停车场管理系统的开发过程中,其中有程序功能成功实现时的欣喜,也有遇到问题、解决问题时的执着以及迷茫。 在这次课程设计中,此停车场管理系统,基本上可以完成每一项功能。 汽车进入停车场的信息、离开停车场的信息以及通道上的信息都可以在程序上一一实现。 但是,该程序也有不足的地方。 主要表现在车辆的车牌号上,现实中的车牌号是一串字符,可是,在这个程序中,为了简便起见,我们就车牌号定义为了整型,这个与现实是有些不符的。 还有一个可以改进的地方就是记录车辆进入停车场以及离开停车场的时间,应该精确到小时以及分钟的,可是在程序中,为了简便起见,我们只是设置成了一个时刻,所以,在这方面还是有待改进的。 改进的程序中,还应该增加时间的判断功能,即停车场内有可能有车辆停放的时间超过一天。 或者还有离开时间比进入时间早的话,付费就会出现负值。 总之,在这周的课程设计中,我的收获很大。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 收费 停车场 管理 系统