八云墨玄 2021-07-03 09:27 采纳率: 71.4%
浏览 90
已结题

求能用简单易懂的fscanf,fprintf函数让我的程序能永久保存输入的信息且下次打开仍能调用

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <process.h>
//定义汽车类型
enum ECarType
{
e_car_jc=1,
e_car_kc
};
//定义汽车类
class Car
{
private:
char mId[10]; //汽车编号
enum ECarType mType; //汽车类型
int mPriceDay; //日租价格
int mPriceMon; //月租价格
int mPriceYear; //年租价格
public:
Car(){}
Car(char* id,enum ECarType e,int d,int m,int y)
{
strcpy(mId,id);
mType = e;
mPriceDay = d;
mPriceMon = m;
mPriceYear = y;
};

char* getId(){return mId;}
enum ECarType getType(){return mType;}
int getDayprice(){return mPriceDay;}
int getMonprice(){return mPriceMon;}
int getYearprice(){return mPriceYear;}

void setId(char* p){strcpy(mId,p);}
void setType(enum ECarType e){mType = e;}
void setPrice(int d,int m,int y)
{
    mPriceDay = d;
    mPriceMon = m;    
    mPriceYear = y;
};

};

//定义租赁人信息
class Guest
{
private:
char mId[20]; //租客编号
char mName[20]; //租客姓名
char mPhone[12];//租客电话
public:
Guest(){}
Guest(char* id,char* name,char* phone)
{
strcpy(mId,id);
strcpy(mName,name);
strcpy(mPhone,phone);
}
char* getId(){return mId;}
char* getName(){return mName;}
char* getPhone(){return mPhone;}

void setId(char* id){strcpy(mId,id);}
void setName(char* name){strcpy(mName,name);}
void setPhone(char* phone){strcpy(mPhone,phone);}

};
//定义日期类
struct Date
{
int year;
int month;
int day;
};

//租赁方式:日租、月租、年租
/enum EUseType
{
e_use_day=1,
e_use_month,
e_use_year
};
/

//租赁信息
struct UseInfo
{
class Car* pCar; //汽车实例
class Guest* guest;//当前汽车租赁人
struct Date date; //租赁日期
//enum EUseType type;//租赁方式

void show()
{
    printf("车辆编号:%s\n",pCar->getId());
    if(pCar->getType() == e_car_jc)
        printf("车辆类型:轿车\n");
    else
        printf("车辆类型:客车\n");
    if(guest == 0)
    {
        printf("车辆状态:未出租\n");
    }
    else
    {
        printf("车辆状态:已出租\n");
        printf("出租日期:%d年%d月%d日\n",date.year,date.month,date.day);
    }
    
}

};

//获取当前时间
Date GetCurTime()
{
time_t timep;
struct tm *p;
Date dd;
time(&timep);
p = gmtime(&timep);
dd.year = 1900 + p->tm_year;
dd.month = 1+p->tm_mon;
dd.day = p->tm_mday;
return dd;
}
//计算两个日期间的年、月、日
void Caculate(Date start,Date end,int *year,int mon,int day)
{
int ds[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
*year = end.year - start.year;
if (end.month < start.month)
{
*year = *year -1;
*mon = end.month + 12 - start.month;
}else
{
*mon = end.month - start.month;
}

if (end.day < start.day)
{
    *mon = *mon -1;
    *day = end.day + ds[start.month] - start.day;
}else
{
    *day = end.day - start.day;
}

}

//添加汽车信息
void AddNewCar(class Car* cars[],int* nmb,struct UseInfo useinfo[],int nmbInfo)
{
int bgo = 1;
char mId[10]; //汽车编号
int type; //汽车类型
int mPriceDay; //日租价格
int mPriceMon; //月租价格
int mPriceYear; //年租价格
char ch;
class Car
pcar = 0;
while(bgo)
{
system("cls");
printf("请输入汽车编号:");
scanf("%s",mId);
printf("请输入汽车类型(1.轿车 2.客车)");
scanf("%d",&type);
printf("请输入日租价格、月租价格和年租价格,以空格分隔:");
scanf("%d %d %d",&mPriceDay,&mPriceMon,&mPriceYear);
pcar = new Car();
pcar->setId(mId);
if(type == 1)
pcar->setType(e_car_jc);
else
pcar->setType(e_car_kc);
pcar->setPrice(mPriceDay,mPriceMon,mPriceYear);

    cars[*nmb] = pcar;
    *nmb = *nmb + 1;

    //将汽车添加到租赁服务中
    useinfo[*nmbInfo].pCar = pcar;
    useinfo[*nmbInfo].guest = 0; //表示没有被租赁
    *nmbInfo = *nmbInfo + 1;



    printf("是否继续添加(y/n)?");
    while(1)
    {
        scanf(" %c",&ch);
        getchar();
        if(ch == 'y' || ch == 'Y')
            break;
        else if(ch =='n'||ch == 'N')
        {
            bgo = false;
            break;
        }
    }
}
system("pause");

}

//判断租车人是否存在,如果存在返回顾客实例指针,否则返回0
class Guest* isExist(char* id,class Guest* guest[],int nmbGuest)
{
int i;
for (i=0;i< nmbGuest;i++)
{
if(strcmp(guest[i]->getId(),id)==0)
return guest[i];
}
return 0;
}

//根据条件获取可用的车辆
class Car* getUsefullCar(struct UseInfo useinfo[],int nmbInfo,ECarType ecar,int *index)
{
int i;
for (i=0;i<nmbInfo;i++)
{
if (useinfo[i].guest == 0 && useinfo[i].pCar != 0 && useinfo[i].pCar->getType() == ecar)
{
*index = i;
return useinfo[i].pCar;
}
}
return 0;
}

//汽车租赁
void UseCar(struct UseInfo useinfo[],int nmbInfo,class Guest* guest[],int nmbGuest)
{
char name[20]={0};
char id[20]={0};
char phone[20]={0};
int type;
int mode;
Guest
gu = 0;
Car* pcar = 0;
ECarType eCar;
int index = 0;

int y,m,d;

system("cls");
printf("请输入租车人的编号:");
scanf("%s",id);
printf("请输入租车人的姓名:") ;
scanf("%s",name);
printf("请输入租车人的电话:");
scanf("%s",phone);

gu = isExist(id,guest,*nmbGuest);
if(gu == 0)
{
    gu = new Guest(id,name,phone);
    guest[*nmbGuest] = gu;
    *nmbGuest = *nmbGuest + 1;
}
//
printf("请输入租车类型:1.轿车 2.客车:");
scanf("%d",&type);
printf("请输入起租日期:");
scanf("%d %d %d",&y,&m,&d);


if(type == 1)
    eCar = e_car_jc;
else
    eCar = e_car_kc;
/*if(mode == 1)
    eUse = e_use_day;
else if(mode == 2)
    eUse = e_use_month;
else
    eUse = e_use_year;*/

pcar = getUsefullCar(useinfo,nmbInfo,eCar,&index);
if(pcar == 0)
    printf("当前已无该类型的车辆可以出租\n");
else
{
    useinfo[index].guest = gu;
    /*if(1==mode)
        useinfo[index].type = e_use_day;
    else if(2== mode)
        useinfo[index].type = e_use_month;
    else
        useinfo[index].type = e_use_year;*/
    useinfo[index].date.year = y;
    useinfo[index].date.month = m;
    useinfo[index].date.day = d;
    printf("租车成功,车辆编号:%s\n",pcar->getId());
}

system("pause");

}

//汽车信息查询
void FindCar(struct UseInfo useinfo[],int nmbInfo)
{
char id[20]={0};
int type;
int opt,i;
int isfind ;
int bgo = 1;
char ch;
while(bgo)
{
system("cls");
printf("1.根据编号查询\n");
printf("2.根据类型查询\n");
printf("3.查询已出租车辆\n");
printf("4.查询未出租车辆\n");
printf("5.显示全部车辆\n");
scanf("%d",&opt);
switch(opt)
{
case 1:
printf("请输入编号");
scanf("%s",id);
for (i=0;i<nmbInfo;i++)
{
if (strcmp(id,useinfo[i].pCar->getId()) == 0)
{
useinfo[i].show();
break;
}
}
if(i == nmbInfo)
printf("未找到编号为%s的车辆\n",id);
break;
case 2:
printf("请输入类型(1.轿车 2.客车):");
scanf("%d",&type);
isfind = 0;
for (i=0;i<nmbInfo;i++)
{
if ( useinfo[i].pCar->getType() == type)
{
useinfo[i].show();
isfind = 1;
}
}
if(0== isfind)
printf("未找到该类型的车辆\n");
break;
case 3:
isfind = 0;
for (i=0;i<nmbInfo;i++)
{
if ( useinfo[i].guest != 0)
{
useinfo[i].show();
isfind = 1;
}
}
if(0== isfind)
printf("未找到符合要求的车辆\n");
break;
case 4:
isfind = 0;
for (i=0;i<nmbInfo;i++)
{
if ( useinfo[i].guest == 0)
{
useinfo[i].show();
isfind = 1;
}
}
if(0== isfind)
printf("未找到符合要求的车辆\n");
break;
case 5:
for (i=0;i<nmbInfo;i++)
{
useinfo[i].show();
}
break;
}

    printf("是否继续查询(Y/N)?");
    while(1)
    {
        scanf(" %c",&ch);
        getchar();
        if(ch == 'y' || ch == 'Y')
            break;
        else if(ch =='n'||ch == 'N')
        {
            bgo = false;
            break;
        }
    }
}
system("pause");

}

//查询用户信息
void FindUser(struct UseInfo useinfo[],int nmbInfo,class Guest* guest[],int nmbGueset)
{
char tmp[20]={0};
int i;
int bgo = 1;
int bfind = 0;
Guest* pguest = 0;
char ch;
while(bgo)
{
system("cls");
memset(tmp,0,20);
bfind = 0;
printf("请输入需要查询的用户编号或者姓名或者电话:");
scanf("%s",tmp);
pguest = 0;
for (i=0;i<nmbGueset;i++)
{
if (strcmp(guest[i]->getId(),tmp)==0 || strcmp(guest[i]->getName(),tmp)==0 || strcmp(guest[i]->getPhone(),tmp)==0 )
{
pguest = guest[i];
}
}

    if (pguest == 0)
    {
        printf("未找到该用户\n");
    }else
    {
        printf("用户编号:%s\n",pguest->getId());
        printf("用户姓名:%s\n",pguest->getName());
        printf("用户电话:%s\n",pguest->getPhone());
        for (i=0;i<nmbInfo;i++)
        {
            if(useinfo[i].guest == pguest )
            {
                useinfo[i].show();
                break;
            }
        }
    }

    printf("是否继续查询(y/n)?");
    while(1)
    {
        scanf(" %c",&ch);
        getchar();
        if(ch == 'y' || ch == 'Y')
            break;
        else if(ch =='n'||ch == 'N')
        {
            bgo = false;
            break;
        }
    }

    
}

}

//汽车归还
void CarBack(struct UseInfo useinfo[],int nmbInfo)
{
char id[20]={0};
int i;
Date cur;
int year,mont,day;
int price = 0;
system("cls");
printf("请输入归还车辆的编号:");
scanf("%s",id);
for (i=0;i<nmbInfo;i++)
{
if (strcmp(id,useinfo[i].pCar->getId()) == 0 )
{
if(useinfo[i].guest != 0)
{
//计算应付金额
cur = GetCurTime();
Caculate(useinfo[i].date,cur,&year,&mont,&day);
printf("起租时间:%d年%d月%d天\n",useinfo[i].date.year,useinfo[i].date.month,useinfo[i].date.day);
printf("还车时间:%d年%d月%d天\n",cur.year,cur.month,cur.day);
printf("租借时长:%d年%d月%d天\n",year,mont,day);
price = year * useinfo[i].pCar->getYearprice() + mont*useinfo[i].pCar->getMonprice() + day * useinfo[i].pCar->getDayprice();
printf("应缴金额:%d\n",price);
useinfo[i].guest = 0;
}else
printf("该车辆尚未出租\n");

        break;
    }
}
if (i==nmbInfo)
{
    printf("未找到该编号的车辆\n");
}
system("pause");

}

int main()
{
struct UseInfo useinfo[50]; //保存租赁信息
int nmbZl = 0; //实际租赁信息条数
class Car* cars[50]; //保存汽车信息
int nmbCars = 0; //实际有的汽车数量
class Guest* guest[50]; //保存顾客信息
int nmbGuest = 0; //实际顾客数量
int bgo = 1; //系统运行标识
int opt;
while(bgo)
{
system("cls");
printf("----------------汽车租赁管理系统-----------------\n");
printf("| 1.录入汽车信息 |\n");
printf("| 2.汽车租赁 |\n");
printf("| 3.汽车信息查询 |\n");
printf("| 4.顾客信息查询 |\n");
printf("| 5.车辆归还 |\n");//在归还时计算费用
printf("| 0.退出系统 |\n");
printf("-------------------------------------------------\n");

    scanf("%d",&opt);
    switch(opt)
    {
    case 0:
        bgo = 0;
        break;
    case 1:
        AddNewCar(cars,&nmbCars,useinfo,&nmbZl);
        break;
    case 2:
        UseCar(useinfo,nmbZl,guest,&nmbGuest);
        break;
    case 3:
        FindCar(useinfo,nmbZl);
        break;
    case 4:
        FindUser(useinfo,nmbZl,guest,nmbGuest);
        break;
    case 5:
        CarBack(useinfo,nmbZl);
        break;
    }
}
return 0;

}

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-07-03 10:08
    关注

    下面的评论不要看了,我代码重新改了,具体如下:
    1.重写了文件保存,原来是逗号分隔,现在改为空格分隔
    2.重写了文件读取,直接用fscanf函数实现,去掉了原来的解析
    3.增加了修改租赁信息功能(只能修改租赁车辆的租赁时间)
    代码如下:

    #include <stdio.h>
    #include <string.h>
    #include <time.h>
    #include <stdlib.h>
    #include <process.h>
    //定义汽车类型
    enum ECarType
    {
        e_car_jc=1,
        e_car_kc
    };
    //定义汽车类
    class Car 
    {
    private:
        char mId[10];   //汽车编号
        enum ECarType mType; //汽车类型
        int mPriceDay;  //日租价格
        int mPriceMon;  //月租价格
        int mPriceYear; //年租价格
        //还可以添加颜色、品牌等等属性,这里就不加了,有兴趣自己添加就可以了
    public:
        Car(){}
        Car(char* id,enum ECarType e,int d,int m,int y)
        {
            strcpy(mId,id);
            mType = e;
            mPriceDay = d;
            mPriceMon = m;
            mPriceYear = y;
        };
        char* getId(){return mId;}
        enum ECarType getType(){return mType;}
        int getDayprice(){return mPriceDay;}
        int getMonprice(){return mPriceMon;}
        int getYearprice(){return mPriceYear;}
        void setId(char* p){strcpy(mId,p);}
        void setType(enum ECarType e){mType = e;}
        void setPrice(int d,int m,int y)
        {
            mPriceDay = d;
            mPriceMon = m;    
            mPriceYear = y;
        };
    };
    //定义租赁人信息
    class Guest 
    {
    private:
        char mId[20];   //租客编号
        char mName[20]; //租客姓名 
        char mPhone[12];//租客电话
    public:
        Guest(){}
        Guest(char* id,char* name,char* phone)
        {
            strcpy(mId,id);
            strcpy(mName,name);
            strcpy(mPhone,phone);
        }
        char* getId(){return mId;}
        char* getName(){return mName;}
        char* getPhone(){return mPhone;}
        void setId(char* id){strcpy(mId,id);}
        void setName(char* name){strcpy(mName,name);}
        void setPhone(char* phone){strcpy(mPhone,phone);}
    };
    //定义日期类
    struct Date 
    {
        int year;
        int month;
        int day;
    };
    
    //租赁信息
    struct UseInfo 
    {
        class Car* pCar;   //汽车实例
        class Guest* guest;//当前汽车租赁人
        struct Date date;  //租赁日期
        
        void show()
        {
            printf("车辆编号:%s\n",pCar->getId());
            if(pCar->getType() == e_car_jc)
                printf("车辆类型:轿车\n");
            else
                printf("车辆类型:客车\n");
            if(guest == 0)
            {
                printf("车辆状态:未出租\n");
            }
            else
            {
                printf("车辆状态:已出租\n");
                printf("出租日期:%d年%d月%d日\n",date.year,date.month,date.day);
            }
        }
    };
    //获取当前时间
    Date GetCurTime()
    {
        time_t timep;
        struct tm *p;
        Date dd;
        time(&timep);
        p = gmtime(&timep);
        dd.year = 1900 + p->tm_year;
        dd.month = 1+p->tm_mon;
        dd.day = p->tm_mday;
        return dd;
    }
    //计算两个日期间的年、月、日
    void Caculate(Date start,Date end,int *year,int *mon,int* day)
    {
        int ds[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
        *year = end.year - start.year;
        if (end.month < start.month)
        {
            *year = *year -1;
            *mon = end.month + 12 - start.month;
        }else
        {
            *mon = end.month - start.month;
        }
        if (end.day < start.day)
        {
            *mon = *mon -1;
            *day = end.day + ds[start.month] - start.day;
        }else
        {
            *day = end.day - start.day;
        }
    }
     
     
    //判断租车人是否存在,如果存在返回顾客实例指针,否则返回0
    class Guest* isExist(char* id,class Guest* guest[],int nmbGuest)
    {
        int i;
        for (i=0;i< nmbGuest;i++)
        {
            if(strcmp(guest[i]->getId(),id)==0)
                return guest[i];
        }
        return 0;
    }
     
    
    //读文件
    void ReadFile(char* filename,class Car* cars[],int* nmb,class Guest* guests[],int *nmbguest,struct UseInfo useinfo[],int *nmbInfo)
    {
        FILE* fp;
        //车辆信息
        char carId[20];
        int nCarType;
        int pyear,pmon,pday;
        //客户信息
        char guestId[20];
        char name[20];
        char phone[20];
        //租赁日期
        int year,mon,day;
     
        Car* pcar;
        Guest* pguest;
        char buf[200];
     
        if ((fp=fopen(filename,"r")) == 0)
        {
            printf("文件打开失败");
            return ;
        }
        while(!feof(fp))
        {
            memset(carId,0,20);
            memset(guestId,0,20);
            memset(name,0,20);
            memset(phone,0,20);
            memset(buf,0,200);
            
            fscanf(fp,"%s %d %d %d %d %s %s %s %d %d %d\n",carId,&nCarType,&pday,&pmon,&pyear,guestId,name,phone,&year,&mon,&day);
            if(nCarType == 1)
                pcar = new Car(carId,e_car_jc,pday,pmon,pyear);
            else
                pcar = new Car(carId,e_car_kc,pday,pmon,pyear);
     
            if(strcmp(guestId,"0") == 0)
                pguest = 0;
            else
            {
                pguest = isExist(guestId,guests,*nmbguest);
                if(pguest == 0)
                {
                    pguest = new Guest(guestId,name,phone);
                    guests[*nmbguest] = pguest;
                    *nmbguest = *nmbguest + 1;
                }
            }
     
            cars[*nmb] = pcar;
            *nmb = *nmb +1;
     
            useinfo[*nmbInfo].pCar = pcar;
            useinfo[*nmbInfo].guest = pguest;
            useinfo[*nmbInfo].date.year = year;
            useinfo[*nmbInfo].date.month = mon;
            useinfo[*nmbInfo].date.day = day;
            *nmbInfo = *nmbInfo+1;
        }
        fclose(fp);
     
    }
     
    //写文件
    void WriteFile(char* name,struct UseInfo useinfo[],int nmbInfo)
    {
        int i;
        FILE* fp;
        if ((fp = fopen(name,"w")) == 0)
        {
            printf("文件打开失败\n");
            return;
        }
        for (i=0;i<nmbInfo;i++)
        {
            if(useinfo[i].guest != 0)
                fprintf(fp,"%s %d %d %d %d %s %s %s %d %d %d\n",useinfo[i].pCar->getId(),useinfo[i].pCar->getType(),useinfo[i].pCar->getDayprice(),
                useinfo[i].pCar->getMonprice(),useinfo->pCar->getYearprice(),useinfo[i].guest->getId(),useinfo[i].guest->getName(),
                useinfo[i].guest->getPhone(),useinfo[i].date.year,useinfo[i].date.month,useinfo[i].date.day);
            else
                fprintf(fp,"%s %d %d %d %d 0 0 0 0 0 0\n",useinfo[i].pCar->getId(),useinfo[i].pCar->getType(),useinfo[i].pCar->getDayprice(),
                useinfo[i].pCar->getMonprice(),useinfo->pCar->getYearprice());
        }
        fclose(fp);
    }
     
     
     
    //添加汽车信息
    void AddNewCar(class Car* cars[],int* nmb,struct UseInfo useinfo[],int *nmbInfo)
    {
        int bgo = 1;
        char mId[10];   //汽车编号
        int type;       //汽车类型
        int mPriceDay;  //日租价格
        int mPriceMon;  //月租价格
        int mPriceYear; //年租价格
        char ch;
        class Car* pcar = 0;
        while(bgo)
        {
            system("cls");
            printf("请输入汽车编号:");
            scanf("%s",mId);
            printf("请输入汽车类型(1.轿车 2.客车)");
            scanf("%d",&type);
            printf("请输入日租价格、月租价格和年租价格,以空格分隔:");
            scanf("%d %d %d",&mPriceDay,&mPriceMon,&mPriceYear);
            pcar = new Car();
            pcar->setId(mId);
            if(type == 1)
                pcar->setType(e_car_jc);
            else
                pcar->setType(e_car_kc);
            pcar->setPrice(mPriceDay,mPriceMon,mPriceYear);
            cars[*nmb] = pcar;
            *nmb = *nmb + 1;
            //将汽车添加到租赁服务中
            useinfo[*nmbInfo].pCar = pcar;
            useinfo[*nmbInfo].guest = 0; //表示没有被租赁
            *nmbInfo = *nmbInfo + 1;
            printf("是否继续添加(y/n)?");
            while(1)
            {
                scanf(" %c",&ch);
                getchar();
                if(ch == 'y' || ch == 'Y')
                    break;
                else if(ch =='n'||ch == 'N')
                {
                    bgo = false;
                    break;
                }
            }
        }
        system("pause");
    }
     
    //根据条件获取可用的车辆
    class Car* getUsefullCar(struct UseInfo useinfo[],int nmbInfo,ECarType ecar,int *index)
    {
        int i;
        for (i=0;i<nmbInfo;i++)
        {
            if (useinfo[i].guest == 0 && useinfo[i].pCar != 0 && useinfo[i].pCar->getType() == ecar)
            {
                *index = i;
                return useinfo[i].pCar;
            }
        }
        return 0;
    }
    //汽车租赁
    void UseCar(struct UseInfo useinfo[],int nmbInfo,class Guest* guest[],int *nmbGuest)
    {
        char name[20]={0};
        char id[20]={0};
        char phone[20]={0};
        int type;
        int mode;
        Guest* gu = 0;
        Car* pcar = 0;
        ECarType eCar;
        //EUseType eUse;
        int index = 0;
        int y,m,d;
        system("cls");
        printf("请输入租车人的编号:");
        scanf("%s",id);
        printf("请输入租车人的姓名:") ;
        scanf("%s",name);
        printf("请输入租车人的电话:");
        scanf("%s",phone);
        gu = isExist(id,guest,*nmbGuest);
        if(gu == 0)
        {
            gu = new Guest(id,name,phone);
            guest[*nmbGuest] = gu;
            *nmbGuest = *nmbGuest + 1;
        }
        //
        printf("请输入租车类型:1.轿车 2.客车:");
        scanf("%d",&type);
        //printf("请输入租车方式:1.日租 2.月租 3.年租:");
        //scanf("%d",&mode);
        printf("请输入起租日期:");
        scanf("%d %d %d",&y,&m,&d);
        if(type == 1)
            eCar = e_car_jc;
        else
            eCar = e_car_kc;
        /*if(mode == 1)
        eUse = e_use_day;
        else if(mode == 2)
        eUse = e_use_month;
        else
        eUse = e_use_year;*/
        pcar = getUsefullCar(useinfo,nmbInfo,eCar,&index);
        if(pcar == 0)
            printf("当前已无该类型的车辆可以出租\n");
        else
        {
            useinfo[index].guest = gu;
            /*if(1==mode)
            useinfo[index].type = e_use_day;
            else if(2== mode)
            useinfo[index].type = e_use_month;
            else
            useinfo[index].type = e_use_year;*/
            useinfo[index].date.year = y;
            useinfo[index].date.month = m;
            useinfo[index].date.day = d;
            printf("租车成功,车辆编号:%s\n",pcar->getId());
        }
        system("pause");
    }
    //汽车信息查询
    void FindCar(struct UseInfo useinfo[],int nmbInfo)
    {
        char id[20]={0};
        int type;
        int opt,i;
        int isfind ;
        int bgo = 1;
        char ch;
        while(bgo)
        {
            system("cls");
            printf("1.根据编号查询\n");
            printf("2.根据类型查询\n");
            printf("3.查询已出租车辆\n");
            printf("4.查询未出租车辆\n");
            printf("5.显示全部车辆\n");
            scanf("%d",&opt);
            switch(opt)
            {
            case 1:
                printf("请输入编号");
                scanf("%s",id);
                for (i=0;i<nmbInfo;i++)
                {
                    if (strcmp(id,useinfo[i].pCar->getId()) == 0)
                    {
                        useinfo[i].show();
                        break;
                    }
                }
                if(i == nmbInfo)
                    printf("未找到编号为%s的车辆\n",id);
                break;
            case 2:
                printf("请输入类型(1.轿车 2.客车):");
                scanf("%d",&type);
                isfind = 0;
                for (i=0;i<nmbInfo;i++)
                {
                    if ( useinfo[i].pCar->getType() == type)
                    {
                        useinfo[i].show();
                        isfind = 1;
                    }
                }
                if(0== isfind)
                    printf("未找到该类型的车辆\n");
                break;
            case 3:
                isfind = 0;
                for (i=0;i<nmbInfo;i++)
                {
                    if ( useinfo[i].guest != 0)
                    {
                        useinfo[i].show();
                        isfind = 1;
                    }
                }
                if(0== isfind)
                    printf("未找到符合要求的车辆\n");
                break;
            case 4:
                isfind = 0;
                for (i=0;i<nmbInfo;i++)
                {
                    if ( useinfo[i].guest == 0)
                    {
                        useinfo[i].show();
                        isfind = 1;
                    }
                }
                if(0== isfind)
                    printf("未找到符合要求的车辆\n");
                break;
            case 5:
                for (i=0;i<nmbInfo;i++)
                {
                    useinfo[i].show();
                }
                break;
            }
            printf("是否继续查询(Y/N)?");
            while(1)
            {
                scanf(" %c",&ch);
                getchar();
                if(ch == 'y' || ch == 'Y')
                    break;
                else if(ch =='n'||ch == 'N')
                {
                    bgo = false;
                    break;
                }
            }
        }
        system("pause");
    }
    //查询用户信息
    void FindUser(struct UseInfo useinfo[],int nmbInfo,class Guest* guest[],int nmbGueset)
    {
        char tmp[20]={0};
        int i;
        int bgo = 1;
        int bfind = 0;
        Guest* pguest = 0;
        char ch;
        while(bgo)
        {
            system("cls");
            memset(tmp,0,20);
            bfind = 0;
            printf("请输入需要查询的用户编号或者姓名或者电话:");
            scanf("%s",tmp);
            pguest = 0;
            for (i=0;i<nmbGueset;i++)
            {
                if (strcmp(guest[i]->getId(),tmp)==0 || strcmp(guest[i]->getName(),tmp)==0 || strcmp(guest[i]->getPhone(),tmp)==0  )
                {
                    pguest = guest[i];
                }
            }
            if (pguest == 0)
            {
                printf("未找到该用户\n");
            }else
            {
                printf("用户编号:%s\n",pguest->getId());
                printf("用户姓名:%s\n",pguest->getName());
                printf("用户电话:%s\n",pguest->getPhone());
                for (i=0;i<nmbInfo;i++)
                {
                    if(useinfo[i].guest == pguest )
                    {
                        useinfo[i].show();
                        break;
                    }
                }
            }
            printf("是否继续查询(y/n)?");
            while(1)
            {
                scanf(" %c",&ch);
                getchar();
                if(ch == 'y' || ch == 'Y')
                    break;
                else if(ch =='n'||ch == 'N')
                {
                    bgo = false;
                    break;
                }
            }
        }
    }
    
    //修改租赁信息
    void ModZlInfo(struct UseInfo useinfo[],int nmbInfo)
    {
        int i=0;
        int year,mon,day;
        char id[20]={0};
        system("cls");
        printf("请输入需要修改信息的车辆编号:");
        scanf("%s",id);
        for (i=0;i<nmbInfo;i++)
        {
            if(strcmp(id,useinfo[i].pCar->getId()) == 0)
            {
                break;
            }
        }
        if(i == nmbInfo)
            printf("没有找到该编号的车辆...\n");
        else
        {
            useinfo[i].show();
            if(useinfo[i].guest == 0)
                printf("该车辆尚未租赁,无法修改信息\n");
            else
            {
                printf("请输入需要修改的日期:");
                scanf("%d %d %d",&year,&mon,&day);
                useinfo[i].date.year = year;
                useinfo[i].date.month = mon;
                useinfo[i].date.day = day;
                printf("租赁日期修改成功!\n");
            }
            
        }
        system("pause");
    }
    
    
    //汽车归还
    void CarBack(struct UseInfo useinfo[],int nmbInfo)
    {
        char id[20]={0};
        int i;
        Date cur;
        int year,mont,day;
        int price = 0;
        system("cls");
        printf("请输入归还车辆的编号:");
        scanf("%s",id);
        for (i=0;i<nmbInfo;i++)
        {
            if (strcmp(id,useinfo[i].pCar->getId()) == 0 )
            {
                if(useinfo[i].guest != 0)
                {
                    //计算应付金额
                    cur = GetCurTime();
                    Caculate(useinfo[i].date,cur,&year,&mont,&day);
                    printf("起租时间:%d年%d月%d天\n",useinfo[i].date.year,useinfo[i].date.month,useinfo[i].date.day);
                    printf("还车时间:%d年%d月%d天\n",cur.year,cur.month,cur.day);
                    printf("租借时长:%d年%d月%d天\n",year,mont,day);
                    price = year * useinfo[i].pCar->getYearprice() + mont*useinfo[i].pCar->getMonprice() + day * useinfo[i].pCar->getDayprice();
                    printf("应缴金额:%d\n",price);
                    useinfo[i].guest = 0;
                }else
                    printf("该车辆尚未出租\n");
                break;
            }
        }
        if (i==nmbInfo)
        {
            printf("未找到该编号的车辆\n");
        }
        system("pause");
    }
    int main()
    {
        struct UseInfo useinfo[50];   //保存租赁信息
        int nmbZl = 0;                //实际租赁信息条数
        class Car* cars[50];    //保存汽车信息
        int nmbCars = 0;        //实际有的汽车数量
        class Guest* guest[50]; //保存顾客信息
        int nmbGuest = 0;       //实际顾客数量
        int bgo = 1;            //系统运行标识
        int opt;
        //读取历史数据
        ReadFile("out.txt",cars,&nmbCars,guest,&nmbGuest,useinfo,&nmbZl);
        while(bgo)
        {
            system("cls");
            printf("----------------汽车租赁管理系统-----------------\n");
            printf("|    1.录入汽车信息                             |\n");
            printf("|    2.汽车租赁                                 |\n");
            printf("|    3.汽车信息查询                             |\n");
            printf("|    4.顾客信息查询                             |\n");
            printf("|    5.修改租赁信息                             |\n");//在归还时计算费用
            printf("|    6.车辆归还                                 |\n");//在归还时计算费用
            printf("|    0.退出系统                                 |\n");
            printf("-------------------------------------------------\n");
            scanf("%d",&opt);
            switch(opt)
            {
            case 0:
                WriteFile("out.txt",useinfo,nmbZl);
                bgo = 0;
                break;
            case 1:
                AddNewCar(cars,&nmbCars,useinfo,&nmbZl);
                break;
            case 2:
                UseCar(useinfo,nmbZl,guest,&nmbGuest);
                break;
            case 3:
                FindCar(useinfo,nmbZl);
                break;
            case 4:
                FindUser(useinfo,nmbZl,guest,nmbGuest);
                break;
            case 5:
                ModZlInfo(useinfo,nmbZl);
                break;
            case 6:
                CarBack(useinfo,nmbZl);
                break;
            }
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用