数据结构课程设计报告停车场管理系统c++.docx

上传人:b****6 文档编号:6290048 上传时间:2023-01-05 格式:DOCX 页数:42 大小:91.33KB
下载 相关 举报
数据结构课程设计报告停车场管理系统c++.docx_第1页
第1页 / 共42页
数据结构课程设计报告停车场管理系统c++.docx_第2页
第2页 / 共42页
数据结构课程设计报告停车场管理系统c++.docx_第3页
第3页 / 共42页
数据结构课程设计报告停车场管理系统c++.docx_第4页
第4页 / 共42页
数据结构课程设计报告停车场管理系统c++.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

数据结构课程设计报告停车场管理系统c++.docx

《数据结构课程设计报告停车场管理系统c++.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告停车场管理系统c++.docx(42页珍藏版)》请在冰豆网上搜索。

数据结构课程设计报告停车场管理系统c++.docx

数据结构课程设计报告停车场管理系统c++

科技大学

数据结构

课程设计

题目停车场管理器设计

 

院系信息工程学院

专业计算机科学与技术

姓名马小强

学号1167111103

指导教师康懿

 

2013年7月5日

 

科技大学课程设计任务书

课程名称

数据结构课程设计

设计题目

停车场管理器设计

指导教师

康懿

时间

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位。

输出的形式

用户:

当车主存车时,要求显示空闲的车位,方便车主在层选择(层间要满足,如果第一层有空则必须停在第一层)。

当车主取车时,可以根据客户选择,决定是否输出凭据。

管理员:

能够查询全部车辆的信息。

程序所能达到的功能

用户存车:

包括查找空位,选择车位;用户取车:

包括出车,显示凭据。

更改停车场的状态。

停车场管理员:

初始化停车场,查询所有车的停车信息(历史停车信息),进行一定的查询功能。

第二章、概要设计

第一节、设计思想

本停车场有两层, 每层有6个车位, 所以 停车场可用一个二维数组实现,用来描述现停汽车的信息。

 每辆车用一结构体表示,包括车牌号、 层号、 车位号、停车时间和停车标志位(标志是否停车)。

当车入库时,将更改二维数组的信息,当车出库时,将信息写入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&floor,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&floor,int&pnumber,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模块调用关系

第三章、详细设计

实现概要设计中定义的所有数据类型,对主要操作写出实现算法,对主程序和其他模块写出算法,写出函数的调用关系。

第一节、数据类型

结构体Car,保存每个车位的停车信息。

structCar

{

charlicense[8];

intfloor;

intpnumber;

intptime;

intempty;//标志位,有车为1,无车为0

};

结构体Snode,保存每个客户的信息。

structSnode

{

charlicense[8];//车牌号

Datedate;//停车的时刻

intfloor;

intpnumber;

intptimecount;//本次停车总时间

floatcost;

charnote[100];//顾客留言

Snode*next;

};

结构体User,保存管理员信息。

structUser

{

charid[10];

charname[10];

charpassword[10];

};

结构体Date,保存时间。

structDate

{

charday[11];

charshike[9];

charweekday[10];

};

数组Cars,保存整个停车状况。

CarCars[FLOOR][PNUMBER];

链表,保存所有客户的信息,包括车已取走,和车未取走的。

typedefstructSnodeCustList;

第二节、主要操作

(1)存车:

intEnterpark(Carcars[FLOOR][PNUMBER],char*license,int&floor,int&pnumber)

{

//输入车牌号,判断车牌号的有效性

cout<<"请输入车牌号:

";

charlicen[8];

cin>>licen;

while((!

licen)||(strlen(licen)!

=7))

{

cout<<"输入有误!

请重新输入车牌号:

";

cin>>licen;

}

//查看是否有重复

while

(1)

{

if(IsSame(cars,licen)==1)

{

cout<<"已经存在这辆车,请重新输入:

"<

cin>>licen;

}

elsebreak;

}

//判断车场是否已经满了

//查看是否有空位,并显示。

便于客户选择

inti,j;

if(IsFull(cars)==1)

{

cout<<"已经没有空车位了,谢谢惠顾!

正在跳转到顾客界面。

"<

return0;

}

intsign=1;//sign标志第几层有空位0表一,1表二

cout<<"您可以选择的车位"<

cout<<"----------------------------"<

cout.setf(ios:

:

left);

cout.width(8);

cout<<"楼层";

cout.width(8);

cout<<"车位号";

cout<

for(i=0;i

{if(sign==0)break;

for(j=0;j

{if((cars[i][j].empty==0)&&(i==0))

{

sign=0;

cout.setf(ios:

:

left);

cout.width(8);

cout<

cout.width(8);

cout<

if(j==PNUMBER-1){break;}

}

elseif((cars[i][j].empty==0)&&(i==1))

{

cout.setf(ios:

:

left);

cout.width(8);

cout<

cout.width(8);

cout<

}

}

}

cout<<"----------------------------"<

inttemf;

cout<<"请输入车位号:

";

cin>>temf;

while

(1)

{

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;i

{

for(j=0;j

{

if(cars[i][j].empty==1)

cars[i][j].ptime+=5;

}

}

break;

}

else{

cout<<"输入有误!

请输入车位号"<

cin>>temf;

}

}

return1;

}

(2)取车:

voidLeavepark(Carcars[FLOOR][PNUMBER],charlicense[],int&floor,int&pnumber,int&ptime,charnote[100])

{

//判断车位是否已空

if(IsEmpty(cars)==1)

{

cout<<"停车场已没有车停放!

请确定您是否停车。

"<

return;

}

//查找车位

intsign=1;//标志位,车库有该车为1,没有赋值为零,初始值为0

inti,j;

while(sign)

{

for(i=0;i

{

for(j=0;j

{

if(strcmp(cars[i][j].license,license)==0)

{

sign=0;

floor=i;

pnumber=j;

ptime=cars[i][j].ptime;

}

}

}

if(sign)

{

cout<<"您刚才输入的车牌号不存在!

"<

cout<<"请重新输入:

";

cin>>license;

}

}

if(sign==0)

cout<<"车已找到,请稍等。

"<

strcpy(note,"0000000000");

floor+=1;

pnumber+=1;

//system("cls");

//延时

for(i=0;i<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年美国唐欧克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作“数据结构”在计算机科学中是一门综合性的专业基础课。

数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。

数据结构这一门课的容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1