课程设计之停车场报告1.docx
《课程设计之停车场报告1.docx》由会员分享,可在线阅读,更多相关《课程设计之停车场报告1.docx(22页珍藏版)》请在冰豆网上搜索。
![课程设计之停车场报告1.docx](https://file1.bdocx.com/fileroot1/2022-10/28/ad7727fc-b0fd-4d26-a226-7d62a77790b1/ad7727fc-b0fd-4d26-a226-7d62a77790b11.gif)
课程设计之停车场报告1
****
计算机科学与技术系
课程设计报告
2012~2013学年第1学期
课程
C语言课程设计
课程设计名称
停车场管理系统
学生姓名
**
学号
*******
专业班级
***********
指导教师
****
2013年1月
目录
一、题目及要求-2-
运用到的知识点:
-2-
二、需求分析-3-
三、课程设计目的-3-
四、算法设计-3-
程序框图:
-3-
算法的设计思想-5-
模块作用:
-5-
五、用户手册-9-
六、测试-10-
七、总结-13-
八、参考资料-14-
九、源程序-14-
一、题目及要求
题目:
停车场是一个可停放n辆车的狭长通道,且只有一个大门可供车辆进出。
在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。
若停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可进入。
当停车场内某辆车要离开时,在它之后的进入的车辆必须先退出停车场为它让路,待该车开出大门后,其他车辆再按原次序返回车场。
每辆车离开停车场时,应按其停留时间的长短交费(在便道上的时间不算)
要求:
1、界面友好,函数功能能要划分好
2、总体设计应画一流程图
3、程序要加必要的注释
4、要提供程序测试方案
提示:
模拟上述管理过程,(建议以顺序栈模拟停车场,链队列模拟便道)
从终端读入汽车到达或离开的数据,每组数据包括三项:
(1)到达还是离开
(2)汽车牌号
(3)到达或离开的时刻
与每组输入信息相应的输出信息为:
如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离开的车辆,则输出其在停车场中停留的时间和应交的费用。
运用到的知识点:
◆面向过程程序设计方法
◆界面制作,switch的应用。
◆数组或链表的实现与应用。
◆其他
2、需求分析
由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,问题要求汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列。
由此很容易联想到用栈来存储车库信息。
又每个汽车的车牌号都不一样,这样一来就可以根据车牌号准确找到汽车位置。
当停车场内某辆车要离开时,在他之后进入的汽车必须再按原次序进入车库。
这是一个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个栈,用来暂时存放为出站汽车暂时让道的汽车车牌号。
当车库满后,继续进来的汽车需要停放在车库旁边的便道上等候,若车库满后,继续进来的汽车需要停放在车库旁边的便道上等候,若车有汽车开走,这完全是一个先进先出模型,因此可以设计一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。
另外,停车场是根据汽车在停车场内停放的总长来收费的,在便道上的时间不计费,因此必须记录车辆进入车库时的时间,车辆离开车库时的时间不需要记录,当从终端输入时可直接使用。
三、课程设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。
(6)熟练掌握C语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序
四、算法设计
车场已满,车进便道
程序框图:
以堆栈来模拟停车场和以堆栈里的数据元素设计成汽车的车牌号
初始化车站,初始化让路的临时栈,初始化通道
车场已满,车进便道
车辆到达
车场未满,车进车场
停车场
是否满
输入车子到达时间,车牌号
未满
车进入车场
不做任何计算
无
输入离开车辆的离开时间,
进行停车费用的计算
有
此车后面的车辆退出并进入临时栈
车子离开
算法的设计思想
由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,问题要求汽车停车场内按车辆到达时间的先后顺序,依次排列。
由此很容易联想到数据结构中的堆栈模型,因此可首先设计一个堆栈,以堆栈来模拟停车场,又每个汽车的车牌号都不一样,这样一来可以根据车牌号准确找到汽车位置,所以堆栈里的数据元素设计成汽车的车牌号。
当停车场内某辆车要离开时,在他之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场。
这是个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个堆栈,以之来暂时存放为出站汽车暂时让道的汽车车牌号。
当停车场满后,继续进来的汽车需要停放在停车场旁边的便道上等候,若停车场有汽车开走,则按排队的先后顺序依次进站,最先进入便道的汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。
另外,停车场根据汽车在停车场内停放的总时长来收费的,在便道上的时间不计费,因此必须记录车辆进入停车场时的时间,车辆离开停车场时的时间不需要记录,当从终端输入时可直接使用。
由于时间不象汽车一样需要让道,设计了一个顺序表来存放时间。
又用顺序表用派生法设计了一个堆栈,恰好满足上面模拟停车场的需要。
模块作用:
主函数:
输出主菜单,给出选择,实现菜单中的各项功能。
voidmain()
{Moni_ChekuEnter,Temp;
Moni_BiandaoWait;
intch;
InitStack(&Enter);/*初始化车站*/
InitStack(&Temp);/*初始化让路的临时链表*/
InitQueue(&Wait);/*初始化便道*/
printf("\n");
printf("***欢迎进入停车场管理系统***\n");
printf("\n");
printf("提示!
(1).该车库的最大容量为:
%d;\n",MAX);
printf("
(2).该车库的收费标准为:
%4.2f元/(辆*分钟).\n\n",price);
while
(1)
{printf("**********\n");
printf("*主菜单*\n");
printf("*1车辆到达*\n");
printf("*2车辆离开*\n");
printf("*3列表显示*\n");
printf("*4退出系统*\n");
printf("**********\n");
printf("请选择(1-4):
");
while
(1)
{scanf("%d",&ch);
if(ch>=1&&ch<=4)break;
elseprintf("错误!
请重选(1-4):
");}
switch(ch)
{case1:
Arrival(&Enter,&Wait);break;/*车辆到达*/
case2:
Leave(&Enter,&Temp,&Wait);break;/*车辆离开*/
case3:
List(Enter,Wait);break;/*打印列表信息*/
case4:
exit(0);/*退出主程序*/
default:
break;}}}
车辆到达:
车辆到达时,输入车牌号,判断车场是否已经停满车辆,若停满车辆则该辆车进入便道,若停车场没有停满则允许车辆进入停车场,同时录入到达时间。
intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/
{CarNode*p;
QueueNode*t;
p=(CarNode*)malloc(sizeof(CarNode));
flushall();
printf("\n请输入车牌号(例如:
鄂A1902):
");
gets(p->num);
if(Enter->top{Enter->top++;
printf("\n车辆在车场第%d位置.",Enter->top);
printf("\n请输入到达时间:
/**:
**/");
scanf("%d:
%d",&(p->reach.hour),&(p->reach.min));
Enter->stack[Enter->top]=p;
return
(1);
}
else/*车场已满,车进便道*/
{printf("\n该车须在便道等待!
");
t=(QueueNode*)malloc(sizeof(QueueNode));
t->data=p;
t->next=NULL;
W->rear->next=t;
W->rear=t;
return
(1);}}
车辆离开:
当停车场内某辆车要离开时,在它之后的进入的车辆必须先退出停车场为它让路,待该车开出大门后,其他车辆再按原次序返回车场。
每辆车离开停车场时,输入离开时间,按其停留时间的长短交费。
同时若便道上有车,则便道上的第一辆车进入停车场,进入停车场时输入进入停车场的时间。
voidLeave(Moni_Cheku*Enter,Moni_Cheku*Temp,Moni_Biandao*W)/*车辆离开*/
{introom;
CarNode*p,*t;
QueueNode*q;system("cls");
/*判断车库内是否有车*/
if(Enter->top>0)/*有车*/
{printf("请输入车在车库的位置(1--%d):
",Enter->top);/*输入车辆离开的信息*/
while
(1)
{scanf("%d",&room);
if(room>=1&&room<=Enter->top)break;
elseprintf("错误!
请重选:
");}
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,room);/*判断通道上是否有车及车库是否已满*/
if((W