学生成绩管理

问题描述:

1. 从键盘输入包括学号、姓名、三门课程成绩(高数、大外、C语言),并计算三科总分;

2. 对输入的数据能够按照学号或者平均分排序;

3. 具有在文件中进行单项查询的功能(即能够按照给定的关键字,如姓名等找出满足条件的纪录);

4. 具有增加、删除、修改数据功能。

本程序包含注册(regist)、登录(login)、菜单(menu)、输入(input)、输出(display)、查找(find)、修改(change)、删除(del)基本功能。先分别定义各种全局函数和全局变量now和now2,同时定义结构体及结构体数组。其中now作为现有学生信息个数的一个标记,now2作为现有管理员个数的一个标记。每次执行完子函数就返回主菜单。共含有五个开关语句,依次在main,menu,display,find,change中,使界面更友好,用户操作更简单。

连接:c语言学生成绩管理系统-CSDN社区

我的回复:

#include <stdio.h>
#include <string.h>
 
#define STUDENTS 5 // 宏定义学生的人数:5个
#define SUBJECTS 5 // 宏定义每个学生的科目:英语、数学、语文、体育、音乐
 
char Name[STUDENTS][11]; // 定义学生的姓名字符数组:Name[0]="小明",Name[1]="王一呜"
float Score[STUDENTS][SUBJECTS + 1]; // 总成绩=英语+数学+语文+体育+音乐
 
// 函数的声明
// 输入学生的姓名和它每科的成绩
void inputDate();
// 打印排序前的学生的姓名和成绩
void printData();
// 按学生的总成绩排序(从高到低:冒泡排序)
void sortData();
 
int main(int argc, char *argv[]) {
    // 1、输入学生的姓名和它每科的成绩
    inputDate();
    // 2、打印排序前的学生的姓名和成绩
    printf("排序前的学生的姓名和成绩:\n");
    printData();
    // 3、按学生的总成绩排序(从高到低)
    sortData();
    // 4、打印排序后的学生的姓名和成绩
    printf("排序后的学生的姓名和成绩:\n");
    printData();
    return 0;
}
 
// 函数的定义
// 输入学生的姓名和它每科的成绩
void inputDate() {
// 使用for循环,输入每个学生的姓名和他们每科的成绩
    for (int indexI = 0; indexI < STUDENTS; indexI++) {
        // 1、输入学生的姓名
        printf("请输入第%d个学生的姓名(一共%d个):", indexI + 1, STUDENTS);
        scanf("%s", Name[indexI]);
        // 2、输入这个学生的每科成绩
        printf("请输入%s的英语、数学、语文、体育、音乐成绩(使用逗号分隔它们):", Name[indexI]);
        scanf("%f,%f,%f,%f,%f", &Score[indexI][0], &Score[indexI][1], &Score[indexI][2], &Score[indexI][3], &Score[indexI][4]);
// 3、统计这个学生的总成绩
// Score[indexI][SUBJECTS] = Score[indexI][0] + Score[indexI][1] + Score[indexI][2] +Score[indexI][3] +Score[indexI][4];
        Score[indexI][SUBJECTS] = 0.00; // 初始化总成绩为0.00
        for (int indexJ = 0; indexJ < SUBJECTS; indexJ++) {
            Score[indexI][SUBJECTS] += Score[indexI][indexJ];
        }
// printf("%s的英语=%8.2f、数学=%8.2f、语文=%8.2f、体育=%8.2f、音乐=%8.2f、总成绩=%8.2f\n", Name[indexI], Score[indexI][0],
// Score[indexI][1], Score[indexI][2], Score[indexI][3], Score[indexI][4], Score[indexI][5]);
    }
}
 
// 打印排序前的学生的姓名和成绩
void printData() {
    // 1、打印标题
    printf("+----------+--------+--------+--------+--------+--------+--------+\n");
    printf("|   姓名   |  英语  |  数学  |  语文  |  体育  |  音乐  | 总成绩 |\n");
    printf("+----------+--------+--------+--------+--------+--------+--------+\n");
    // 2、使用for循环打印每个学生的姓名和成绩
    for (int indexI = 0; indexI < STUDENTS; indexI++) {
        printf("|%10s|", Name[indexI]); // 打印学生的姓名
        for (int indexJ = 0; indexJ < SUBJECTS + 1; indexJ++) {
            printf("%8.2f|", Score[indexI][indexJ]); // 打印学生每科的成绩(包括总成绩)
        }
        printf("\n" );
        printf("+----------+--------+--------+--------+--------+--------+--------+\n");
    }
}
 
// 按学生的总成绩排(从高到低:冒泡排序)
void sortData() {
    for (int indexI = 0; indexI < STUDENTS - 1; indexI++) {
        for (int indexJ = 0; indexJ < STUDENTS - 1 - indexI; indexJ++) {
            if (Score[indexJ][SUBJECTS] < Score[indexJ + 1][SUBJECTS]) {
                // 1、交换他们的姓名
                char tempName[11];
                strcpy(tempName, Name[indexJ]); // 把当前位置学生的姓名拷贝到临时变量中
                strcpy(Name[indexJ], Name[indexJ + 1]); // 把下一个位置的学生姓名拷贝到当前位置
                strcpy(Name[indexJ + 1], tempName); // 把临时变量拷贝到下一个位置的学生姓名中
                // 2、交换他们每一科的成绩
                for (int indexK = 0; indexK < SUBJECTS + 1; indexK++) {
                    float tempScore = Score[indexJ][indexK]; // 把当前位置学生的每一科成绩存放到临时变量中
                    Score[indexJ][indexK] = Score[indexJ + 1][indexK]; // 把下一个位置的学生成绩存放到当前位置上
                    Score[indexJ + 1][indexK] = tempScore; // 把临时变量存放到下一个位置的学生成绩中
                }
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值