c语言基础/数据结构--------学生管理系统

学生管理系统项目实现

学生管理系统项目预期:
1.平台开发环境 Linux 系统 + gcc + gdb + make
2.相关结构信息 学生信息: 基本数据信息: 学号: int 姓名: char 128 密码: char 32 年龄: int 班级: int  成绩信息: 数学成绩: int C语言成绩: int 语文成绩: int 名次: int
3. 功能描述 使用终端命令界面,作为系统的输入输出界面
3.1 登录功能 登录功能: 学生的账户,密码 老师的账户,密码 系统启动后提示登录界面。使用用户名和密码登录。学生和老师都可登录 用户名和密码正确登录成功,显示欢迎界面:“欢迎XX同学(老师)登录”显示操作界面 如果输入用户名和密码错误连续提示,超过3次自动退出
3.2 学生功能: 实现对学生信息基本信息的录入,其中名次根据成绩自动计算(添加). 学号不能重复 删除学生信息 修改学生信息 查找学生信息根据学号查找 根据姓名查找 根据班级群体查找,把属于这个班的学生全部显示 显示所有学生信息列表 按学号顺序显示 按名次显示 按某学科(可选)成绩顺序显示,并在最后显示出此科平均分 退出系统
4.项目实施计划 完成学生信息管理的部分 5.项目要求 使用Makefile对项目进行编译 参考代码存放到不同文件中 main.c、menu.c、student.c、student.h、Makefile

c语言基础/数据结构--------学生管理系统_第1张图片

运行代码:

main.c主函数文件

//main.c主函数文件

#include "student.h"                                                                       
                                                                                           
// 初始化系统                                                                              
void init_system() {                                                                       
    // 添加初始化代码,如从文件加载数据                                                    
    student_count = 0;                                                                     
                                                                                           
    // 测试数据                                                                            
    Student test_student1 = {1, "zhangsan", "123456", 20, 1, 85.5, 90.0, 78.5, 0, 0};      
    Student test_student2 = {2, "lisilisi", "123456", 21, 1, 92.0, 88.5, 95.0, 0, 0};      
    Student test_student3 = {3, "wangwu", "123456", 20, 2, 76.5, 82.0, 89.0, 0, 0};        
                                                                                           
                                                                                           
    students[student_count++] = test_student1;                                             
    students[student_count++] = test_student2;                                             
    students[student_count++] = test_student3;                                             
                                                                                           
    // 计算排名                                                                            
    calculate_ranks();                                                                     
                                                                                           
    printf("系统初始化完成,加载了 %d 名学生信息\n", student_count);                       
}                                                                                          
                                                                                           
int main() {                                                                               
    // 初始化系统                                                                          
    init_system();                                                                         
                                                                                           
    // 登录验证                                                                            
    int user_type = login();                                                               
                                                                                           
    if (user_type == -1) {                                                                 
        printf("登录失败,程序退出\n");                                                    
        return 1;                                                                          
    }                                                                                      
                                                                                           
    // 根据用户类型显示不同菜单                                                            
    if (user_type == 1) {                                                                  
        // 教师菜单                                                                        
        teacher_menu();                                                                    
    } else {                                                                               
        // 学生菜单                                                                        
        student_menu();                                                                    
    }                                                                                      
                                                                                           
    return 0;                                                                              
}                                                                                          

makefile文件

//makefile自动执行文件

CC = gcc                         
CFLAGS = -Wall -g                
TARGET = student_manage          
SRCS = main.c menu.c student.c   
OBJS = $(SRCS:.c=.o)             
                                 
all: $(TARGET)                   
                                 
$(TARGET): $(OBJS)               
    $(CC) $(CFLAGS) -o $@ $^     
                                 
%.o: %.c student.h               
    $(CC) $(CFLAGS) -c $< -o $@  
                                 
clean:                           
    rm -f $(OBJS) $(TARGET)      
                                 
.PHONY: all clean                
                                 

menu.c 菜单

//menu.c菜单  

#include "student.h"                                                                                      
                                                                                                          
// 用户结构体定义和用户数据                                                                               
User users[] = {                                                                                          
    {"root", "123", 1},      // 管理账号                                                                  
    {"stu1", "123", 0},    // 学生账号                                                                    
    {"stu2", "123", 0}     // 学生账号                                                                    
};                                                                                                        
int user_count = 1000;                                                                                    
                                                                                                          
// 学生菜单                                                                                               
void student_menu() {                                                                                     
    int choice;                                                                                           
    int current_id;                                                                                       
                                                                                                          
    printf("\n请输入你的学号: ");                                                                         
    scanf("%d", ¤t_id);                                                                             
                                                                                                          
    int found = 0;                                                                                        
    for (int i = 0; i < student_count; i++) {                                                             
        if (students[i].id == current_id) {                                                               
            found = 1;                                                                                    
            break;                                                                                        
        }                                                                                                 
    }                                                                                                     
                                                                                                          
    if (!found) {                                                                                         
        printf("未找到该学号的学生\n");                                                                   
        return;                                                                                           
    }                                                                                                     
                                                                                                          
    do {                                                                                                  
        printf("\n===== 学生菜单 =====\n");                                                               
        printf("1. 查看个人信息\n");                                                                      
        printf("2. 修改个人信息\n");                                                                      
        printf("3. 查看班级排名\n");                                                                      
        printf("0. 返回\n");                                                                              
        printf("请选择: ");                                                                               
        scanf("%d", &choice);                                                                             
                                                                                                          
        switch (choice) {                                                                                 
            case 1:                                                                                       
                printf("\n个人信息:\n");                                                                  
                for (int i = 0; i < student_count; i++) {                                                 
                    if (students[i].id == current_id) {                                                   
                        printf("学号: %d\n", students[i].id);                                             
                        printf("姓名: %s\n", students[i].name);                                           
                        printf("年龄: %d\n", students[i].age);                                            
                        printf("班级: %d\n", students[i].class_id);                                       
                        printf("数学成绩: %.2f\n", students[i].math);                                     
                        printf("C语言成绩: %.2f\n", students[i].c_lang);                                  
                        printf("语文成绩: %.2f\n", students[i].chinese);                                  
                        printf("平均分: %.2f\n", students[i].average);                                    
                        printf("班级排名: %d\n", students[i].rank);                                       
                        break;                                                                            
                    }                                                                                     
                }                                                                                         
                break;                                                                                    
                                                                                                          
            case 2:                                                                                       
                printf("\n修改个人信息:\n");                                                              
                for (int i = 0; i < student_count; i++) {                                                 
                    if (students[i].id == current_id) {                                                   
                        printf("请输入新的姓名(不修改请输入0): ");                                        
                        char input[MAX_NAME_LEN];                                                         
                        scanf("%s", input);                                                               
                        if (strcmp(input, "0") != 0) {                                                    
                            strcpy(students[i].name, input);                                              
                        }                                                                                 
                                                                                                          
                        printf("请输入新的年龄(不修改请输入0): ");                                        
                        int age;                                                                          
                        scanf("%d", &age);                                                                
                        if (age != 0) {                                                                   
                            students[i].age = age;                                                        
                        }                                                                                 
                                                                                                          
                        printf("请输入新的密码(不修改请输入0): ");                                        
                        scanf("%s", input);                                                               
                        if (strcmp(input, "0") != 0) {                                                    
                            strcpy(students[i].password, input);                                          
                        }                                                                                 
                                                                                                          
                        printf("个人信息修改成功!\n");                                                   
                        break;                                                                            
                    }                                                                                     
                }                                                                                         
                break;                                                                                    
                                                                                                          
            case 3:                                                                                       
                // 先按排名排序                                                                           
                sort_students_by_rank();                                                                  
                break;                                                                                    
                                                                                                          
            case 0:                                                                                       
                printf("返回主菜单\n");                                                                   
                break;                                                                                    
                                                                                                          
            default:                                                                                      
                printf("无效的选择,请重新输入\n");                                                       
        }                                                                                                 
    } while (choice != 0);                                                                                
}                                                                                                         
                                                                                                          
// 管理菜单                                                                                               
void teacher_menu() {                                                                                     
    int choice;                                                                                           
                                                                                                          
    do {                                                                                                  
        printf("\n===== 教师菜单 =====\n");                                                               
        printf("1. 添加学生信息\n");                                                                      
        printf("2. 删除学生信息\n");                                                                      
        printf("3. 修改学生信息\n");                                                                      
        printf("4. 查询学生信息\n");                                                                      
        printf("5. 显示所有学生信息\n");                                                                  
        printf("6. 按学号排序\n");                                                                        
        printf("7. 按数学成绩排序\n");                                                                    
        printf("8. 按C语言成绩排序\n");                                                                   
        printf("9. 按语文成绩排序\n");                                                                    
        printf("10. 按总分排名排序\n");                                                                   
        printf("0. 退出\n");                                                                              
        printf("请选择: ");                                                                               
        scanf("%d", &choice);                                                                             
                                                                                                          
        switch (choice) {                                                                                 
            case 1:                                                                                       
                add_student();                                                                            
                break;                                                                                    
            case 2:                                                                                       
                delete_student();                                                                         
                break;                                                                                    
            case 3:                                                                                       
                modify_student();                                                                         
                break;                                                                                    
            case 4:                                                                                       
                query_student();                                                                          
                break;                                                                                    
            case 5:                                                                                       
                display_all_students();                                                                   
                break;                                                                                    
            case 6:                                                                                       
                sort_students_by_id();                                                                    
                break;                                                                                    
            case 7:                                                                                       
                sort_students_by_math();                                                                  
                break;                                                                                    
            case 8:                                                                                       
                sort_students_by_c_lang();                                                                
                break;                                                                                    
            case 9:                                                                                       
                sort_students_by_chinese();                                                               
                break;                                                                                    
            case 10:                                                                                      
                sort_students_by_rank();                                                                  
                break;                                                                                    
            case 0:                                                                                       
                printf("退出系统\n");                                                                     
                break;                                                                                    
            default:                                                                                      
                printf("无效的选择,请重新输入\n");                                                       
        }                                                                                                 
    } while (choice != 0);                                                                                
}                                                                                                         
                                                                                                          
// 登录验证                                                                                               
int login() {                                                                                             
    char username[MAX_USERNAME_LEN];                                                                      
    char password[MAX_PWD_LEN];                                                                           
    int attempts = 0;                                                                                     
    int max_attempts = 3;                                                                                 
    int is_teacher = -1;                                                                                  
                                                                                                          
    while (attempts < max_attempts) {                                                                     
        printf("\n===== 登录系统 =====\n");                                                               
        printf("请输入用户名: ");                                                                         
        scanf("%s", username);                                                                            
        printf("请输入密码: ");                                                                           
        scanf("%s", password);                                                                            
                                                                                                          
        for (int i = 0; i < user_count; i++) {                                                            
            if (strcmp(username, users[i].username) == 0 &&                                               
                strcmp(password, users[i].password) == 0) {                                               
                is_teacher = users[i].is_teacher;                                                         
                printf("登录成功!\n");                                                                   
                return is_teacher;                                                                        
            }                                                                                             
        }                                                                                                 
                                                                                                          
        attempts++;                                                                                       
        printf("用户名或密码错误,还有%d次尝试机会\n", max_attempts - attempts);                          
    }                                                                                                     
                                                                                                          
    printf("登录失败,尝试次数过多\n");                                                                   
    return -1;  // 登录失败                                                                               
}                                                                                                         
                                                                                                          
                                                                                                          
                                                                                                          
                                                                                                          
                                                                                                          
                                                                                                          
                                                                                                          

学生信息功能函数文件student.c

//student.c学生信息功能函数文件

#include "student.h"                                                                                                                   
                                                                                                                                       
// 全局变量定义                                                                                                                        
Student students[MAX_STUDENTS];                                                                                                        
int student_count = 0;                                                                                                                 
                                                                                                                                       
// 计算平均分                                                                                                                          
void calculate_averages() {                                                                                                            
    for (int i = 0; i < student_count; i++) {                                                                                          
        students[i].average = (students[i].math + students[i].c_lang + students[i].chinese) / 3.0;                                     
    }                                                                                                                                  
}                                                                                                                                      
                                                                                                                                       
// 计算排名                                                                                                                            
void calculate_ranks() {                                                                                                               
    // 先计算平均分                                                                                                                    
    calculate_averages();                                                                                                              
                                                                                                                                       
    // 创建一个临时数组用于排序                                                                                                        
    Student temp[MAX_STUDENTS];                                                                                                        
    memcpy(temp, students, sizeof(Student) * student_count);                                                                           
                                                                                                                                       
    // 按平均分降序排序                                                                                                                
    for (int i = 0; i < student_count - 1; i++) {                                                                                      
        for (int j = 0; j < student_count - i - 1; j++) {                                                                              
            if (temp[j].average < temp[j + 1].average) {                                                                               
                Student t = temp[j];                                                                                                   
                temp[j] = temp[j + 1];                                                                                                 
                temp[j + 1] = t;                                                                                                       
            }                                                                                                                          
        }                                                                                                                              
    }                                                                                                                                  
                                                                                                                                       
    // 分配排名                                                                                                                        
    for (int i = 0; i < student_count; i++) {                                                                                          
        for (int j = 0; j < student_count; j++) {                                                                                      
            if (students[j].id == temp[i].id) {                                                                                        
                students[j].rank = i + 1;                                                                                              
                break;                                                                                                                 
            }                                                                                                                          
        }                                                                                                                              
    }                                                                                                                                  
}                                                                                                                                      
                                                                                                                                       
// 添加学生信息                                                                                                                        
void add_student() {                                                                                                                   
    if (student_count >= MAX_STUDENTS) {                                                                                               
        printf("学生数量已达上限,无法添加更多学生\n");                                                                                
        return;                                                                                                                        
    }                                                                                                                                  
                                                                                                                                       
    Student new_student;                                                                                                               
    printf("\n===== 添加学生信息 =====\n");                                                                                            
                                                                                                                                       
    // 检查学号是否已存在                                                                                                              
    int id_exists;                                                                                                                     
    do {                                                                                                                               
        id_exists = 0;                                                                                                                 
        printf("请输入学号: ");                                                                                                        
        scanf("%d", &new_student.id);                                                                                                  
                                                                                                                                       
        for (int i = 0; i < student_count; i++) {                                                                                      
            if (students[i].id == new_student.id) {                                                                                    
                id_exists = 1;                                                                                                         
                printf("该学号已存在,请重新输入\n");                                                                                  
                break;                                                                                                                 
            }                                                                                                                          
        }                                                                                                                              
    } while (id_exists);
                                                                                                                                       
    printf("请输入姓名: ");                                                                                                            
    scanf("%s", new_student.name);                                                                                                     
                                                                                                                                       
    printf("请输入密码: ");                                                                                                            
    scanf("%s", new_student.password);                                                                                                 
                                                                                                                                       
    printf("请输入年龄: ");                                                                                                            
    scanf("%d", &new_student.age);                                                                                                     
                                                                                                                                       
    printf("请输入班级ID: ");                                                                                                          
    scanf("%d", &new_student.class_id);                                                                                                
                                                                                                                                       
    printf("请输入数学成绩: ");                                                                                                        
    scanf("%f", &new_student.math);                                                                                                    
                                                                                                                                       
    printf("请输入C语言成绩: ");                                                                                                       
    scanf("%f", &new_student.c_lang);                                                                                                  
                                                                                                                                       
    printf("请输入语文成绩: ");                                                                                                        
    scanf("%f", &new_student.chinese);
                                                                                                                                       
    // 计算平均分
    new_student.average = (new_student.math + new_student.c_lang + new_student.chinese) / 3.0;                                         
    // 添加到数组                                               
    students[student_count++] = new_student;
                                                                
    // 重新计算排名                                             
    calculate_ranks();                                          
                                                                
    printf("学生信息添加成功!\n");                             
}                                                               
                                                                
// 删除学生信息                                                 
void delete_student() {                                         
    int id;                                                     
    printf("\n===== 删除学生信息 =====\n");                     
    printf("请输入要删除的学生学号: ");                         
    scanf("%d", &id);                                           
                                                                
    int found = 0;                                              
    for (int i = 0; i < student_count; i++) {                   
        if (students[i].id == id) {                             
            found = 1;                                          
            // 将后面的学生信息前移                             
            for (int j = i; j < student_count - 1; j++) {       
                students[j] = students[j + 1];                  
            }                                                   
            student_count--;                                    
            printf("学生信息删除成功!\n");                     
            break;                                              
        }                                                       
    }                                                           
                                                                
    if (!found) {                                               
        printf("未找到该学号的学生\n");                         
    } else {                                                    
        // 重新计算排名                                         
        calculate_ranks();                                      
    }                                                           
}                                                               
                                                                
// 修改学生信C                                                  
void modify_student() {                                         
    int id;                                                     
    printf("\n===== 修改学生信息 =====\n");                     
    printf("请输入要修改的学生学号: ");                         
    scanf("%d", &id);                                           
                                                                
    int found = 0;                                              
    for (int i = 0; i < student_count; i++) {                   
        if (students[i].id == id) {                             
            found = 1;                                          
            printf("找到学生: %s\n", students[i].name);         
            printf("请输入新的姓名(不修改请输入0): ");          
            char input[MAX_NAME_LEN];                           
            scanf("%s", input);                                 
            if (strcmp(input, "0") != 0) {                      
                strcpy(students[i].name, input);                
            }                                                   
                                                                
            printf("请输入新的密码(不修改请输入0): ");          
            scanf("%s", input);                                 
            if (strcmp(input, "0") != 0) {                      
                strcpy(students[i].password, input);            
            }                                                   
                                                                
            printf("请输入新的年龄(不修改请输入0): ");          
            int age;                                            
            scanf("%d", &age);                                  
            if (age != 0) {                                     
                students[i].age = age;                          
            }                                                   
                                                                
            printf("请输入新的班级ID(不修改请输入0): ");        
            int class_id;                                       
            scanf("%d", &class_id);                             
            if (class_id != 0) {                                
                students[i].class_id = class_id;                
            }                                                   
                                                                
            printf("请输入新的数学成绩(不修改请输入0): ");      
            float math;                                         
            scanf("%f", &math);                                 
            if (math != 0) {                                    
                students[i].math = math;                        
            }                                                   
            printf("请输入新的C语言成绩(不修改请输入0): ");                                             
            float c_lang;                                                                               
            scanf("%f", &c_lang);                                                                       
            if (c_lang != 0) {                                                                          
                students[i].c_lang = c_lang;                                                            
            }                                                                                           
                                                                                                        
            printf("请输入新的语文成绩(不修改请输入0): ");                                              
            float chinese;                                                                              
            scanf("%f", &chinese);                                                                      
            if (chinese != 0) {                                                                         
                students[i].chinese = chinese;                                                          
            }                                                                                           
                                                                                                        
            // 重新计算平均分                                                                           
            students[i].average = (students[i].math + students[i].c_lang + students[i].chinese) / 3.0;  
                                                                                                        
            printf("学生信息修改成功!\n");                                                             
            break;                                                                                      
        }                                                                                               
    }                                                                                                   
                                                                                                        
    if (!found) {                                                                                       
        printf("未找到该学号的学生\n");                                                                 
    } else {                                                                                            
        // 重新计算排名                                                                                 
        calculate_ranks();                                                                              
    }                                                                                                   
}                                                                                                       
                                                                                                        
// 查询学生信息                                                                                         
void query_student() {                                                                                  
    int choice;                                                                                         
    printf("\n===== 查询学生信息 =====\n");                                                             
    printf("1. 按学号查询\n");                                                                          
    printf("2. 按姓名查询\n");                                                                          
    printf("3. 按班级查询\n");                                                                          
    printf("请选择查询方式: ");                                                                         
    scanf("%d", &choice);                                                                               
                                                                                                        
    int found = 0;                                                                                      
    if (choice == 1) {                                                                                  
        int id;                                                                                         
        printf("请输入学号: ");                                                                         
        scanf("%d", &id);                                                                               
                                                                                                        
        for (int i = 0; i < student_count; i++) {                                                       
            if (students[i].id == id) {                                                                 
                found = 1;                                                                              
                printf("\n学号: %d\n", students[i].id);                                                 
                printf("姓名: %s\n", students[i].name);                                                 
                printf("年龄: %d\n", students[i].age);                                                  
                printf("班级: %d\n", students[i].class_id);                                             
                printf("数学成绩: %.2f\n", students[i].math);                                           
                printf("C语言成绩: %.2f\n", students[i].c_lang);                                        
                printf("语文成绩: %.2f\n", students[i].chinese);                                        
                printf("平均分: %.2f\n", students[i].average);                                          
                printf("排名: %d\n", students[i].rank);                                                 
                break;                                                                                  
            }                                                                                           
        }                                                                                               
    } else if (choice == 2) {                                                                           
        char name[MAX_NAME_LEN];                                                                        
        printf("请输入姓名: ");                                                                         
        scanf("%s", name);                                                                              
                                                                                                        
        for (int i = 0; i < student_count; i++) {                                                       
            if (strcmp(students[i].name, name) == 0) {                                                  
                if (!found) {                                                                           
                    printf("\n找到以下学生:\n");                                                        
                    found = 1;                                                                          
                }                                                                                       
                printf("\n学号: %d\n", students[i].id);                                                 
                printf("姓名: %s\n", students[i].name);                                                 
                printf("年龄: %d\n", students[i].age);                                                  
                printf("班级: %d\n", students[i].class_id);                                             
                printf("数学成绩: %.2f\n", students[i].math);                                           
                printf("C语言成绩: %.2f\n", students[i].c_lang);                                        
                printf("语文成绩: %.2f\n", students[i].chinese);                                        
                printf("平均分: %.2f\n", students[i].average);                                          
                printf("排名: %d\n", students[i].rank);                                                 
            }                                                                                           
        }                                                                                               
    } else if (choice == 3) {                                                                           
        int class_id;                                                                                   
        printf("请输入班级ID: ");                                                             
        scanf("%d", &class_id);                                                               
                                                                                              
        for (int i = 0; i < student_count; i++) {                                             
            if (students[i].class_id == class_id) {                                           
                if (!found) {                                                                 
                    printf("\n班级 %d 的学生:\n", class_id);                                  
                    found = 1;                                                                
                }                                                                             
                printf("\n学号: %d\n", students[i].id);                                       
                printf("姓名: %s\n", students[i].name);                                       
                printf("年龄: %d\n", students[i].age);                                        
                printf("数学成绩: %.2f\n", students[i].math);                                 
                printf("C语言成绩: %.2f\n", students[i].c_lang);                              
                printf("语文成绩: %.2f\n", students[i].chinese);                              
                printf("平均分: %.2f\n", students[i].average);                                
                printf("排名: %d\n", students[i].rank);                                       
            }                                                                                 
        }                                                                                     
    } else {                                                                                  
        printf("无效的选择\n");                                                               
    }                                                                                         
                                                                                              
    if (!found) {                                                                             
        printf("未找到符合条件的学生\n");                                                     
    }                                                                                         
}                                                                                             
                                                                                              
// 显示所有学生信息                                                                           
void display_all_students() {                                                                 
    if (student_count == 0) {                                                                 
        printf("\n当前没有学生信息\n");                                                       
        return;                                                                               
    }                                                                                         
                                                                                              
    printf("\n===== 所有学生信息 =====\n");                                                   
    printf("%-8s\t %-10s\t %-6s\t %-8s\t\t %-10s\t %-10s\t %-10s\t %-10s\t %-8s\n",           
           "学号", "姓名", "年龄", "班级", "数学", "C语言", "语文", "平均分", "排名");        
                                                                                              
    for (int i = 0; i < student_count; i++) {                                                 
        printf("%-2d\t %-8s\t %-6d\t %-8d\t %-10.2f\t %-10.2f\t %-10.2f\t %-10.2f\t %-8d\n",  
               students[i].id, students[i].name, students[i].age, students[i].class_id,       
               students[i].math, students[i].c_lang, students[i].chinese,                     
               students[i].average, students[i].rank);                                        
    }                                                                                         
                                                                                              
    // 计算并显示各科平均分                                                                   
    if (student_count > 0) {                                                                  
        float total_math = 0, total_c_lang = 0, total_chinese = 0;                            
        for (int i = 0; i < student_count; i++) {                                             
            total_math += students[i].math;                                                   
            total_c_lang += students[i].c_lang;                                               
            total_chinese += students[i].chinese;                                             
        }                                                                                     
                                                                                              
        printf("\n各科平均分: 数学=%.2f, C语言=%.2f, 语文=%.2f\n",                            
               total_math / student_count,                                                    
               total_c_lang / student_count,                                                  
               total_chinese / student_count);                                                
    }                                                                                         
}                                                                                             
                                                                                              
// 按学号排序                                                                                 
void sort_students_by_id() {                                                                  
    for (int i = 0; i < student_count - 1; i++) {                                             
        for (int j = 0; j < student_count - i - 1; j++) {                                     
            if (students[j].id > students[j + 1].id) {                                        
                Student temp = students[j];                                                   
                students[j] = students[j + 1];                                                
                students[j + 1] = temp;                                                       
            }                                                                                 
        }                                                                                     
    }                                                                                         
    printf("已按学号排序\n");                                                                 
    display_all_students();                                                                   
}                                                                                             
                                                                                              
// 按排名排序                                                                                 
void sort_students_by_rank() {                                                                
    for (int i = 0; i < student_count - 1; i++) {                                             
        for (int j = 0; j < student_count - i - 1; j++) {                                     
            if (students[j].rank > students[j + 1].rank) {                                    
                Student temp = students[j];                                                   
                students[j] = students[j + 1];                                                
                students[j + 1] = temp;                                                       
            }                                                                                 
        }                                                                                     
    }                                                                                         
    printf("已按排名排序\n");                                                                 
    display_all_students();                                                                   
}                                                                                             
                                                                                              
// 按数学成绩排序                                                                             
void sort_students_by_math() {                                                
    for (int i = 0; i < student_count - 1; i++) {                             
        for (int j = 0; j < student_count - i - 1; j++) {                     
            if (students[j].math < students[j + 1].math) {                    
                Student temp = students[j];                                   
                students[j] = students[j + 1];                                
                students[j + 1] = temp;                                       
            }                                                                 
        }                                                                     
    }                                                                         
    printf("已按数学成绩排序(从高到低)\n");                                   
    display_all_students();                                                   
}                                                                             
                                                                              
// 按C语言成绩排序                                                            
void sort_students_by_c_lang() {                                              
    for (int i = 0; i < student_count - 1; i++) {                             
        for (int j = 0; j < student_count - i - 1; j++) {                     
            if (students[j].c_lang < students[j + 1].c_lang) {                
                Student temp = students[j];                                   
                students[j] = students[j + 1];                                
                students[j + 1] = temp;                                       
            }                                                                 
        }                                                                     
    }                                                                         
    printf("已按C语言成绩排序(从高到低)\n");                                  
    display_all_students();                                                   
}                                                                             
                                                                              
// 按语文成绩排序                                                             
void sort_students_by_chinese() {                                             
    for (int i = 0; i < student_count - 1; i++) {                             
        for (int j = 0; j < student_count - i - 1; j++) {                     
            if (students[j].chinese < students[j + 1].chinese) {              
                Student temp = students[j];                                   
                students[j] = students[j + 1];                                
                students[j + 1] = temp;                                       
            }                                                                 
        }                                                                     
    }                                                                         
    printf("已按语文成绩排序(从高到低)\n");                                   
    display_all_students();                                                   
}                                                                             
                                                                              
                                                                              

学生信息头文件student.h头文件

//student.h头文件


#ifndef STUDENT_H
#define STUDENT_H

#include 
#include 
#include 

#define MAX_STUDENTS 100
#define MAX_NAME_LEN 50
#define MAX_PWD_LEN 20
#define MAX_USERNAME_LEN 20

// 学生结构体定义
typedef struct {
    int id;                 // 学号
    char name[MAX_NAME_LEN]; // 姓名
    char password[MAX_PWD_LEN]; // 密码
    int age;                // 年龄
    int class_id;           // 班级ID
    float math;             // 数学成绩
    float c_lang;           // C语言成绩
    float chinese;          // 语文成绩
    float average;          // 平均分
    int rank;               // 名次
} Student;

// 用户结构体定义
typedef struct {
    char username[MAX_USERNAME_LEN];
    char password[MAX_PWD_LEN];
    int is_teacher;         // 1表示老师,0表示学生  
} User;

// 全局变量
extern Student students[MAX_STUDENTS];
extern int student_count;
extern User users[];
extern int user_count;

// 函数声明
void init_system();
int login();
void student_menu();
void teacher_menu();

// 学生管理功能
void add_student();
void delete_student();
void modify_student();
void query_student();
void display_all_students();
void sort_students_by_id();
void sort_students_by_rank();
void sort_students_by_math();
void sort_students_by_c_lang();
void sort_students_by_chinese();
void calculate_averages();
void calculate_ranks();

#endif // STUDENT_H
                                                     
                                                     
                                                     

你可能感兴趣的:(c语言,开发语言,数据结构)