第三小组停车场管理系统

发布时间 2023-06-18 19:48:47作者: anyubalabala
#include <bits/stdc++.h>
#include <iostream>   
#include <string> 
#include <sstream>
using namespace std;

int N,flag1=0,flag2=0;

map<string,bool>mp;//输入相同车牌号提示输入错误
//时间
typedef struct Time{
    int Year=0,Month=0,Day=0,Hour=0,Minute=0;
}Time;

//车(车牌号、车型、驶入时间、驶出时间) 
typedef struct Car {
    string CarNumber="",CarSize="";
    Time BeginTime,EndTime;
    bool tog=0;//标记是否进入停车场,分类计算收费 
}Car;
//大、中、小停车场(数组模拟栈) 
//大型车位 
typedef struct LParkingLot{
    Car LargeSpace[20];
    int topLarge=-1;
}LParkingLot;
//中型车位 
typedef struct MParkingLot{
    Car MiddleSpace[20];
    int topMiddle=-1;
}MParkingLot;
//小型车位 
typedef struct SParkingLot{
    Car SmallSpace[20];
    int topSmall=-1;
}SParkingLot;

//便道(链式队列)
typedef struct node{
    Car data;
    struct node *next=NULL;
}node;//结点

typedef struct Roadway{
      node *head=NULL,*tail=NULL;
}Roadway;
//新建便道
Roadway* InitRoadway(){
    Roadway* p=new Roadway();
    node* q=new node();
    p->head=q;
    p->tail=q;//头指针与尾指针均指向同一个结点 
    q->next=NULL;
    return p;
}

//打印时间
void TimePrint(Time x){
    cout<<x.Year<<""<<x.Month<<""<<x.Day<<""<<x.Hour<<""<<x.Minute<<""<<"\n";
}

//打印车牌号
void CarNumberPrint(Car x){
    cout<<"车牌号为:"<<x.CarNumber<<"\n";
}

//进停车场(大、中、小)
LParkingLot* PutLParkingLot(LParkingLot* Lpl,Car car){
    Lpl->LargeSpace[++Lpl->topLarge]=car;//栈顶指针初始赋-1,入栈时栈顶指针先加1 
    CarNumberPrint(car);
    cout<<"驶入时间为:";
    TimePrint(car.BeginTime);
    car.tog=1;//打标记,标记汽车进入停车场 
    return Lpl;
}

MParkingLot* PutMParkingLot(MParkingLot* Mpl,Car car){
    Mpl->MiddleSpace[++Mpl->topMiddle]=car;
    CarNumberPrint(car);
    cout<<"驶入时间为:";
    TimePrint(car.BeginTime);
    car.tog=1;//打标记
    return Mpl;
}

SParkingLot* PutSParkingLot(SParkingLot* Spl,Car car){
    Spl->SmallSpace[++Spl->topSmall]=car;
    CarNumberPrint(car);
    cout<<"驶入时间为:";
    TimePrint(car.BeginTime);
    car.tog=1;//打标记
    return Spl;
}

//出停车场(大、中、小)
LParkingLot* OutLParkingLot(LParkingLot* Lpl,Car car){
    LParkingLot* giveway=new LParkingLot();//新建一个临时停车栈 
    while(Lpl->LargeSpace[Lpl->topLarge].CarNumber!=car.CarNumber){//停车场内其他车给要退出的车让路 
        giveway->LargeSpace[++giveway->topLarge]=Lpl->LargeSpace[Lpl->topLarge--];
    }
    while(giveway->topLarge!=-1){//让路的车按原次序进入停车场 
        Lpl->LargeSpace[Lpl->topLarge++]=giveway->LargeSpace[giveway->topLarge--];
    }
    Lpl->topLarge--;
    mp[car.CarNumber]=0;//重置
    return Lpl;
}

MParkingLot* OutMParkingLot(MParkingLot* Mpl,Car car){
    MParkingLot* giveway=new MParkingLot();
    while(Mpl->MiddleSpace[Mpl->topMiddle].CarNumber!=car.CarNumber){
        giveway->MiddleSpace[++giveway->topMiddle]=Mpl->MiddleSpace[Mpl->topMiddle--];
    }
    while(giveway->topMiddle!=-1){
        Mpl->MiddleSpace[Mpl->topMiddle++]=giveway->MiddleSpace[giveway->topMiddle--];
    }
    Mpl->topMiddle--;
    mp[car.CarNumber]=0;//重置
    return Mpl;
}

SParkingLot* OutSParkingLot(SParkingLot* Spl,Car car){
    SParkingLot* giveway=new SParkingLot();
    while(Spl->SmallSpace[Spl->topSmall].CarNumber!=car.CarNumber){
        giveway->SmallSpace[++giveway->topSmall]=Spl->SmallSpace[Spl->topSmall--];
    }
    while(giveway->topSmall!=-1){
        Spl->SmallSpace[Spl->topSmall++]=giveway->SmallSpace[giveway->topSmall--];
    }
    Spl->topSmall--;
    mp[car.CarNumber]=0;//重置
    return Spl;
}

//入队列 
Roadway* PutRoadway(Car car,Roadway* p){
    cout<<"已驶入便道!"<<"\n";
    if(p->head->next==NULL){//若头结点后无结点,使用头插法 
        node* u=new node();
        u->data=car;
        p->head->next=u;
        p->tail=p->head->next;
        return p;
    }
    else{//若头结点后有结点,使用尾插法 
        node* q=new node();
        q->data=car;
        p->tail->next=q;
        p->tail=q;
        return p;
    }
}

//判断车的位置
int flag=0;//位置标记,0表示不在停车场内,1表示在大型停车位,2表示在中型停车位,3表示在小型停车位
Car Search(LParkingLot* Lpl,MParkingLot* Mpl,SParkingLot* Spl,Roadway* rd,Car car){
    //在停车场内找
    for(int i=0;i<=Lpl->topLarge;i++){
        if(Lpl->LargeSpace[i].CarNumber==car.CarNumber){
            cout<<"车在停车场内第"<<i+1<<"号车位"<<"\n";
            flag=1;
            return Lpl->LargeSpace[i];
        }
    }
    for(int i=0;i<=Mpl->topMiddle;i++){
        if(Mpl->MiddleSpace[i].CarNumber==car.CarNumber){
            cout<<"车在停车场内第"<<i+1+N<<"号车位"<<"\n";
            flag=2;
            return Mpl->MiddleSpace[i];
        }
    }
    for(int i=0;i<=Spl->topSmall;i++){
        if(Spl->SmallSpace[i].CarNumber==car.CarNumber){
            cout<<"车在停车场内第"<<i+1+2*N<<"号车位"<<"\n";
            flag=3;
            return Spl->SmallSpace[i];
        }
    }
    //在便道找
    int ver=0;
    node* p=rd->head->next;
    while(car.CarNumber!=p->data.CarNumber&&p->next!=NULL){
        p=p->next;
        ver++;
    }
    cout<<"车在便道的第"<<ver+1<<"号车位"<<"\n";
    return p->data;
}

//计算费用
int MoneyCalculate(Car car,int Lfee,int Mfee,int Sfee){
    int money=0;
    struct tm t1,t2;
    t1.tm_min    = car.BeginTime.Minute;
    t1.tm_hour   = car.BeginTime.Hour;
    t1.tm_mday   = car.BeginTime.Day;
    t1.tm_mon    = car.BeginTime.Month;
    t1.tm_year   = car.BeginTime.Year-1900;
    t2.tm_min    = car.EndTime.Minute;
    t2.tm_hour   = car.EndTime.Hour;
    t2.tm_mday   = car.EndTime.Day;
    t2.tm_mon    = car.EndTime.Month;
    t2.tm_year   = car.EndTime.Year-1900;
    time_t now1=mktime(&t1);
    time_t now2=mktime(&t2);
    time_t now3;
    now3=difftime(now2,now1);
    tm *ltm = gmtime(&now3);
    if(car.CarSize=="L"){
        if(ltm->tm_min>=30)
            money=Lfee*24*30*12*(ltm->tm_year-70)+Lfee*24*30*(ltm->tm_mon)+Lfee*24*(ltm->tm_mday-1)+Lfee*(ltm->tm_hour)+Lfee;
    else money=Lfee*24*30*12*(ltm->tm_year-70)+Lfee*24*30*(ltm->tm_mon)+Lfee*24*(ltm->tm_mday-1)+Lfee*(ltm->tm_hour);
    }
    if(car.CarSize=="M"){
        if(ltm->tm_min>=30)
            money=Mfee*24*30*12*(ltm->tm_year-70)+Mfee*24*30*(ltm->tm_mon)+Mfee*24*(ltm->tm_mday-1)+Mfee*(ltm->tm_hour)+Mfee;
    else money=Mfee*24*30*12*(ltm->tm_year-70)+Mfee*24*30*(ltm->tm_mon)+Mfee*24*(ltm->tm_mday-1)+Mfee*(ltm->tm_hour);
    }
    if(car.CarSize=="S"){
        if(ltm->tm_min>=30)
            money=Sfee*24*30*12*(ltm->tm_year-70)+Sfee*24*30*(ltm->tm_mon)+Sfee*24*(ltm->tm_mday-1)+Sfee*(ltm->tm_hour)+Sfee;
    else money=Sfee*24*30*12*(ltm->tm_year-70)+Sfee*24*30*(ltm->tm_mon)+Sfee*24*(ltm->tm_mday-1)+Sfee*(ltm->tm_hour);
    }
    return money;
}

//收费提示牌
void feePrint(Car car,int Lfee,int Mfee,int Sfee){
    cout<<"车牌号为:"<<car.CarNumber<<"\n";
    cout<<"驶入时间为:";
    TimePrint(car.BeginTime);
    cout<<"驶出时间为:";
    TimePrint(car.EndTime);
    //离开时仍在便道费用为0元
    if (!flag){
        cout<<"未进入停车场内,应缴费0元!"<<"\n";
    }else {
        int money=MoneyCalculate(car,Lfee,Mfee,Sfee);
        cout<<"应缴纳:"<<money<<""<<"\n";
        car.tog=0;//重置
    }
}

void FunctionWindow() {
    cout<<"*** 欢迎您进入 简洁版停车场管理系统功能界面 ***\n\n"
        <<"停车场不同类型的停车位收费标准不同,且上一级别的车不能在下一级别的停车位停车"<<"\n"
        <<"停车场超过半小时按一小时收费"<<"\n" 
        <<"输入序号选择您需要的功能:\n\n"
        <<"1.车辆 进/出 停车场              2.显示停车场基本信息\n"
        <<"3.查询当前停车场内车辆信息       4.查看便道车辆信息\n"
        <<"5.清空停车场车辆                 6.查看停车场车位余量\n"
        <<"7.清空便道车辆                   8.停止停车场开放\n\n";
}


//1.车辆进出
void load(LParkingLot* Lpl,MParkingLot* Mpl,SParkingLot* Spl,Roadway* rd,Car car,int Lfee,int Mfee,int Sfee){
    char Operator;
    cout<<"停车请按A"<<"\n";
    cout<<"取车请按D"<<"\n";
    cout<<"需要结束程序请按E"<<"\n";

    while (1){
        cin>>Operator;
        if (Operator=='E')    {
            mp.clear();//初始化
            break;
        }
        else if (Operator=='A'){
            cout<<"请输入车牌号:";
            cin>>car.CarNumber;
            cout<<"请输入车型(L、M、S):"; 
            cin>>car.CarSize;
            cout<<"请输入停车时间(年、月、日、时、分):";
            cin>>car.BeginTime.Year>>car.BeginTime.Month>>car.BeginTime.Day>>car.BeginTime.Hour>>car.BeginTime.Minute;
            cout<<endl;
            if (!mp[car.CarNumber])
            {
                mp[car.CarNumber]=1;//打标记
            }else
             {
                cout<<"车牌号输入错误,请重新输入!"<<"\n";
                continue;
            }
            if (car.CarSize=="L")
            {
               if(Lpl->topLarge==N-1)
               {
                 flag1=1;
                 PutRoadway(car,rd);
                 
               }
               else 
               {
                 PutLParkingLot(Lpl,car);
               }
            }
            else if (car.CarSize=="M")
            {
               if(Mpl->topMiddle==N-1)
               {
                 if (Lpl->topLarge==N-1)
                 {
                    flag1=1;
                    PutRoadway(car,rd);
                    
                 }
                 else 
                 {
                    PutLParkingLot(Lpl,car);
                 }
               }
               else 
               {
                 PutMParkingLot(Mpl,car);
               }
            }
            else if (car.CarSize=="S")
            {
               if(Spl->topSmall==N-1)
               {
                 if (Mpl->topMiddle==N-1)
                 {
                    if (Lpl->topLarge==N-1)
                    {
                      flag1=1;
                      PutRoadway(car,rd);
                      
                    }
                    else 
                    {
                      PutLParkingLot(Lpl,car);
                    }
                 }
                 else 
                 {
                    PutMParkingLot(Mpl,car);
                 }
               }
               else 
               {
                 PutSParkingLot(Spl,car);
               }
            }
            else 
            {
                mp[car.CarNumber]=0;//重置
                cout<<"输入错误,请重新输入!"<<"\n";
            }
            
            
            if(flag1==0)
            {
            //1、创建流对象
            fstream fs; //可输入输出
            //2、指定打开方式
            fs.open("D:\\tingchechang.txt", ios::out|ios::app);
            //3、文件写入 
            fs<<car.CarNumber<<" "<<car.CarSize<<"\n";
            //<<car.BeginTime.Year<<"年"<<car.BeginTime.Month<<"月"<<car.BeginTime.Day<<"日"<<car.BeginTime.Hour<<"时"<<car.BeginTime.Minute<<"分"<<"\n";
            fs.close(); 
            } 
            else {
                flag1=0;
            //1、创建流对象
            fstream fs; //可输入输出
            //2、指定打开方式
            fs.open("D:\\biandao.txt", ios::out|ios::app);
            //3、文件写入 
            fs<<car.CarNumber<<" "<<car.CarSize<<"\n";
            //<<car.BeginTime.Year<<"年"<<car.BeginTime.Month<<"月"<<car.BeginTime.Day<<"日"<<car.BeginTime.Hour<<"时"<<car.BeginTime.Minute<<"分"<<"\n";
            fs.close(); 
            }
            
        }
        //取车
        else if (Operator=='D'){
            cout<<"请输入车牌号:"<<"\n";
            cin>>car.CarNumber;
            //判断车是否在停车场和便道内
            if (!mp[car.CarNumber]){
                cout<<"未查询到车辆信息!"<<"\n";
                continue;
            }
            car=Search(Lpl,Mpl,Spl,rd,car);//先找到车的位置
            if (!flag){
                cout<<"车在便道内!";
                flag2=1;//标记车在便道内 
                
                //出队列 
                node* p=rd->head;
                node* q=p->next;
                while(q!=NULL)//遍历链表 
                {
                    Car outcar=q->data;
                    if (outcar.CarNumber==car.CarNumber)//找到要删除的结点 
                    {
                        p->next=q->next;
                        free(q);
                        q=p->next;
                        break;
                    }
                    p=q;
                    q=q->next;
                }
                feePrint(car,Lfee,Mfee,Sfee);
                mp[car.CarNumber]=0;//重置
                continue;
            }
            else if (flag==1){
               OutLParkingLot(Lpl,car);
            }
            else if (flag==2){
               OutMParkingLot(Mpl,car);
            }
            else if(flag==3){
               OutSParkingLot(Spl,car);
            }
            cout<<"请输入取车时间(年、月、日、时、分):";
            cin>>car.EndTime.Year>>car.EndTime.Month>>car.EndTime.Day>>car.EndTime.Hour>>car.EndTime.Minute;
            feePrint(car,Lfee,Mfee,Sfee);
            
            
            //flag2标记取停车场还是便道的车辆 
            
            if(flag2==0)
            {//取车时要删除文件中的某项内容 
            fstream in("D:\\tingchechang.txt", ios::in);//原文件
            fstream out("D:\\temp.txt", ios::out);//中间文件
            string name, pass, str, estr;
            str = car.CarNumber.append(" ").append(car.CarSize);
            //append(car.BeginTime.Year).append("年").append(car.BeginTime.Month).append("月").append(car.BeginTime.Day).append("日").append(car.BeginTime.Hour).append("时").append(car.BeginTime.Minute).append("分");//test.txt中需要删除的某一行内容,可根据自己的需要修改
            while (getline(in, estr))//得到tingchechang.txt中一行的内容
            {
             if (!estr.compare(str))//比较tengchechang.txt每一行的内容和要删除的是否一致,一致就跳过
             continue;
             out << estr << "\n";//不一致的内容写到temp.txt中,注意换行
            }
            in.close();//关闭流
            out.close();
            fstream outfile("D:\\tingchechang.txt", ios::out);
            fstream infile("D:\\temp.txt", ios::in);
            while (getline(infile, estr)) //将temp.txt的内容写到停车场.txt
            {
             outfile<< estr << "\n";
            }
            const char* path = "D:\\temp.txt";
            remove(path);//删除temp.txt
            outfile.close();//关闭流
            infile.close();     
            }
            else
            {
                flag2=0;
                //取车时要删除文件中的某项内容 
            fstream in("D:\\biandao.txt", ios::in);//原文件
            fstream out("D:\\temp1.txt", ios::out);//中间文件
            string name, pass, str, estr;
            str = car.CarNumber.append(" ").append(car.CarSize);
            //append(car.BeginTime.Year).append("年").append(car.BeginTime.Month).append("月").append(car.BeginTime.Day).append("日").append(car.BeginTime.Hour).append("时").append(car.BeginTime.Minute).append("分");//test.txt中需要删除的某一行内容,可根据自己的需要修改
            while (getline(in, estr))//得到biandao.txt中一行的内容
            {
             if (!estr.compare(str))//比较biandao.txt每一行的内容和要删除的是否一致,一致就跳过
             continue;
             out << estr << "\n";//不一致的内容写到temp.txt中,注意换行
            }
            in.close();//关闭流
            out.close();
            fstream outfile("D:\\biandao.txt", ios::out);
            fstream infile("D:\\temp1.txt", ios::in);
            while (getline(infile, estr)) //将temp.txt的内容写到biandao.txt
            {
             outfile<< estr << "\n";
            }
            const char* path = "D:\\temp1.txt";
            remove(path);//删除temp.txt
            outfile.close();//关闭流
            infile.close();
                
             } 
            
            flag=0;//重置位置标记
            //便道上的车驶入停车场
            node* p=rd->head;
            node* q=p->next;
            while(q!=NULL){
                //停车场内没有余位时,便道内的车停止进入
                if ((Lpl->topLarge==N-1)&&(Mpl->topMiddle==N-1)&&(Spl->topSmall==N-1)){
                    break;
                }
                Car outcar=q->data;
                if (outcar.CarSize=="L"){
                    if (Lpl->topLarge==N-1){
                        p=q;
                        q=q->next;
                    }
                    else {
                        PutLParkingLot(Lpl,outcar);
                        p->next=q->next;
                        free(q);
                        q=p->next;
                    }
                }
                else if (outcar.CarSize=="M"){
                    if (Mpl->topMiddle==N-1){
                        if (Lpl->topLarge==N-1){
                            p=q;
                            q=q->next;
                        }
                        else {
                            PutLParkingLot(Lpl,outcar);
                            p->next=q->next;
                            free(q);
                            q=p->next;
                        }
                    }
                    else {
                        PutMParkingLot(Mpl,outcar);
                        p->next=q->next;
                        free(q);
                        q=p->next;
                    }
                }
                else if(outcar.CarSize=="S"){
                    if (Spl->topSmall==N-1){
                        if (Mpl->topMiddle==N-1){
                            if (Lpl->topLarge==N-1){
                               p=q;
                               q=q->next;
                            }
                            else {
                               PutLParkingLot(Lpl,outcar);
                               p->next=q->next;
                               free(q);
                               q=p->next;
                            }
                        }
                        else {
                            PutMParkingLot(Mpl,outcar);
                            p->next=q->next;
                            free(q);
                            q=p->next;
                        }
                    }
                    else {
                        PutSParkingLot(Spl,outcar);
                        p->next=q->next;
                        free(q);
                        q=p->next;
                    }
                }
            }
        }
    }
}
//2.显示停车场基本信息
void parkInformation(int N,int Lfee,int Mfee,int Sfee) 
{
    cout<<"\n Name:Vehicle parking area"
        <<"\n Number of parking spaces: "
        <<N<<"(大型停车位数量) "
        <<N<<"(中型停车位数量) "
        <<N<<"(小型停车位数量) "
        <<"\n Hourly parking fee:       "
        <<Lfee<<"(大型停车位收费) "
        <<Mfee<<"(中型停车位收费) "
        <<Sfee<<"(小型停车位收费) "<<endl; 
} 
//3.查询当前停车场内车辆信息 
void seeCarInformation(LParkingLot* Lpl,MParkingLot* Mpl,SParkingLot* Spl,Car car)
{
    int l=Lpl->topLarge;
    int m=Mpl->topMiddle;
    int s=Spl->topSmall;//定义三个整型变量表示栈顶指针数值 
    if(l==-1&&m==-1&&s==-1) cout<<"\n停车场内无车辆存在!\n";
    else 
    {
        cout<<"--------------------------------------------------\n"
            <<"  车型(L M S)    |    车牌号     |     进入时间   \n";
        while(l!=-1) 
        {
        cout<<"      L          |      "<<Lpl->LargeSpace[l].CarNumber<<"      |     ";
        TimePrint(Lpl->LargeSpace[l].BeginTime);
        cout<<endl;
        l--;//逐个遍历
        }
        while(m!=-1) 
        {
        cout<<"      M          |      "<<Mpl->MiddleSpace[m].CarNumber<<"      |     ";
        TimePrint(Mpl->MiddleSpace[m].BeginTime);
        cout<<endl;
        m--;//逐个遍历
        }    
        while(s!=-1) 
        {
        cout<<"      S          |      "<<Spl->SmallSpace[s].CarNumber<<"      |     ";
        TimePrint(Spl->SmallSpace[s].BeginTime);
        cout<<endl;
        s--;//逐个遍历
        }
    } 
}
//4.查看便道车辆信息
 void pavementCarInformation(Roadway* rd) 
 {
     node* r=new node();
     r=rd->head->next;
    if(r==NULL)
    {
        cout<<"\n便道内无车辆存在!\n";
     } 
     cout<<"--------------------------------------------------\n"
         <<"  车型(L M S)    |    车牌号     |     进入时间   \n";
    while(r!=NULL) 
    {
        cout<<"     "<<r->data.CarSize<<"           |       "<<r->data.CarNumber<<"        ";
        TimePrint(r->data.BeginTime);
        r=r->next;//后移遍历
    }
    cout<<"--------------------------------------------------\n\n";
 }
//5.清空停车场车辆
void emptyParking(LParkingLot* Lpl,MParkingLot* Mpl,SParkingLot* Spl) {
    while(Lpl->topLarge!=-1) {
        Lpl->topLarge--;
    }
    while(Mpl->topMiddle!=-1) {
        Mpl->topMiddle--;
    }
    while(Spl->topSmall!=-1) {
        Spl->topSmall--;
    }
    cout<<"停车场车辆已清空!\n";
}
//6.查看停车场车位余量
void parkingPosition(LParkingLot* Lpl,MParkingLot* Mpl,SParkingLot* Spl,Car car) 
{
    cout<<"大型车位当前余位编号为:";
           if(Lpl->topLarge==N-1){
             cout<<"无!"<<"\n";
           }else {
                for(int i=Lpl->topLarge+1;i<N;i++){
                    cout<<i+1<<' ';
                }
                cout<<"\n";
           }
           cout<<"中型车位当前余位编号为:";
           if(Mpl->topMiddle==N-1){
             cout<<"无!"<<"\n";
           }else {
                for(int i=Mpl->topMiddle+1;i<N;i++){
                    cout<<i+1+N<<' ';
                }
                cout<<"\n";
           }
           cout<<"小型车位当前余位编号为:";
           if(Spl->topSmall==N-1){
             cout<<"无!"<<"\n";
           }else {
                for(int i=Spl->topSmall+1;i<N;i++){
                    cout<<i+1+2*N<<' ';
                }
                cout<<"\n";
           }
           if (Lpl->topLarge==N-1){
        cout<<"大型车位已满!"<<"\n";
        }else {
        cout<<"大型车当前余位为:"<<N-(Lpl->topLarge+1)<<"\n";
        }
    if (Mpl->topMiddle==N-1){
        cout<<"中型车位已满!"<<"\n";
    }else {
        cout<<"中型车当前余位为:"<<N-(Mpl->topMiddle+1)<<"\n";
    }
    if (Spl->topSmall==N-1){
        cout<<"小型车位已满!"<<"\n";
    }else {
        cout<<"小型车当前余位为:"<<N-(Spl->topSmall+1)<<"\n";
    }
}
//7.清空便道车辆
 void emptyPavement(Roadway* rd) 
 {
     node *r=new node();
     r=rd->head->next;
     while(r!=NULL) {
        rd->head->next=r->next;
        if(rd->tail==r) {
            rd->tail=rd->head;//使队尾指针回到初始位置
        }
        delete(r);//释放p所指结点空间
    }
    cout<<"便道车辆已清空!\n";
 }
//8.停止停车场开放
void closeParking(LParkingLot* Lpl,MParkingLot* Mpl,SParkingLot* Spl,Roadway* rd) {
    emptyParking(Lpl,Mpl,Spl);//清空停车场
    emptyPavement(rd);//清空便道
    cout<<"车辆已全部离开停车场......\n停车场已关闭!\n";
} 

signed main(){
    LParkingLot* Lpl=new LParkingLot;
    MParkingLot* Mpl=new MParkingLot;
    SParkingLot* Spl=new SParkingLot;
    Roadway* rd=InitRoadway();
    Car car;
    FunctionWindow();
    int Lfee,Mfee,Sfee;//size各类型停车场容量,fee各类型每小时停车费
    cout<<"请输入一个数代表大中小类型停车场的最大容量(/辆):";
    cin>>N;
    cout<<"请分别输入大、中、小类型车在停车场每小时的费用(/元):"; 
    cin>>Lfee>>Mfee>>Sfee;
     int choose;
     while(true) {
        cout<<"\n请选择功能:";
        cin>>choose;
        switch(choose) {
            case 1: {
                load(Lpl,Mpl,Spl,rd,car,Lfee,Mfee,Sfee);
                break;
            }
            case 2: {
                parkInformation(N,Lfee,Mfee,Sfee);
                break;
            }
            case 3: {
                seeCarInformation(Lpl,Mpl,Spl,car); 
                break;
            }
            case 4: {
                pavementCarInformation(rd);
                break;
            }
            case 5: {
                emptyParking(Lpl,Mpl,Spl);
                break;
            }
            case 6:{
                parkingPosition(Lpl,Mpl,Spl,car);
                break;
            }
            case 7:{
                emptyPavement(rd); 
                break;
            }
        }
        if(choose==8) {
            closeParking(Lpl,Mpl,Spl,rd); 
            break;
        }
    }
    return 0;
}