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

VS文件内容如下:

(1)主函数:score03.cpp

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

//主要程序如下
#include "student.h"
#include "cstdlib"

int main()
{
//1.完成数据的输入
 InputStudentInf();

//2.计算总分
 CalTotalScore();

//3.根据总分排名,每个元素比它大的个数加1就是名次
 //4.根据学号大小排名,采用冒泡排序完成
 CountRankOfTotal();

//5.打印出:输出结果:
 PrintScoreReport();

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

(2)头文件:student.h

#ifndef STUDENT_H_INCLUDED
#define STUDENT_H_INCLUDED

//以下为函数声明:
void InputStudentInf();//输入学生信息得函数声明
void CalTotalScore();  //计算学生成绩的总分
void CountRankOfTotal();//计算排名
void PrintScoreReport();//根据学号排序输出
float Sum_Score(float *arr,int len);  //一维函数的求和声明,可以用来计算总分

#endif

(3)资源文件:student.cpp

#include "student.h"
#include "iostream"
#include "string"

using namespace std;

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.输入信息得函数主体
void InputStudentInf()
{
	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.计算总分主体函数
void CalTotalScore()
{
	for (int i=0;i<STUDENT_MAX;i++ )
	{
		stu[i].TotalScore = Sum_Score(stu[i].Score,COURSE_MAX);  //计算总分
	}

}
//3.根据总分排名
void CountRankOfTotal()
{
	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++;
		}
	}

	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]);   //交换沉底

		}

}
//4.根据学号排序输出
void PrintScoreReport()//根据学号排序输出
{
	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;
	}
}


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

	return sum;
}

输入文件:

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

输出结果:

猜你喜欢

转载自blog.csdn.net/haoaoweitt/article/details/81279415