数据结构课程报告及源代码Word格式文档下载.docx
《数据结构课程报告及源代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程报告及源代码Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
2、要求处理的数据元素包括三个数据项:
汽车“到达”或“离去”信息,汽车牌照号码及到达或离去的时间
3、该系统完成以下功能:
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;
若是离去,则输出汽车在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)
4、要求栈以顺序结构实现,队列以链表实现
三、设计要求
1、独立完成全部代码的设计、编写、调试与部署,运行正确无误
2、编写设计报告书
设计报告书应包括:
(1)问题描述和系统要求
(2)系统主要功能模块设计
(3)设计中遇到的问题及其解决方法
(4)系统运行报告
(5)总结
问题描述:
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
基本要求:
要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。
实现提示:
汽车的模拟输入信息格式可以是:
(到达/离去,汽车牌照号码,到达/离去的时刻)。
例如,(‘A’,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,5,20)表示5号牌照车在20这个时刻离去。
整个程序可以在输入信息为(‘E’,0,0)时结束。
本题可用栈和队列来实现。
四、运行环境
1.MicrosoftVisualC++6.0
2.WindowsXP操作系统
五、实验步骤(绘制相应的流程图)
六、实验过程原始代码
#include<
stdio.h>
stdlib.h>
string.h>
#defineMAX3/*车库容量*/
#defineprice3/*每车每时刻费用*/
typedefstructnode
{intnum;
intreachtime;
intleavetime;
}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*);
/*车辆离开*/
voidList(SeqStackCar,LinkQueueCar);
/*显示存车信息*/
voidPRINT(CarNode*p);
/*---------------------------------------------------------------------------*/voidoption()
{
charchoice;
printf("
\n\t\t\t项目:
停车场管理系统"
);
\n\t\t\t专业:
信息管理与信息系统"
printf("
\n\t\t\t班级:
B080502"
\n\t\t\t学号:
B08050210"
\n\t\t\t姓名:
蒙开华"
\n\t**********************************************************\n"
\t1.车辆到达--12.车辆离开--23.车辆信息--34.退出程序--4\n"
\t**********************************************************\n"
\t\t\t是否进入该系统(y/n)?
"
choice=getchar();
if(choice=='
N'
||choice=='
n'
)
exit(0);
}
voidmain()
{SeqStackCarEnter,Temp;
LinkQueueCarWait;
intch;
option();
InitStack(&
Enter);
/*初始化车站*/
InitStack(&
Temp);
/*初始化让路的临时栈*/
InitQueue(&
Wait);
/*初始化通道*/
while
(1)
{
\n\n\t\t\t1.车辆到达请选择1"
\n\n\t\t\t2.车辆离开请选择2"
\n\n\t\t\t3.车辆信息请选择3"
\n\n\t\t\t4.退出程序请选择4"
\n\n\t\t\t现在请选择以上信息:
while
(1)
{scanf("
%d"
&
ch);
\n"
if(ch>
=1&
&
ch<
=4)break;
else
\n\t\t\t错误!
请再次做出选择!
\n\n\t\t\t"
switch(ch)
{case1:
Arrival(&
Enter,&
break;
case2:
Leave(&
Temp,&
case3:
List(Enter,Wait);
/*列表打印信息*/
case4:
exit(0);
/*退出主程序*/
default:
/*------------------------------------------------------------------------------*/
voidInitStack(SeqStackCar*s)/*初始化栈*/
{inti;
s->
top=0;
for(i=0;
i<
=MAX;
i++)
stack[s->
top]=NULL;
}
intInitQueue(LinkQueueCar*Q)/*初始化便道*/
{Q->
head=(QueueNode*)malloc(sizeof(QueueNode));
if(Q->
head!
=NULL)
head->
next=NULL;
Q->
rear=Q->
head;
return
(1);
return(-1);
voidPRINT(CarNode*p)/*打印出站车的信息*/
{intA1,A2;
\n\t\t\t请输入离开时间:
scanf("
(p->
leavetime));
\n\t\t\t离开车辆的车牌号:
%d"
p->
num);
\n\n\t\t\t离开车辆到达时间:
%d"
reachtime);
\n\n\t\t\t离开车辆离开时间:
leavetime);
A1=p->
reachtime;
A2=p->
leavetime;
\n\n\t\t\t停车场管理费用:
(A2-A1)*price);
free(p);
intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/
{CarNode*p;
QueueNode*t;
p=(CarNode*)malloc(sizeof(CarNode));
flushall();
\t\t\t请输入到达车辆车牌号:
num));
if(Enter->
top<
MAX)/*车场未满,车进车场*/
{Enter->
top++;
\n\t\t\t该车辆在停车场的位置是:
%d\n"
Enter->
top);
\n\t\t\t请输入该车辆到达的时间:
reachtime));
Enter->
stack[Enter->
top]=p;
else/*车场已满,车进便道*/
{printf("
\n\t\t\t停车场已满该车辆需在便道上等待!
"
getchar();
t=(QueueNode*)malloc(sizeof(QueueNode));
t->
data=p;
W->
rear->
next=t;
rear=t;
voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)/*车辆离开*/
{inti,room;
CarNode*p,*t;
QueueNode*q;
/*判断车场内是否有车*/
top>
0)/*有车*/
{while
(1)/*输入离开车辆的信息*/
\t\t\t停车场里停放的车辆总数:
\n\n\t\t\t请输入要离开车辆的位置:
room);
if(room>
room<
=Enter->
top)
while(Enter->
room)/*车辆离开*/
{Temp->
Temp->
stack[Temp->
top]=Enter->
top];
top--;
p=Enter->
while(Temp->
=1)
top]=Temp->
PRINT(p);
/*判断通道上是否有车及车站是否已满*/
if((W->
=W->
rear)&
Enter->
MAX)/*便道的车辆进入车场*/
{q=W->
next;
t=q->
data;
\n\n\t\t\t便道的%d号车进入车场第%d位置."
t->
num,Enter->
\n\n\t\t\t请输入现在的时间:
(t->
next=q->
if(q==W->
rear)
rear=W->
top]=t;
free(q);
\n\n\t\t\t便道里没有车.\n"
\n\n\t\t\t车场里没有车."
/*没车*/
voidList1(SeqStackCar*S)/*列表显示车场信息*/
if(S->
0)/*判断车站内是否有车*/
\n\t\t\t车场:
\n\n\t\t\t位置到达时间车牌号\n"
for(i=1;
=S->
top;
%26d"
i);
%6d"
S->
stack[i]->
%10d"
else
\n\t\t\t车场里没有车"
voidList2(LinkQueueCar*W)/*列表显示便道信息*/
{QueueNode*p;
p=W->
if(W->
rear)/*判断通道上是否有车*/
\n\t\t\t等待车辆的号码为:
while(p!
%-10d"
data->
p=p->
\n\t\t\t便道里没有车."
voidList(SeqStackCarS,LinkQueueCarW)
{intflag,tag;
flag=1;
while(flag)
\n\t\t\t请选择1|2|3:
\n\n\t\t\t1.车场\n\n\t\t\t2.便道\n\n\t\t\t3.返回\n\n\t\t\t"
tag);
if(tag>
=1||tag<
=3)break;
elseprintf("
switch(tag)
List1(&
S);
break;
/*列表显示车场信息*/
List2(&
W);
/*列表显示便道信息*/
flag=0;
七、实验结果及分析
系统初始化页面
进入系统选择菜单页面
车辆到达页面
停车场已满,进入便道等待页面
车辆离开页面
停车场已满,当有车离开时,便道上的车进入停车场页面
查看车辆信息页面
八、实验体会与收获
(自己的体会,200字以上;
每人一份)
这个停车场管理系统是利用栈来完成车的入库问题,利用队列完成车在便道上的停放问题,在
查看车场内的车辆信息页面
查看便道内的车辆信息页面
本次课程设计使我受益非浅,在老师的带领下,我能够系统地去了解每一部分功能模块,了解每一段程序代码,并能够完成停车场模拟管理的主要功能,并利用栈完成车的入库问题,利用队列完成车在便道上的停放问题,在学习数据结构的时候,对栈和队列的使用,初始化,调用等问题,如何把它们实际化,运用其去解决一些生活中的实际问题,从而加深理解,通过这次课程设计,是对课本一次系统的复习和实践,是对系统开发的一次体验,一次学习,也可以说是对C语言的一次复习和运用,把学习数据结构知识,运用到程序算法中去,完善程序,优化程序,以解决实际问题。
在设计的过程中,遇到了很多问题,车牌的类型,当设为字符型,只能输出单个字符,并不能输出字符串,例如:
输入“陕A666”当按%s输出时,程序运行遇到问题关闭,当按%c输出时,只能输出一个字符,前面关于车牌的定义类型为“char”型。
因此在这个程序里面车牌号设为int型,只能输入数字。
通过画流程图,进一步加深和熟悉了功能图,算法图的描述与制作,为代码的编写提供了良好的依据。
在老师悉心的指导下,我顺利地完成了本次课程设计,并取得了很大的收获,对以后的软件开发奠定了一定的基础!