按要求编写程序。
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;
}