数据结构课程设计报告停车场管理系统c++Word下载.docx
《数据结构课程设计报告停车场管理系统c++Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告停车场管理系统c++Word下载.docx(42页珍藏版)》请在冰豆网上搜索。
编写课程设计说明书和验收(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*cl);
(3)各模块之间的调用关系以及算法设计
下图是个模块之间的调用关系(如图2-1):
进入主页面
客户界面
停车场管理员界面
存车
界面
取车
返回主页
初始停车场
一个客户
每天收入
客户信息
车辆
信息
退出
输入车牌号
满
显示车位,客户选择
车牌有效
显示凭据
客户留言
否
是
注:
在取、存操作后,会自动保存信息到car.dat中。
在每次退出系统时,会保存list.dat和temp.dat。
图2-1模块调用关系
第三章、详细设计
实现概要设计中定义的所有数据类型,对主要操作写出实现算法,对主程序和其他模块写出算法,写出函数的调用关系。
第一节、数据类型
structCar
{
charlicense[8];
intfloor;
intpnumber;
intptime;
intempty;
//标志位,有车为1,无车为0
};
structSnode
//车牌号
Datedate;
//停车的时刻
intptimecount;
//本次停车总时间
floatcost;
charnote[100];
//顾客留言
Snode*next;
structUser
charid[10];
charname[10];
charpassword[10];
structDate
charday[11];
charshike[9];
charweekday[10];
CarCars[FLOOR][PNUMBER];
链表,保存所有客户的信息,包括车已取走,和车未取走的。
typedefstructSnodeCustList;
第二节、主要操作
(1)存车:
pnumber)
//输入车牌号,判断车牌号的有效性
cout<
<
"
请输入车牌号:
;
charlicen[8];
cin>
>
licen;
while((!
licen)||(strlen(licen)!
=7))
{
cout<
输入有误!
请重新输入车牌号:
cin>
}
//查看是否有重复
while
(1)
if(IsSame(cars,licen)==1)
{
cout<
已经存在这辆车,请重新输入:
endl;
cin>
}
elsebreak;
//判断车场是否已经满了
//查看是否有空位,并显示。
便于客户选择
inti,j;
if(IsFull(cars)==1)
已经没有空车位了,谢谢惠顾!
正在跳转到顾客界面。
。
return0;
intsign=1;
//sign标志第几层有空位0表一,1表二
您可以选择的车位"
----------------------------"
cout.setf(ios:
:
left);
cout.width(8);
楼层"
车位号"
for(i=0;
i<
FLOOR;
i++)
{if(sign==0)break;
for(j=0;
j<
PNUMBER;
j++)
{if((cars[i][j].empty==0)&
&
(i==0))
{
sign=0;
cout.setf(ios:
cout.width(8);
cout<
i+1;
j+1<
if(j==PNUMBER-1){break;
}
}
elseif((cars[i][j].empty==0)&
(i==1))
inttemf;
请输入车位号:
temf;
if((cars[sign][temf-1].empty==0)&
(temf>
=1&
temf<
=6))
//修改一个车位的信息
cars[sign][temf-1].empty=1;
floor=cars[sign][temf-1].floor=sign+1;
pnumber=cars[sign][temf-1].pnumber=temf;
strcpy(cars[sign][temf-1].license,licen);
strcpy(license,licen);
cars[sign][temf-1].ptime=0;
//修改整个停车场的信息
for(i=0;
{
for(j=0;
{
if(cars[i][j].empty==1)
cars[i][j].ptime+=5;
}
break;
else{
输入有误!
请输入车位号"
return1;
(2)取车:
ptime,charnote[100])
//判断车位是否已空
if(IsEmpty(cars)==1)
停车场已没有车停放!
请确定您是否停车。
return;
//查找车位
//标志位,车库有该车为1,没有赋值为零,初始值为0
while(sign)
for(i=0;
{
for(j=0;
if(strcmp(cars[i][j].license,license)==0)
{
sign=0;
floor=i;
pnumber=j;
ptime=cars[i][j].ptime;
if(sign)
您刚才输入的车牌号不存在!
请重新输入:
license;
}
if(sign==0)
车已找到,请稍等。
strcpy(note,"
0000000000"
);
floor+=1;
pnumber+=1;
//system("
cls"
//延时
100000000;
i++);
//车出库,将车位空出
cars[floor-1][pnumber-1].floor=0;
cars[floor-1][pnumber-1].pnumber=0;
cars[floor-1][pnumber-1].ptime=0;
cars[floor-1][pnumber-1].empty=0;
strcpy(cars[floor-1][pnumber-1].license,"
"
//由于floor,pnumber与实际的二位数组有区别,加1
第四章、测试与分析
进行系统测试,输出测试结果。
测试数据应该全面、完整,并对测试结果进行分析。
第一节、调试过程中的主要问题
由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使用了清屏函数,所以,运行时用户选择任务并且执行完任务后,又会回到供用户选择功能的主界面,因此整个程序从整体上来讲结构清晰,使用方便。
本程序的调试运行,总体上情况良好,但中间也出现了一些小问题。
其中比较有代表性的主要问题有:
第二节、测试结果的分析与讨论
1主界面(如图4-1)
图4-1系统主界面
2客户界面(如图4-2)
图4-2客户界面
3存车(如图4-3)
图4-3存车界面
4取车(如图4-4)
图4-4取车界面
5管理员界面(如图4-5)
图4-5管理员界面
第五章、用户使用说明
1、进入主界面
2、选择:
(1)客户界面;
(2)停车场管理员界面;
(3)退出;
3、进入客户界面
(1)、停车,填写车牌号等信息然后返回;
(2)、取车,输入车牌号和自己的信息,出示凭据,可以进行评价,然后返回主页;
4、进入停车场管理员界面
(1)、查看停车场初始化信息;
(2)、选择车辆,查看它的详细信息;
(3)、进一步查看客户的信息;
(4)、清点一天的收入;
(5)、返回主页,退出;
第六章、总结
在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情的方法和技巧。
在设计过程中,和同学们相互探讨,相互学习。
我学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世,这次课程设计对我来说受益良多。
课程设计是我们专业课程知识综合应用的实践训练,这是我们迈向社会,从事职业工作前一个必不少的过程.“千里之行始于足下”通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
我这次设计的科目是数据结。
数据结构,是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算所得到的新结构仍然是原来的结构类型。
作为一门独立的课程在国外是从1968年才开始设立的。
1968年美国唐欧克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作“数据结构”在计算机科学中是一门综合性的专业基础课。
数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。
数据结构这一门课的容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序