停车场管理系统.docx
- 文档编号:23864405
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:23
- 大小:166.57KB
停车场管理系统.docx
《停车场管理系统.docx》由会员分享,可在线阅读,更多相关《停车场管理系统.docx(23页珍藏版)》请在冰豆网上搜索。
停车场管理系统
辽宁工业大学
目录
第1章课程设计目的与要求1
1.1设计目的1
1.2实验环境1
1.3预备知识1
1.4设计要求1
第2章课程设计内容2
2.1课题描述2
2.2系统设计2
2.2.1功能分析2
2.2.2面向对象设计2
2.2.2类成员描述4
2.3程序实现5
2.3.1源码分析5
2.3.2运行结果12
第3章总结14
参考文献15
第1章课程设计目的与要求
1.1设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
1.2实验环境
硬件要求能运行Windows操作系统的微机系统。
C++语言应用程序开发软件使用:
VC++系统,或其他C++语言应用程序开发软件。
1.3预备知识
熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。
1.4设计要求
1.仔细分析设计题目,画出程序流程图,编写程序源代码。
2.积极上机调试源程序,增强编程技巧与调程能力。
3.认真书写课程设计预习报告,课程设计说明书。
4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。
第2章课程设计内容
2.1课题描述
该系统是一个停车场管理系统,主要功能包括:
车辆到达,到达车辆的车牌,到达车场的时间,车辆离开的时间,选择车辆行驶的路径,退出系统等,所有车辆信息都必须进行文档存储,以备不时之需,数量掌握函数及指针等操作。
2.2系统设计
2.2.1功能分析
1.停车场数据由多条数据组成包括:
车辆进入时间,车辆离开时间,进入车场的车牌,车辆选择的路径。
2数据保存形式:
所有车辆数据要以文本或二进制文件保存。
3需要实现的功能
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:
汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
对每一组输入数据进行操作后的输出信息为:
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
栈以顺序结构实现,队列以链表结构实现。
4界面功能要求:
(1)采用友好的字符界面,实现一个功能控制菜单。
(2)每次操作都从该菜单选择,利用循环结构使得一次运行程序可进行多次操作。
2.2.2面向对象设计
本课题里有四个类:
car、carstack、parkingmanagement、carqueue
car
+doubletime
+intnumber
carstack
+intempty()
+intfull()
+inttop
parkingmanagement
+intparkingmanagement
+parkingmanagement:
void
+inti;
carqueue
+intfull()
+intpushqueue
+intpopqueue
+popstack:
void
+arrival:
void
+Leave:
void
+deletequeue:
void
+intpopstacknumber
+doublepopstacktime
UML图
继承与派生
总体流程图
2.2.2类成员描述
Car类的公有成员有:
Time:
进站时间
Number:
进站车牌
carstack类的公有成员有:
empty():
车场无车
full():
车场满无空位
top:
最大容车数量
parkingmanagement类的公有成员有:
parkingmanagement:
停车函数
inti:
第几台车辆
carqueue类的公有成员有:
full():
车场内无空位
pushqueue:
车队数量
popqueue:
出对数量
popstack:
进队数量
arrival:
到达函数
Leave:
离开函数
deletequeue:
删除对函数
popstacknumber:
进入对函数
main函数流程图
2.3程序实现
2.3.1源码分析
#include
usingnamespacestd;
constintMax=2;//车库最大容量
constdoubleprice=30;//每小时的费用
classcar//车的信息类
{
public:
doubletime;//计费时间
intnumber;//车牌号
car*next;//存放car类型元素的数组初始地址
};
classcarstack//栈(停车场)的类
{
friendclassparkingmanagement;//parkingmanagement能访问carstack类中所有成员
public:
carstack();//构造函数,栈的初始化
intempty();//判断栈是否为空
intfull();//判断栈是否为满
car*s;//存放car类型栈元素的数组初始地址
inttop;//栈顶指针
};
classcarqueue//队列(便道)的类
{
friendclassparkingmanagement;//parkingmanagement能访问carstack类中所有成员
public:
carqueue();//构造函数,队列的初始化
intfull();//判断队列是否为满
car*front,*rear;//存放car类型队列元素的数组初始地址
};
classparkingmanagement
{
public:
intpushstack(carstack&cs,intcnum,doublectime);//入栈,cs栈内进行调整,返回栈内位置
voidpopstack(carstack&cs,intcnum);//出栈,cs栈内进行调整,
//根据车牌号把车弹出栈,将出栈car的number赋值给intpopstacknumber()
//将出栈car的time赋值给doublepopstacktime(),无返回值!
intpushqueue(carqueue&cq,intcnum,doublectime);//入队,队内进行调整,返回队内位置
intpopqueue(carqueue&cq);//出队,队内进行调整,返回汽车车牌号
voidarrival(carstack&cs,carqueue&cq,intcnum,doublectime);//车辆到达,
//根据输入的车牌号、到达时间,变更函数参数;并cout车位信息
voidleave(carstack&cs,carqueue&cq,intcnum,doublectime);//车辆离开,
//根据输入的车牌号找到汽车,并进行出栈操作、出队操作和入栈操作;
//并cout停留时间和收费情况
voiddeletequeue(carqueue&cq,inti);//删除cq过道中第i辆车
intpopstacknumber;//专门存放出栈的时候返回的车牌号
doublepopstacktime;//专门存放出栈的时候返回的时刻
};
carstack:
:
carstack()//构造函数,栈的初始化
{
top=-1;
s=newcar[Max];//创建car类型栈元素的数组
if(s==NULL)
{
cout<<"栈空间分配不成功!
"< exit (1); } } intcarstack: : full()//判断栈是否为满 { returntop==Max-1; } carqueue: : carqueue()//构造函数,队列的初始化 { rear=front=NULL; } intparkingmanagement: : pushstack(carstack&cs,intcnum,doublectime)//入栈,cs栈内进行调整,返回栈内位置 { if(cs.top==Max-1)//Max从1开始,top从0开始 { cout<<"停车场已满! "< returnMax; } else { cs.top++; (cs.s[cs.top]).number=cnum;//将cnum赋给栈顶位置的车的车牌号,s是car类型栈元素的数组 (cs.s[cs.top]).time=ctime;//将ctime赋给栈顶位置的车的入栈时间,s是car类型栈元素的数组 return(cs.top+1);//返回栈内位置加1,即停车场内车位从1号开始 } } voidparkingmanagement: : popstack(carstack&cs,intcnum)//出栈,cs栈内进行调整, //根据车牌号把车弹出栈,将出栈car的number赋值给intpopstacknumber //将出栈car的time赋值给doublepopstacktime,无返回值! { inti; carp; carstackstemp;//定义一个carstack类型的临时存放出栈元素的栈 for(i=0;i<=cs.top;i++) if((cs.s[i]).number==cnum)break;//当要出栈的车的车牌号=栈内的车牌号元素时,跳出循环 p=cs.s[i];//将要出栈的元素赋给car类型的p存放 while(cs.top>i) stemp.s[++(stemp.top)]=cs.s[(cs.top)--];//出栈的元素数组逐个赋给临时栈 popstacknumber=p.number;//将这个车牌号信息传给intpopstacknumber() popstacktime=p.time;//将该车的时间信息传给doublepopstacktime() cs.top--;//栈顶指针回到原来位置 while(stemp.top>=0) cs.s[++(cs.top)]=stemp.s[(stemp.top)--];//临时栈出栈的元素逐个赋给原栈,完成先退再进的工作 } intparkingmanagement: : pushqueue(carqueue&cq,intcnum,doublectime)//入队,队内进行调整,返回队内位置 { car*p,*countp; intcount (1);//count用于记录车在过道上的位置信息,因队列为链式的,所以进行循环累加 p=newcar;//创建一个car类型的指针 p->number=cnum; p->time=ctime; p->next=NULL;//首先将指向存放car类型元素的数组初始地址置空 if(cq.front==NULL)//第一次入队要判断头结点是否为空 { cq.front=cq.rear=p; } else {//尾插法插入元素 p->next=(cq.rear)->next; (cq.rear)->next=p; cq.rear=(cq.rear)->next; } countp=(cq.front)->next; while(countp! =NULL) { count++; countp=countp->next; }//count即车在过道上的位置,【从1开始计! ! ! 】 returncount; } intparkingmanagement: : popqueue(carqueue&cq)//出队,队内进行调整,返回汽车车牌号 { carp; p.number=((cq.front)->next)->number;//cq队里,从cq.front开始指向下一个元素的车牌号赋给car类型的车信息 p.time=((cq.front)->next)->time;//cq队里,从cq.front开始指向下一个元素的时刻 //赋给car类型的车信息 p.next=((cq.front)->next)->next;//cq队里,从cq.front开始指向下一个元素的指针 //赋给car类型的车信息的下一个元素的指针 returnp.number; cq.front=(cq.front)->next; } voidparkingmanagement: : arrival(carstack&cs,carqueue&cq,intcnum,doublectime) //车辆到达,根据输入的车牌号、到达时间,变更函数参数;并cout车位信息 { intpos; if(! (cs.full()))//如果栈未满,车辆停入停车场 { intfl(0),i;//定义一个从0开始的标记fl for(i=0;i<=cs.top;i++) { if(cs.s[i].number==cnum)//如果到达的车的车牌号=栈内已有车辆的车牌号 { fl=1;//fl记1 break; } } if(fl==1)//如果到达的车的车牌号! =栈内已有车辆的车牌号 cout<<"输入错误! 请重新输入! "< else { pos=pushstack(cs,cnum,ctime);//入栈,返回车位信息 cout<<"该停车场还有空位,请到"< cout< } } else//如果栈满,车辆暂停便道 { pos=pushqueue(cq,cnum,ctime);//入队,返回车位信息 cout<<"该停车场已满,请将车停到便道"< cout< } } voidparkingmanagement: : leave(carstack&cs,carqueue&cq,intcnum,doublectime) {//车辆离开,根据输入的车牌号找到汽车,并进行出栈操作、出队操作和入栈操作;并cout停留时间和收费情况 inti,flag(0),pstack,count (1),outcarnum; doublehour; car*p; for(i=0;i<=cs.top;i++) if((cs.s[i]).number==cnum) { flag=1; break; } if(flag)//如果输入的车牌号与栈内已有车辆的车牌号一致 { popstack(cs,cnum);//出栈操作 hour=ctime-popstacktime;//时间计算 outcarnum=popqueue(cq);//将便道上的第一辆车出队,入栈。 并将其车牌号赋给outcarnum pstack=pushstack(cs,outcarnum,ctime);//将便道上的第一辆车,入栈 cout<<"该车在本停车场内停留时间为"< "< } else//如果输入的车牌号与队列里已有车辆的车牌号一致 { p=cq.front; while(p! =NULL) { count++;//如果在过道中找到该车,则该车的位置为过道中的第count位置(count从1开始) p=p->next; if(p->number==cnum)//在过道中找到要出去的车,则在队列中删除该car。 //后面的车辆依然顺序排列,补足空位 { deletequeue(cq,count); if(count>Max) { cout<<"您的车在便道上的位置为"< "< break; } } } if(p==NULL) cout<<"您的车不在本停车场内,或输入有误,请重新输入! "< } } voidparkingmanagement: : deletequeue(carqueue&cq,inti) { car*p,*q; intj(0); p=cq.front; while(p&&j { p=p->next; j++; }//找到第i个节点(i从1开始) if(! p||! p->next) cout<<"i不合法"; else { q=p->next; p->next=q->next; deleteq; } } voidprint() { cout<<"==================================="< cout<<"=欢迎光临! ="< cout<<"=="< cout<<"=本停车场收费标准为: 30元/小时;车库容量为: 2="< cout<<"=="< cout<<"=请输入您的泊车信息: 格式为: (到达/离去/退出);车牌号;现在时刻="< cout<<"=其中,A: 到达;D: 离去;E: 退出系统="< cout<<"==================================="< } //*******调试程序******设n=2,输入数据为: (A,1,5),(A,2,15),********************************* //*********************(A,3,20),(A,4,25),(A,5,30),*********************************** //*********************(D,2,35),(D,4,40),(E,0,0)。 ************************************ //*********************其中: A表示到达(Arrival);D表示离去(Departure);E表示输入结束(End)。 *** voidmain() { characc; intcarnum; doublecartime; parkingmanagementpark; carstackcars; carqueuecarq; while (1) { print(); cin>>acc>>carnum>>cartime; if(acc=='A') park.arrival(cars,carq,carnum,cartime); elseif(acc=='D') park.leave(cars,carq,carnum,cartime); elseif(acc=='E') break; else cout<<"您的输入有误,请重新输入! "< } } 2.3.2运行结果 第3章总结 经过这几天的课程设计让我颇有体会.这其中不仅让我运用了这半年所学的知识,也从中体会到了自己学习上的不足,如果想学好C++程序设计还需要加强。 随着计算机技术的快速发展和广泛应用,人类进入了信息化社会。 在各行各业的信息化建设进程中,以可视化编程为核心的信息系统开发至关重要。 掌握扎实的C++编程基础理论和熟练的VC++的MFC编程是开发高质量信息系统的基础。 这次我做了贸易公司管理系统,在制作学习的过程中掌握了将贸易公司管理信息系统数据库设计和规范化的方法。 在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。 每一个问题都让我知道自己学习上的不足,那方面该加强,哪方便做的应该更加完善。 通过这次课程设计让我们对所学的知识得到了充分的利用;理解软件工具和创作活动的关系;形成良好的电脑设计习惯,了解软件和硬件相互作用的基本规律,学会合理的利用软硬件资源,让我们掌握VC++设计程序的方法和步骤。 提高了我们的动手能力,增强了我的自信心,今天的成果都离不开老师对我的帮助,感谢老师对我的耐心指导。 参考文献 [1]安平野.MFC编程基础.北京: 电子工业出版社.2006 [2]艾娜.C++编程学习.北京: 清华大学出版社.2008 [3]李秀芝.C++语言程序设计.辽宁: 机械电子出版社.2005 [4]崔氏海.C++编程思想.北京: 机械工业出版社.2005 [5]郑强.C/C++程序设计.北京: 中国铁道出版社.2003 [6]朱琳.C++基础学习.辽宁: 辽宁教育出版社.2007 [7]周瑞昌、佟冬冬.MFC编程基础教程.沈阳: 沈阳工业出版社.2007 [8]赵博、红蕾.C++程序设计教程.北京: 机械工业出版社.2009 [9]周闯、正英顺.C++语法参考教程.北京: 机械工业出版社.2006 [10]韩基群.C++编程程序设计及数据应用.北京: 清华大学出版社.2004
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理 系统