停车场管理模拟系统.docx
- 文档编号:8243126
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:21
- 大小:318.76KB
停车场管理模拟系统.docx
《停车场管理模拟系统.docx》由会员分享,可在线阅读,更多相关《停车场管理模拟系统.docx(21页珍藏版)》请在冰豆网上搜索。
停车场管理模拟系统
课程设计说明书
课程名称数据结构课程设计
教学部工学一部
专业计算机科学与技术
停车场管理模拟系统
目录
1.绪论1
2.系统分析2
2.1数据需求2
2.2功能需求2
2.3性能需求2
3.总体设计2
3.1功能模块设计2
3.2系统设计方案4
4.详细设计5
4.1页面设计模块5
4.2主要功能模块6
5.调试与测试9
5.1调试9
5.2测试9
参考文献10
附录1-用户手册11
附录2-源程序15
摘要
随着计算机科学的迅速发展,计算机已深入到人类社会的各个领域,它的应用已不再局限于科学计算,以解决一些数学问题,而且可以解决一些抽象化的具体问题,更多地用于控制,管理及数据处理等非数值计算的处理工作,这便为我们的日常生活提供了很多的方便,譬如停车场管理模拟系统。
。
停车场管理模拟的问题,实际上就是数据结构中堆栈和队列的问题,用堆栈模拟停车场,用队列模拟便道。
而计算停车费用的时间也可以用顺序表来存储。
本文从分析课题的题目背景、题目意义、题目要求等出发,分别从系统需求,总体设计、详细设计、调试测试等方面介绍了系统的设计与实现过程,最后对系统的完成情况进行了总结。
关键词:
堆栈 队列 停车场
1.绪论
随着科技的发展,计算机操做的智能化也运用到我们的停车场管理模拟系统。
根据课程设计任务书要求,本系统开发主要完成以下功能和性能。
(1)比赛信息录入:
比赛信息包括对阵方、结果、日期、地点、进球者等;
(2)比赛信息查询:
查询比赛信息,系统可以根据使用者的条件查
询对应的比赛信息。
(3)比赛信息增,删,改:
用户可以需要对比赛信息操作。
2.系统分析
2.1数据需求
本系统主要是足球小组赛成绩信息管理的系统。
(1)足球比赛信息录入:
比赛信息包括对阵方、结果、日期、地点、进球者等;
(2).查询比赛信息:
.按比赛日期查询;
.按比赛对阵方查询;
(3).修改比赛信息:
按比赛信息对阵方、结果、日期、地点、进球者等依次进行修改;
(4).打印比赛信息:
将六场比赛按场依次排列出来;
(6).显示排行榜:
按比赛积分从高到低依次排列;
2.2功能需求
本系统有比赛信息的录入,比赛日期、对阵方查询查询,比赛信息的增加,比赛信息的删除,比赛结果自动判断得分并显示积分排行榜。
2.3性能需求
在运行本程序时只要按照正确的操作方法就能正常运行,系统稳定性好,安全,可靠。
3.总体设计
3.1功能模块设计
根据分析整个系统主要划分为6个功能模块,分别执行要求中的功能。
该系统比赛信息录入,比赛日期、对阵方查询查询,比赛信息的增加,比赛信息的删除,比赛结果自动判断得分并显示积分排行榜,退出系统。
图一功能模块设计图
3.2系统设计方案
(1)两个栈和一个队列。
根据题目要求,停车场只有一个大门,因此可用一个栈来模拟:
当栈满后,继续来到的车辆只能停在便道上,根据便道停车的特点,可知这可以用一个队列来模拟,先排队的车辆先离开便道,进入停车场。
由于排在停车场中间的车辆可以提出离开停车场,并且要求在离开车辆到停车场大门之间的车辆都必须先离开停车场,让此车离开,然后让这些车辆依原来的次序进入停车场,因此在一个栈和一个队列的基础上,还需要用一个栈来保存为了让路离开停车场的车辆。
所以本题要用两个栈和一个队列。
(2)操作:
栈:
进栈:
车辆进入
出栈:
车辆离开
查找:
允许排中间的车辆先离开停车场,因此需要在栈中进行查找。
(3)队列:
进队:
车辆进入
出队:
车辆离开
查找:
允许排中间的车辆先离开停车场,因此需要在队中进行查找。
(2)数据结构
建立结构体如下:
1.函数:
voidIncar()车辆x进入停车场
voidOutcar()车辆x离开停车场
voidDisplay()显示停车场的状况
2.一系列算法:
intDelQueue_L(LQueue*q)
voidEnQueue_L(LQueue*q,intnum1)
voidInitQueue_L(LQueue*q)
ELEMTPPop_Sq(SqStack*s)
intPush_Sq(SqStack*s,ELEMTPx)
voidInitStack_Sq(SqStack*s)
3.主程序:
main(){
初始化;
do{
选择工作项目;
switch(字符)
{
case'1':
内容;
case'2':
内容;
while(条件)
{
判断输入时间合法性
};
调用车辆进入的函数;
case'3':
内容;
while(条件)
{
判断输入时间合法性
};
调用车辆离开的函数;
case'4':
程序结束
default:
输入数据错误
}
}
while(条件);
4.详细设计
4.1页面设计模块
此系统界面采用图形和数字化菜单设计。
主界面设计如下:
足球比赛信息管理系统主系统请选择相应的数字执行相应的功能:
0:
退出此系统
1:
比赛信息录入
2:
查询比赛信息
3:
修改比赛信息
4:
打印比赛信
5:
显示排行榜
各子界面如下:
1.比赛信息录入界面:
请选择相应的数字执行相应的功能:
10:
返回主菜单
11:
按比赛信息对阵方、结果、日期、地点、进球者等比赛信息录入
2.查询比赛信息界面:
请选择相应的数字执行相应的功能:
10:
返回主菜单
11:
比赛信息查询
请输入需要查询的比赛日期:
`3、修改比赛信息界面:
请选择相应的数字执行相应的功能:
20:
返回主菜单
21:
修改比赛
按比赛信息对阵方、结果、日期、地点、进球者等比赛信息进行修改
``4、打印比赛信管理:
请选择相应的数字执行相应的功能:
30:
返回主菜单
31:
比赛信息打印
依次打印比赛信息
5、显示排行榜:
40:
返回主菜单
41:
比赛积分排行榜
4.2主要功能模块
(1)主程序框图
(2)查询比赛信息
(3)修改比赛信息
(4)打印比赛信
5.调试与测试
5.1调试
(1)运行完程序一次有错误提醒
原因是上次运行程序后没有关闭操作界面当点击编译时会有一个错误提示,解决方法:
将上一次运行时的操作界面关闭。
(2)程序不能运行
程序运行到添加足球比赛信息时自动提示错误需要调试,其原因是指针指向的位置出现错误导致程序传参错乱无法运行,解决办法:
使程序进入调试状态在传参出现错误的位置一句一句查找传递的参数是否是你所希望的,如若不是就加以修正。
5.2测试
(1)输出用于循环检查语句中的足球比赛信息,发现乱码。
(2)仔细分析乱码的原因,最后发现是变量的类型错误,错将读者类型的结构体指针变量定义为了图书类型的指针变量。
6.结论
课程设计顺利完成,任务书中所提出的要求全部实现。
本系统使用C语言作为开发工具实现比赛信息的录入,查询,增,删,改及比赛结果自动判断得分。
不过这个程序还有些不够完善,还有待改进。
结束语
通过这次课程设计,我对复杂程序的开发有了一个深刻的认识,使我进一步明白了模块化思想在程序开发中的重要性。
两个星期的C语言综合课程设计实习终于顺利完成,在这期间真正的学到了一些经验,能够熟练的掌握一些C语言的编程思路,能够熟练的运用学到的函数,意识到编程并不是一件很简单的事情,知道学习编程必须亲自动手去做,只有自己做的程序才能找出错误,这样才能真正的达到目的。
当程序编写完成而且能够正常运行心里非常高兴,虽然这对于一名程序员来说可能非常简单,但对我来说,如果要想在编程方面能够有所发展的话,我面临的困难还很多,要继续加强,努力,达到一种较高的水平。
7.参考文献
谭浩强.C语言程序设计(第三版).北京:
清华大学出版社2005
附录1-用户手册
点击运行,首先是进入比赛信息输入界面,可进行如图1所示。
图1进入比赛信息输入界面
进入图书查询功能系统,可进行如图3所示。
图2显示排行榜
输入1回车进入查询比赛功能系统,可进行如图3所示。
图3比赛信息查询
输入2回车进入查询比赛功能系统,可进行如图4所示。
图4比赛信息修改
附录2-源程序
#include
#include
#include
#defineN2//停车场容量----------------
#defineM0.05//--------停车场内每分钟单价--------
#defineO0.02//--------便道每分钟停车单价--------
#defineTrue1
#defineFalse0;
typedefstructtime
{
inthour;
intmin;
}Time;/*时间结点*/
typedefstruct
{
timehh,mm;
intnum;//--------车牌号--------------------
intarrtime;//--------到达/离开时间-------------
}ELEMTP;//--------顺序栈的数据元素类型------
typedefstruct
{
ELEMTPelem[N];
inttop;
}SqStack;//--------顺序栈类型----------------
typedefstructnode
{
intnum;//--------车牌号/便道上的车辆数量---
structnode*next;
}QNode;//--------链队列的数据元素类型------
typedefstruct
{
QNode*front,*rear;
}LQueue;//--------链队列类型----------------
voidInitStack_Sq(SqStack*s);//--------初始化栈------------------
intPush_Sq(SqStack*s,ELEMTPx);//--------入栈----------------------
ELEMTPPop_Sq(SqStack*s);//--------出栈----------------------
voidInitQueue_L(LQueue*q);//--------初始化队列----------------
voidEnQueue_L(LQueue*q,intnum1);//--------入队列--------------------
intDelQueue_L(LQueue*q);//--------出队列--------------------
voidIncar(SqStack*s1,LQueue*q,ELEMTPx){//--------车辆x进入停车场-----------
intf;
f=Push_Sq(s1,x);
if(f==0){//--------停车场栈s1已满入便道q-----
EnQueue_L(q,x.num);
cout<<"车牌号为"< } else cout<<"车牌号为"< };//--------Incar-------- voidOutcar(SqStack*s1,SqStack*s2,LQueue*q,ELEMTPx,ELEMTPy){ doubleMoney;//--------车辆x离开停车场 intn,f,A1,A2,B1,B2; QNode*p; f=0; while((s1->top>0)&&(f! =1)){//--------在栈s1中寻找车辆x y=Pop_Sq(s1); if(y.num! =x.num)n=Push_Sq(s2,y); elsef=1; } if(y.num==x.num){//--------寻找到车辆x------ //-----------收费计算------------------ A1=x.hh.hour; A2=y.hh.hour; B1=x.mm.min; B2=y.mm.min; Money=((A1-A2)*60+B1-B2)*M; cout<<"车牌号为"< while(s2->top>0){//--------将栈s2中的车辆倒回到栈s1中-- y=Pop_Sq(s2); f=Push_Sq(s1,y); } n=DelQueue_L(q); if(n! =NULL){//--------便道q上的第一辆车入栈s1------ y.num=n; y.arrtime=x.arrtime; f=Push_Sq(s1,y); cout<<"便道上车牌为"< } } else{//--------栈s1中未找到车辆x-------------- while(s2->top>0){//--------将栈s2中的车辆倒回到栈s1中----- y=Pop_Sq(s2); f=Push_Sq(s1,y); } p=q->front;//--------在便道q上找到车辆x-------------- f=0; while(f==0&&p->next! =NULL) if(p->next->num! =x.num) p=p->next; else{ A1=x.hh.hour; A2=y.hh.hour; B1=x.mm.min; B2=y.mm.min; p->next=p->next->next; q->front->num--; if(p->next==NULL) q->rear=q->front; cout< cout< cout< cout< Money=((A1-A2)*60+B1-B2)*O; cout<<"车牌号为"< f=1; } if(f==0) cout<<"输入数据错误,停车场和便道上均无"< } }//--------Outcar-------- voidDisplay(SqStack*s1,LQueue*q){//--------显示停车场的状况-------- intk;QNode*p; cout<<"停车场状况: "< if(s1->top! =0){ cout<<"车位车牌"< for(k=0;k cout<<""< } elsecout<<"停车场没有车辆"< cout<<"便道状况: "< if(q->front->num){ cout<<"车位车牌"< for(k=1,p=q->front->next;p;p=p->next) cout<<""< } elsecout<<"便道没有车辆"< }//--------Display-------- voidmain() { charch1,ch2; SqStack*s1,*s2; LQueue*q; ELEMTPx,y; s1=(SqStack*)malloc(sizeof(SqStack)); s2=(SqStack*)malloc(sizeof(SqStack)); q=(LQueue*)malloc(sizeof(LQueue)); InitStack_Sq(s1); InitStack_Sq(s2); InitQueue_L(q); cout<<"-----------------------停车场管理程序----------------------\n"; do{ cout<<"1--查看停车场状况2--车辆到达3--车辆离开4--程序结束\n"; cout<<"请选择: "; cin>>ch1; switch(ch1) { case'1': Display(s1,q); cout<<"---------------------------------------------------------------\n"; break; case'2': cout<<"输入车牌号: "; cin>>x.num; cout<<"输入时间(hh: mm)"; cin>>x.hh.hour; cin>>ch2; while(ch2! =': ') { cout<<"输入到达时间(小时: 分钟)"; cin>>x.hh.hour; cin>>ch2; }; while(ch2! =': '); cin>>x.mm.min; Incar(s1,q,x); cout<<"---------------------------------------------------------------\n"; break; case'3': cout<<"输入车牌号: "; cin>>x.num; cout<<"输入离开时间(hh: mm)"; cin>>x.hh.hour; cin>>ch2; while(ch2! =': ') { cout<<"输入离开时间(小时: 分钟)"; cin>>x.hh.hour; cin>>ch2; }; while(ch2! =': '); cin>>x.mm.min; Outcar(s1,s2,q,x,y); cout<<"---------------------------------------------------------------\n"; break; case'4': cout<<"程序结束"< break; default: cout<<"输入数据错误,重新输入"<<"\n\n\n"; cout<<"---------------------------------------------------------------\n"; break; cin>>ch1; } } while(ch1! ='4'); }//--------main-------- voidInitStack_Sq(SqStack*s)//--------初始化栈------------------ { s->top=0; } intPush_Sq(SqStack*s,ELEMTPx)//--------入栈---------------------- { if(s->top==N) return(0); else { s->elem[s->top]=x;s->top++; return (1); } } ELEMTPPop_Sq(SqStack*s)//--------出栈---------------------- { ELEMTPx; if(s->top==0) { x.num=NULL; x.arrtime=NULL; return(x); } else { s->top--; return(s->elem[s->top]); } } voidInitQueue_L(LQueue*q)//--------初始化队列---------------- { q->front=(QNode*)malloc(sizeof(QNode)); q->rear=q->front; q->front->next=NULL; q->front->num=0; } voidEnQueue_L(LQueue*q,intnum1)//--------入队列-------------------- { QNode*p; p=(QNode*)malloc(sizeof(QNode)); p->num=num1; p->next=NULL; q->rear->next=p; q->rear=p; q->front->num++; } intDelQueue_L(LQueue*q)//--------出队列-------------------- { QNode*p; intn; if(q->front==q->rear) return(NULL); else { p=q->front->next; q->front->next=p->next; if(p->next==NULL) q->rear=q->front; n=p->num; free(p); q->front->num--; return(n); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理 模拟 系统