本科毕业设计论文数据结构项目课程报告停车场管理系统.docx
《本科毕业设计论文数据结构项目课程报告停车场管理系统.docx》由会员分享,可在线阅读,更多相关《本科毕业设计论文数据结构项目课程报告停车场管理系统.docx(28页珍藏版)》请在冰豆网上搜索。
![本科毕业设计论文数据结构项目课程报告停车场管理系统.docx](https://file1.bdocx.com/fileroot1/2022-11/16/70fedc71-a376-46b2-9a2b-90a1a9563250/70fedc71-a376-46b2-9a2b-90a1a95632501.gif)
本科毕业设计论文数据结构项目课程报告停车场管理系统
数据结构项目课程报告
一、问题描述及分析
题目要求:
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该车辆开出大门外,其他车辆再按原次序进入车场,每辆车停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
分析:
由题目只有一个大门进出并且“先到后处理”可知,应使构造栈模拟停车场,进入离开停车场即入栈出栈的过程;而便道等候的汽车符合“先到先处理”原则,应构造线性队列模拟;构造存储结构,存放车辆信息,车牌号,到达离开时间;通过time.h头文件中的函数获取汽车到来以及离开时间,利用时间差计算价钱。
主要模块如下图:
二、
功能模块及数据结构描述
头文件、宏定义以及存储结构
结构体定义相关类型的链表空间有顺序栈的定义、链队、车辆信息结构体、时间计算结构体、车辆位置字符型结构体数组和循环单链表存储下一个地址空间。
#include
#include
#include
#include
#include
#defineOK1
#defineERROR0
typedefstructtime1
{
chartimes[100];
longtime2;
}time1;
typedefstructnode
{
charnum[10];
time1reach;
time1leave;
}Car;
typedefstructStack
{
Car*stack[100];
inttop;
}SqStack;
typedefstructcar
{
Car*data;
structcar*next;
}QNode;
typedefstructNode
{
QNode*front;
QNode*rear;
}LinkQueue;
主函数
voidmain()
{
SqStackIn,Out;
LinkQueueWait;
intch;
intMAX;
floatprice;
printf("请输入停车场的容量:
");
scanf("%d",&MAX);
printf("请输入停车场的收费标准(元/小时):
");
scanf("%f",&price);
InitStack(&In,MAX);
InitStack(&Out,MAX);
InitQueue(&Wait);
while
(1)
{
system("color0A");
printf("=======欢迎使用停车场管理系统====================\n");
printf("输入的停车场容量为%d位,费用为%2.1f元/小时,请按任意键进入系统",MAX,price);
getchar();
system("CLS");
printf("=======欢迎使用停车场管理系统==================\n");
printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。
\n",MAX,price);
printf("\n=========================\n");
printf("
(1)车辆到达\n
(2)车辆离开\n(3)停车场信息\n(4)退出系统\n请选择\n");
printf("\n===========================\n");
while
(1)
{
printf("请输入操作的序号");
scanf("%d",&ch);
switch(ch)
{
case1:
arrive(&In,&Wait,MAX,price);
break;
case2:
leave(&In,&Out,&Wait,MAX,price);
break;
case3:
info(In,Wait);
break;
case4:
{
system("CLS");
printf("\n============================\n");
printf("谢谢使用!
\n");
printf("\n=========================================\n");
exit(0);
}
default:
printf("\n按键无效,请重新按键选择");
getchar();
}
system("CLS");
printf("==========欢迎使用停车场管理系统=========\n");
printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。
\n",MAX,price);
printf("\n========================================\n");
printf("
(1)车辆到达\n
(2)车辆离开\n(3)停车场信息\n(4)退出系统\n请选择\n");
printf("\n==========================================\n");
}
}
}
费用计算函数,通过时间差计算费用
voidprint(Car*p,introom,intMAX,floatprice)
{
time_trawtime;
structtm*timeinfo;
longA1,A2,B1,B2;
time(&rawtime);
timeinfo=localtime(&rawtime);
p->leave.time2=rawtime;
printf("\n车离开的时间为:
%s",asctime(timeinfo));
strcpy(p->leave.times,asctime(timeinfo));
printf("\n车牌号码:
");
puts(p->num);
printf("\n车到达的时间是:
%s",p->reach.times);
printf("\n车离开的时间是:
%s",p->leave.times);
A1=p->leave.time2;
A2=p->reach.time2;
B1=p->leave.time2-p->reach.time2;
if(B1<=3600&&B1>=0)
printf("\n费用为:
%2.1f元",price);
else
printf("\n费用为:
%2.1f元",B1/3600*price);
free(p);
}//消费计算函数
车辆到达函数,获取车辆信息,判断是否有车位,进行入栈或入队操作
intarrive(SqStack*In,LinkQueue*W,intMAX,floatprice)
{
Car*p;
QNode*t;
time_trawtime;
structtm*timeinfo;
//time(&rawtime);//获取时间,以秒计,从1970年1月一日起算,存于rawtime
//timeinfo=localtime(&rawtime);//转为当地时间,tm时间结构
//printf("当前系统时间:
%s",asctime(timeinfo));
//asctime(timeinfo);//转为标准ASCII时间格式:
p=(Car*)malloc(sizeof(Car));
printf("=====================欢迎使用停车场管理系统=====================\n");
printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。
\n",MAX,price);
printf("停车场还有%d停车位,车可先进入便道等待",MAX-In->top);
printf("\n请输入车牌号码(例:
警A1035):
");
getchar();
scanf("%s",p->num);
getchar();
if(In->top{
time(&rawtime);
p->reach.time2=rawtime;
timeinfo=localtime(&rawtime);
In->top++;
printf("停车的位置:
%d号停车位。
",In->top);
printf("\n车到达的时间为%s:
",asctime(timeinfo));
strcpy(p->reach.times,asctime(timeinfo));
In->stack[In->top]=p;
printf("请按任意键返回\n");
printf("\n==============================================\n");
getchar();
returnOK;
}
else
{
printf("=========欢迎使用停车场管理系统=================\n");
printf("您输入的停车场容量为%d位,费用为%2.1f元/小时。
\n",MAX,price);
printf("\n=========================================\n");
printf("停车位已满,该车须在便道等待!
");
t=(QNode*)malloc(sizeof(QNode));
t->data=p;
t->next=NULL;
W->rear->next=t;
W->rear=t;
printf("\n请按任意键返回");
getchar();
returnOK;
}
getchar();
}
车辆离开函数,如果是最前面的车离开,后面