首先,我们需要定义航班和用户的结构体:

// 航班信息结构体
typedef struct {
    char flightNo[10];  // 班次号
    char departure[20];  // 始发地
    char destination[20];  // 目的地
    char departureTime[20];  // 出发时间
    char arrivalTime[20];  // 到达时间
    float price;  // 金额
    int numOfPassengers;  // 人数
} Flight;

// 用户信息结构体
typedef struct {
    char username[20];  // 用户名
    char password[20];  // 密码
    float balance;  // 余额
    int isVip;  // 是否为会员,0表示普通用户,1表示会员
} User;

接下来,我们定义航班管理系统的函数:

// 添加航班信息
void addFlight(Flight *flights, int *numOfFlights) {
    // 输入航班信息
    printf("请输入航班信息:\n");
    printf("班次号:");
    scanf("%s", flights[*numOfFlights].flightNo);
    printf("始发地:");
    scanf("%s", flights[*numOfFlights].departure);
    printf("目的地:");
    scanf("%s", flights[*numOfFlights].destination);
    printf("出发时间:");
    scanf("%s", flights[*numOfFlights].departureTime);
    printf("到达时间:");
    scanf("%s", flights[*numOfFlights].arrivalTime);
    printf("金额:");
    scanf("%f", &flights[*numOfFlights].price);
    printf("人数:");
    scanf("%d", &flights[*numOfFlights].numOfPassengers);
    
    (*numOfFlights)++;
}

// 删除航班信息
void deleteFlight(Flight *flights, int *numOfFlights, char *flightNo) {
    int i, j;
    for (i = 0; i < *numOfFlights; i++) {
        if (strcmp(flights[i].flightNo, flightNo) == 0) {
            for (j = i+1; j < *numOfFlights; j++) {
                strcpy(flights[j-1].flightNo, flights[j].flightNo);
                strcpy(flights[j-1].departure, flights[j].departure);
                strcpy(flights[j-1].destination, flights[j].destination);
                strcpy(flights[j-1].departureTime, flights[j].departureTime);
                strcpy(flights[j-1].arrivalTime, flights[j].arrivalTime);
                flights[j-1].price = flights[j].price;
                flights[j-1].numOfPassengers = flights[j].numOfPassengers;
            }
            (*numOfFlights)--;
            printf("航班删除成功!\n");
            return;
        }
    }
    printf("未找到该班次号的航班!\n");
}

// 查询航班信息
void queryFlight(Flight *flights, int numOfFlights) {
    printf("航班信息如下:\n");
    for (int i = 0; i < numOfFlights; i++) {
        printf("班次号:%s\n", flights[i].flightNo);
        printf("始发地:%s\n", flights[i].departure);
        printf("目的地:%s\n", flights[i].destination);
        printf("出发时间:%s\n", flights[i].departureTime);
        printf("到达时间:%s\n", flights[i].arrivalTime);
        printf("金额:%.2f\n", flights[i].price);
        printf("人数:%d\n", flights[i].numOfPassengers);
        printf("---------------------------\n");
    }
}

// 票数加减
void changeNumOfPassengers(Flight *flights, int numOfFlights, char *flightNo, int change) {
    for (int i = 0; i < numOfFlights; i++) {
        if (strcmp(flights[i].flightNo, flightNo) == 0) {
            flights[i].numOfPassengers += change;
            printf("票数修改成功!\n");
            return;
        }
    }
    printf("未找到该班次号的航班!\n");
}

// 注册用户
void registerUser(User *users, int *numOfUsers) {
    printf("请输入用户名:");
    scanf("%s", users[*numOfUsers].username);
    printf("请输入密码:");
    scanf("%s", users[*numOfUsers].password);
    users[*numOfUsers].balance = 10000;
    users[*numOfUsers].isVip = 0;
    
    (*numOfUsers)++;
    printf("用户注册成功!\n");
}

// 登录用户
User* loginUser(User *users, int numOfUsers) {
    char username[20], password[20];
    printf("请输入用户名:");
    scanf("%s", username);
    printf("请输入密码:");
    scanf("%s", password);
    
    for (int i = 0; i < numOfUsers; i++) {
        if (strcmp(users[i].username, username) == 0 && strcmp(users[i].password, password) == 0) {
            printf("登录成功!\n");
            return &users[i];
        }
    }
    
    printf("用户名或密码错误!\n");
    return NULL;
}

// 购票
void buyTicket(User *user, Flight *flights, int numOfFlights, char *flightNo) {
    for (int i = 0; i < numOfFlights; i++) {
        if (strcmp(flights[i].flightNo, flightNo) == 0) {
            float price = flights[i].price;
            if (user->isVip) {
                price *= 0.9;  // 会员九折
            }
            if (user->balance >= price) {
                user->balance -= price;
                flights[i].numOfPassengers++;
                printf("购票成功!\n");
                return;
            } else {
                printf("余额不足,购票失败!\n");
                return;
            }
        }
    }
    printf("未找到该班次号的航班!\n");
}

// 退票
void refundTicket(User *user, Flight *flights, int numOfFlights, char *flightNo) {
    for (int i = 0; i < numOfFlights; i++) {
        if (strcmp(flights[i].flightNo, flightNo) == 0) {
            float price = flights[i].price;
            if (user->isVip) {
                price *= 0.9;  // 会员统一都是原价
            }
            time_t now = time(NULL);
            struct tm *tm = localtime(&now);
            
            // 计算退票金额
            if (difftime(mktime(tm), mktime(departureTime)) <= 3600) {
                price *= 0.8;  // 起飞前一个小时80%
            } else if (difftime(mktime(tm), mktime(departureTime)) <= 86400) {
                price *= 0.9;  // 起飞前一天90%
            }
            
            user->balance += price;
            flights[i].numOfPassengers--;
            printf("退票成功!\n");
            return;
        }
    }
    printf("未找到该班次号的航班!\n");
}

// 查询航班信息(单一查询)
void querySingleFlight(Flight *flights, int numOfFlights, char *flightNo) {
    for (int i = 0; i < numOfFlights; i++) {
        if (strcmp(flights[i].flightNo, flightNo) == 0) {
            printf("班次号:%s\n", flights[i].flightNo);
            printf("始发地:%s\n", flights[i].departure);
            printf("目的地:%s\n", flights[i].destination);
            printf("出发时间:%s\n", flights[i].departureTime);
            printf("到达时间:%s\n", flights[i].arrivalTime);
            printf("金额:%.2f\n", flights[i].price);
            printf("人数:%d\n", flights[i].numOfPassengers);
            return;
        }
    }
    printf("未找到该班次号的航班!\n");
}

int main() {
    Flight flights[5];  // 航班信息数组
    int numOfFlights = 0;  // 航班数量
    User users[3];  // 用户信息数组
    int numOfUsers = 0;  // 用户数量
    
    // 初始化航班信息
    // ...
    
    // 初始化用户信息
    // ...
    
    // 管理员登录
    // ...
    
    // 添加航班信息
    // ...
    
    // 删除航班信息
    // ...
    
    // 查询航班信息
    // ...
    
    // 票数加减
    // ...
    
    // 用户注册
    // ...
    
    // 用户登录
    // ...
    
    // 购票
    // ...
    
    // 退票
    // ...
    
    // 查询航班信息(单一查询)
    // ...
    
    return 0;
}

以上是一个简单的航班管理系统的实现,你可以根据需要添加更多功能和逻辑。

C语言链表实现航班管理系统:添加、删除、查询、购票、退票

原文地址: https://www.cveoy.top/t/topic/qhJz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录