vector,string,标准输入输出流,文件输入输出流01(C++)

按要求编写程序。
a) 定义一个结构体类型 Student,如下所示:
struct Student
{
int ID; //学号
string name; //姓名
float score[3]; //三门课程成绩
};
b) 编写一个函数,按照上述结构体定义,依次从键盘输入 5 个学生的信息,创建学生向量 A;
c) 编写一个函数,将上述向量 A 按照学号 ID 进行增序排序,并将排序后的学生信息显示在屏幕上,显示格式要求如下:
《学号》          《姓名》              《课程 1》              《课程 2》                《课程 3》
10 列,右         10 列,右             3 位有效数字,       3 位有效数字,        3 位有效数字, 
对齐                  对齐                     右对齐                      右对齐                     右对齐

         111                     TOM                       89.0                     91.0                           89.0

         122                     MIKE                     71.5                     93.5                            79.5

        ……

d) 编写一个函数,删除向量中姓名为“TOM”的学生信息,并将处理结束后的向量内容输出到 D 盘根目录中的“res.dat”中,格式和 c 中的要求相同;
e) 要求使用流的方法来完成程序流程中所有的数据输入和输出操作;要求使用向量来保存学生信息。

/*===============================================================================================================
*学号:1527403059
*作业:E04
*功能:(1)定义一个结构体类型
       (2)编写一个函数,依次从键盘输入5个学生的信息,创建学生向量A
	   (3)编写一个函数,将上述向量A按照学号ID进行增序排序,并将排序后的学生信息按要求格式显示到屏幕上
	   (4)编写一个函数,删除向量中姓名为“TOM”的学生信息,并将处理结束后的向量内容输出到D盘根目录中的“res.dat”中,格式
	      同上
	   (5)要求使用流的方法来完成程序流程中所有数据输入和输出操作;要求使用向量来保存学生信息
*作者:陆胤任
*日期:2016.3.14
*================================================================================================================*/

#include<iostream>
#include<vector>
#include<string>
#include<iomanip>
#include<fstream>
#include<iterator>
#include<sstream>

using namespace std;

typedef struct Student
{
	int ID;                 //学号
	string name;            //姓名
	float score[3];         //三门课程成绩
}Tagstudent;

void Input(vector<Tagstudent> &A,int n)                          //输入学生信息,构成向量
{
	Tagstudent a;
	char ch;
	int i;
	for(i=0;i<n;i++)
	{
		cout<<"请输入第"<<i<<"个同学的ID"<<endl;
		cin>>a.ID;
		cout<<"请输入第"<<i<<"个同学的姓名"<<endl;
		ch=cin.get();                                            //读'\n'
		getline(cin,a.name);
		cout<<"请输入第"<<i<<"个同学的成绩"<<endl;
		cin>>a.score[0]>>a.score[1]>>a.score[2];
		A.push_back(a);                                              //构成向量
	}
}

void sort_vec(vector<Tagstudent> &A)                            //对输入的结构体信息按照ID进行増序排序
{
	Tagstudent temp;
	int min,i,j;
	for(i=0;i<A.size()-1;i++)                                    //选择排序
	{
		min=i;
		for(j=i+i;j<A.size();j++)
		{
			if(A[min].ID>A[j].ID)
			{
				min=j;
			}
		}
		if(min!=i)
		{
			temp=A[i];
			A[i]=A[min];
			A[min]=temp;
		}
	}
}

void Del_vec(vector<Tagstudent> &A,string name)                  //删除姓名为name的学生信息
{
	vector<Tagstudent>::iterator it=A.begin();
	while(it!=A.end())
	{
		if((*it).name==name)
		{
			it=A.erase(it);
			break;
		}
		else
		{
			it++;
		}
	}
} 

void Display(vector<Tagstudent> &A)                             //输出学生信息到屏幕上
{
	int i;
	for(i=0;i<A.size();i++)
	{
		cout<<setw(10)<<right<<A[i].ID<<setw(10)<<right<<A[i].name<<setprecision(3)<<right<<A[i].score[0]<<setprecision(3)<<right<<A[i].score[1]<<setprecision(3)<<right<<A[i].score[2]<<endl;
	}
}

void print_file(vector<Tagstudent> &A)
{
	int i;
	fstream in;                                                  
	in.open("D\\res.dat",ios::out); 
	for(i=0;i<A.size();i++)                     //将学生信息输入文件中
	{
		in<<setw(10)<<right<<A[i].ID<<setw(10)<<right<<A[i].name<<setprecision(3)<<right<<A[i].score[0]<<setprecision(3)<<right<<A[i].score[1]<<setprecision(3)<<right<<A[i].score[2]<<endl;
	}
	in.close();
}

int main()
{
	string name="TOM";
	vector<Tagstudent> aa;                 

	Input(aa,5);                             //调用函数,输入数据,构成向量

	sort_vec(aa);                            //按学生ID进行増序排序

	Display(aa);                             //把排序后的向量输出到屏幕上

	Del_vec(aa,name);                       //删除向量中名字为"TOM"的学生数据

	print_file(aa);                         //将向量内容输入文件中

	return 0;
}

猜你喜欢

转载自blog.csdn.net/ukco_well/article/details/82219035