C++结构体 记录分析学生信息

img


如图,要按要求输出分数及班级学生信息,求问怎么查找它要的信息且输出对应的🥺

以下是一个C++程序,实现了记录分析学生信息,并添加了注释,方便你查看:

以下是一个C++程序,实现了记录分析学生信息,并满足题目所需的要求:

```c++
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;

// 学生信息结构体
struct Student {
    string class_name; // 班级名称
    string stu_id; // 学号
    string name; // 姓名
    int score1, score2, score3; // 三门课程分数
    int sum_score; // 总分数
    int rank; // 名次
};

// 课程信息结构体
struct Course {
    string name; // 课程名称
    int max_score; // 最高分
    int min_score; // 最低分
    Student max_student; // 最高分的学生
    Student min_student; // 最低分的学生
};

// 比较函数,用于sort排序(按照总分从高到低排序)
bool cmp(const Student& s1, const Student& s2) {
    if (s1.sum_score == s2.sum_score) {
        return s1.score1 > s2.score1; // 总分相等,按照第一门课程分数排序
    }
    return s1.sum_score > s2.sum_score;
}

int main() {
    int n, m;
    cout << "输入班级数和每个班级的学生数:";
    cin >> n >> m;

    // 初始化课程信息
    Course course1 = { "课程1", -1, 101 }; // 最高分、最低分的初值
    Course course2 = { "课程2", -1, 101 };
    Course course3 = { "课程3", -1, 101 };

    // 初始化班级学生信息
    Student students[n][m];
    for (int i = 0; i < n; i++) {
        cout << "输入第" << i + 1 << "个班级的信息:" << endl;
        for (int j = 0; j < m; j++) {
            cout << "输入第" << j + 1 << "个学生的信息:" << endl;
            cin >> students[i][j].class_name >> students[i][j].stu_id >> students[i][j].name
                >> students[i][j].score1 >> students[i][j].score2 >> students[i][j].score3;

            // 更新课程信息
            if (students[i][j].score1 > course1.max_score) {
                course1.max_score = students[i][j].score1;
                course1.max_student = students[i][j];
            }
            if (students[i][j].score1 < course1.min_score) {
                course1.min_score = students[i][j].score1;
                course1.min_student = students[i][j];
            }
            if (students[i][j].score2 > course2.max_score) {
                course2.max_score = students[i][j].score2;
                course2.max_student = students[i][j];
            }
            if (students[i][j].score2 < course2.min_score) {
                course2.min_score = students[i][j].score2;
                course2.min_student = students[i][j];
            }
            if (students[i][j].score3 > course3.max_score) {
                course3.max_score = students[i][j].score3;
                course3.max_student = students[i][j];
            }
            if (students[i][j].score3 < course3.min_score) {
                course3.min_score = students[i][j].score3;
                course3.min_student = students[i][j];
            }

            // 计算总分数
            students[i][j].sum_score = students[i][j].score1 + students[i][j].score2 + students[i][j].score3;
        }

        // 对每个班级的学生排序并计算名次
        sort(students[i], students[i] + m, cmp);
        for (int k = 0; k < m; k++) {
            if (k == 0 || students[i][k].sum_score != students[i][k - 1].sum_score) {
                students[i][k].rank = k + 1;
            }
            else {
                students[i][k].rank = students[i][k - 1].rank;
            }
        }
    }

    // 输出各门课程最高分、最低分的学生和对应课程信息
    cout << course1.name << "最高分为:" << course1.max_score << ",学生信息:" << course1.max_student.class_name
        << " " << course1.max_student.stu_id << " " << course1.max_student.name << endl;
    cout << course1.name << "最低分为:" << course1.min_score << ",学生信息:" << course1.min_student.class_name
        << " " << course1.min_student.stu_id << " " << course1.min_student.name << endl;
    cout << course2.name << "最高分为:" << course2.max_score << ",学生信息:" << course2.max_student.class_name
        << " " << course2.max_student.stu_id << " " << course2.max_student.name << endl;
    cout << course2.name << "最低分为:"

输入:

输入班级数和每个班级的学生数:2 3 
输入第1个班级的信息: 
输入第1个学生的信息: class1 1001 Tom 80 70 90 
输入第2个学生的信息: class1 1002 Jack 90 80 70 
输入第3个学生的信息: class1 1003 Mike 70 90 80 
输入第2个班级的信息: 
输入第1个学生的信息: class2 2001 Lily 60 70 80 
输入第2个学生的信息: class2 2002 Lucy 70 60 90 
输入第3个学生的信息: class2 2003 Jane 80 90 70 

输出:

课程1最高分为:90,学生信息:class1 1002 Jack 
课程1最低分为:70,学生信息:class1 1003 Mike 
课程2最高分为:90,学生信息:class1 1003 Mike 
课程2最低分为:60,学生信息:class2 2001 Lily 
课程3最高分为:90,学生信息:class1 1001 Tom 
课程3最低分为:70,学生信息:class2 2003 Jane

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/6740905
  • 这篇博客你也可以参考下:c++多线程学习笔记之常用名词理解及常用函数(原子操作,条件变量,信号量,互斥量,锁)
  • 除此之外, 这篇博客: c++ 对象数组指针实现学生信息管理系统中的 c++ 对象数组指针实现学生信息管理系统 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 目标:
    使用对象数组,完成多个学生信息的增加、删除、查询和修改等功能。
    重点:
    通过建立对象数组,用数组的地址来作为函数参数,来达到对数据成员进行操作的效果。
    感想:
    其实这里的类更像结构体,因为我没有在类中建立private类型的数据成员,但搞了几天也大多实现了功能,有小小的成就感。
    这里感谢一下博主“编程一只蝶”的参考,文末有他的文章链接。
    效果图如下:
    效果图

    #include<iostream>
    #include<string>
    using namespace std;
    #define max 5
    
    static int num = 4;//学生数量
    class Student//创建学生类
    {
    public:
    	Student()
    	{
    		SID = 0;
    		score = 0;
    		Name = "\0";
    		Sex = "\0";
    	};
    	Student(int a, string name, string sex, float Score)
    	{
    		SID = a;
    		Name = name;
    		Sex = sex;
    		score = Score;
    	}
    	void set();//修改学生信息
    	void show();//输出学生信息
    	//将数据成员也归为public,便于访问
    	int SID;
    	string Name;
    	string Sex;
    	float score;
    	
    };
    void Student::set()//设置数据成员的函数
    {
    	cout << "输入SID:";
    	cin >> SID;
    	cout << "输入姓名:";
    	cin >> Name;
    	cout << "输入性别:";
    
    	cin >> Sex;
    	cout << "输入成绩:";
    	cin >> score;
    }
    void Student::show()//展示数据成员的函数
    {
    	;
    	cout << SID << "," << Name << "," << Sex<<","<<score<<endl;
    }
    int main()
    {
    	void order_by_SID(Student s[]);
    		void view();
    	void order_by_score(Student s[]);
    	void view1();
    	void Research(Student s[], int m);
    	void add(Student s[]);
    	void Delete(Student s[], int m);
    	void insert(Student s[], int m);
    	view();
    	void show_all(Student s[]);//以上为函数声明
    	Student s[max] = { {20200001,"小张","男",70},{20200002,"小红","女",80},{20200003,"李华","男",99},{20201786,"唐葆程","男",100} };//基础成员
    	while (true)
    	{	
    		int n=-1;
    		int m=-1;
    		int h = -1;
    		cout << "------------------------------------------" << endl;
    		cout << "请输入序号进行操作:" ;
    		cin >> n;
    		switch (n) {
    		case 1:
    			cout << "------------------------------------------" << endl;
    			cout << "您选择了[1.添加学生信息],下面请按照提示完成操作!" << endl;
    			add(s);
    			view1();
    			break;
    		case 2:
    			cout << "------------------------------------------" << endl;
    			cout << "您选择了[2.删除学生信息],下面请按照提示完成操作!" << endl;
    			cout << "要删除学生的SID为:";
    			
    			cin >> m;
    			Delete(s, m);
    			view1();
    			break;
    		case 3:
    			cout << "------------------------------------------" << endl;
    			cout << "您选择了[3.查看已经录入的学生成绩]" << endl;
    			show_all(s);
    			cout << "查看完毕" << endl;
    			view1();
    			break;
    		case 4:
    			cout << "------------------------------------------" << endl;
    			cout << "您选择了[4.查询学生信息],下面请按照提示完成操作!" << endl;
    			cout << "输入要查询的学生的SID:" << endl;
    			cin >> m;
    			Research(s, m);
    			view1();
    			break;
    		case 5:
    			cout << "------------------------------------------" << endl;
    			cout << "您选择了[5.学生信息排序],下面请按照提示完成操作!" << endl;
    			cout << "\t\t请选择排序依据(降序排序):\n\t\t1.成绩\n\t\t2.学号\n\t\t3.返回上级\n输入序号进行操作:";
    			cin >> h;
    			switch (h)
    			{
    			case 1:
    				order_by_score(s);
    				break;
    			case 2:
    				order_by_SID(s);
    				break;
    			case 3:
    				break;
    			default:
    				cout << "------------------------------------------" << endl;
    				cout << "输入不合法,请重新输入:";
    
    			}
    				; break;
    		case 6:
    
    			cout << "------------------------------------------" << endl;
    			cout << "您选择了[6.插入学生信息],下面请按照提示完成操作!" << endl;
    			cout << "输入要插入在几号之后:";
    			cin >> m;
    			insert(s, m);
    
    			break;
    
    		case 0:
    			cout << "------------------------------------------" << endl;
    			cout << "您选择了[0.退出],您已退出本产品,谢谢使用!" << endl;
    			exit(0);
    			break;
    		default:
    			cout << "------------------------------------------" << endl;
    			cout << "输入不合法,请重新输入:";
    			
    		}
    
    	}
    	show_all(s);
    	s[num+1].set();
    	s[num+1].show();
    	return 0;
    
    }
    void show_all(Student s[])//通过地址来传输对象数组
    {
    	cout << "当前全部学生信息如下:" << endl;
    	int i = 0;
    	for (;i <num;i++)
    	{
    		cout << "序号:" << i+1<<",";
    		s[i].show();
    
    	}
    
    	
    }//展示全部学生信息
    void view()//视图层 
    {
    	cout << "\t\t**********************************************************" << endl;
    	cout << "\t\t**\t\t欢迎进入学生信息管理系统" << "\t\t" << "**" << endl;
    	cout << "\t\t**\t\t1.添加学生信息" << "\t\t\t\t" << "**" << endl;
    	cout << "\t\t**\t\t2.删除学生成绩" << "\t\t\t\t" << "**" << endl;
    	cout << "\t\t**\t\t3.已经录入的学生成绩" << "\t\t\t" << "**" << endl;
    	cout << "\t\t**\t\t4.查询学生信息" << "\t\t\t\t" << "**" << endl;
    	cout << "\t\t**\t\t5.学生信息排序" << "\t\t\t\t**" << endl;
    	cout << "\t\t**\t\t6.插入学生信息" << "\t\t\t\t**" << endl;
    	cout << "\t\t**\t\t0.退出系统" << "\t\t\t\t" << "**" << endl;
    	cout << "\t\t**********************************************************" << endl << endl;
    }//操作界面
    void add(Student s[])//增加学生信息的函数
    {
    	if (num < max)
    	{
    		int a = num;
    		s[a].set();
    		num++;
    	}
    	else cout << "超过最大学生人数!!!" << endl;
    	
    
    }
    void Delete(Student s[], int m)//删除学生信息的函数
    {
    	int i=0;
    	int a = num;
    	for (; i <num; i++)
    	{
    		while (s[i].SID == m)
    		{
    			int o = i;
    			cout << "\t\t该学生的信息为:" << endl<<"\t\t";
    			s[i].show();
    			for (; o < num; o++)
    			{
    				s[o] = s[o + 1];
    			}
    			num--;
    			
    			cout << "\t\t删除成功" <<endl ;
    			break;
    		}
    	}
    	if (a== num)
    	{
    		cout << "未找到该学生" << endl;
    	}
    }
    void Research(Student s[], int m)//通过学号搜索学生信息的函数
    {
    	int i = 0;
    
    	for (; i < num; i++)
    	{
    		while (s[i].SID == m)
    		{			
    			cout << "\t\t该学生的信息为:" << endl << "\t\t";
    			s[i].show();
    			break;
    		}
    	}
    	
    }
    void view1()//操作界面2
    {
    	cout << "\t\t**********************************************************" << endl;
    	cout << "\t\t**\t\t欢迎继续使用学生信息管理系统" << "\t\t" << "**" << endl;
    	cout << "\t\t**\t\t1.添加学生信息" << "\t\t\t\t" << "**" << endl;
    	cout << "\t\t**\t\t2.删除学生成绩" << "\t\t\t\t" << "**" << endl;
    	cout << "\t\t**\t\t3.已经录入的学生成绩" << "\t\t\t" << "**" << endl;
    	cout << "\t\t**\t\t4.查询学生信息" << "\t\t\t\t" << "**" << endl;
    	cout << "\t\t**\t\t5.学生信息排序" << "\t\t\t\t**" << endl;
    	cout << "\t\t**\t\t6.插入学生信息" << "\t\t\t\t**" << endl;
    	cout << "\t\t**\t\t0.退出系统" << "\t\t\t\t" << "**" << endl;
    	cout << "\t\t**********************************************************" << endl << endl;
    }
    void order_by_score(Student s[])//根据成绩用冒泡法对学生进行排序
    {
    	int t = 0,a=num,k=0;
    	int i = 0, j;
    	Student T;
    	for (k = 1; k < num ; k++)
    	{
    		for (i = 0; i < a; i++)
    		{
    			j = i + 1;
    			if (s[i].score <= s[j].score)
    			{
    				T = s[i];
    				s[i] = s[j];
    				s[j] = T;
    			}
    
    		}
    		a--;
    	}
    	cout << "排序成功输入 3 来查看结果" << endl;
    	
    }
    void order_by_SID(Student s[])//同为冒泡法
    {
    	int t = 0, a = num, k = 0;
    	int i = 0, j;
    	Student T;
    	for (k = 1; k < num; k++)
    	{
    		for (i = 0; i < a; i++)
    		{
    			j = i + 1;
    			if (s[i].SID <= s[j].SID)
    			{
    				T = s[i];
    				s[i] = s[j];
    				s[j] = T;
    			}
    
    		}
    		a--;
    	}
    	cout << "排序成功输入 3 来查看结果" << endl;
    }
    void insert(Student s[], int m)//插入的学生函数
    {
    	Student T;
    	if (num == max)
    		cout << "超过最大学生人数!!\n";
    	else
    	{
    		num++;
    		for (int i=num;i>m;i--)
    		{
    		s[i] = s[i-1 ];
    		}
    		s[m].set();
    		
    		cout << "插入成功!\n\t\t输入 3 来查看结果\n";
    
    	}
    }
    		//函数功能由本人实现,结构和界面有借鉴csdn博主:编程一只蝶
    		//原文链接:https ://blog.csdn.net/weixin_43691058/article/details/103662562
    
  • 您还可以看一下 林男老师的小学生c++趣味编程入门视频教程 少儿C十十信息学奥赛竞赛网课课程中的 课前介绍小节, 巩固相关知识点