C++程序:学生成绩管理系统——需要显示各科目的平均分与分数段人数

img

参考:

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
    float a[3][7];
    float b[7];
    
    int i,j,k;
    for(i=0;i<3;i++){
        scanf("%f %f %f %f %f",&a[i][0],&a[i][1],&a[i][2],&a[i][3],&a[i][4]);
        a[i][5]=a[i][1]+a[i][2]+a[i][3]+a[i][4];
        a[i][6] = a[i][5]/4;
    }
    //排序
    for(i=1;i<3;i++)
    {
        for(j=2;j>=i;j--)
        {
            if(a[j][6]<a[j-1][6]){
                for(k=0;k<7;k++){
                    b[k]=a[j][k];    
                }
                for(k=0;k<7;k++){
                    a[j][k]=a[j-1][k];    
                }
                for(k=0;k<7;k++){
                    a[j-1][k]=b[k];    
                }
            }
        }    
    }    
    //输出
    printf("学号\t语文\t数学\t英语\tC语言\t总分\t平均分\n");
    for(i=0;i<3;i++){
        printf("%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%.2f\n",a[i][0],a[i][1],a[i][2],a[i][3],a[i][4],a[i][5],a[i][6]);
    }
    
}


#include <iostream>
#include <string.h>
#include <iomanip>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)   //解决Visual Studio中strcpy不安全报错问题
using namespace std;
int x = 0;
int* X = &x;   //指针计数器
struct student
{
    char name[10];
    char number[100];
    char sex[10];
    float Chinese;
    float math;
    float English;
    float AverageScore;
};
//--------------------------------------------------------------------------------------------------------------
//定义结构体数组:
struct student stu[100];   //限定100名学生
//--------------------------------------------------------------------------------------------------------------
//判断用户的输入是否正确(字符和字符串):
float Check(int a)
{
    if (a == 0)   //针对字符和字符串
    {
        float m;
        if (cin >> m)
        {
            return m;
        }
        else
        {
            cout << "输入错误,请重新输入:";
            cin.clear();
            cin.get();
            while (!(cin >> m))
            {
                cout << "输入错误,请重新输入:";
                cin.clear();
                cin.get();
            }
            return m;
        }
    }
    else if (a == 1)  //针对字符和字符串以及StudentAve函数中菜单的数字范围
    {
        float m;
        float c;
        if (cin >> m)
        {
            while (1)
            {
                if (m == 1 || m == 2 || m == 3)
                {
                    return m;
                    break;
                }
                else
                {
                    cout << "输入错误,请重新输入:";
                    c = Check(1);
                    return c;
                    break;
                }
            }
        }
        else
        {
            cout << "输入错误,请重新输入:";
            cin.clear();
            cin.get();
            while (!(cin >> m))
            {
                cout << "输入错误,请重新输入:";
                cin.clear();
                cin.get();
            }
            while (1)
            {
                if (m == 1 || m == 2 || m == 3)
                {
                    return m;
                    break;
                }
                else
                {
                    cout << "输入错误,请重新输入:";
                    c = Check(1);
                    return c;
                    break;
                }
            }
        }
    }
    else if (a == 2)   //针对字符和字符串以及重新查询和退出选择功能的数字范围
    {
        float m;
        float c;
        if (cin >> m)
        {
            while (1)
            {
                if (m == 1 || m == 2)
                {
                    return m;
                    break;
                }
                else
                {
                    cout << "输入错误,请重新输入:";
                    c = Check(2);
                    return c;
                    break;
                }
            }
        }
        else
        {
            cout << "输入错误,请重新输入:";
            cin.clear();
            cin.get();
            while (!(cin >> m))
            {
                cout << "输入错误,请重新输入:";
                cin.clear();
                cin.get();
            }
            while (1)
            {
                if (m == 1 || m == 2)
                {
                    return m;
                    break;
                }
                else
                {
                    cout << "输入错误,请重新输入:";
                    a = Check(2);
                    return a;
                    break;
                }
            }
        }
    }
    else if (a == 3)   //针对字符和字符串以及重新查询和退出选择功能的数字范围
    {
        float m;
        float c;
        if (cin >> m)
        {
            while (1)
            {
                if (m == 1 || m == 2 || m == 3 || m == 4 || m == 5 || m == 6 || m == 7)
                {
                    return m;
                    break;
                }
                else
                {
                    cout << "输入错误,请重新输入:";
                    c = Check(3);
                    return c;
                    break;
                }
            }
        }
        else
        {
            cout << "输入错误,请重新输入:";
            cin.clear();
            cin.get();
            while (!(cin >> m))
            {
                cout << "输入错误,请重新输入:";
                cin.clear();
                cin.get();
            }
            while (1)
            {
                if (m == 1 || m == 2 || m == 3 || m == 4 || m == 5 || m == 6 || m == 7)
                {
                    return m;
                    break;
                }
                else
                {
                    cout << "输入错误,请重新输入:";
                    a = Check(3);
                    return a;
                    break;
                }
            }
        }
    }
}
//--------------------------------------------------------------------------------------------------------------
//输入学生信息
void Create(int p)
{
    if (x <= 100)   //设置上限,该表存放最多不超过100名学生的信息
    {
        int Y = x;
        cout << "请分别输入:姓名(不超过3个字)、学号(11位数字)、性别、语文成绩、数学成绩、英语成绩" << endl;
        for (int i = Y; i < Y + p; i++)
        {
            cin >> stu[i].name >> stu[i].number >> stu[i].sex >> stu[i].Chinese >> stu[i].math >> stu[i].English;
            if (i != Y + p - 1)
            {
                cout << "请输入下一个学生的信息:" << endl;
            }
            *X += 1;   //记录表中人数
        }
        cout << endl << endl;
        cout << "添加成功!" << endl << endl;
    }
    else
    {
        cout << "亲~表格人数已满,无法再继续添加了噢" << endl << endl << endl;
    }
    return;
}
//--------------------------------------------------------------------------------------------------------------
//输出所有学生信息
int DisplayAll(int a)
{
    if (a == 0)   //该函数基本功能的实现
    {
        cout << endl << "序号\t" << "姓名\t" << "学号\t\t" << "性别\t" << "语文\t" << "数学\t" << "英语\t" << endl;
        for (int i = 0; stu[i].Chinese != 0; i++)
        {
            cout << i + 1 << ":\t";
            cout << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << stu[i].Chinese << "\t" << stu[i].math << "\t" << stu[i].English << endl;
        }
        cout << endl << endl;
    }
    else if (a == 1)   //StudentAve调用DisplayAll函数专属通道
    {
        cout << endl << "序号\t" << "姓名\t" << "学号\t\t" << "性别\t" << "平均成绩\t" << endl;
        for (int i = 0; stu[i].Chinese != 0; i++)
        {
            cout << i + 1 << ":\t";
            cout << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << fixed << setprecision(2) << stu[i].AverageScore << endl;
        }
        cout << endl << endl;
    }
    return 0;
}
//--------------------------------------------------------------------------------------------------------------
//查询某个学生信息
int DisplayOne(int b, float* a)
{
    if (b == 0)   //该函数基本功能的实现
    {
        char A[1000];
        int c = 0;
        cout << "请输入你想查询学生的姓名:";
        cin >> A;
        cout << endl << endl;
        for (int i = 0; i < x; i++)
        {
            int a = strcmp(A, stu[i].name);
            if (a == 0)
            {
                cout << "查询结果:" << endl;
                cout << "姓名\t" << "学号\t\t" << "性别\t" << "语文\t" << "数学\t" << "英语\t" << endl;
                cout << endl << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << stu[i].Chinese << "\t" << stu[i].math << "\t" << stu[i].English << endl << endl;
                return 1;
                break;
            }
            else
            {
                c++;
            }
        }
        if (c == x)
        {
            cout << "查无此人" << endl << endl;
            return 0;
        }
    }
    else if (b == 1)   //StudentAve调用DisplayOne函数专属通道
    {
        char C[1000];
        int d = 0;
        cout << "请输入你想查询学生的姓名:";
        cin >> C;
        cout << endl << endl;
        for (int i = 0; i < x; i++)
        {
            int a = strcmp(C, stu[i].name);
            if (a == 0)
            {
                cout << "姓名\t" << "学号\t\t" << "性别\t" << "平均成绩\t" << endl;
                cout << endl << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << fixed << setprecision(2) << stu[i].AverageScore << endl << endl;
                return 1;
                break;
            }
            else
            {
                d++;
            }
        }
        if (d == x)
        {
            cout << "查无此人" << endl << endl;
            return 0;
        }
    }
    else if (b == 2)   //TopScore调用DisplayOne函数专属通道
    {
        for (int i = 0; i < x; i++)
        {
            if (*a == stu[i].AverageScore)
            {
                cout << "姓名\t" << "学号\t\t" << "性别\t" << "语文\t" << "数学\t" << "英语\t" << "平均成绩\t" << endl;
                cout << endl << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << stu[i].Chinese << "\t" << stu[i].math << "\t" << stu[i].English << "\t" << fixed << setprecision(2) << stu[i].AverageScore << endl << endl;
                cout << "查询成功!" << endl << endl << endl;
                break;
            }
        }
    }
    else if (b == 3)   //FailExam调用DisplayOne函数专属通道
    {
        cout << "姓名\t" << "学号\t\t" << "性别\t" << "语文\t" << "数学\t" << "英语\t" << "平均成绩\t" << endl;
        for (int i = 0; i < x; i++)
        {
            if (*a == stu[i].AverageScore)
            {
                cout << endl << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << stu[i].Chinese << "\t" << stu[i].math << "\t" << stu[i].English << "\t" << fixed << setprecision(2) << stu[i].AverageScore << endl << endl;
                break;
            }
        }
    }
    return 0;
}
//--------------------------------------------------------------------------------------------------------------
//计算任意一门课的平均成绩
void CourseAve()
{
    char B[100];
    cout << "请输入您所要查询平均成绩的科目:";
    cin >> B;
    int sum = 0, a = 0;
    for (int i = 0; i < x; i++)
    {
        if (strcmp(B, "语文") == 0)
        {
            sum += stu[i].Chinese;
            a++;
        }
        else if (strcmp(B, "数学") == 0)
        {
            sum += stu[i].math;
            a++;
        }
        else if (strcmp(B, "英语") == 0)
        {
            sum += stu[i].English;
            a++;
        }
        else
        {
            cout << "没有此学科,请重新输入" << endl;
            CourseAve();
            a = 0;
            break;
        }
    }
    if (a == x)
    {
        float ave = (float)sum / x;
        cout << "该学科的平均成绩为:" << ave << endl << endl << endl;
    }
}
//--------------------------------------------------------------------------------------------------------------
//计算每个学生三门课程的平均成绩
int StudentAve(int c)
{
    if (c == 0)   //录入平均成绩并提供查询功能
    {
        for (int i = 0; i < x; i++)
        {
            stu[i].AverageScore = (float)(stu[i].Chinese + stu[i].math + stu[i].English) / 3;
        }
        cout << "平均成绩录入成功!" << endl;
        cout << "1.查看全部学生的平均成绩" << endl;
        cout << "2.查看某个学生的平均成绩" << endl;
        cout << "3.不查看" << endl;
        cout << "输入数字选择要实现的功能:";
        int a = Check(1);
        if (a == 1)   //查看全部学生的平均成绩
        {
            DisplayAll(1);
        }
        else if (a == 2)   //查看某个学生的平均成绩
        {
            float* a = NULL;
            while (1)
            {
                int k = DisplayOne(1, a);
                if (k == 1)
                {
                    cout << "查询成功!" << endl << endl;
                    break;
                }
                else
                {
                    cout << "查询失败,是否重新查询?" << endl;
                    cout << "1.是" << endl;
                    cout << "2.否" << endl;
                    int j = Check(2);
                    if (j == 1)
                    {
                        continue;
                    }
                    else if (j == 2)
                    {
                        cout << endl << endl;
                        break;
                    }
                }
            }
        }
    }
    else if (c == 1)   //直接录入平均成绩,不提供查询功能
    {
        for (int i = 0; i < x; i++)
        {
            stu[i].AverageScore = (float)(stu[i].Chinese + stu[i].math + stu[i].English) / 3;
        }
    }
    return 0;
}
//--------------------------------------------------------------------------------------------------------------
// 平均成绩最高分学生的查找
void TopScore()
{
    StudentAve(1);   //录入每位同学的平均成绩
    //--------------------------------------------------------------------------------------------------------------
    //找出平均成绩中的最大值
    float max = stu[0].AverageScore;
    for (int i = 1; i < x; i++)
    {
        if (max < stu[i].AverageScore)
        {
            max = stu[i].AverageScore;
        }
    }
    float* b = &max;   //利用指针进行地址传递
    DisplayOne(2, b);
    return;
}
//--------------------------------------------------------------------------------------------------------------
//找出平均成绩中不合格的同学 
void FailExam()
{
    StudentAve(1);   //录入每位同学的平均成绩
    float fail;
    float* Fail = &fail;   //利用指针进行地址传递
    int k = 0;   //计数器 
    for (int i = 0; i < x; i++)
    {
        if (stu[i].AverageScore < 60)
        {
            fail = stu[i].AverageScore;
            DisplayOne(3, Fail);
        }
        else
        {
            k++;
        }
    }
    if (k == x)   //k=x即没有一位同学的成绩低于60分
    {
        cout << "全体及格!!!" << endl << endl << endl;
    }
    return;
}
//--------------------------------------------------------------------------------------------------------------
// 根据学号查询某学生是否存在
int IsExist(char b[100])
{
    int k = 0;
    for (int i = 0; i < x; i++)
    {
        int a = strcmp(b, stu[i].number);
        if (a == 0)
        {
            return 1;   //查询成功
            break;
        }
        else
        {
            k++;
        }
    }
    if (k == x)
    {
        return 0;   //查询失败
    }
}
void Search()
{
    char b[100];
    cout << "请输入你所要查询的学号:";
    cin >> b;
    int back = IsExist(b);   //调用IsExist函数判断该学生是否存在
    if (back == 1)
    {
        StudentAve(1);   //录入每位同学的平均成绩
        for (int i = 0; i < x; i++)
        {
            int a = strcmp(b, stu[i].number);
            if (a == 0)
            {
                cout << endl << endl;
                cout << "姓名\t" << "学号\t\t" << "性别\t" << "语文\t" << "数学\t" << "英语\t" << "平均成绩\t" << endl;
                cout << endl << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << stu[i].Chinese << "\t" << stu[i].math << "\t" << stu[i].English << "\t" << fixed << setprecision(2) << stu[i].AverageScore << endl << endl;
                cout << "查询成功!!!" << endl << endl;
                break;
            }
        }
    }
    else if(back == 0)
    {
        cout << "查无此人" << endl << endl;
    }
    return;
}
//--------------------------------------------------------------------------------------------------------------
// 修改学生信息
void Modify()
{
    char c[100];
    cout << "请输入你所要查询的学号:";
    cin >> c;
    int back = IsExist(c);   //调用IsExist函数判断该学生是否存在
    int f = 0;   //定位器
    if (back == 1)
    {
        StudentAve(1);   //录入每位同学的平均成绩
        for (int i = 0; i < x; i++)   //查找出该同学在结构体数组中的下标
        {
            int a = strcmp(c, stu[i].number);
            if (a == 0)
            {
                f = i;
            }
        }
        while (1)   //修改信息
        {
            cout << endl << endl;
            StudentAve(1);   //考虑到成绩的修改,此处重新录入每位同学的平均成绩
            cout << "姓名\t" << "学号\t\t" << "性别\t" << "语文\t" << "数学\t" << "英语\t" << "平均成绩\t" << endl;
            cout << endl << stu[f].name << "\t" << stu[f].number << "\t" << stu[f].sex << "\t" << stu[f].Chinese << "\t" << stu[f].math << "\t" << stu[f].English << "\t" << fixed << setprecision(2) << stu[f].AverageScore << endl << endl;
            cout << "+------------+" << endl;
            cout << "| 1.姓名     |" << endl;
            cout << "| 2.学号     |" << endl;
            cout << "| 3.性别     |" << endl;
            cout << "| 4.语文成绩 |" << endl;
            cout << "| 5.数学成绩 |" << endl;
            cout << "| 6.英语成绩 |" << endl;
            cout << "| 7.退出修改 |" << endl;
            cout << "+------------+" << endl;
            cout << "请选择你要修改的内容(输入数字):";
            int b = Check(3);
            cout << endl << endl;
            if (b == 1)   //改姓名
            {
                char name[10];
                cout << "修改为(不超过三个字):";
                cin >> name;
                strcpy(stu[f].name, name);
                cout << endl << endl;
                cout << "修改成功!";
            }
            else if (b == 2)   //改学号
            {
                char number[100];
                cout << "修改为(11位数字):";
                cin >> number;
                strcpy(stu[f].number, number);
                cout << endl << endl;
                cout << "修改成功!";
            }
            else if (b == 3)   //改性别
            {
                char sex[100];
                cout << "修改为:";
                cin >> sex;
                strcpy(stu[f].sex, sex);
                cout << endl << endl;
                cout << "修改成功!";
            }
            else if (b == 4)   //改语文成绩
            {
                cout << "修改为:";
                float Chinese = Check(0);
                stu[f].Chinese = Chinese;
                cout << endl << endl;
                cout << "修改成功!";
            }
            else if (b == 5)   //改数学成绩
            {
                cout << "修改为:";
                float math = Check(0);
                stu[f].math = math;
                cout << endl << endl;
                cout << "修改成功!";
            }
            else if (b == 6)   //改英语成绩
            {
                cout << "修改为:";
                float English = Check(0);
                stu[f].English = English;
                cout << endl << endl;
                cout << "修改成功!";
            }
            else if (b == 7)   //退出修改
            {
                cout << "退出成功!" << endl << endl;
                break;
            }
        }
    }
    else if (back == 0)
    {
        cout << "查无此人" << endl << endl;
    }
    return;
}
//--------------------------------------------------------------------------------------------------------------
//主体部分
int main()
{
    //--------------------------------------------------------------------------------------------------------------
    //初始化界面
    system("color F0");   //设置背景色为白色,字体颜色为黑色
    cout << "+------------------------+" << endl;
    cout << "|  Programmer:豆漿油條  |" << endl;
    cout << "|  Version:3.8.4        |" << endl;
    cout << "+------------------------+" << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;
    cout << "\t\t\t\t\t   欢迎使用学生成绩管理系统!!!" << endl;
    Sleep(5000);   //延时5秒
    system("cls");   //清屏
    //--------------------------------------------------------------------------------------------------------------
    //菜单界面
    while (1)
    {
        //--------------------------------------------------------------------------------------------------------------
        //菜单选项:
        cout << "+-----------------------------------------+" << endl;
        cout << "| 1.录入学生信息                          |" << endl;
        cout << "| 2.查看所有学生信息                      |" << endl;
        cout << "| 3.查询某个学生信息                      |" << endl;
        cout << "| 4.查看任意一门课的平均成绩              |" << endl;
        cout << "| 5.录入所有学生的平均成绩(附带查询功能)|" << endl;
        cout << "| 6.查看平均成绩最高分的学生              |" << endl;
        cout << "| 7.查看平均成绩不及格的学生              |" << endl;
        cout << "| 8.给定学号查询学生                      |" << endl;
        cout << "| 9.给定学号修改学生信息                  |" << endl;
        cout << "| 0.退出程序                              |" << endl;
        cout << "+-----------------------------------------+" << endl;
        cout << "请输入数字以实现功能:";
        //--------------------------------------------------------------------------------------------------------------
        //利用Check函数判断用户的输入是否正确(字符和字符串):
        float n = Check(0);
        cout << endl << endl;
        //--------------------------------------------------------------------------------------------------------------
        //按钮对应功能的实现:
        if (n == 1)
        {
            cout << "请输入你要添加学生的人数:";
            int p = Check(0);
            Create(p);
            Sleep(3000);   //延时3秒
            system("cls");   //清屏
        }
        else if (n == 2)
        {
            DisplayAll(0);
            system("pause");   //界面静止
            system("cls");   //清屏
        }
        else if (n == 3)
        {
            float* a = NULL;
            while (1)
            {
                int k = DisplayOne(0, a);
                if (k == 1)
                {
                    cout << "查询成功!" << endl << endl;
                    break;
                }
                else
                {
                    cout << "查询失败,是否重新查询?" << endl;
                    cout << "1.是" << endl;
                    cout << "2.否" << endl;
                    int j = Check(2);
                    if (j == 1)
                    {
                        continue;
                    }
                    else if (j == 2)
                    {
                        cout << endl << endl;
                        break;
                    }
                }
            }
            system("pause");   //界面静止
            system("cls");   //清屏
        }
        else if (n == 4)
        {
            CourseAve();
            system("pause");   //界面静止
            system("cls");   //清屏
        }
        else if (n == 5)
        {
            StudentAve(0);
            system("pause");   //界面静止
            system("cls");   //清屏
        }
        else if (n == 6)
        {
            TopScore();
            system("pause");   //界面静止
            system("cls");   //清屏
        }
        else if (n == 7)
        {
            FailExam();
            system("pause");   //界面静止
            system("cls");   //清屏
        }
        else if (n == 8)
        {
            Search();
            system("pause");   //界面静止
            system("cls");   //清屏
        }
        else if (n == 9)
        {
            Modify();
            system("pause");   //界面静止
            system("cls");   //清屏
        }
        else if (n == 0)
        {
            cout << "你真的要退出了吗?" << endl;
            cout << "1.强忍离去" << endl;
            cout << "2.继续使用" << endl;
            float a = Check(2);
            cout << endl << endl;
            if (a == 1)
            {
                system("cls");   //清屏
                cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << "\t\t\t\t\t\t   期待您的下次使用!" << endl << endl << endl;
                Sleep(3000);   //延时3秒
                break;
            }
            else if (a == 2)
            {
                system("cls");   //清屏
                continue;
            }
        }
        //--------------------------------------------------------------------------------------------------------------
        //判断用户的输入是否正确(非餐单中的整型数字):
        else
        {
            cout << "您输入数字有误,请重新输入" << endl << endl << endl;
        }
        //--------------------------------------------------------------------------------------------------------------
    }
    return 0;
}

有谁能在这个的基础上改一下的嘛!
课程设计:c++实现学生成绩管理系统_feinifi的博客-CSDN博客_c++学生成绩管理系统 https://blog.csdn.net/feinifi/article/details/110249811