第16周-任务2-学生成绩排序

简介: 【题目】 文件score.dat中保存的是100名学生的姓名和C++课、高数和英语成绩。 (1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分、均分数据成员,成员函数根据需要确定。 (2)读入这名学生的成绩,用对象数组进行存储。 (3)求出各科和总分的最高分。 (4)请按总分的降序(高成绩在前,低成绩在后)排序 (5)在屏幕上显示各科及总分的最高分,排序后的成绩单(包

【题目】

文件score.dat中保存的是100名学生的姓名和C++课、高数和英语成绩。

(1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分、均分数据成员,成员函数根据需要确定。

(2)读入这名学生的成绩,用对象数组进行存储。

(3)求出各科和总分的最高分。

(4)请按总分的降序(高成绩在前,低成绩在后)排序

(5)在屏幕上显示各科及总分的最高分,排序后的成绩单(包括总分)保存到文件odered_score.dat中。

<下载相关文件>


【一点说明】

  本题中专门提出了设计学生类。我对课本中的程序有点意见,讲文件了,对象却找不到了。通过此题,要知道文件操作拓展了们操纵数据的范围,而程序用面向对象的方法做,还是用面向过程的方法编,真是无所谓。


【参考解答】

#include <fstream>
#include<iostream>
#include<string>
using namespace std;

//定义学生类
class Student
{
public:
	Student(){};
	Student(string nam, double c, double m, double e):name(nam),cpp(c),math(m),english(e){total=c+m+e;}
	void set_value(string nam, double c, double m, double e);
	string get_name(){return name;}
	double get_cpp(){return cpp;}
	double get_math(){return math;}
	double get_english(){return english;}
	double get_total(){return total;}
	void set_cpp(double c){cpp=c;}
	void set_math(double m){math=m;}
	void set_english(double e){english=e;}
	void set_total(double t){total=t;}
private:
	string name;
	double cpp;
	double math;
	double english;
	double total;
};

void Student::set_value(string nam, double c, double m, double e)
{
	name=nam;
	cpp=c;
	math=m;
	english=e;
	total=c+m+e;
}

int main( )
{
	Student stud[100],t; //stud[100]为保存数据的对象数组
	string sname;
	double scpp, smath, senglish;
	int i,j;

	//将文件中的数据读入到对象数组中
	ifstream infile("score.dat",ios::in);  //以输入的方式打开文件
	if(!infile)       //测试是否成功打开
	{
		cerr<<"open error!"<<endl;
		exit(1);
	}
	for(i=0;i<100;i++)
	{
		infile>>sname>>scpp>>smath>>senglish;
		stud[i].set_value(sname, scpp, smath, senglish);
	}
	infile.close();

	//求各科最高分及总分最高分
	Student max_stud("nobody",0,0,0);  //max_stud是一个不存在的学生,存储最高分
	for(i=0;i<100;i++)
	{
		if(stud[i].get_cpp()>max_stud.get_cpp()) max_stud.set_cpp(stud[i].get_cpp());
		if(stud[i].get_math()>max_stud.get_math()) max_stud.set_math(stud[i].get_math());
		if(stud[i].get_english()>max_stud.get_english()) max_stud.set_english(stud[i].get_english());
		if(stud[i].get_total()>max_stud.get_total()) max_stud.set_total(stud[i].get_total());
	}

	//按总分排序
	for(j=0;j<100-2;j++) 
	{
		for(i=0;i<100-j-1;i++)   
			if (stud[i].get_total()<stud[i+1].get_total()) 
			{
				t=stud[i]; 
				stud[i]=stud[i+1];
				stud[i+1]=t;
			}
	}

	//显示各科及总分的最高分
	cout<<"C++最高分为: "<<max_stud.get_cpp()<<endl;
	cout<<"高等数学最高分为: "<<max_stud.get_math()<<endl;
	cout<<"英语最高分为: "<<max_stud.get_english()<<endl;
	cout<<"总分最高分为: "<<max_stud.get_total()<<endl;

	//将按总分排序后的结果存入文件
	cout<<"请到文件ordered_salary.txt中查看排序后的结果"<<endl;
	ofstream outfile("ordered_salary.txt",ios::out); 
	if(!outfile)    
	{
		cerr<<"open error!"<<endl;
		exit(1);
	}
	for(i=0;i<100;i++)
	{
		outfile<<stud[i].get_name()<<"\t";
		outfile<<stud[i].get_cpp()<<"\t";
		outfile<<stud[i].get_math()<<"\t";
		outfile<<stud[i].get_english()<<"\t";
		outfile<<stud[i].get_total()<<endl;
	}
	outfile.close();    
	system("pause");
	return 0;
}


目录
相关文章
|
算法 调度
详解操作系统四大常用的作业调度算法(FCFS丨SJF丨HRRN丨RR)
详解操作系统四大常用的作业调度算法(FCFS丨SJF丨HRRN丨RR)
8721 0
|
5月前
|
弹性计算 监控 Cloud Native
云原生时代,“信任”才是开发者的核心基础设施:4个技术维度筑牢增长底盘
在云原生时代,信任已成为技术发展的基础设施。本文深入剖析为何“信任”决定开源项目、API与云产品的成败,并从行为一致、承诺可验证、错误修复、输出稳定四大技术维度,揭示构建长期信任的实操路径,助力开发者实现可持续增长。
311 1
|
3月前
|
缓存 人工智能 JSON
|
3月前
|
人工智能 前端开发 JavaScript
JeecgBoot低代码平台 Qiankun 微前端集成指南:主应用配置全流程
当 JeecgBoot低代码项目发展到一定规模,单体前端的弊端开始显现:模块耦合严重、构建时间激增、团队协作困难。微前端架构允许将不同业务模块拆分为独立的子应用,各自开发、独立部署,通过 Qiankun 框架在运行时动态组合。 本文聚焦于如何将 JeecgBoot-Vue3 配置为 Qiankun 微前端的主应用(基座),接管路由分发和子应用生命周期管理。 在 JeecgBoot低代码主应用项目中安装 Qiankun:
244 3
|
3月前
|
机器学习/深度学习 人工智能 算法
美团2026春招笔试复盘:AI知识正式进入必考范围
3月中旬美团春招笔试释放明确信号:AI基础(如Transformer、Attention、Agent等)已成必考项,非仅算法岗。笔试结构稳定但选择题新增大模型考点,编程题难度梯度明显,图论压轴题重模型转化。备考需三足鼎立:构建算法题型模型、夯实AI通识、提升工程实现稳定性。
|
4月前
|
存储 人工智能 网络安全
2026年阿里云轻量服务器部署OpenClaw(Clawdbot)小白零基础教程
OpenClaw(原Clawdbot,曾用名Moltbot)是一款开源轻量级AI自动化代理工具,2026年版本在部署灵活性、功能兼容性上实现重大升级,核心优势在于“自然语言驱动+全流程任务自动化”,无需手动编写脚本,仅需输入口语化指令,即可完成文档处理、日程管理、文件读写、跨工具协同、代码生成等各类重复性工作,被广泛应用于个人办公、新手开发、轻量团队协作等场景,堪称“私人AI员工”。
668 1
|
9月前
|
JSON 前端开发 API
如何调用体育数据足篮接口API
本文介绍如何调用体育数据API:首先选择可靠服务商并注册获取密钥,接着阅读文档了解基础URL、端点、参数及请求头,然后使用Python等语言发送请求、解析JSON数据,最后将数据应用于Web、App或分析场景,同时注意密钥安全、速率限制与错误处理。
955 152
|
5月前
|
缓存 JSON 数据安全/隐私保护
安居客 item_search - 获取搜索数据接口对接全攻略:从入门到精通
安居客anjuke.item.search接口是房产多维度筛选核心API,覆盖新房、二手房、租房等全品类,支持区域、价格、户型等精细检索,返回轻量房源标识与属性,联动item_get获取详情。HTTPS+API签名认证,JSON/XML双格式响应,具备实时性强、权限分级、筛选灵活等特点,适用于搜索页构建、市场分析、智能推荐等场景。
|
6月前
|
SQL 前端开发 数据处理
Python 项目实战入门:从 0 到 1 搭建简易学生信息管理系统
本文以简易学生信息管理系统为例,详解Python Web项目从需求分析、技术选型到编码部署的完整流程。采用Flask+SQLite+Bootstrap轻量栈,实现增删改查与Excel导出,助初学者快速掌握开发逻辑与实战技能。
|
6月前
|
运维 监控 Linux
Linux 学习资源精选:从入门到运维的高效清单
本文精选Linux学习资源,按入门、运维、进阶三阶段系统推荐视频、书籍、工具与项目,强调分阶段精准匹配、重实操强总结,助力学习者高效构建知识体系,少走弯路,快速提升实战能力。
731 0

热门文章

最新文章