C++ 学生信息管理 系统之增,删,改,查

2023-12-18 21:04:26

学生信息管理?系统之增,删,改,查

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

#define MAX_STUDENTS 100  // 最大学生数量
#define MAX_NAME_LENGTH 50  // 姓名最大长度

// 学生结构体
typedef struct {
    char name[MAX_NAME_LENGTH];
    int studentId;
    float scores[3];  // 三门课程的成绩
} Student;

// 学生信息表
Student students[MAX_STUDENTS];
int numStudents = 0;  // 学生数量

// 函数声明
    
void displayAllStudents();
void readFromFile();
void searchByName();
void searchByCourse();
void addStudent();
void deleteStudent();
void sortScoresByCourse();
void sortScoresByTotal();
void saveToFile();

int main() {
    int choice;

    // 从文件读取数据
    readFromFile();

    do {
        // 菜单显示
        printf("\n=== 学生信息管理系统 ===\n"); 
        printf("0. 显示所有人信息\n");
        printf("1. 增加学生信息\n");
        printf("2. 检索某个同学的所有成绩\n");
        printf("3. 检索某一门课程的所有同学成绩\n");        
        printf("4. 删除学生信息\n");
        printf("5. 对某门课程的成绩进行升序排序\n");
        printf("6. 对所有同学的总成绩进行升序排序\n");
        printf("7. 保存信息到磁盘文件\n");
        printf("8. 统计共有多少人\n");
        printf("9. 退出系统\n");
        printf("请输入你的选择: ");
        scanf("%d", &choice);

        switch (choice) {
        case 0:
            displayAllStudents();
            break;
        case 1:
            addStudent();
            break;
        case 2:
            searchByName();
            break;
        case 3:
            searchByCourse();
            break;        
        case 4:
            deleteStudent();
            break;
        case 5:
            sortScoresByCourse();
            break;
        case 6:
            sortScoresByTotal();
            break;
        case 7:
            saveToFile();
            break;
        case 8:
            printf("总人数是:%d\n",numStudents);
            break;
        case 9:
            printf("感谢使用学生信息管理系统!\n");
            return;
        default:
            printf("无效的选择,请重新输入。\n");
            break;
        }
    } while (1);

    return 0;
}

// 从磁盘文件读取数据
void readFromFile() {
    FILE* file = fopen("students.txt", "r");

    if (file) {
        // 清空原有数据
        numStudents = 0;

        // 逐行读取数据
        char line[100];
        while (fgets(line, sizeof(line), file)) {
            sscanf(line, "%s %d %f %f %f",
                students[numStudents].name,
                &students[numStudents].studentId,
                &students[numStudents].scores[0],
                &students[numStudents].scores[1],
                &students[numStudents].scores[2]);
            numStudents++;
        }

        fclose(file);
        printf("成功从文件中读取学生信息。\n");
    }
    else {
        printf("未找到学生信息文件,将创建新文件。\n");
    }
}

// 检索某个同学的所有成绩
void searchByName() {
    char name[MAX_NAME_LENGTH];
    printf("请输入要检索的同学姓名: ");
    scanf("%s", name);

    int i;
    for (i = 0; i < numStudents; i++) {
        if (strcmp(students[i].name, name) == 0) {
            printf("姓名:%s 学号:%d 成绩:%.2f %.2f %.2f\n",
                students[i].name,
                students[i].studentId,
                students[i].scores[0],
                students[i].scores[1],
                students[i].scores[2]);
        }
    }
}

// 检索某一门课程的所有同学成绩
void searchByCourse() {
    int course;
    printf("请输入要检索的课程编号(1-3): ");
    scanf("%d", &course);

    int i;
    for (i = 0; i < numStudents; i++) {
        printf("姓名:%s 学号:%d 成绩:%.2f\n",
            students[i].name,
            students[i].studentId,
            students[i].scores[course - 1]);
    }
}

// 增加学生信息
void addStudent() {
    int count, i;
    numStudents = 0;
    printf("请输入要新的学生人数: ");
    scanf("%d", &count);

    if (numStudents + count > MAX_STUDENTS) {
        printf("学生数量超过系统容量,请增加合适数量的学生。\n");
        return;
    }

    for (i = 0; i < count; i++) {
        printf("请输入第 %d 个学生的信息(姓名 学号 成绩1 成绩2 成绩3): ", i + 1);
        scanf("%s %d %f %f %f",
            students[numStudents].name,
            &students[numStudents].studentId,
            &students[numStudents].scores[0],
            &students[numStudents].scores[1],
            &students[numStudents].scores[2]);
        numStudents++;
    }

    printf("成功增加 %d 个学生信息。\n", count);
}

// 删除学生信息
void deleteStudent() {
    int index;
    printf("请输入要删除的学生索引号(1-%d): ", numStudents);
    scanf("%d", &index);

    if (index < 1 || index > numStudents) {
        printf("无效的索引号,请重新输入。\n");
        return;
    }

    int i;
    for (i = index - 1; i < numStudents - 1; i++) {
        students[i] = students[i + 1];
    }
    numStudents--;

    printf("成功删除学生信息。\n");
}

// 对某门课程的成绩进行升序排序
void sortScoresByCourse() {
    int course;
    printf("请输入要排序的课程编号(1-3): ");
    scanf("%d", &course);

    int i, j;
    for (i = 0; i < numStudents - 1; i++) {
        for (j = 0; j < numStudents - i - 1; j++) {
            if (students[j].scores[course - 1] > students[j + 1].scores[course - 1]) {
                Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }

    printf("成功对第 %d 门课程的成绩进行排序。\n", course);
}

// 对所有同学的总成绩进行升序排序
void sortScoresByTotal() {
    int i, j;
    for (i = 0; i < numStudents - 1; i++) {
        for (j = 0; j < numStudents - i - 1; j++) {
            float total1 = students[j].scores[0] + students[j].scores[1] + students[j].scores[2];
            float total2 = students[j + 1].scores[0] + students[j + 1].scores[1] + students[j + 1].scores[2];

            if (total1 > total2) {
                Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }

    printf("成功对所有同学的总成绩进行排序。\n");
}

// 保存信息到磁盘文件
void saveToFile() {
    FILE* file = fopen("students.txt", "w");

    if (file) {
        int i;
        for (i = 0; i < numStudents; i++) {
            fprintf(file, "%s %d %.2f %.2f %.2f\n",
                students[i].name,
                students[i].studentId,
                students[i].scores[0],
                students[i].scores[1],
                students[i].scores[2]);
        }

        fclose(file);
        printf("成功保存学生信息到文件。\n");
    }
    else {
        printf("无法创建学生信息文件,保存失败。\n");
    }
}



// 显示所有人信息
void displayAllStudents() {
    if (numStudents == 0) {
        printf("暂无学生信息。\n");
        return;
    }

    printf("所有学生信息如下:\n");
    int i;
    for (i = 0; i < numStudents; i++) {
        printf("姓名:%s 学号:%d 成绩:%.2f %.2f %.2f %.2f\n",
            students[i].name,
            students[i].studentId,
            students[i].scores[0],
            students[i].scores[1],
            students[i].scores[2], 
            students[i].scores[0]+ students[i].scores[1]+ students[i].scores[2]);
    }

}

文章来源:https://blog.csdn.net/laocooon/article/details/135069777
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。