///程序启动

///1 读取 | 2 保存 | 3 打印 | 4 查询 | 5 添加
///6 修改 | 7 删除 | 8 排序 | 9 图表 | 0 退出

///请选择: 0 
///确定要退出吗?(Y/N):  no

    
    
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include "data.h"

    enum {
    CMD_QUIT,   // 退出
    CMD_READ,   // 读取
    CMD_SAVE,   // 保存
    CMD_PRINT,  // 打印
    CMD_QUERY,  // 查询
    CMD_INSERT, // 添加
    CMD_UPDATE, // 修改
    CMD_DELETE, // 删除
    CMD_SORT,   // 排序
    CMD_CHART,  // 图表
    };


    // 函数声明
    void init(void);         // 程序启动
    void quit(void);         // 程序退出
    void display_menu(void); // 显示命令菜单
    int make_choice(void);   // 选择命令
    int confirm(const char* msg); // 确认


    // 主函数
    int main(void)
    {
        init();  // 程序启动
        for(;;) {
        display_menu();  //
        int c = make_choice();
        switch(c) {
        case CMD_READ:
            read_data();
            break;
        case CMD_SAVE:
            save_data();
            break;
        case CMD_PRINT:
            print_data();
            break;
        case CMD_QUERY:
            query_data();
            break;
        case CMD_INSERT:
            add_data();
            break;
        case CMD_UPDATE:
            update_data();
            break;
        case CMD_DELETE:
            delete_data();
            break;
        case CMD_SORT:
            sort_data();
            break;
        case CMD_CHART:
            make_chart();
            break;
        case CMD_QUIT:
            if (confirm("确定要退出吗?")) quit(); // 仅在确认后退出
            break;
        default:
            puts("命令错误,请重新选择");
            break;}
        }
        quit();  // 程序退出
        return 0;
    }
    // 函数定义
    void init(void)
    {
     puts("程序启动");
    }
    void quit(void)
    {
    puts("程序退出");
    exit(EXIT_SUCCESS);
    }
    void display_menu(void)
    {
        printf("\n%d 读取 | %d 保存 | %d 打印 | %d 查询 | %d 添加\n%d 修改 | %d 删除 | %d 排序 | %d 图表 | %d 退出\n\n",
        CMD_READ,CMD_SAVE,CMD_PRINT,CMD_QUERY,CMD_INSERT,CMD_UPDATE,CMD_DELETE,CMD_SORT,CMD_CHART,CMD_QUIT);
    }
    int make_choice(void)
    {
        int c;     // 用户输入
        int n = 0; // 正确读入的数据项个数
        while (n == 0) {
            printf("请选择:");
            n = scanf("%d", &c); // 尝试读入整数 c
            scanf("%*[^\n]");    // 跳过一行中剩余的字符
    }
    return c;
    }
    int confirm(const char* msg)
    {
        char c = 'n';                // 默认选择是 no
        printf("%s(Y/N): ", msg);    // 提示输入 yes/no 进行确认
        scanf(" %c%*[^\n]", &c);     // 读取第一个字符,忽略剩余字符
        return c == 'y' || c == 'Y'; // 返回确认结果
    }