1、内蒙古科技大学课程设计论文 内蒙古科技大学 数据结构 课 程 设 计 题目停车场管理器设计 院 系 信息工程学院 专业 计算机科学与技术 姓 名 马小强 学 号 1167111103 指 导 教 师 康懿 2013年7月5日 内蒙古科技大学课程设计任务书 课程名称 数据结构课程设计 设计题目 停车场管理器设计 指导教师 康懿 时间 2013。6.24-—2013.7。5 一、教学要求 1。 掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力 2。
2、 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能 3。 提高综合运用所学的理论知识和方法独立分析和解决问题的能力 4。 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风 二、设计资料及参数 每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。 停车场管理器设计 以结构体类型表示停车时间和车辆信息,在此基础上借助栈完成对车辆的入场和出场操作,借助队列完成辅助停车场便道,即存放等待入场车辆或辅助车场中的某辆车出场。 要求设计类(或类模板)来描述栈、队列、停车场及其操作,包含必要的构造函数和
3、析构函数,以及其他能够完成如下功能的成员函数: v 压栈、退栈 v 入队列、出队列 v 车辆到场(有车位即入场,否则入便道等待)、车辆出场(任意位置车辆均可出场) v 查询车辆信息、输出停车场(包括停车位和便道的车辆) 并设计主函数测试该类。 三、设计要求及成果 1. 分析课程设计题目的要求 2. 写出详细设计说明 3. 编写程序代码,调试程序使其能正确运行 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交课程设计报告 四、进度安排 资料查阅与讨论(1天) 系统分析(2天) 系统的开发与测试(5天) 编写课程设计说明书和验收(2天)
4、 五、评分标准 1。 根据平时上机考勤、表现和进度,教师将每天点名和检查 2。 根据课程设计完成情况,必须有可运行的软件。 3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。 4。 根据答辩的情况,应能够以清晰的思路和准确、简练的语言叙述自己的设计和回答教师的提问 六、建议参考资料 1.《数据结构(C语言版)》严蔚敏、吴伟民主编清华大学出版社 2004.11 2.《数据结构课程设计案例精编(用C/C++描述)》,李建学 等 编著,清华大学出版社 2007。2 3.《数据结构:用面向对象方法与C++语言描述》,殷人昆主编, 清华大学出版社 2007。6 目
5、录 目录2 第一章、需求分析3 第一节、问题描述3 第二节、基本要求3 第二章、概要设计4 第一节、设计思想4 第二节、数据结构4 第三节、程序模块5 第三章、详细设计8 第一节、数据类型8 第二节、主要操作9 第四章、测试与分析14 第一节、调试过程中的主要问题14 第二节、测试结果的分析与讨论14 第五章、用户使用说明18 第六章、总结18 第七章、发现问题及错误分析20 第一节、逻辑错误函数20 第二节、修改前得代码20 第三节、错误描述20 第四节、解决方案如下22 第八章、参考文献23 附录代码:24 第一章、需求分析 根据题目要求,
6、充分地分析和理解问题,描述系统的功能要求,明确问题要求做什么?以及限制条件是什么? 第一节、问题描述 随着我国人民生活水平提高和汽车工业的高速发展.越来越多的家庭拥有了汽车,但受到土地的限制,所以采用立体停车场是解决停车难的必然出路。立体停车场占地少,容量大.利用效率高;泊车与取车全自动化,省时省力,安全防盗.本文主要以两层停车场为例,设计一能完成存车与取车的停车场系统。 有一个两层的停车场, 每层有6个车位, 当第一层车停满后才允许使用第二层。 ( 停车场可用一个二维数组实现, 每个数组元素存放一个车牌号 ) 每辆车的信息包括车牌号、 层号、 车位号、停车时间共4项, 其中停车时间按分
7、钟计算 。 假设停车场初始状态为第一层已经停有4辆车, 其车位号依次为1—4 , 停车时间依次为20, 15, 10 , 5 . 即先将这四辆车的信息存入文件”car。dat"中( 数组的对应元素也要进行赋值 ) 。 停车操作:当一辆车进入停车场时, 先输入其车牌号, 再为它分配一个层号和一个车位号, 停车时间设为5 , 最后将新停入的汽车的信息添加文件"car.dat"中, 并将在此之前的所有车的停车时间加5. 收费管理(取车): 当有车离开时, 输入其车牌号, 先按其停车时间计算费用, 每5分钟0。2元。 (停车费用可设置一个变量进行保存), 同时从文件”car.dat"中删除该车
8、的信息, 并将该车对应的车位设置为可使用状态(即二维数组对应元素清零)。 按用户的选择来判断是否要输出停车收费的总计。 第二节、基本要求 输入的形式和输入值的范围 程序以车牌号作为车主的身份验证,以真实的汽车车牌号为准,当取车或停车时,需输入车牌号,输入字段长7位。 输出的形式 用户:当车主存车时,要求显示空闲的车位,方便车主在层内选择(层间要满足,如果第一层有空则必须停在第一层).当车主取车时,可以根据客户选择,决定是否输出凭据。 管理员:能够查询全部车辆的信息. 程序所能达到的功能 用户存车:包括查找空位,选择车位;用户取车:包括出车,显示凭据.更改停车场的状态。 停车场
9、管理员:初始化停车场,查询所有车的停车信息(历史停车信息),进行一定的查询功能. 第二章、概要设计 第一节、设计思想 本停车场有两层, 每层有6个车位, 所以 停车场可用一个二维数组实现,用来描述现停汽车的信息。 每辆车用一结构体表示,包括车牌号、 层号、 车位号、停车时间和停车标志位(标志是否停车)。当车入库时,将更改二维数组的信息,当车出库时,将信息写入car。dat中。再次进入该系统时,还用这个二维数组,来接受car.dat数据的读入,便于用户以后的操作,防止停车信息的流失.此外,由于需要显示所有汽车的停车信息,所以我们又加了一个顾客结构体,一个顾客链表,当存车时,新建用户节点,并
10、使用头插法,插于链表(便于取车时查到用户,补充完整用户的信息),填写用户的相关信息(车牌号,层号,车位号,车入库时刻)。当出库时,查找相应节点,补充完整用户信息,包括(用户留言,停车时间总计,花费).当退出系统后,将已出库的汽车的车主信息,写入历史文件list.dat中,便于管理员的查询。将还未取走车的车主的信息存入临时文件temp。dat中,防止系统关闭后数据信息的丢失,车主取车时找不到车。 第二节、数据结构 结构体Car,保存每个车位的停车信息。 结构体Snode ,保存每个客户的信息。 结构体User,保存管理员信息。 结构体Date,保存时间. 数组Cars,保存整个停车状
11、况。 链表CustList,保存所有客户的信息,包括车已取走,和车未取走的. 第三节、程序模块 (1)此停车场管理系统,主要分为以下若干模块: 首先定义用来模拟停车的数组,用来保存顾客信息的链表,保存管理员信息的结构以及全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。在主函数中首先调用option()函数,出现欢迎用户使用的界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的主界面(包括顾客界面和停车场管理员管理界面).当用户选择顾客界面时,跳入到顾客界面,再次界面,用户可以选择存车、取车及返回主页面。在用户的选择过程中,程序又分别存车,取车函数调用以及退出
12、程序这三个函数模块。其中,当存车时,调用了显示空闲车位状态的信息函数,并调用了保存car.dat的函数;当取车时,调用显示本次停车情况以及消费金额的函数, 并调用了保存car。dat的函数。最后,在主界面选择“退出”,保存历史文件list。dat和临时文件temp.dat.当用户选择车管系统时,调用管理员身份验证函数,从而跳入车管界面,然后相应的功能函数,实现查询所有停车信息. (2)在以上各个模块中,出现的调用的函数为: //————-—-—- 客 户 -————--— void Customer(Car cars[FLOOR][PNUMBER]); voi
13、d CustomerNote(char note[100],CustList *cl);//存车 int Enterpark(Car cars[FLOOR][PNUMBER],char *license,int &floor,int &pnumber); void GetDate(Date &date); bool IsFull(Car cars[FLOOR][PNUMBER]); bool IsSame(Car cars[FLOOR][PNUMBER],char *license);//取车 int CarOutMenu(char license[],int &floor,int
14、pnumber,int &ptime,float &cost,char note[100]); bool IsEmpty(Car cars[FLOOR][PNUMBER]); void Print(char license[],int floor,int pnumber,int ptime,float &cost); void Leavepark(Car cars[FLOOR][PNUMBER],char license[],int &floor,int &pnumber,int &ptime,char note[100]); //————-—-——--——--—-—-——-—后台管
15、理—-—————-—————————-—-——--—-- void Manage(Car cars[FLOOR][PNUMBER]); //保存到car。dat void Savecars(Car cars[FLOOR][PNUMBER]); void FourCarIn(Car Cars[FLOOR][PNUMBER]); //初始停车场 int UsertestAdd();//管理员身份验证 void Load(Car cars[FLOOR][PNUMBER]); //加载文件 void Loadfile(Car cars[FLOOR][PNUMBER],char licens
16、e[8],int floor,int pnumber,int ptime,int empty); void Showcars(Car cars[FLOOR][PNUMBER],CustList *cl); //显示停车场现存车 void Message(CustList *clr); //显示客户信息 void News();//发布消息 void Income(CustList *cl,char day[],float &amount); //一些查询 void CheckOneCar(CustList *clr,char *license);//后台中关于单链表的 void I
17、nitCustList(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(CustList *&cl,char *license,float cost,int ptimecount,char note[]); void
18、SaveListTemp(CustList *cl);//保存到temp。dat void SaveList(CustList *cl); //保存到list.dat void DeleteAll(CustList *cl); void ReadFromList(CustList *cl); void LoadList(CustList *clr); void DeleteByNote(CustList *cl); (3)各模块之间的调用关系以及算法设计 下图是个模块之间的调用关系(如图2—1): 退出 停车场管理员界面 显示凭据 客户留言 返回主页 输入车牌号 退
19、出 退出 显示车位,客户选择 车牌有效 输入车牌号 退出 一个客户 每天收入 客户信息 车辆 信息 初始停车场 返回主页 存车 界面 取车 界面 客户界面 进入主页面 否 是 满 注: 在取、存操作后,会自动保存信息到car.dat中。 在每次退出系统时,会保存list.dat和temp.dat。 图2-1模块调用关系 第三章、详细设计 实现概要设计中定义的所有数据类型,对主要操作写出实现算法,对主程序和其他模块写出算法,写出函数的调用关系. 第一节、数据类型 结构体Car,保存每个车位的停车信息. struct Ca
20、r { char license[8]; int floor; int pnumber; int ptime; int empty;//标志位,有车为1,无车为0 }; 结构体Snode ,保存每个客户的信息。 struct Snode { char license[8];//车牌号 Date date;//停车的时刻 int floor; int pnumber; int ptimecount;//本次停车总时间 float cost; char note[100];//顾客留言 Snode *next; }; 结构体User,保存管理员信息. st
21、ruct User { char id[10]; char name[10]; char password[10]; }; 结构体Date,保存时间. struct Date { char day[11]; char shike[9]; char weekday[10]; }; 数组Cars,保存整个停车状况。 Car Cars[FLOOR][PNUMBER]; 链表,保存所有客户的信息,包括车已取走,和车未取走的. typedef struct SnodeCustList; 第二节、主要操作 (1)存车: int Enterpark(Car cars[F
22、LOOR][PNUMBER],char *license,int &floor,int &pnumber) { //输入车牌号,判断车牌号的有效性 cout<<”请输入车牌号:”; char licen[8]; cin〉〉licen; while((!licen)||(strlen(licen)!=7)) { cout〈〈”输入有误!请重新输入车牌号:"; cin〉〉licen; } //查看是否有重复 while(1) { if(IsSame(cars,licen)==1) { cout〈〈”已经存在这辆车,请重新输入
23、"<〈endl;
cin〉〉licen;
}
else break;
}
//判断车场是否已经满了
//查看是否有空位,并显示.便于客户选择
int i,j;
if(IsFull(cars)==1)
{
cout〈<”已经没有空车位了,谢谢惠顾!正在跳转到顾客界面。。。”<〈endl;
return 0;
}
int sign=1;//sign 标志第几层有空位0表一,1表二
cout〈〈”您可以选择的车位"< 24、t.setf(ios::left);
cout.width(8);
cout〈〈”楼层";
cout.width(8);
cout〈<"车位号”;
cout< 25、idth(8);
cout〈〈j+1〈〈endl;
if(j==PNUMBER—1) {break;}
}
else if((cars[i][j]。empty==0)&&(i==1))
{
cout.setf(ios::left);
cout。width(8);
cout〈〈i+1;
cout.width(8);
cout〈〈j+1< 26、out<〈"请输入车位号:";
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( 27、license,licen);
cars[sign][temf-1]。ptime=0;
//修改整个停车场的信息
for(i=0;i 28、
(2)取车:
void Leavepark(Car cars[FLOOR][PNUMBER],char license[],int &floor,int &pnumber,int &ptime,char note[100])
{
//判断车位是否已空
if(IsEmpty(cars)==1)
{
cout<〈”停车场已没有车停放!请确定您是否停车."〈〈endl;
return;
}
//查找车位
int sign=1;//标志位,车库有该车为1,没有赋值为零,初始值为0
int i,j;
while(sign)
{
for(i=0;i 29、〈FLOOR;i++)
{
for(j=0;j 30、sign==0)
cout<〈"车已找到,请稍等..."〈〈endl;
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— 31、1]。empty=0;
strcpy(cars[floor—1][pnumber—1]。license,” ");
//由于floor,pnumber与实际的二位数组有区别,加1
}
第四章、测试与分析
进行系统测试,输出测试结果。测试数据应该全面、完整,并对测试结果进行分析。
第一节、调试过程中的主要问题
由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使用了清屏函数,所以,运行时用户选择任务并且执行完任务后,又会回到供用户选择功能的主界面,因此整个程序从整体上来讲结构清晰,使用方便.本程序的调试运行,总体上情况良好,但中间也出现了一些小问题。其中比较有代表性的 32、主要问题有:
第二节、测试结果的分析与讨论
① 主界面(如图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)、停车,填写车牌号等信息然后返回;
(2)、取车,输入车牌号和自己的信息,出示凭据,可以进行评价,然后返回主页;
33、
4、进入停车场管理员界面
(1)、查看停车场初始化信息;
(2)、选择车辆,查看它的详细信息;
(3)、进一步查看客户的信息;
(4)、清点一天的收入;
(5)、返回主页,退出;
第六章、总结
在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情的方法和技巧。在设计过程中,和同学们相互探讨,相互学习.我学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世,这次课程设计对我来说受益良多.课程设计是我们专业课程知识综合应用的实践训练,这是我们迈向社会,从事职业工作前一个必不少的过程.“千里之行始于足下”通过这次课程设计 34、我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。我这次设计的科目是数据结。
数据结构,是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算所得到的新结构仍然是原来的结构类型。作为一门独立的课程在国外是从1968年才开始设立的。1968年美国唐欧克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作“数据结构"在计算机科学中是一门综合性的专业基础课。数据 35、结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程.数据结构这一门课的内容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础.
一、积累了宝贵的经验
我这次课程设计代码中主要使用了链表的循环和遍历这两中操作。循环链表(Circular Linked List)是单链表的另一种形式,它是一个首尾相接的链表.其特点是将单链表最后一个结点的指针域由NULL改为指向头结点或线性表中的第一个结点,就得到了单链形式的循环链表,并称为循环单链表。类似地,还有多重链的循环链表。在循环单链表中,表中所有结点被链在一个环上,多重 36、循环链表则是将表中的结点链在多个环上。为了使某些操作实现起来方便,在循环单链表中也可设置一个头结点。这样,空循环链表仅由一个自成循环的头结点表示。所谓遍历(Traversal),是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题.这次课程设计我选中的题目是个人资料的管理.编写了一个可以简易使用的个人资料管理系统,可以进行资料的输入和管理.虽然在我的程序中有一部分是从网上搜索得来的,但我已经竭力将所获得的信息变成自己的资源,动手上机操作,在了解和看懂的基础上有所改变和创新,但是在的程序软件中还有部分的不足,需要加以更新。仅管,我并没能很好的利用 37、所学数据结构的知识,但我也尽了自己最大的努力用我所学来完成这次的课程设计.同时,通过这次课程设计,我认识到了自己动手实践的弱势,特别是在编程方面,知道了计算机的实践操作是很重要的,只有通过上机编程才能充分的了解自己的不足。
二、对以后的学习充满了信心和期待
通过这次的课程设计,更是让我深刻认识到自己在学习中的不足,同时也找到了克服这些不足的方法,这也是一笔很大的资源。在以后的时间中,我们应该利用更多的时间去上机实验,加强自学的能力,多编写程序,相信不久后我们的编程能力都会有很大的提高能设计出更多的更有创新的作品。
第七章、发现问题及错误分析
第一节、逻辑错误函数
void Loadf 38、ile(Car cars[2][6],char license[10],int floor,int pnumber,int ptime,int empty )函数的功能是在每次运行程序时,加载车库里原来已经存在的还没有储库的车
第二节、修改前得代码
void Loadfile(Car cars[2][6],char license[10],int floor,int pnumber,int ptime,int empty )
{
if(!license)
return;
int j=0;
while(cars[0][j]。empty !=0)
{j++;}
str 39、cpy(cars[0][j]。license,license);
cars[0][j]。floor =floor;
cars[0][j]。pnumber =pnumber;
cars[0][j]。ptime =ptime;
cars[0][j]。empty =empty;
}
第三节、错误描述
这个函数有问题,(每次读入都是按[0][0],[0][1],[0][2],[0][3],[0][4]……顺序加载,一个一个的,从而造成了两个问题:车库“假满现象" 和“删除后重新加载时只能按顺序加载 ”),同时不够简练,重用性不高.
错误的一种结果:“假满现象”:
1.并且上限 40、只能加载第一层的六个车位,第七次调用该函数时就会报错
原来车库已经存储的 六 辆车(如图7-1):
图7-1错误报告
第七辆车来时虽然可以停车,保存之后 ,但是下次加载车库中七条数据时就会发生溢出错误 (如图7—2、图7—3)
图7—2溢出错误(1) 图7—3溢出错误(2)
错误的另一种种结果:
2。假设文件原来的保存的车停信息位(0,0)(0,3)(1,0)(1,2)
经过加载后,(0,0)保存在[0][0];(0,3)保存在[0][2];(1,0)保存在[0][3];(1,2)保存在[0][4];即只能顺序加载(如图7—4、图7—5)
图7—4加载错误( 41、1) 图7—5加载错误(2)
第四节、解决方案如下
void Loadfile(Car cars[2][6],char license[10],int floor,int pnumber,int ptime,int empty )
{
if(!license)
return;
strcpy(cars[floor—1][pnumber—1]。license,license);
cars[floor—1][pnumber—1]。floor =floor;
cars[floor-1][pnumber—1]。pnumber =pnumber;
42、 cars[floor—1][pnumber—1].ptime =ptime;
cars[floor—1][pnumber—1].empty =empty;
}
第八章、参考文献
1.《数据结构(C语言版)》严蔚敏、吴伟民主编清华大学出版社 2004.11
2.《数据结构课程设计案例精编(用C/C++描述)》,李建学 等 编著,清华大学出版社 2007。2
3.《数据结构:用面向对象方法与C++语言描述》,殷人昆主编, 清华大学出版社 2007.6
附录代码:
#include 〈iostream。h〉
#include 〈string。h〉
#include 〈stdi 43、o.h>
#include 〈stdlib.h〉
#include 44、e[64];//停车的时刻
int ptimecount;//本次停车总时间
float cost;
char note[100];//顾客留言
Customer *next;
};
//顾客信息链表
typedef Customer CustList;
//管理员
struct User
{
char id[10];
char name[10];
char password[10];
};
int UsertestAdd();
void Load(Car cars[2][6]);
void Loadfile(Car cars[2][6],cha 45、r license[10],int floor,int pnumber,int ptime,int empty);
void FourCarIn(Car Cars[2][6]);
void Enterpark(Car cars[2][6]);
void Showcars(Car cars[2][6]);
void Savecars(Car cars[2][6]);
bool IsEmpty(Car cars[2][6]);
void Print(char license[],int floor,int pnumber,int ptime,float &cost);
void Le 46、avepark(Car cars[2][6],char license[],int &floor,int &pnumber,int &ptime,float &cost,char note[100]);
void CarOutMenu(char license[],int &floor,int &pnumber,int &ptime,float &cost,char note[100]);
void Manage(Car cars[2][6]);
void InitCustList(CustList *&cl);
void CreateCustList(CustList *&cl,ch 47、ar *license);
void GetDate(char tmp[64]);
void SearchCust(CustList *&cl,char *license,float cost,int pcount);
void Customer(Car cars[2][6]);
void CustomerNote(char note[100]);
void EachGuideInfor(Car c);
//游客个人信息的自我查询
void EachGuideInfor(Car c)
{
cout。setf(ios::left);
cout.width(10);
c 48、out<〈"车牌号";
cout。width(8);
cout<〈"楼层”;
cout.width(8);
cout〈〈"车位号”;
cout。width(8);
cout<〈"停车开始时间"〈〈endl;
cout.setf(ios::left);
cout。width(10);
cout〈〈c。license;
cout。width(8);
cout〈〈c。floor;
cout。width(8);
cout〈 49、言
void CustomerNote(char note[100])
{
cout<〈”请留言:";
cin〉〉note;
}
//存车
void Enterpark(Car cars[2][6])
{
cout〈<”input your license”〈 50、or(i=0;i〈2;i++)
{
for(j=0;j<6;j++)
{
if(cars[i][j]。empty==1)
{
cars[i][j]。ptime +=5;
}
else
{
cars[i][j]。floor =i+1;
cars[i][j]。pnumber =j+1;
cars[i][j].ptime=5;
cars[i][j].empty=1;
strcpy(cars[i][j]。license,licen);
return; //如果使用break,






