修改学生信息管理系统以及查询

// 修改学生信息实现
void modifyStudent(StudentManager *manager) 
{
    if (manager->count == 0) 
    {
        printf("没有学生信息可修改\n");
        return;
    }
    
    int id;
    printf("请输入要修改的学生学号: ");
    scanf("%d", &id);
    getchar();  // 清除输入缓冲区
    
    int found = 0;
    for (int i = 0; i < manager->count; i++) 
    {
        if (manager->students[i].id == id) 
        {
            printf("请输入新姓名: ");
            fgets(manager->students[i].name, MAX_NAME_LENGTH, stdin);
            manager->students[i].name[strcspn(manager->students[i].name, "\n")] = 0;
            
            printf("请输入新的三门课成绩: ");
            scanf("%f %f %f", 
                  &manager->students[i].scores[0], 
                  &manager->students[i].scores[1], 
                  &manager->students[i].scores[2]);
            
            // 重新计算总分和平均分
            manager->students[i].total = 0;
            for (int j = 0; j < 3; j++) 
            {
                manager->students[i].total += manager->students[i].scores[j];
            }
            manager->students[i].average = manager->students[i].total / 3;
            
            found = 1;
            printf("学生信息修改成功\n");
            break;
        }
    }
    
    if (!found) 
    {
        printf("未找到该学号的学生\n");
    }
}
//查询学生以及实现

void querryStudent(StudentManager*manager)

{

        if(manager->count=0)

        {

                printf("没有学生信息可查询\n");

return;
    }
    
    int id;
    printf("请输入要查询的学生学号: ");
    scanf("%d", &id);
    getchar();  // 清除输入缓冲区
    
    int found = 0;
    for (int i = 0; i < manager->count; i++) 
    {
        if (manager->students[i].id == id) 
        {
            printf("学号: %d\n", manager->students[i].id);
            printf("姓名: %s\n", manager->students[i].name);
            printf("成绩: %.1f %.1f %.1f\n", 
                   manager->students[i].scores[0],
                   manager->students[i].scores[1],
                   manager->students[i].scores[2]);
            printf("总分: %.1f\n", manager->students[i].total);
            printf("平均分: %.1f\n", manager->students[i].average);
            found = 1;
            break;
        }
    }
    
    if (!found) 
    {
        printf("未找到该学号的学生\n");
    }
}

// 排序学生实现 (按总分降序)
void sortStudents(StudentManager *manager) 
{
    if (manager->count <= 1) 
    {
        printf("无需排序\n");
        return;
    }
    
    // 冒泡排序实现
    for (int i = 0; i < manager->count - 1; i++) 
    {
        for (int j = 0; j < manager->count - i - 1; j++) 
        {
            if (manager->students[j].total < manager->students[j + 1].total) 
            {
                // 交换两个学生
                Student temp = manager->students[j];
                manager->students[j] = manager->students[j + 1];
                manager->students[j + 1] = temp;
            }
        }
    }
    
    printf("学生已按总分降序排列\n");
}

// 显示所有学生实现
void displayAll(StudentManager *manager) 
{
    if (manager->count == 0) 
    {
        printf("没有学生信息可显示\n");
        return;
    }
    
    printf("\n所有学生信息:\n");
    printf("学号\t姓名\t\t成绩1\t成绩2\t成绩3\t总分\t平均分\n");
    for (int i = 0; i < manager->count; i++) 
    {
        printf("%d\t%-15s%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n", 
               manager->students[i].id,
               manager->students[i].name,
               manager->students[i].scores[0],
               manager->students[i].scores[1],
               manager->students[i].scores[2],
               manager->students[i].total,
               manager->students[i].average);
    }
}

// 文件保存示例
void saveToFile(StudentManager *manager) 
{
    FILE *file = fopen(FILENAME, "wb");
    if (file == NULL) 
    {
        printf("无法打开文件\n");
        return;
    }
    
    // 写入学生数量
    fwrite(&manager->count, sizeof(int), 1, file);
    // 写入所有学生数据
    fwrite(manager->students, sizeof(Student), manager->count, file);
    
    fclose(file);
}

// 文件读取示例
void loadFromFile(StudentManager *manager) 
{
    FILE *file = fopen(FILENAME, "rb");
    if (file == NULL) 
    {
        printf("无法打开文件,将使用空数据\n");
        return;
    }
    
    // 读取学生数量
    fread(&manager->count, sizeof(int), 1, file);
    // 读取所有学生数据
    fread(manager->students, sizeof(Student), manager->count, file);
    
    fclose(file);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值