case01:C++面向程序设计案例:成绩录入系统01版本

/************************************************************************/
/* Boject-Oriented Programming C++
@title Score0.1
@author haoaowei
@Email:aowei_hao@126.com
@Date 2018-07-28
@copyright Department of Geophysical and Technology,China University of Geophysics ,Beijing ,P.R China
*/
/*
[问题描述]
  输入三十个学生的学号、姓名和5门功课的成绩
  计算总分并按照总分进行排名;
  最后按照学号打印成绩单
[学习要点]
  *自顶向下的设计
  *用结构体描述数据实体
  *结构体数组
  *使用常量
  *冒泡排序算法
  *输入大量数据
*/
/************************************************************************/


//主要程序如下
#include "iostream"
#include "string"
//#include "cstdlib"
using namespace std;

float Sum_Score(float *arr,int len);  //一维函数的求和声明,可以用来计算总分

int main()
{
	const int STUDENT_MAX =10;   //定义全局变量    测试的时候采用五位学生进行测试
	const int COURSE_MAX =5;
     


//创建学生信息存储的结构体
struct Student       
{
	string SId;       //学生的学号
	string Name;  //学生的姓名
	float Score[COURSE_MAX];//每门功课的成绩用数组来管理
	float TotalScore;       //总分
	int  Rank;             //学生的排名
};

Student stu[STUDENT_MAX];  //存储信息得结构体



//1.完成数据的输入
for(int i=0;i<STUDENT_MAX;i++)
{
	cout<< "输入学生"<<i+1<<"(学号,姓名,"<<COURSE_MAX<<"门课成绩:\n";
	cin>>stu[i].SId>>stu[i].Name;
	for (int j=0;j<COURSE_MAX;j++)
	{
	  cin>>stu[i].Score[j];
	}
}
//2.计算总分
for (int i=0;i<STUDENT_MAX;i++ )
{
	stu[i].TotalScore = Sum_Score(stu[i].Score,COURSE_MAX);  //计算总分
}
//3.根据总分排名,每个元素比它大的个数加1就是名次
for(int i =0;i<STUDENT_MAX;i++)
{
	stu[i].Rank = 1;
	for (int j =0;j<STUDENT_MAX;j++)   //循环进行对比
	{
		if(stu[j].TotalScore>stu[i].TotalScore)
			stu[i].Rank++;
	}
}
//4.根据学号大小排名,采用冒泡排序完成

for(int i=0;i<STUDENT_MAX-1;i++)
for(int j=0;j<STUDENT_MAX-i-1;j++)
{
	if(stu[j].SId>stu[j+1].SId)
		swap(stu[j],stu[j+1]);   //交换沉底

}

//5.打印出:输出结果:

for(int i=0;i<STUDENT_MAX;i++)
{
	cout<< "输入学生"<<i+1<<"\t学号:"<<stu[i].SId<<"\t姓名:" <<stu[i].Name;

	for (int j=0;j<COURSE_MAX;j++)
	{
		cout << "  "<<stu[i].Score[j] << "  ";
	}
	cout << "总分:"<<stu[i].TotalScore<<"  ";   //打印出总成绩
    cout << "排名:"<<stu[i].Rank <<endl;
}

	system("pause");  //暂停一下
	return 0;
}

//调用相关函数编写计算数组和的函数,在main函数外面定义使用
float Sum_Score(float *arr,int len)
{
	float sum =0;
	for (int i =0; i<len;i++)
	{
		sum += arr[i];
	}

	return sum;
}

输入文件:测试有十个,直接复制到窗口就ok了,要保证格式的统一

2010170037 郝奥伟 87 88 89 90 91 
2010170041 马武   45 65 34 56 78
2010170038 王甜甜 90 91 92 93 94
2010170039 张三   67 89 45 92 57
2010170040 王二   98 97 98.5 94 92
2010170022 张国启 87 82 89 90 91 
2010170048 李杰   45 63 34 56 78
2010170052 陈改杰 90 98 92 93 94
2010170066 陈国江 67 82 45 92 57
2010170010 牛源源 98 97 92 94 92

输出结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值