编辑代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_PLAYERS 200
#define NAME_SIZE 50
#define TEAM_SIZE 50
#define POSITION_SIZE 20

// 定义球员结构体
typedef struct {
    char name[NAME_SIZE];
    char team[TEAM_SIZE];
    char position[POSITION_SIZE];
    int age;
} Player;

// 全局变量,存储球员信息
Player players[MAX_PLAYERS];
int playerCount = 0;

// 函数声明
void addPlayer();
void displayPlayers();
void searchPlayer();
void showMenu();
void clearInputBuffer();
void savePlayersToFile();
void loadPlayersFromFile();

int main() {
    // 加载球员信息
    loadPlayersFromFile();

    int choice;
    do {
        showMenu();
        scanf("%d", &choice);
        clearInputBuffer(); // 清除输入缓冲区

        switch (choice) {
            case 1:
                addPlayer();
                break;
            case 2:
                displayPlayers();
                break;
            case 3:
                searchPlayer();
                break;
            case 4:
                printf("退出程序。\n");
                // 保存球员信息
                savePlayersToFile();
                break;
            default:
                printf("无效选项,请重新输入。\n");
        }
    } while (choice != 4);

    return 0;
}

void showMenu() {
    printf("\n===== 台湾足球球员管理系统 =====\n");
    printf("1. 添加球员信息\n");
    printf("2. 显示所有球员信息\n");
    printf("3. 搜索球员信息\n");
    printf("4. 退出程序\n");
    printf("请输入您的选择:");
}

void addPlayer() {
    if (playerCount >= MAX_PLAYERS) {
        printf("球员信息已满,无法添加更多球员。\n");
        return;
    }

    printf("请输入球员姓名:");
    fgets(players[playerCount].name, NAME_SIZE, stdin);
    players[playerCount].name[strcspn(players[playerCount].name, "\n")] = 0; // 去掉换行符

    printf("请输入球员所属球队:");
    fgets(players[playerCount].team, TEAM_SIZE, stdin);
    players[playerCount].team[strcspn(players[playerCount].team, "\n")] = 0; // 去掉换行符

    printf("请输入球员位置:");
    fgets(players[playerCount].position, POSITION_SIZE, stdin);
    players[playerCount].position[strcspn(players[playerCount].position, "\n")] = 0; // 去掉换行符

    printf("请输入球员年龄:");
    scanf("%d", &players[playerCount].age);
    clearInputBuffer(); // 清除输入缓冲区

    playerCount++;
    printf("球员信息添加成功!\n");
}

void displayPlayers() {
    if (playerCount == 0) {
        printf("没有球员信息。\n");
        return;
    }

    printf("\n===== 球员信息列表 =====\n");
    for (int i = 0; i < playerCount; i++) {
        printf("姓名: %s, 球队: %s, 位置: %s, 年龄: %d\n",
               players[i].name, players[i].team, players[i].position, players[i].age);
    }
}

void searchPlayer() {
    char playerName[NAME_SIZE];
    printf("请输入要搜索的球员姓名:");
    fgets(playerName, NAME_SIZE, stdin);
    playerName[strcspn(playerName, "\n")] = 0; // 去掉换行符

    int found = 0;
    for (int i = 0; i < playerCount; i++) {
        if (strcmp(players[i].name, playerName) == 0) {
            printf("找到球员信息:姓名: %s, 球队: %s, 位置: %s, 年龄: %d\n",
                   players[i].name, players[i].team, players[i].position, players[i].age);
            found = 1;
            break;
        }
    }

    if (!found) {
        printf("未找到该球员信息。\n");
    }
}

void clearInputBuffer() {
    int c;
    while ((c = getchar()) != '\n' && c != EOF) {} // 清空输入缓冲区
}

void savePlayersToFile() {
    FILE *file = fopen("players.txt", "w");
    if (file == NULL) {
        printf("无法打开文件进行写入。\n");
        return;
    }

    for (int i = 0; i < playerCount; i++) {
        fprintf(file, "%s,%s,%s,%d\n",
                players[i].name, players[i].team, players[i].position, players[i].age);
    }

    fclose(file);
    printf("球员信息已保存到文件。\n");
}

void loadPlayersFromFile() {
    FILE *file = fopen("players.txt", "r");
    if (file == NULL) {
        printf("无法打开文件进行读取。\n");
        return;
    }

    playerCount = 0;
    while (fscanf(file, "%[^,],%[^,],%[^,],%d\n",
                  players[playerCount].name,
                  players[playerCount].team,
                  players[playerCount].position,
                  &players[playerCount].age) != EOF) {
        playerCount++;
    }

    fclose(file);
    printf("球员信息已从文件加载。\n");
}