数据结构课程设计停车场管理系统c_第1页
数据结构课程设计停车场管理系统c_第2页
数据结构课程设计停车场管理系统c_第3页
数据结构课程设计停车场管理系统c_第4页
数据结构课程设计停车场管理系统c_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、内蒙古科技大学数据结构课 程 设 计题目 停车场管理器设计 院 系 信息工程学院 专 业 计算机科学与技术 姓 名 马小强 学 号 1167111103 指 导 教 师 康懿 2013年7月5日内蒙古科技大学课程设计任务书课程名称数据结构课程设计设计题目停车场管理器设计指导教师康懿时间2013.6.242013.7.5一、教学要求1. 掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工

2、作者所应具备的科学的工作方法和作风二、设计资料及参数每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。停车场管理器设计以结构体类型表示停车时间和车辆信息,在此基础上借助栈完成对车辆的入场和出场操作,借助队列完成辅助停车场便道,即存放等待入场车辆或辅助车场中的某辆车出场。要求设计类(或类模板)来描述栈、队列、停车场及其操作,包含必要的构造函数和析构函数,以及其他能够完成如下功能的成员函数:v 压栈、退栈v 入队列、出队列v 车辆到场(有车位即入场,否则入便道等待)、车辆出场(任意位置车辆均可出场)v 查询车辆信息、输出停车场(包括停车位和便道的车辆) 并设计主函数测试

3、该类。三、设计要求及成果1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告四、进度安排资料查阅与讨论(1天)系统分析(2天)系统的开发与测试(5天)编写课程设计说明书和验收(2天)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。4. 根据答辩的情况,应能够以清晰的思路和准确、简练的语言叙述自己的设计和回答教师的提问六、建议参考资料1数据结构 (C语

4、言版)严蔚敏、吴伟民 主编 清华大学出版社 2004.112数据结构课程设计案例精编(用C/C+描述),李建学 等 编著,清华大学出版社 2007.23.数据结构:用面向对象方法与C+语言描述,殷人昆 主编, 清华大学出版社 2007.6目录目录2第一章、需求分析3第一节、问题描述3第二节、基本要求3第二章、概要设计4第一节、设计思想4第二节、数据结构4第三节、程序模块5第三章、详细设计8第一节、数据类型8第二节、主要操作9第四章、测试与分析14第一节、调试过程中的主要问题14第二节、测试结果的分析与讨论14第五章、用户使用说明18第六章、总结18第七章、发现问题及错误分析20第一节

5、、逻辑错误函数20第二节、修改前得代码20第三节、错误描述20第四节、解决方案如下22第八章、参考文献23附录代码:24第一章、需求分析根据题目要求,充分地分析和理解问题,描述系统的功能要求,明确问题要求做什么?以及限制条件是什么?第一节、问题描述随着我国人民生活水平提高和汽车工业的高速发展越来越多的家庭拥有了汽车,但受到土地的限制,所以采用立体停车场是解决停车难的必然出路。立体停车场占地少,容量大利用效率高;泊车与取车全自动化,省时省力,安全防盗。本文主要以两层停车场为例,设计一能完成存车与取车的停车场系统。有一个两层的停车场, 每层有6个车位, 当第一层车停满后才允许使

6、用第二层. ( 停车场可用一个二维数组实现, 每个数组元素存放一个车牌号 ) 每辆车的信息包括车牌号、 层号、 车位号、停车时间共4项, 其中停车时间按分钟计算 。假设停车场初始状态为第一层已经停有4辆车, 其车位号依次为14 , 停车时间依次为20, 15, 10 , 5 . 即先将这四辆车的信息存入文件”car.dat”中( 数组的对应元素也要进行赋值 ) 。  停车操作:当一辆车进入停车场时

7、, 先输入其车牌号, 再为它分配一个层号和一个车位号, 停车时间设为5 , 最后将新停入的汽车的信息添加文件”car.dat”中, 并将在此之前的所有车的停车时间加5。收费管理(取车): 当有车离开时, 输入其车牌号, 先按其停车时间计算费用, 每5分钟0.2元. (停车费用可设置一个变量进行保存), 同时从文件”car.dat”中删除该车的信息, 并将该车对应的车位设置为可使用状态(即二维数组对应元素清零). 按用户的选择来判断是否要输出停车收费的总计。

8、第二节、基本要求输入的形式和输入值的范围程序以车牌号作为车主的身份验证,以真实的汽车车牌号为准,当取车或停车时,需输入车牌号,输入字段长7位。输出的形式用户:当车主存车时,要求显示空闲的车位,方便车主在层内选择(层间要满足,如果第一层有空则必须停在第一层)。当车主取车时,可以根据客户选择,决定是否输出凭据。管理员:能够查询全部车辆的信息。程序所能达到的功能用户存车:包括查找空位,选择车位;用户取车:包括出车,显示凭据。更改停车场的状态。停车场管理员:初始化停车场,查询所有车的停车信息(历史停车信息),进行一定的查询功能。第二章、概要设计第一节、设计思想本停车场有两层, 每层有6个车位

9、, 所以 停车场可用一个二维数组实现,用来描述现停汽车的信息。 每辆车用一结构体表示,包括车牌号、 层号、 车位号、停车时间和停车标志位(标志是否停车)。当车入库时,将更改二维数组的信息,当车出库时,将信息写入car.dat中。再次进入该系统时,还用这个二维数组,来接受car.dat数据的读入,便于用户以后的操作,防止停车信息的流失。此外,由于需要显示所有汽车的停车信息,所以我们又加了一个顾客结构体,一个顾客链表,当存车时,新建用户节点,并使用头插法,插于链表(便于取车时查到用户,补充完整用户的信息),填写用户的相关信息(车牌号,层号,车位号,

10、车入库时刻)。当出库时,查找相应节点,补充完整用户信息,包括(用户留言,停车时间总计,花费)。当退出系统后,将已出库的汽车的车主信息,写入历史文件list.dat中,便于管理员的查询。将还未取走车的车主的信息存入临时文件temp.dat中,防止系统关闭后数据信息的丢失,车主取车时找不到车。第二节、数据结构结构体Car,保存每个车位的停车信息。结构体Snode ,保存每个客户的信息。结构体User,保存管理员信息。结构体Date,保存时间。数组Cars,保存整个停车状况。链表CustList,保存所有客户的信息,包括车已取走,和车未取走的。第三节、程序模块(1)此停车场管理系统,主要分为以下若干

11、模块:首先定义用来模拟停车的数组,用来保存顾客信息的链表,保存管理员信息的结构以及全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。在主函数中首先调用option()函数,出现欢迎用户使用的界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的主界面(包括顾客界面和停车场管理员管理界面)。当用户选择顾客界面时,跳入到顾客界面,再次界面,用户可以选择存车、取车及返回主页面。在用户的选择过程中,程序又分别存车,取车函数调用以及退出程序这三个函数模块。其中,当存车时,调用了显示空闲车位状态的信息函数,并调用了保存car.dat的函数;当取车时,调用显示本次停车情况以及消费金额

12、的函数, 并调用了保存car.dat的函数。最后,在主界面选择“退出”,保存历史文件list.dat和临时文件temp.dat。当用户选择车管系统时,调用管理员身份验证函数,从而跳入车管界面,然后相应的功能函数,实现查询所有停车信息。(2)在以上各个模块中,出现的调用的函数为:/ 客 户 void Customer(Car carsFLOORPNUMBER);void CustomerNote(char note100,CustList *cl);/存车int Enterpark(Car carsFLOORPNUMBER,char *license,int &floor,int &am

13、p;pnumber);void GetDate(Date &date);bool IsFull(Car carsFLOORPNUMBER);bool IsSame(Car carsFLOORPNUMBER,char *license);/取车int CarOutMenu(char license,int &floor,int &pnumber,int &ptime,float &cost,char note100);bool IsEmpty(Car carsFLOORPNUMBER);void Print(char license,int floor,i

14、nt pnumber,int ptime,float &cost);void Leavepark(Car carsFLOORPNUMBER,char license,int &floor,int &pnumber,int &ptime,char note100);/-后台管理-void Manage(Car carsFLOORPNUMBER); /保存到car.datvoid Savecars(Car carsFLOORPNUMBER);void FourCarIn(Car CarsFLOORPNUMBER); /初始停车场int UsertestAdd();/

15、管理员身份验证void Load(Car carsFLOORPNUMBER); /加载文件void Loadfile(Car carsFLOORPNUMBER,char license8,int floor,int pnumber,int ptime,int empty);void Showcars(Car carsFLOORPNUMBER,CustList *cl); /显示停车场现存车void Message(CustList *clr); /显示客户信息void News();/发布消息void Income(CustList *cl,char day,float &amount

16、); /一些查询void CheckOneCar(CustList *clr,char *license);/后台中关于单链表的void InitCustList(CustList *&cl);void InsertToFirst(CustList *cl,char *license,int floor,int pnumber,Date date);void InsertToLst(CustList *cl,char *license,int floor,int pnumber,int ptime,float cost,Date date);void SearchCust(CustLi

17、st *&cl,char *license,float cost,int ptimecount,char note);void SaveListTemp(CustList *cl);/保存到temp.datvoid SaveList(CustList *cl); /保存到list.datvoid DeleteAll(CustList *cl);void ReadFromList(CustList *cl);void LoadList(CustList *clr);void DeleteByNote(CustList *cl);(3)各模块之间的调用关系以及算法设计下图是个模块之间的调用

18、关系(如图2-1):退出停车场管理员界面显示凭据客户留言返回主页输入车牌号退出退出显示车位,客户选择车牌有效输入车牌号退出一个客户每天收入客户信息车辆信息初始停车场返回主页存车界面取车界面客户界面进入主页面否是满注:在取、存操作后,会自动保存信息到car.dat中。在每次退出系统时,会保存list.dat和temp.dat。图2-1模块调用关系第三章、详细设计实现概要设计中定义的所有数据类型,对主要操作写出实现算法,对主程序和其他模块写出算法,写出函数的调用关系。第一节、数据类型结构体Car,保存每个车位的停车信息。struct Carchar license8;int floor;int p

19、number;int ptime;int empty;/标志位,有车为1,无车为0;结构体Snode ,保存每个客户的信息。struct Snodechar license8;/车牌号Date date;/停车的时刻int floor;int pnumber;int ptimecount;/本次停车总时间float cost;char note100;/顾客留言Snode *next;结构体User,保存管理员信息。struct Userchar id10;char name10;char password10;结构体Date,保存时间。struct Datechar day11;char s

20、hike9;char weekday10;数组Cars,保存整个停车状况。Car CarsFLOORPNUMBER;链表,保存所有客户的信息,包括车已取走,和车未取走的。typedef struct Snode CustList;第二节、主要操作(1)存车:int Enterpark(Car carsFLOORPNUMBER,char *license,int &floor,int &pnumber)/输入车牌号,判断车牌号的有效性cout<<"请输入车牌号:"char licen8;cin>>licen;while(!licen)|

21、(strlen(licen)!=7)cout<<"输入有误!请重新输入车牌号:"cin>>licen;/查看是否有重复while(1)if(IsSame(cars,licen)=1)cout<<"已经存在这辆车,请重新输入:"<<endl;cin>>licen;else break;/判断车场是否已经满了/查看是否有空位,并显示。便于客户选择int i,j;if(IsFull(cars)=1)cout<<"已经没有空车位了,谢谢惠顾!正在跳转到顾客界面。"<

22、<endl;return 0;int sign=1;/sign 标志第几层有空位0表一,1表二cout<<"您可以选择的车位"<<endl;cout<<"-"<<endl;cout.setf(ios:left);cout.width(8);cout<<"楼层"cout.width(8);cout<<"车位号"cout<<endl;for(i=0;i<FLOOR;i+)if(sign=0) break;for(j=0;j&

23、lt;PNUMBER;j+) if(carsij.empty=0)&&(i=0)sign=0;cout.setf(ios:left);cout.width(8);cout<<i+1;cout.width(8);cout<<j+1<<endl;if(j=PNUMBER-1) break;else if(carsij.empty=0)&&(i=1)cout.setf(ios:left);cout.width(8);cout<<i+1;cout.width(8);cout<<j+1<<endl;c

24、out<<"-"<<endl;int temf;cout<<"请输入车位号:"cin>>temf;while(1)if(carssigntemf-1.empty=0)&&(temf>=1&&temf<=6)/修改一个车位的信息carssigntemf-1.empty=1;floor=carssigntemf-1.floor=sign+1;pnumber=carssigntemf-1.pnumber=temf;strcpy(carssigntemf-1.licens

25、e,licen);strcpy(license,licen);carssigntemf-1.ptime=0;/修改整个停车场的信息for(i=0;i<FLOOR;i+)for(j=0;j<PNUMBER;j+)if(carsij.empty=1)carsij.ptime+=5;break;else cout<<"输入有误!请输入车位号"<<endl;cin>>temf;return 1;(2)取车:void Leavepark(Car carsFLOORPNUMBER,char license,int &floor,i

26、nt &pnumber,int &ptime,char note100)/判断车位是否已空if(IsEmpty(cars)=1) cout<<"停车场已没有车停放!请确定您是否停车。"<<endl;return;/查找车位int sign=1;/标志位,车库有该车为1,没有赋值为零,初始值为0int i,j;while(sign)for(i=0;i<FLOOR;i+)for(j=0;j<PNUMBER;j+)if(strcmp(carsij.license,license)=0)sign=0;floor=i;pnumber

27、=j;ptime=carsij.ptime;if(sign)cout<<"您刚才输入的车牌号不存在!"<<endl;cout<<"请重新输入:"cin>>license;if(sign=0) cout<<"车已找到,请稍等。"<<endl;strcpy(note,"0000000000");floor+=1;pnumber+=1;/system ("cls");/延时for(i=0;i<100000000;i+);/车

28、出库,将车位空出carsfloor-1pnumber-1.floor =0;carsfloor-1pnumber-1.pnumber =0;carsfloor-1pnumber-1.ptime=0;carsfloor-1pnumber-1.empty=0;strcpy(carsfloor-1pnumber-1.license," ");/由于floor,pnumber与实际的二位数组有区别,加1第四章、测试与分析进行系统测试,输出测试结果。测试数据应该全面、完整,并对测试结果进行分析。第一节、调试过程中的主要问题由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使

29、用了清屏函数,所以,运行时用户选择任务并且执行完任务后,又会回到供用户选择功能的主界面,因此整个程序从整体上来讲结构清晰,使用方便。本程序的调试运行,总体上情况良好,但中间也出现了一些小问题。其中比较有代表性的主要问题有:第二节、测试结果的分析与讨论 主界面(如图4-1)图4-1系统主界面 客户界面(如图4-2)图4-2客户界面 存车(如图4-3)图4-3存车界面 取车(如图4-4)图4-4取车界面 管理员界面(如图4-5)图4-5管理员界面第五章、用户使用说明1、 进入主界面2、 选择:(1)客户界面; (2)停车场管理员界面; (3)退出;3、进入客户界面(1)、停车,填写车牌号等信息然后

30、返回;(2)、取车,输入车牌号和自己的信息,出示凭据,可以进行评价,然后返回主页;4、进入停车场管理员界面(1)、查看停车场初始化信息;(2)、选择车辆,查看它的详细信息;(3)、进一步查看客户的信息;(4)、清点一天的收入;(5)、返回主页,退出;第六章、总结在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情的方法和技巧。在设计过程中,和同学们相互探讨,相互学习。我学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世,这次课程设计对我来说受益良多。课程设计是我们专业课程知识综合应用的实践训练,这是我们迈向社会,从事职业工作前一

31、个必不少的过程“千里之行始于足下”通过这次课程设计,我深深体会到这句千古名言的真正含义我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。我这次设计的科目是数据结。数据结构,是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算所得到的新结构仍然是原来的结构类型。作为一门独立的课程在国外是从1968年才开始设立的。1968年美国唐欧克努特教授开创了数据结构的最初体系,他所著的计算机程序设计技巧第一卷基本算法是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作“数据结构”在计算机

32、科学中是一门综合性的专业基础课。数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数据结构这一门课的内容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。一、积累了宝贵的经验我这次课程设计代码中主要使用了链表的循环和遍历这两中操作。循环链表(Circular Linked List)是单链表的另一种形式,它是一个首尾相接的链表。其特点是将单链表最后一个结点的指针域由NULL改为指向头结点或线性表中的第一个结点,就得到了单链形式的循环链表,并称为循环单链表。类似地,还有多重链的循环链表。在循环单链表中,表中

33、所有结点被链在一个环上,多重循环链表则是将表中的结点链在多个环上。为了使某些操作实现起来方便,在循环单链表中也可设置一个头结点。这样,空循环链表仅由一个自成循环的头结点表示。所谓遍历(Traversal),是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。这次课程设计我选中的题目是个人资料的管理。编写了一个可以简易使用的个人资料管理系统,可以进行资料的输入和管理。虽然在我的程序中有一部分是从网上搜索得来的,但我已经竭力将所获得的信息变成自己的资源,动手上机操作,在了解和看懂的基础上有所改变和创新,但是在的程序软件中还有部分的不足,需要加以更

34、新。仅管,我并没能很好的利用所学数据结构的知识,但我也尽了自己最大的努力用我所学来完成这次的课程设计。同时,通过这次课程设计,我认识到了自己动手实践的弱势,特别是在编程方面,知道了计算机的实践操作是很重要的,只有通过上机编程才能充分的了解自己的不足。二、对以后的学习充满了信心和期待通过这次的课程设计,更是让我深刻认识到自己在学习中的不足,同时也找到了克服这些不足的方法,这也是一笔很大的资源。在以后的时间中,我们应该利用更多的时间去上机实验,加强自学的能力,多编写程序,相信不久后我们的编程能力都会有很大的提高能设计出更多的更有创新的作品。第七章、发现问题及错误分析第一节、逻辑错误函数void L

35、oadfile(Car cars26,char license10,int floor,int pnumber,int ptime,int empty )函数的功能是在每次运行程序时,加载车库里原来已经存在的还没有储库的车第二节、修改前得代码void Loadfile(Car cars26,char license10,int floor,int pnumber,int ptime,int empty ) if(!license)return;int j=0; while(cars0j.empty !=0)j+;strcpy(cars0j.license,license);cars0j.flo

36、or =floor;cars0j.pnumber =pnumber;cars0j.ptime =ptime;cars0j.empty =empty;第三节、错误描述这个函数有问题,(每次读入都是按00,01,02,03,04顺序加载,一个一个的,从而造成了两个问题:车库“假满现象” 和“删除后重新加载时只能按顺序加载 ”),同时不够简练,重用性不高。错误的一种结果:“假满现象”:1.并且上限只能加载第一层的六个车位,第七次调用该函数时就会报错原来车库已经存储的 六 辆车(如图7-1):图7-1错误报告第七辆车来时虽然可以停车,保存之后 ,但是下次加载车库中七条数据时就会发生溢出错误 (如图7-

37、2、图7-3)图7-2溢出错误(1) 图7-3溢出错误(2)错误的另一种种结果:2.假设文件原来的保存的车停信息位(0,0)(0,3)(1,0)(1,2)经过加载后,(0,0)保存在00;(0,3)保存在02;(1,0)保存在03;(1,2)保存在04;即只能顺序加载(如图7-4、图7-5)图7-4加载错误(1) 图7-5加载错误(2)第四节、解决方案如下void Loadfile(Car cars26,char license10,int floor,int pnumber,int ptime,int empty ) if(!license)return;strcpy(carsfloor-1

38、pnumber-1.license,license);carsfloor-1pnumber-1.floor =floor;carsfloor-1pnumber-1.pnumber =pnumber;carsfloor-1pnumber-1.ptime =ptime;carsfloor-1pnumber-1.empty =empty;第八章、参考文献1数据结构 (C语言版)严蔚敏、吴伟民 主编 清华大学出版社 2004.112 数据结构课程设计案例精编(用C/C+描述),李建学 等 编著,清华大学出版社 2007.23. 数据结构:用面向对象方法与C+语言描述,殷人昆 主编, 清华大学

39、出版社 2007.6附录代码:#include <iostream.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#define FLOOR 2#define PNUMBER 6struct Carchar license10;int floor;int pnumber;int ptime;int empty;/标志位,有车为1,无车为0;/顾客信息节点struct Customerchar license10;/车牌号char d

40、ate64;/停车的时刻int ptimecount;/本次停车总时间float cost;char note100;/顾客留言Customer *next;/顾客信息链表typedef Customer CustList;/管理员struct Userchar id10;char name10;char password10;int UsertestAdd();void Load(Car cars26);void Loadfile(Car cars26,char license10,int floor,int pnumber,int ptime,int empty);void FourCar

41、In(Car Cars26);void Enterpark(Car cars26);void Showcars(Car cars26);void Savecars(Car cars26);bool IsEmpty(Car cars26);void Print(char license,int floor,int pnumber,int ptime,float &cost);void Leavepark(Car cars26,char license,int &floor,int &pnumber,int &ptime,float &cost,char n

42、ote100);void CarOutMenu(char license,int &floor,int &pnumber,int &ptime,float &cost,char note100);void Manage(Car cars26);void InitCustList(CustList *&cl);void CreateCustList(CustList *&cl,char *license);void GetDate(char tmp64);void SearchCust(CustList *&cl,char *license

43、,float cost,int pcount);void Customer(Car cars26);void CustomerNote(char note100);void EachGuideInfor(Car c);/游客个人信息的自我查询void EachGuideInfor(Car c)cout.setf(ios:left);cout.width(10);cout<<"车牌号"cout.width(8);cout<<"楼层"cout.width(8);cout<<"车位号"cout.width

44、(8);cout<<"停车开始时间"<<endl;cout.setf(ios:left);cout.width(10);cout<<c.license;cout.width(8);cout<<c.floor;cout.width(8);cout<<c.pnumber;cout.width(8);cout<<c.ptime<<endl;/顾客留言void CustomerNote(char note100)cout<<"请留言:"cin>>note;

45、/存车void Enterpark(Car cars26)cout<<"input your license"<<endl;char licen10;cin>>licen;while(!licen)cout<<"input your license"<<endl;cin>>licen;/判断车库是否已经满了,顺便将原来的ptime加5int i,j;for(i=0;i<2;i+)for(j=0;j<6;j+)if(carsij.empty=1)carsij.ptime +

46、=5;elsecarsij.floor =i+1;carsij.pnumber =j+1;carsij.ptime=5;carsij.empty=1;strcpy(carsij.license,licen);return; /如果使用break,则只能跳出单层循环,/显示停车信息/cout<<"显示停车信息?(Y:是,N:否)"<<endl;/cout<<"请选择:"/char a;/cin>>a;/if(a='Y')/EachGuideInfor(cars);/取车void Leavepa

47、rk(Car cars26,char license,int &floor,int &pnumber,int &ptime,float &cost,char note100)/判断车位是否已空if(IsEmpty(cars)=1) cout<<"停车场已没有车停放!请确定您是否停车。"<<endl;return;/查找车位int sign=1;/标志位,车库有该车为1,没有赋值为零,初始值为0int i,j;while(sign)for(i=0;i<2;i+)for(j=0;j<6;j+)if(strcmp

48、(carsij.license,license)=0)sign=0;floor=i;pnumber=j;ptime=carsij.ptime;if(sign)cout<<"您刚才输入的车牌号不存在!"<<endl;cout<<"请重新输入:"cin>>license;if(sign=0) cout<<"车已找到,请稍等。"<<endl;floor+=1;pnumber+=1;/system ("cls");/延时for(i=0;i<100

49、0000000;i+);/车出库,将车位空出carsfloor-1pnumber-1.floor =0;carsfloor-1pnumber-1.pnumber =0;carsfloor-1pnumber-1.ptime=0;carsfloor-1pnumber-1.empty=0;strcpy(carsfloor-1pnumber-1.license," ");/由于floor,pnumber与实际的二位数组有区别,加1/取车的菜单项void CarOutMenu(char license,int &floor,int &pnumber,int &

50、ptime,float &cost,char note100)cout<<"1 输出凭据"<<endl;cout<<"2 留言"<<endl;cout<<"3 直接退出"<<endl;while(1)cout<<"请选择:"int i;cin>>i;if(i<1|i>3)cout<<"您的操作非法!"<<endl;continue;switch(i)case

51、 1:cout<<"-现有汽车停车信息-"<<endl;Print(license,floor,pnumber,ptime,cost);break;case 2:CustomerNote(note);break;case 3:break;if(i=1|i=2) continue;else break;/得到当前时间void GetDate(char tmp64)time_t t = time( 0 ); strftime(tmp, sizeof(tmp), "%Y/%m/%d %X %A",localtime(&t) );

52、bool IsEmpty(Car cars26)int i,j;for(i=0;i<2;i+)for(j=i;j<6;j+)if(carsij.empty=1) return false;return true;/逐条添加记录到car.dat中void Savecars(Car cars26)FILE* fp = fopen("car.txt","wb");if(fp=NULL)cout<<"Can not open this file"<<endl;return;/to fileCar car;i

53、nt i=0;int j=0;while(i<2)while(j<6)if(carsij.empty =1)car.floor =carsij.floor ;strcpy(car.license ,carsij.license );car.pnumber =carsij.pnumber ;car.ptime =carsij.ptime ; car.empty=carsij.empty ;/fwrite(&cars,sizeof(car),1,fp); / 如果写成这样,每次都从car00地址开始写入,回报原来的内容覆盖掉,加深了我对fwrite()的理解fwrite(&am

54、p;car,sizeof(car),1,fp);j+;i+;fclose(fp);void Load(Car cars26)FILE* fp = fopen("car.txt","rb");if(fp=NULL)cout<<"can not open this file"<<endl;return;Car car;int n;while(!feof(fp)/read one car informationn = fread(&car,sizeof(car),1,fp);if(n!=1)break;/cout<<car.license <<" "<<car.floor <<" "<<car.pnumber <<" "<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论