要求:
score.txt一些在校学生数、全名、C++、、英语成绩,利用前面定义的结构体数组,读取文件score.txt中的数据,完毕以下的应用:
在这个程序採用多文件处理:
main.cpp
#include <iostream> #include <iomanip> #include <fstream> using namespace std; struct Student //同项目1 { char num[13]; char name[10]; int cpp; int math; int english; int grade; double average; }; void in_line_grade(Student [],int); //按总分降序排序 void output(Student [],int); //输出成绩单 void in_line_award(Student [],int); // void cpp(Student [],int); void name(Student [],int); int main( ) { int i ,stuNum=0; //定义结构体数组 Student stu[200]; //从文件里读出数据,存放到你定义的结构体数组中; ifstream infile("score.txt",ios::in); //以输入的方式打开文件 if(!infile) //測试是否成功打开 { cerr<<"open error!"<<endl; } i=0; while(infile>>stu[i].num>>stu[i].name>>stu[i].cpp>>stu[i].math>>stu[i].english) { ++stuNum; ++i; } infile.close(); for(i=0; i<stuNum; i++) { stu[i].grade=stu[i].cpp+stu[i].math+stu[i].english; stu[i].average=stu[i].grade/3.0; } cout<<"数据读取完成"<<endl; int x; do { cout<<"请选择以下的功能:"<<endl; cout<<"1.输出成绩单"<<endl; cout<<"2.按总分排序并输出成绩单"<<endl; cout<<"3.输出获奖学金的同学的名单"<<endl; cout<<"4.输出C++不及格的姓名和c++成绩"<<endl; cout<<"5.输出您要查找人的成绩"<<endl; cout<<"0.结束"<<endl; cout<<"请输入您的选择:"; cin>>x; switch(x) { case 0:break; case 1:output(stu,stuNum);break; case 2:in_line_grade(stu,stuNum);break; case 3:in_line_award(stu,stuNum);break; case 4:cpp(stu,stuNum);break; case 5:name(stu,stuNum);break; default : cout<<"你的输入有误,请从新输入"<<endl; } }while(x!=0); return 0; }
c++.cpp
#include <iomanip> #include <iostream> using namespace std; struct Student //同项目1 { char num[13]; char name[10]; int cpp; int math; int english; int grade; double average; }; void cpp(Student s[],int n) //输出优秀者:总分超285。单科不低于90 { int a[200]; for(int i=0; i<n; i++) a[i]=s[i].cpp; int k=0; cout<<setiosflags(ios::left); for(int i=0; i<n; i++) if(a[i]<60) { k++; if(k%4==0) cout<<setw(8)<<s[i].name<<setw(8)<<s[i].cpp<<endl; else cout<<setw(8)<<s[i].name<<setw(8)<<s[i].cpp; } cout<<endl; }
in_line_award.cpp
#include <iomanip> #include <iostream> using namespace std; struct Student //同项目1 { char num[13]; char name[10]; int cpp; int math; int english; int grade; double average; }; void in_line_award(Student s[],int n) //输出优秀者:总分超285,单科不低于90 { int a[200],i; for( i=0; i<n; i++) a[i]=s[i].grade; for(int i=n-1; i>=0; i--) for(int j=n-i-2; j>=0; j--) if(a[j]<a[j+1]) { int k; k=a[j]; a[j]=a[j+1]; a[j+1]=k; Student t; t=s[j]; s[j]=s[j+1]; s[j+1]=t; } int k=0; cout<<setiosflags(ios::right); for( i=0; k<30; i++) if(s[i].cpp<60||s[i].math<60||s[i].english<60) k--; else { k++; if(k%5==0) cout<<setw(12)<<s[i].name<<endl; else cout<<setw(12)<<s[i].name; } int t; t=s[i].grade; for(; s[i].grade==t; i++) { if(s[i].cpp<60||s[i].math<60||s[i].english<60) continue; else { k++; if(k%5==0) cout<<setw(12)<<s[i].name<<endl; else cout<<setw(12)<<s[i].name; } } cout<<endl; }
in_line_grade.cpp
struct Student //同项目1 { char num[13]; char name[10]; int cpp; int math; int english; int grade; double average; }; void output(Student [],int); //输出成绩单 void in_line_grade(Student s[],int n) //°´×Ü·Ö½µÐòÅÅÐò { int a[200]; for(int i=0; i<n; i++) a[i]=s[i].grade; for(int i=n-1; i>=0; i--) for(int j=n-i-2; j>=0; j--) if(a[j]<a[j+1]) { int k; k=a[j]; a[j]=a[j+1]; a[j+1]=k; Student t; t=s[j]; s[j]=s[j+1]; s[j+1]=t; } output(s,n) ; }
name.cpp
#include <iostream> #include <iomanip> using namespace std; struct Student //同项目1 { char num[13]; char name[10]; int cpp; int math; int english; int grade; double average; }; void name(Student s[],int n) { string a[200]; for(int i=0; i<n; i++) a[i]=s[i].num; char Cin[20]; cout<<"请输入您要查找人的学号:"; cin>>Cin; int i; for(i=0; i<n; i++) { if(a[i]==Cin) break; } if(i==n) cout<<"抱歉,查无此人"<<endl; else { cout<<"学号"<<setw(20)<<"名字"<<setw(8)<<"C++"<<setw(8)<<"数学"<<setw(8)<<"英语"<<setw(8); cout<<"总分"<<setw(16)<<"平均成绩"<<endl; cout<<s[i].num<<setw(12)<<s[i].name<<setw(8); cout<<s[i].cpp<<setw(8)<<s[i].math<<setw(8)<<s[i].english<<setw(8); cout<<s[i].grade<<setw(16)<<s[i].average<<endl; } }
output.cpp
#include <iomanip> #include <iostream> using namespace std; struct Student //同项目1 { char num[13]; char name[10]; int cpp; int math; int english; int grade; double average; }; void output(Student s[],int n) //输出成绩单 { cout<<"学号"<<setw(20)<<"名字"<<setw(8)<<"C++"<<setw(8)<<"数学"<<setw(8)<<"英语"<<setw(8); cout<<"总分"<<setw(16)<<"平均成绩"<<endl; for(int i=0; i<n; i++) { cout<<s[i].num<<setw(12)<<s[i].name<<setw(8); cout<<s[i].cpp<<setw(8)<<s[i].math<<setw(8)<<s[i].english<<setw(8); cout<<s[i].grade<<setw(16)<<s[i].average<<endl; } }执行结果:
版权声明:本文博客原创文章,博客,未经同意,不得转载。