数据结构课程设计停车场管理系统c++Word文件下载.docx
《数据结构课程设计停车场管理系统c++Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计停车场管理系统c++Word文件下载.docx(42页珍藏版)》请在冰豆网上搜索。
时间
2013.6.24——2013.7.5
一、教学要求
1.掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力
4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风
二、设计资料及参数
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
以结构体类型表示停车时间和车辆信息,在此基础上借助栈完成对车辆的入场和出场操作,借助队列完成辅助停车场便道,即存放等待入场车辆或辅助车场中的某辆车出场。
要求设计类(或类模板)来描述栈、队列、停车场及其操作,包含必要的构造函数和析构函数,以及其他能够完成如下功能的成员函数:
v压栈、退栈
v入队列、出队列
v车辆到场(有车位即入场,否则入便道等待)、车辆出场(任意位置车辆均可出场)
v查询车辆信息、输出停车场(包括停车位和便道的车辆)
并设计主函数测试该类。
三、设计要求及成果
1.分析课程设计题目的要求
2.写出详细设计说明
3.编写程序代码,调试程序使其能正确运行
4.设计完成的软件要便于操作和使用
5.设计完成后提交课程设计报告
四、进度安排
资料查阅与讨论(1天)
系统分析(2天)
系统的开发与测试(5天)
编写课程设计说明书和验收(2天)
五、评分标准
1.根据平时上机考勤、表现和进度,教师将每天点名和检查
2.根据课程设计完成情况,必须有可运行的软件。
3.根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。
4.根据答辩的情况,应能够以清晰的思路和准确、简练的语言叙述自己的设计和回答教师的提问
六、建议参考资料
1.《数据结构(C语言版)》严蔚敏、吴伟民主编清华大学出版社2004.11
2.《数据结构课程设计案例精编(用C/C++描述)》,李建学等编著,清华大学出版社2007.2
3.《数据结构:
用面向对象方法与C++语言描述》,殷人昆主编,
清华大学出版社2007.6
第一章、需求分析
根据题目要求,充分地分析和理解问题,描述系统的功能要求,明确问题要求做什么?
以及限制条件是什么?
第一节、问题描述
随着我国人民生活水平提高和汽车工业的高速发展.越来越多的家庭拥有了汽车,但受到土地的限制,所以采用立体停车场是解决停车难的必然出路。
立体停车场占地少,容量大.利用效率高;
泊车与取车全自动化,省时省力,安全防盗。
本文主要以两层停车场为例,设计一能完成存车与取车的停车场系统。
有一个两层的停车场,
每层有6个车位,
当第一层车停满后才允许使用第二层.
(
停车场可用一个二维数组实现,
每个数组元素存放一个车牌号
)
每辆车的信息包括车牌号、
层号、
车位号、停车时间共4项,
其中停车时间按分钟计算。
假设停车场初始状态为第一层已经停有4辆车,
其车位号依次为1—4
停车时间依次为20,
15,
10
5
.
即先将这四辆车的信息存入文件”car.dat”中(
数组的对应元素也要进行赋值
)。
停车操作:
当一辆车进入停车场时,
先输入其车牌号,
再为它分配一个层号和一个车位号,
停车时间设为5
最后将新停入的汽车的信息添加文件”car.dat”中,
并将在此之前的所有车的停车时间加5。
收费管理(取车):
当有车离开时,
输入其车牌号,
先按其停车时间计算费用,
每5分钟0.2元.
(停车费用可设置一个变量进行保存),
同时从文件”car.dat”中删除该车的信息,
并将该车对应的车位设置为可使用状态(即二维数组对应元素清零).
按用户的选择来判断是否要输出停车收费的总计。
第二节、基本要求
输入的形式和输入值的范围
程序以车牌号作为车主的身份验证,以真实的汽车车牌号为准,当取车或停车时,需输入车牌号,输入字段长7位。
输出的形式
用户:
当车主存车时,要求显示空闲的车位,方便车主在层内选择(层间要满足,如果第一层有空则必须停在第一层)。
当车主取车时,可以根据客户选择,决定是否输出凭据。
管理员:
能够查询全部车辆的信息。
程序所能达到的功能
用户存车:
包括查找空位,选择车位;
用户取车:
包括出车,显示凭据。
更改停车场的状态。
停车场管理员:
初始化停车场,查询所有车的停车信息(历史停车信息),进行一定的查询功能。
第二章、概要设计
第一节、设计思想
本停车场有两层,
所以
停车场可用一个二维数组实现,用来描述现停汽车的信息。
每辆车用一结构体表示,包括车牌号、
车位号、停车时间和停车标志位(标志是否停车)。
当车入库时,将更改二维数组的信息,当车出库时,将信息写入car.dat中。
再次进入该系统时,还用这个二维数组,来接受car.dat数据的读入,便于用户以后的操作,防止停车信息的流失。
此外,由于需要显示所有汽车的停车信息,所以我们又加了一个顾客结构体,一个顾客链表,当存车时,新建用户节点,并使用头插法,插于链表(便于取车时查到用户,补充完整用户的信息),填写用户的相关信息(车牌号,层号,车位号,车入库时刻)。
当出库时,查找相应节点,补充完整用户信息,包括(用户留言,停车时间总计,花费)。
当退出系统后,将已出库的汽车的车主信息,写入历史文件list.dat中,便于管理员的查询。
将还未取走车的车主的信息存入临时文件temp.dat中,防止系统关闭后数据信息的丢失,车主取车时找不到车。
第二节、数据结构
结构体Car,保存每个车位的停车信息。
结构体Snode,保存每个客户的信息。
结构体User,保存管理员信息。
结构体Date,保存时间。
数组Cars,保存整个停车状况。
链表CustList,保存所有客户的信息,包括车已取走,和车未取走的。
第三节、程序模块
(1)此停车场管理系统,主要分为以下若干模块:
首先定义用来模拟停车的数组,用来保存顾客信息的链表,保存管理员信息的结构以及全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。
在主函数中首先调用option()函数,出现欢迎用户使用的界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的主界面(包括顾客界面和停车场管理员管理界面)。
当用户选择顾客界面时,跳入到顾客界面,再次界面,用户可以选择存车、取车及返回主页面。
在用户的选择过程中,程序又分别存车,取车函数调用以及退出程序这三个函数模块。
其中,当存车时,调用了显示空闲车位状态的信息函数,并调用了保存car.dat的函数;
当取车时,调用显示本次停车情况以及消费金额的函数,并调用了保存car.dat的函数。
最后,在主界面选择“退出”,保存历史文件list.dat和临时文件temp.dat。
当用户选择车管系统时,调用管理员身份验证函数,从而跳入车管界面,然后相应的功能函数,实现查询所有停车信息。
(2)在以上各个模块中,出现的调用的函数为:
//—————————客户————————
voidCustomer(Carcars[FLOOR][PNUMBER]);
voidCustomerNote(charnote[100],CustList*cl);
//存车
intEnterpark(Carcars[FLOOR][PNUMBER],char*license,int&
floor,int&
pnumber);
voidGetDate(Date&
date);
boolIsFull(Carcars[FLOOR][PNUMBER]);
boolIsSame(Carcars[FLOOR][PNUMBER],char*license);
//取车
intCarOutMenu(charlicense[],int&
pnumber,int&
ptime,float&
cost,charnote[100]);
boolIsEmpty(Carcars[FLOOR][PNUMBER]);
voidPrint(charlicense[],intfloor,intpnumber,intptime,float&
cost);
voidLeavepark(Carcars[FLOOR][PNUMBER],charlicense[],int&
ptime,charnote[100]);
//-----------------------后台管理---------------------------
voidManage(Carcars[FLOOR][PNUMBER]);
//保存到car.dat
voidSavecars(Carcars[FLOOR][PNUMBER]);
voidFourCarIn(CarCars[FLOOR][PNUMBER]);
//初始停车场
intUsertestAdd();
//管理员身份验证
voidLoad(Carcars[FLOOR][PNUMBER]);
//加载文件
voidLoadfile(Carcars[FLOOR][PNUMBER],charlicense[8],intfloor,intpnumber,intptime,intempty);
voidShowcars(Carcars[FLOOR][PNUMBER],CustList*cl);
//显示停车场现存车
voidMessage(CustList*clr);
//显示客户信息
voidNews();
//发布消息
voidIncome(CustList*cl,charday[],float&
amount);
//一些查询
voidCheckOneCar(CustList*clr,char*license);
//后台中关于单链表的
voidInitCustList(CustList*&
cl);
voidInsertToFirst(CustList*cl,char*license,intfloor,intpnumber,Datedate);
voidInsertToLst(CustList*cl,char*license,intfloor,intpnumber,intptime,floatcost,Datedate);
voidSearchCust(CustList*&
cl,char*license,floatcost,intptimecount,charnote[]);
voidSaveListTemp(CustList*cl);
//保存到temp.dat
voidSaveList(CustList*cl);
//保存到list.dat
voidDeleteAll(CustList*cl);
voidReadFromList(CustList*cl);
voidLoadList(CustList*clr);
voidDeleteByNote(CustList*