C++第11周项目5——体验文件操作

简介: 课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565【项目5-体验文件操作】  先阅读《文件操作初体验》。文件english.dat(含10000个数据的文件在BB平台。为方便校外读者,本文后附100个数据,自行复制粘贴到记事本中保存为文件english.dat))中给出的是2012级10000名新生入学英语分级考

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565


【项目5-体验文件操作】

  先阅读《文件操作初体验》。文件english.dat(含10000个数据的文件在BB平台。为方便校外读者,本文后附100个数据,自行复制粘贴到记事本中保存为文件english.dat))中给出的是2012级10000名新生入学英语分级考试全校同学的成绩。编程序,求出这次考试的平均成绩,并统计各分数段的人数(优秀:≥90,良好:≥80,中等:≥70,及格:≥60,不及格:<60)。运行结果如图所示。

  
  提示:本任务完成困难,可以考虑预做下面的练习
  练习1:从文件中读出学生的成绩,输出最高、最低,以及平均成绩(平均成绩为小数)。
  练习2:从文件中读出学生的成绩,统计90分以上学生的人数并输出。
  拓展1:将输出界面改良下,显示成下面的样子(仅变输出方式)

  
  拓展2:将统计结果保存到数据文件statictic.dat中(提示:要写入文件了)


【参考解答】

项目任务参考代码:

#include <fstream>   //操作文件必写
#include<iostream>
using namespace std;
int main( )
{	
	int s,i,r; 
	int a=0, b=0,c=0,d=0,e=0;//分别代表优秀、良好、中等、及格、不及格人数
	double sum=0,ave;
	//以输入的方式(ios::in)打开文件
	ifstream infile("english.dat",ios::in);
	if(!infile)   				
	{
		cerr<<"open error!"<<endl;
		exit(1);
	}
	for(i=0;i<10000;i++)
	{
		infile>>s;
		sum+=s;
		r=s/10;  //r用于分出“档次”
		switch(r)
		{
		case 10:
		case 9: 
			a++; 
			break;
		case 8: 
			b++; 
			break;
		case 7: 
			c++; 
			break;
		case 6: 
			d++; 
			break;
		default: 
			e++; 
			break;
		}
  	}
	infile.close(); 		 //读入完毕要关闭文件
	//下面对数据的操作和文件就没有关系了,本例输出求得的最大值
	ave=sum/10000;
	cout<<"平均成绩为:"<<ave<<endl;
	cout<<"优秀人数:"<<a<<endl;
	cout<<"良好人数:"<<b<<endl;
	cout<<"中等人数:"<<c<<endl;
	cout<<"及格人数:"<<d<<endl;
	cout<<"不及格人数:"<<e<<endl;
	return 0;
}  

拓展1参考代码:

#include <fstream>   //操作文件必写
#include<iostream>
using namespace std;
int main( )
{	
	int s,i,r; 
	int a=0, b=0,c=0,d=0,e=0;//分别代表优秀、良好、中等、及格、不及格人数
	double sum=0,ave;
	//以输入的方式(ios::in)打开文件
	ifstream infile("english.dat",ios::in);
	if(!infile)   				
	{
		cerr<<"open error!"<<endl;
		exit(1);
	}
	for(i=0;i<10000;i++)
	{
		infile>>s;
		sum+=s;
		r=s/10;  //r用于分出“档次”
		switch(r)
		{
		case 10:
		case 9: 
			a++; 
			break;
		case 8: 
			b++; 
			break;
		case 7: 
			c++; 
			break;
		case 6: 
			d++; 
			break;
		default: 
			e++; 
			break;
		}
  		}
	infile.close(); 		 
	
	ave=sum/10000;
	int max,l; //将存储这几个分数段中的最多人数,l是输出“进度条”的长度
	max=a;
	if(max<b) max=b;
	if(max<c) max=c;
	if(max<d) max=d;
	if(max<e) max=e;
	cout<<"平均成绩为:"<<ave<<endl;
	//人数最多的(max)输出20个格子,据此可算出各档需要多少格子

	cout<<"优秀 ";
	l=double(a)/max*50;
	for(i=0;i<l;++i) 
		cout<<'#';
	cout<<"  "<<a<<endl;
	cout<<"良好 ";
	l=double(b)/max*50;
	for(i=0;i<l;++i) 
		cout<<'#';
	cout<<"  "<<b<<endl;
	cout<<"中等 ";
	l=double(c)/max*50;
	for(i=0;i<l;++i) 
		cout<<'#';
	cout<<"  "<<c<<endl;
	cout<<"及格 ";
	l=double(d)/max*50;
	for(i=0;i<l;++i) 
		cout<<'#';
	cout<<"  "<<d<<endl;
	cout<<"挂科 ";
	l=double(e)/max*50;
	for(i=0;i<l;++i) 
		cout<<'#';
	cout<<"  "<<e<<endl;
	return 0;
}  


附:本文后附100个数据,自行复制粘贴到记事本中保存为文件english.dat,以便于完成练习。
66
77
97
65
69
79
79
77
69
74
90
73
64
69
69
69
74
71
83
96
87
88
62
76
65
51
66
73
77
78
73
52
78
75
73
60
69
56
76
68
76
77
87
56
61
62
69
64
73
68
62
62
79
88
79
77
71
57
88
69
71
78
74
67
86
55
86
78
81
52
66
67
68
85
72
74
84
64
61
76
71
64
91
72
82
60
70
64
84
75
67
67
85
70
59
72
87
65
55
77

  


目录
相关文章
WK
|
9天前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
29 1
|
28天前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
223 3
|
2月前
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
39 3
|
6月前
|
C++ iOS开发
C++ 文件操作的技术性文章
C++ 文件操作的技术性文章
30 0
|
4月前
|
Rust 测试技术 编译器
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
|
3月前
|
编译器 C++ 开发者
Visual Studio属性表:在新项目中加入已配置好的C++库
通过以上步骤可以确保Visual Studio中新项目成功地加入了之前已配置好的C++库。这个过程帮助开发者有效地管理多个项目中共享的库文件,提升开发效率。
81 0
|
5月前
|
存储 C++
C++文件操作
C++文件操作
|
4月前
|
Java C++ 开发者
如何根据项目需求选择使用C++还是Python进行内存管理?
【7月更文挑战第2天】如何根据项目需求选择使用C++还是Python进行内存管理?
47 0
|
6月前
|
存储 C语言 数据安全/隐私保护
C++中的文件操作技术详解
C++中的文件操作技术详解
下一篇
无影云桌面