数据结构课程设计实验报告.docx
《数据结构课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
数据结构课程设计实验报告
大学信息工程学院
《数据结构》
---课程设计报告
题目:
停车场管理问题
班级:
计科1101
学号:
111404107
:
杜舒静
指导教师:
王丽爱
(一)课程题目…………………………………3
(二)需求分析…………………………………3
(三)概要设计…………………………………3
(四)详细设计………………………………3~4
(五)测试数据与运行结果…………………4~5
(六)源程序…………………………………5~10
一、设计题目
停车场管理系统
二、需求分析
要求程序输出每辆车到达后的停车位置(停车场或便道上),以与某辆车离开停车场应交纳的费用和它在停车场停留的时间。
实现提示:
汽车的模拟输入信息格式可以是:
(到达/离去,汽车牌照,到达/离去的时刻)。
例如,(‘A’,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,5,20)表示5号牌照车在20这个时刻离去。
整个程序可以在输入信息为(‘E’,0,0)时结束。
本题可用栈和队列来实现。
三、概要设计
此停车场管理系统,主要分为以下若干模块:
首先定义用来模拟停车场的堆栈以与用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。
在主函数中首先调用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);
图1.模块间的关系
四、测试数据与运行结果
(2)测试结果的分析与讨论
1.主界面
2.停车场信息
3.车辆信息(便道)
4.退出系统
六、源程序
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
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()
{
SqStackIn,Out;
LinkQueueWait;
intch;
InitStack(&In);/*初始化停车站*/
InitStack(&Out);/*初始化让路的临时栈*/
InitQueue(&Wait);/*初始化通道*/
while
(1)
{
printf("--------------------欢迎使用停车场管理系统--------------------\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请输入车牌(例:
湘D0734):
");
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请输入现在的时间(格式“**:
**”):
");