【C++实验1】学生成绩信息管理系统题解

【问题描述】编写一个基于结构体得学生成绩信息管理系统。

主要功能如下: 1. 用结构体存放所有数据。

2. 每个功能都用函数实现。

3. 输入10个学生的学号和三门课程的成绩。

4. 计算每个学生的总分。

5. 按总分从高到低排序。

6. 加上名次一列。

7. 输出最后的二维表格样式的成绩,含学号、三门课成绩、总分、名次。

请编写五个函数完成相应功能的实现。其中:

input_data(STU s[]):输入原始数据函数。

calculate(STU s[]):计算总分函数。

sort_total(STU s[]):根据总分降序排序函数。

add_rank(STU s[]):增加名次列函数。

print_data(STU s[]):输出二维表格样式成绩的函数。

【输入形式】用户依次输入10名学生的学号和三门课成绩。

【输出形式】输出最后的二维表格样式的成绩,含学号、三门课成绩、总分、名次(包含表头),要求每个学生信息占用一行,每个数据占用15个字符且左对齐。

【样例输入】

10001 67 71 69 

10002 78 83.5 94.2

10003 61 67 87.5 

10004 88 89 92 

10005 66.7 78.6 93

10006 67 72 77

10007 74 63 89

10008 93 74 66

10009 74 76 81

10010 78 91 83

【样例输出】

Number:        Chinese:       Mathematics:   English:       Total score:   Ranking

10004            88                89                      92               269               1

10002            78                83.5                   94.2            255.7             2

10010            78                91                      83               252               3

10005            66.7             78.6                   93               238.3             4

10008            93                74                      66               233               5

10009            74                76                      81               231               6

10007            74                63                      89               226               7

10006            67                72                      77               216               8

10003            61                67                      87.5            215.5             9

10001            67                71                      69               207               10

【样例说明】用户依次输入10名学生的学号和三门课成绩。输出为二维表格样式的成绩,含学号、三门课成绩、总分、名次(包含表头),每个学生信息占用一行,每个数据占用15个字符且左对齐。

【评分标准】 结果完全正确得20分,每个测试点10分。提交程序名为:scoremanage.c或scoremanage.cpp

#include<iostream>
#include<iomanip>
using namespace std;

const int N=10;
struct STU
{
	public:
		int num;
		double score1;
		double score2;
		double score3;
		double sum;
};

STU s[N];

void input_data(STU s[],int i)
{
	cin>>s[i].num>>s[i].score1>>s[i].score2>>s[i].score3;
	
}

void calculate(STU s[],int i)
{
	s[i].sum=s[i].score1+s[i].score2+s[i].score3;
}

void total(STU s[],int i)
{
	STU temp;
	for(int i=1;i<=10;i++)
	{
	    for(int j=1;j<=10-i;j++)
	    {
	    	if(s[j].sum<s[j+1].sum)
	    	{
	    		temp=s[j+1];
	    		s[j+1]=s[j];
	    		s[j]=temp;
			}
		}
	}
}

void print_s(STU s[],int i)
{
	cout<<std::left<<setw(15)<<s[i].num<<setw(15)<<s[i].score1<<setw(15)<<s[i].score2;
	cout<<std::left<<setw(15)<<s[i].score3<<setw(15)<<s[i].sum<<setw(15)<<i;
	cout<<endl;
	
}

int main()
{
	for(int i=1;i<=10;i++)
	{
		input_data(s,i);
		calculate(s,i);
		total(s,i);
		
	}
	cout<<"Number:        Chinese:       Mathematics:   English:       Total score:   Ranking";
	cout<<endl;
	for(int i=1;i<=10;i++)
	{
		print_s(s,i);
	}
	
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值