数据结构课程设计报告及源代码.docx
- 文档编号:6149271
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:14
- 大小:119.61KB
数据结构课程设计报告及源代码.docx
《数据结构课程设计报告及源代码.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告及源代码.docx(14页珍藏版)》请在冰点文库上搜索。
数据结构课程设计报告及源代码
《数据结构》课程设计报告
系别:
班级:
学号:
实训日期:
《数据结构课程设计》实验报告
开课实验室:
2010年11月27日
班级
学号
姓名
成绩
课程
名称
数据结构
实验项目
名称
停车场管理
指导
教师
教
师
评
语
教师签名:
年月日
一、实验目的
1、通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固。
2、通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
3、通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
4、通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。
5、通过课程设计,开发一个中小型系统,掌握系统研发全过程。
6、通话课程设计,培养分析问题、解决实际问题的能力。
二、功能要求
设计一个停车场管理系统,模拟停车场的运作,通过此程序具备以下功能:
1、要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的数据序列进行模拟管理
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
#include
#include
#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项目:
停车场管理系统");
printf("\n\t\t\t专业:
信息管理与信息系统");
printf("\n\t\t\t班级:
B080502");
printf("\n\t\t\t学号:
B08050210");
printf("\n\t\t\t姓名:
蒙开华");
printf("\n\t**********************************************************\n");
printf("\t1.车辆到达--12.车辆离开--23.车辆信息--34.退出程序--4\n");
printf("\t**********************************************************\n");
printf("\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)
{
printf("\n\n\t\t\t1.车辆到达请选择1");
printf("\n\n\t\t\t2.车辆离开请选择2");
printf("\n\n\t\t\t3.车辆信息请选择3");
printf("\n\n\t\t\t4.退出程序请选择4");
printf("\n\n\t\t\t现在请选择以上信息:
");
while
(1)
{scanf("%d",&ch);
printf("\n");
if(ch>=1&&ch<=4)break;
else
printf("\n\t\t\t错误!
请再次做出选择!
\n\n\t\t\t");
}
switch(ch)
{case1:
Arrival(&Enter,&Wait);break;/*车辆到达*/
case2:
Leave(&Enter,&Temp,&Wait);break;/*车辆离开*/
case3:
List(Enter,Wait);break;/*列表打印信息*/
case4:
exit(0);/*退出主程序*/
default:
break;}
}
}
/*------------------------------------------------------------------------------*/
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)/*打印出站车的信息*/
{intA1,A2;
printf("\n\t\t\t请输入离开时间:
");
scanf("%d",&(p->leavetime));
printf("\n\t\t\t离开车辆的车牌号:
%d",p->num);
printf("\n\n\t\t\t离开车辆到达时间:
%d",p->reachtime);
printf("\n\n\t\t\t离开车辆离开时间:
%d",p->leavetime);
A1=p->reachtime;
A2=p->leavetime;
printf("\n\n\t\t\t停车场管理费用:
%d",(A2-A1)*price);
free(p);
}
intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/
{CarNode*p;
QueueNode*t;
p=(CarNode*)malloc(sizeof(CarNode));
flushall();
printf("\t\t\t请输入到达车辆车牌号:
");
scanf("%d",&(p->num));
if(Enter->top {Enter->top++; printf("\n\t\t\t该车辆在停车场的位置是: %d\n",Enter->top); printf("\n\t\t\t请输入该车辆到达的时间: "); scanf("%d",&(p->reachtime)); Enter->stack[Enter->top]=p; return (1); } else/*车场已满,车进便道*/ {printf("\n\t\t\t停车场已满该车辆需在便道上等待! "); getchar(); 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)/*车辆离开*/ {inti,room; CarNode*p,*t; QueueNode*q; /*判断车场内是否有车*/ if(Enter->top>0)/*有车*/ {while (1)/*输入离开车辆的信息*/ {printf("\t\t\t停车场里停放的车辆总数: %d",Enter->top); printf("\n\n\t\t\t请输入要离开车辆的位置: "); scanf("%d",&room); if(room>=1&&room<=Enter->top) break; } while(Enter->top>room)/*车辆离开*/ {Temp->top++; Temp->stack[Temp->top]=Enter->stack[Enter->top]; Enter->stack[Enter->top]=NULL; Enter->top--; } p=Enter->stack[Enter->top]; Enter->stack[Enter->top]=NULL; Enter->top--; while(Temp->top>=1) {Enter->top++; Enter->stack[Enter->top]=Temp->stack[Temp->top]; Temp->stack[Temp->top]=NULL; Temp->top--; } PRINT(p); /*判断通道上是否有车及车站是否已满*/ if((W->head! =W->rear)&&Enter->top {q=W->head->next; t=q->data; Enter->top++; printf("\n\n\t\t\t便道的%d号车进入车场第%d位置.",t->num,Enter->top); printf("\n\n\t\t\t请输入现在的时间: "); scanf("%d",&(t->reachtime)); W->head->next=q->next; if(q==W->rear) W->rear=W->head; Enter->stack[Enter->top]=t; free(q); } else printf("\n\n\t\t\t便道里没有车.\n"); } else printf("\n\n\t\t\t车场里没有车.");/*没车*/ } voidList1(SeqStackCar*S)/*列表显示车场信息*/ {inti; if(S->top>0)/*判断车站内是否有车*/ {printf("\n\t\t\t车场: "); printf("\n\n\t\t\t位置到达时间车牌号\n"); for(i=1;i<=S->top;i++) {printf("%26d",i); printf("%6d",S->stack[i]->reachtime); printf("%10d",S->stack[i]->num); printf("\n"); } } else printf("\n\t\t\t车场里没有车"); } voidList2(LinkQueueCar*W)/*列表显示便道信息*/ {QueueNode*p; p=W->head->next; if(W->head! =W->rear)/*判断通道上是否有车*/ {printf("\n\t\t\t等待车辆的号码为: "); while(p! =NULL) {printf("%-10d",p->data->num); p=p->next; } printf("\n"); } else printf("\n\t\t\t便道里没有车."); } voidList(SeqStackCarS,LinkQueueCarW) {intflag,tag; flag=1; while(flag) {printf("\n\t\t\t请选择1|2|3: "); printf("\n\n\t\t\t1.车场\n\n\t\t\t2.便道\n\n\t\t\t3.返回\n\n\t\t\t"); while (1) {scanf("%d",&tag); if(tag>=1||tag<=3)break; elseprintf("\n\t\t\t请选择1|2|3: "); } switch(tag) {case1: List1(&S);break;/*列表显示车场信息*/ case2: List2(&W);break;/*列表显示便道信息*/ case3: flag=0;break; default: break; } } } 七、实验结果及分析 系统初始化页面 进入系统选择菜单页面 车辆到达页面 停车场已满,进入便道等待页面 车辆离开页面 停车场已满,当有车离开时,便道上的车进入停车场页面 查看车辆信息页面 八、实验体会与收获 (自己的体会,200字以上;每人一份) 这个停车场管理系统是利用栈来完成车的入库问题,利用队列完成车在便道上的停放问题,在 查看车场内的车辆信息页面 查看便道内的车辆信息页面 八、实验体会与收获 本次课程设计使我受益非浅,在老师的带领下,我能够系统地去了解每一部分功能模块,了解每一段程序代码,并能够完成停车场模拟管理的主要功能,并利用栈完成车的入库问题,利用队列完成车在便道上的停放问题,在学习数据结构的时候,对栈和队列的使用,初始化,调用等问题,如何把它们实际化,运用其去解决一些生活中的实际问题,从而加深理解,通过这次课程设计,是对课本一次系统的复习和实践,是对系统开发的一次体验,一次学习,也可以说是对C语言的一次复习和运用,把学习数据结构知识,运用到程序算法中去,完善程序,优化程序,以解决实际问题。 在设计的过程中,遇到了很多问题,车牌的类型,当设为字符型,只能输出单个字符,并不能输出字符串,例如: 输入“陕A666”当按%s输出时,程序运行遇到问题关闭,当按%c输出时,只能输出一个字符,前面关于车牌的定义类型为“char”型。 因此在这个程序里面车牌号设为int型,只能输入数字。 通过画流程图,进一步加深和熟悉了功能图,算法图的描述与制作,为代码的编写提供了良好的依据。 在老师悉心的指导下,我顺利地完成了本次课程设计,并取得了很大的收获,对以后的软件开发奠定了一定的基础!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 源代码