学生综合测评系统设计开发

介绍

每个学生的信息为:学号、姓名、性别、家庭住址、联系电话、语文、数学、外语三门单科成绩、考试平均成绩、考试名次、同学互评分、品德成绩、任课教师评分、综合测评总分、综合测评名次。考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%,10%,10%,20%。具体实现如下功能:

A、学生信息处理

(1) 输入学生信息、学号、姓名、性别、家庭住址、联系电话,按学号以小到大的顺序存入文件中。

提示:学生信息可先输入到数组中,排序后可写到文件中。

(2) 插入(修改)同学信息

提示:先输入将插入的同学信息,然后再打开源文件并建立新文件,把源文件和输入的信息合并到新文件中(保持按学号有序)若存在该同学则将新记录内容替换源内容,

(3) 删除同学信息:

提示:输入将删除同学号,读出该同学信息,要求对此进行确认,以决定是否删除将删除后的信息写到文件中。

(4) 浏览学生信息:

提示:打开文件,显示该文件的学生信息。

B、学生数据处理:

(1) 按考试科目录入学生成绩并且按公式:考试成绩=(语文+数学+外语)/3 计算考试成绩,并计算考试名次,提示:先把学生信息读入数组,然后按提示输入每科成绩,计算考试成绩,求出名次,最后把学生记录写入一个文件中。

(2) 学生测评数据输入并计算综合测评总分及名次。

提示:综合测评总分=(考试成绩)*0.6+(同学互评分)*0.1+品德成绩*0.1+任课老师评分*0.2。

(3) 学生数据管理

提示:输入学号,读出并显示该同学信息,输入新数据,将改后信息写入文件

(4) 学生数据查询:

提示:输入学号或其他信息,即读出所有数据信息,并显示出来。

C、学生综合信息输出

演示

代码

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

// 学生结构体定义
struct Student {
    int student_number; // 学号
    char name[50]; // 姓名
    char gender[10]; // 性别
    char address[100]; // 家庭住址
    char contact_number[15]; // 联系电话
    float chinese_score; // 语文成绩
    float math_score; // 数学成绩
    float foreign_language_score; // 外语成绩
    float average_score; // 考试平均成绩
    int exam_rank; // 考试名次
    float peer_evaluation_score; // 同学互评分
    float moral_score; // 品德成绩
    float teacher_evaluation_score; // 任课教师评分
    float total_evaluation_score; // 综合测评总分
    int total_evaluation_rank; // 综合测评名次
};

// 显示菜单
void displayMenu();
// 输入学生信息
void inputStudentInfo(struct Student *stu);
// 保存到文件
void saveToFile(struct Student *stuArray, int size);
// 学生排序
void sortStudents(struct Student *stuArray, int size);
// 插入或更新学生信息
void insertOrUpdateStudent(struct Student *stuArray, int *size);
// 删除学生信息
void deleteStudent(struct Student *stuArray, int *size);
// 浏览学生信息
void browseStudents(struct Student *stuArray, int size);
//从文件加载数据
void loadFromFile(struct Student *stuArray, int *size);
// 输入学生成绩
void enterExamScores(struct Student *stuArray, int size);
// 输入综合测评
void enterEvaluationData(struct Student *stuArray, int size);
// 更新学生所有信息
void updateStudentInfo(struct Student *stuArray, int size);
// 查找学生信息
void searchStudentInfo(struct Student *stuArray, int size);

int main() {
    struct Student students[1000];
    int studentCount = 0;
    int choice;
    loadFromFile(students, &studentCount);
    do {
        displayMenu();
        printf("请输入您的选择: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                inputStudentInfo(&students[studentCount]);
                int existingIndex = -1; // 记录同学信息是否已存在
                // 查找是否存在相同学号的同学信息
                int i;
                for (i = 0; i < studentCount; i++) {
                    if (students[i].student_number == students[studentCount].student_number) {
                        existingIndex = i;
                        break;
                    }
                }
                if (existingIndex!=-1){
                    printf("学号已存在添加失败!\n");
                    break;
                }
                studentCount++;
                sortStudents(students, studentCount);
                saveToFile(students, studentCount);
                break;
            case 2:
                insertOrUpdateStudent(students, &studentCount);
                break;
            case 3:
                deleteStudent(students, &studentCount);
                break;
            case 4:
                browseStudents(students, studentCount);
                break;
            case 5:
                enterExamScores(students, studentCount);
                break;
            case 6:
                enterEvaluationData(students, studentCount);
                break;
            case 7:
                updateStudentInfo(students, studentCount);
                break;
            case 8:
                searchStudentInfo(students,studentCount);
                break;
            case 0:
                printf("程序退出。\n");
                break;
            default:
                printf("无效的选择,请重试。\n");
        }
    } while (choice != 0);

    return 0;
}

// 显示菜单
void displayMenu() {
    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. 查找学生信息\n");

    printf("0. 退出\n");
}

// 输入学生信息
void inputStudentInfo(struct Student *stu) {
    printf("请输入学生信息:\n");

    printf("学号: ");
    scanf("%d", &(stu->student_number));

    printf("姓名: ");
    scanf("%s", stu->name);

    printf("性别: ");
    scanf("%s", stu->gender);

    printf("家庭住址: ");
    scanf("%s", stu->address);

    printf("联系电话: ");
    scanf("%s", stu->contact_number);
}

// 保存到文件
void saveToFile(struct Student *stuArray, int size) {
    FILE *file = fopen("student_records.txt", "w");

    if (file == NULL) {
        printf("打开文件出错。\n");
        exit(1);
    }
    int i;

    for ( i = 0; i < size; i++) {
        fprintf(file, "%d %s %s %s %s %.2f %.2f %.2f %.2f %d %.2f %.2f %.2f %.2f %d\n",
                stuArray[i].student_number, stuArray[i].name, stuArray[i].gender, stuArray[i].address,
                stuArray[i].contact_number, stuArray[i].chinese_score, stuArray[i].math_score,
                stuArray[i].foreign_language_score, stuArray[i].average_score, stuArray[i].exam_rank,
                stuArray[i].peer_evaluation_score, stuArray[i].moral_score, stuArray[i].teacher_evaluation_score,
                stuArray[i].total_evaluation_score, stuArray[i].total_evaluation_rank);
    }

    fclose(file);
}

// 学生排序
void sortStudents(struct Student *stuArray, int size) {
    int i;
    int j;
    // 冒泡排序(简化版),按学号从小到大排序
    for ( i = 0; i < size - 1; i++) {
        for ( j = 0; j < size - 1 - i; j++) {
            if (stuArray[j].student_number > stuArray[j + 1].student_number) {
                // 交换学生信息
                struct Student temp = stuArray[j];
                stuArray[j] = stuArray[j + 1];
                stuArray[j + 1] = temp;
            }
        }
    }
}

// 学生排序
void sortStudentsByExamScore(struct Student *stuArray, int size) {
    int i,j;
    // 冒泡排序(简化版),按学号从小到大排序
    for ( i = 0; i < size - 1; i++) {
        for ( j = 0; j < size - 1 - i; j++) {
            if (stuArray[j].average_score < stuArray[j + 1].average_score) {
                // 交换学生信息
                struct Student temp = stuArray[j];
                stuArray[j] = stuArray[j + 1];
                stuArray[j + 1] = temp;
            }
        }
    }
}

// 学生排序
void sortStudentsByTotalEvaluationScore(struct Student *stuArray, int size) {
    int i,j;
    // 冒泡排序(简化版),按学号从小到大排序
    for ( i = 0; i < size - 1; i++) {
        for ( j = 0; j < size - 1 - i; j++) {
            if (stuArray[j].total_evaluation_score < stuArray[j + 1].total_evaluation_score) {
                // 交换学生信息
                struct Student temp = stuArray[j];
                stuArray[j] = stuArray[j + 1];
                stuArray[j + 1] = temp;
            }
        }
    }
}
void insertOrUpdateStudent(struct Student *stuArray, int *size) {
    struct Student newStudent;
    inputStudentInfo(&newStudent);

    int existingIndex = -1; // 记录同学信息是否已存在
    int i;
    // 查找是否存在相同学号的同学信息
    for ( i = 0; i < *size; i++) {
        if (stuArray[i].student_number == newStudent.student_number) {
            existingIndex = i;
            break;
        }
    }

    if (existingIndex != -1) {
        // 同学信息已存在,替换原记录内容
        stuArray[existingIndex] = newStudent;
        printf("已更新同学信息。\n");
    } else {
        // 同学信息不存在,插入到合适位置并保持有序
        stuArray[*size] = newStudent;
        (*size)++;
        sortStudents(stuArray, *size);
        printf("已插入同学信息。\n");
    }

    // 将更新后的信息保存到文件
    saveToFile(stuArray, *size);
}

void deleteStudent(struct Student *stuArray, int *size) {
    int deleteStudentNumber;
    int deleteIndex = -1;

    printf("请输入要删除的同学学号: ");
    scanf("%d", &deleteStudentNumber);
    int i;
    // 查找要删除的同学信息的索引
    for ( i = 0; i < *size; i++) {
        if (stuArray[i].student_number == deleteStudentNumber) {
            deleteIndex = i;
            break;
        }
    }
    if (deleteIndex != -1) {
        // 找到要删除的同学信息,输出信息并确认是否删除
        printf("找到同学信息:\n");
        printf("学号: %d\n姓名: %s\n性别: %s\n", stuArray[deleteIndex].student_number, stuArray[deleteIndex].name, stuArray[deleteIndex].gender);
        printf("是否确认删除该同学信息?(Y/N): ");

        char confirmation;
        scanf(" %c", &confirmation);
        int i;
        if (confirmation == 'Y' || confirmation == 'y') {
            // 删除同学信息
            for ( i = deleteIndex; i < *size - 1; i++) {
                stuArray[i] = stuArray[i + 1];
            }
            (*size)--;
            printf("已删除同学信息。\n");

            // 将更新后的信息保存到文件
            saveToFile(stuArray, *size);
        } else {
            printf("未删除同学信息。\n");
        }
    } else {
        printf("未找到该学号的同学信息。\n");
    }
}

// 浏览学生信息
void browseStudents(struct Student *stuArray, int size) {
    printf("\n--- 学生信息 ---\n");
    printf("%-8s %-12s %-4s %-18s %-15s %-12s %-12s %-12s %-12s %-12s %-12s %-12s %-12s %-12s %-12s\n",
           "学号", "姓名", "性别", "家庭住址", "联系电话", "语文成绩", "数学成绩", "外语成绩", "平均成绩",
           "考试名次", "同学互评分", "品德成绩", "教师评分", "综合测评总分", "综合测评名次");
    int i;
    for ( i = 0; i < size; i++) {
        printf("%-8d %-12s %-4s %-18s %-15s %-12.2f %-12.2f %-12.2f %-12.2f %-12d %-12.2f %-12.2f %-12.2f %-12.2f %-12d\n",
               stuArray[i].student_number, stuArray[i].name, stuArray[i].gender, stuArray[i].address,
               stuArray[i].contact_number, stuArray[i].chinese_score, stuArray[i].math_score,
               stuArray[i].foreign_language_score, stuArray[i].average_score, stuArray[i].exam_rank,
               stuArray[i].peer_evaluation_score, stuArray[i].moral_score, stuArray[i].teacher_evaluation_score,
               stuArray[i].total_evaluation_score, stuArray[i].total_evaluation_rank);
    }
}

void loadFromFile(struct Student *stuArray, int *size) {
    FILE *file = fopen("student_records.txt", "r");

    if (file == NULL) {

        return;
    }

    while (fscanf(file, "%d %s %s %s %s %f %f %f %f %d %f %f %f %f %d",
                  &(stuArray[*size].student_number), stuArray[*size].name, stuArray[*size].gender,
                  stuArray[*size].address, stuArray[*size].contact_number, &(stuArray[*size].chinese_score),
                  &(stuArray[*size].math_score), &(stuArray[*size].foreign_language_score),
                  &(stuArray[*size].average_score), &(stuArray[*size].exam_rank),
                  &(stuArray[*size].peer_evaluation_score), &(stuArray[*size].moral_score),
                  &(stuArray[*size].teacher_evaluation_score), &(stuArray[*size].total_evaluation_score),
                  &(stuArray[*size].total_evaluation_rank)) == 15) {
        (*size)++;
    }

    fclose(file);
    printf("成功从文件加载数据。\n");
}

void enterExamScores(struct Student *stuArray, int size) {
    int i;
    // 输入考试科目成绩
    for ( i = 0; i < size; i++) {
        printf("请输入学号为 %d 的学生的语文、数学、外语成绩(空格分隔): ", stuArray[i].student_number);
        scanf("%f %f %f", &(stuArray[i].chinese_score), &(stuArray[i].math_score), &(stuArray[i].foreign_language_score));

        // 计算考试成绩
        stuArray[i].average_score = (stuArray[i].chinese_score + stuArray[i].math_score + stuArray[i].foreign_language_score) / 3.0;
    }

    // 按考试成绩排序
    sortStudentsByExamScore(stuArray, size);

    // 计算考试名次
    for ( i = 0; i < size; i++) {
        stuArray[i].exam_rank = i + 1;
    }
    sortStudents(stuArray, size);

    // 将更新后的信息保存到文件
    saveToFile(stuArray, size);

    printf("考试成绩录入完成。\n");
}

void enterEvaluationData(struct Student *stuArray, int size) {
    int i;
    // 输入测评数据
    for ( i = 0; i < size; i++) {
        printf("请输入学号为 %d 的学生的同学互评分、品德成绩、任课老师评分(空格分隔): ", stuArray[i].student_number);
        scanf("%f %f %f", &(stuArray[i].peer_evaluation_score), &(stuArray[i].moral_score), &(stuArray[i].teacher_evaluation_score));

        // 计算综合测评总分
        stuArray[i].total_evaluation_score = stuArray[i].average_score * 0.6 +
                                             stuArray[i].peer_evaluation_score * 0.1 +
                                             stuArray[i].moral_score * 0.1 +
                                             stuArray[i].teacher_evaluation_score * 0.2;
    }

    // 按综合测评总分排序
    sortStudentsByTotalEvaluationScore(stuArray, size);

    // 计算综合测评名次
    for ( i = 0; i < size; i++) {
        stuArray[i].total_evaluation_rank = i + 1;
    }
    sortStudents(stuArray, size);
    // 将更新后的信息保存到文件
    saveToFile(stuArray, size);

    printf("测评数据录入完成。\n");
}

void updateStudentInfo(struct Student *stuArray, int size) {
    int updateStudentNumber;
    int updateIndex = -1;

    printf("请输入要更新信息的同学学号: ");
    scanf("%d", &updateStudentNumber);
    int i;
    // 查找要更新信息的同学信息的索引
    for ( i = 0; i < size; i++) {
        if (stuArray[i].student_number == updateStudentNumber) {
            updateIndex = i;
            break;
        }
    }

    if (updateIndex != -1) {
        // 找到要更新的同学信息
        printf("当前同学信息:\n");
        printf("学号: %d\n姓名: %s\n性别: %s\n家庭住址: %s\n联系电话: %s\n语文成绩: %.2f\n数学成绩: %.2f\n外语成绩: %.2f\n"
               "同学互评分: %.2f\n品德成绩: %.2f\n任课教师评分: %.2f\n",
               stuArray[updateIndex].student_number, stuArray[updateIndex].name, stuArray[updateIndex].gender,
               stuArray[updateIndex].address, stuArray[updateIndex].contact_number, stuArray[updateIndex].chinese_score,
               stuArray[updateIndex].math_score, stuArray[updateIndex].foreign_language_score,
               stuArray[updateIndex].peer_evaluation_score,
               stuArray[updateIndex].moral_score,
               stuArray[updateIndex].teacher_evaluation_score);

        // 输入新数据
        printf("请输入新的信息:\n");
        printf("姓名: ");
        scanf("%s", stuArray[updateIndex].name);

        printf("性别: ");
        scanf("%s", stuArray[updateIndex].gender);

        printf("家庭住址: ");
        scanf("%s", stuArray[updateIndex].address);

        printf("联系电话: ");
        scanf("%s",stuArray[updateIndex].contact_number);

        printf("语文成绩:");
        scanf("%f",&(stuArray[updateIndex].chinese_score));

        printf("数学成绩:");
        scanf("%f",&(stuArray[updateIndex].math_score));

        printf("外语成绩:");
        scanf("%f",&(stuArray[updateIndex].foreign_language_score));

        printf("同学互评分:");
        scanf("%f",&(stuArray[updateIndex].peer_evaluation_score));

        printf("品德成绩:");
        scanf("%f",&(stuArray[updateIndex].moral_score));

        printf("教师互评分:");
        scanf("%f",&(stuArray[updateIndex].teacher_evaluation_score));
        stuArray[updateIndex].average_score = (stuArray[updateIndex].chinese_score + stuArray[updateIndex].math_score + stuArray[updateIndex].foreign_language_score) / 3.0;
        stuArray[updateIndex].total_evaluation_score = stuArray[updateIndex].average_score * 0.6 +
                                                       stuArray[updateIndex].peer_evaluation_score * 0.1 +
                                                       stuArray[updateIndex].moral_score * 0.1 +
                                                       stuArray[updateIndex].teacher_evaluation_score * 0.2;
        // 按综合测评总分排序
        sortStudentsByTotalEvaluationScore(stuArray, size);
        int i;
        // 计算综合测评名次
        for ( i = 0; i < size; i++) {
            stuArray[i].total_evaluation_rank = i + 1;
        }
        // 按综合测评总分排序
        sortStudentsByExamScore(stuArray, size);
        // 计算综合测评名次
        for ( i = 0; i < size; i++) {
            stuArray[i].exam_rank = i + 1;
        }
        sortStudents(stuArray,size);

        // 将更新后的信息保存到文件
        saveToFile(stuArray, size);

        printf("同学信息已更新。\n");
    } else {
        printf("未找到该学号的同学信息。\n");
    }
}

void searchStudentInfo(struct Student *stuArray, int size) {
    int studentNumber;
    int updateIndex = -1;

    printf("请输入学号: ");
    scanf("%d", &studentNumber);
    int i;
    for ( i = 0; i < size; i++) {
        if (stuArray[i].student_number == studentNumber) {
            updateIndex = i;
            break;
        }
    }

    if (updateIndex != -1) {
        // 找到要更新的同学信息
        printf("当前同学信息:\n");
        printf("学号: %d\n姓名: %s\n性别: %s\n家庭住址: %s\n联系电话: %s\n语文成绩: %.2f\n数学成绩: %.2f\n外语成绩: %.2f\n"
               "同学互评分: %.2f\n品德成绩: %.2f\n任课教师评分: %.2f\n",
               stuArray[updateIndex].student_number, stuArray[updateIndex].name, stuArray[updateIndex].gender,
               stuArray[updateIndex].address, stuArray[updateIndex].contact_number, stuArray[updateIndex].chinese_score,
               stuArray[updateIndex].math_score, stuArray[updateIndex].foreign_language_score,
               stuArray[updateIndex].peer_evaluation_score,
               stuArray[updateIndex].moral_score,
               stuArray[updateIndex].teacher_evaluation_score);
    } else {
        printf("未找到该学号的同学信息。\n");
    }
}

最后

如果需要帮忙运行或者需要报告的话,私信我

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值