Student.h
#include<string>
#include <fstream>
#include<iostream>
#include<iomanip>
using namespace std;
struct student1
{
string Number;
string Name;
string grade;
int Math;
int English;
int C;
int Sum;
int Ave;
int term;
student1 *Next;
}stu1;
class student2
{
public:
student1 stu,*s1,*s2;
bool alter();
student2();
~student2();
bool dengji();
bool disp();
bool tongji();
bool sum_tongji();
bool Add();
bool Delete();
bool grade_disp();
bool ave_disp();
bool write_to_file();
};
//构造函数
student2::student2()
{
stu.Next=NULL;
s1=&stu;
s2=stu.Next;
}
//析构函数
student2::~student2(){}
//修改某个学生成绩
bool student2::alter()
{
string s;
int a;
string Num;
cout<<"请输入要修改的学生学号、科目以及修改的成绩"<<endl;
cin>>Num>>s>>a;
student1 *s3;
s3=s1->Next;
while(s3->Next!=NULL&&s3->Number!=Num)
s3=s3->Next;
if(s3->Number!=Num)
cout<<"不存在该学生!"<<endl;
else
{
if(s=="English")
s3->English=a;
else
if(s=="Math")
s3->Math=a;
else
s3->C=a;
cout<<"修改完毕!"<<endl;
s3->Sum=s3->C+s3->English+s3->Math;
s3->Ave=s3->Sum/3;
}
write_to_file();
return true;
}
/*--------------将显示结果写入文本文档------------------*/
bool student2::write_to_file()
{
ofstream outfile("D:\write.txt",ios::out);
if(!outfile) { cerr<<"Open file error!"<<endl;exit(1);}
student1 *s;
s=s1->Next;
outfile<<setiosflags(ios::left)<<setw(15)<<"学号"
<<setiosflags(ios::left)<<setw(15)<<"姓名"
<<setiosflags(ios::left)<<setw(15)<<"班级"
<<setiosflags(ios::left)<<setw(15)<<"英语"
<<setiosflags(ios::left)<<setw(15)<<"数学"
<<setiosflags(ios::left)<<setw(15)<<"C++"
<<setiosflags(ios::left)<<setw(15)<<"总分"
<<setiosflags(ios::left)<<setw(15)<<"平均分"<<endl;
while(s)
{
outfile<<setiosflags(ios::left)<<setw(15)<<s->Number
<<setiosflags(ios::left)<<setw(15)<<s->Name
<<setiosflags(ios::left)<<setw(15)<<s->grade
<<setiosflags(ios::left)<<setw(15)<<s->English
<<setiosflags(ios::left)<<setw(15)<<s->Math
<<setiosflags(ios::left)<<setw(15)<<s->C
<<setiosflags(ios::left)<<setw(15)<<s->Sum
<<setiosflags(ios::left)<<setw(15)<<s->Ave<<endl;
s=s->Next;
//cout<<"OK"<<endl;-----------本句用于测试
}
outfile.close();
return true;
}
/*---------登记学生成绩----------------*/
bool student2::dengji()
{
int i,j=0;
cout<<"请输入学生人数!"<<endl;
cin>>i;
string num,name,grade;
int e,m,c,t;
ifstream infile("D:\data.txt",ios::in);
if(!infile) { cerr<<"Open file error!"<<endl;exit(1);}
for(j=0;j<i;j++)
{
infile>>num;
infile>>name;
infile>>grade;
infile>>e;
infile>>m;
infile>>c;
infile>>t;
student1 *s;
s=new student1;
s->Next=s1->Next;
s1->Next=s;
s->Number=num;
s->Name=name;
s->grade=grade;
s->English=e; //英语成绩
s->Math=m; //数学成绩
s->C=c;
s->Sum=e+m+c;
s->Ave=(e+m+c)/3;
s->term=t;
}
infile.close();
if(write_to_file())
cout<<"写入完毕"<<endl;
return true;
}
/*----------打印某一课程成绩处于指定分数段学生名单-----------*/
bool student2::disp()
{
string xueke;
int score;
int max;
int min;
cout<<"请输入要查询的学科,最高成绩和最低成绩!"<<endl;
cin>>xueke;
cin>>max;
cin>>min;
student1 *s4;
s4=s1->Next;
ofstream outfile("D:\write.txt",ios::out);
if(!outfile) { cerr<<"Open file error!"<<endl;exit(1);}
outfile<<setiosflags(ios::left)<<setw(15)<<"学号"
<<setiosflags(ios::left)<<setw(15)<<"成绩"<<endl;
cout<<setiosflags(ios::left)<<setw(15)<<" 学号"
<<setiosflags(ios::left)<<setw(10)<<"成绩"<<endl;
while(s4!=NULL)
{ if(xueke=="English")
score=s4->English;
else
if(xueke=="Math")
score=s4->Math;
else
if(xueke=="C")
score=s4->C;
else
if(xueke=="Sum")
score=s4->Sum;
else
if(xueke=="Ave")
score=s4->Ave;
else
cout<<"对不起,没有符合要求的学生!"<<endl;
if(score<max&&score>=min)
{
cout<<setiosflags(ios::left)<<setw(15)<<s4->Number
<<setiosflags(ios::left)<<setw(10)<<score<<endl;
outfile<<setiosflags(ios::left)<<setw(15)<<s4->Number
<<setiosflags(ios::left)<<setw(15)<<score<<endl;
}
s4=s4->Next;
}
outfile.close();
return true;
}
/*-------成绩统计(各科平均成绩、各科成绩“优秀”,“良好”,“中等”,“及格”,“不及格”的人数及其所占比例)-----*/
bool student2::tongji()
{
int t_sum=0,t_score=0,exc=0,good=0,middle=0,pass=0,bad=0;
float count=0; //比例
//英语
student1 *s4;
s4=s1->Next;
ofstream outfile("D:\write.txt",ios::out);
if(!outfile) { cerr<<"Open file error!"<<endl;exit(1);}
outfile<<setiosflags(ios::left)<<setw(15)<<"学科"
<<setiosflags(ios::left)<<setw(15)<<"优秀"
<<setiosflags(ios::left)<<setw(15)<<"良好"
<<setiosflags(ios::left)<<setw(15)<<"中等"
<<setiosflags(ios::left)<<setw(15)<<"及格"
<<setiosflags(ios::left)<<setw(15)<<"不及格"<<endl;
while(s4)
{
t_sum+=s4->English;
count++;
if(s4->English>=90)
exc++;
else
if(s4->English>=80)
good++;
else
if(s4->English>=70)
middle++;
else
if(s4->English>=60)
pass++;
else
bad++;
s4=s4->Next;
}
cout<<setiosflags(ios::left)<<setw(15)<<"学科"
<<setiosflags(ios::left)<<setw(10)<<"优秀"
<<setiosflags(ios::left)<<setw(10)<<"良好"
<<setiosflags(ios::left)<<setw(10)<<"中等"
<<setiosflags(ios::left)<<setw(10)<<"及格"
<<setiosflags(ios::left)<<setw(10)<<"不及格"<<endl;
cout<<setiosflags(ios::left)<<setw(15)<<"English(比例)"
<<setiosflags(ios::left)<<setw(10)<<exc/count
<<setiosflags(ios::left)<<setw(10)<<good/count
<<setiosflags(ios::left)<<setw(10)<<middle/count
<<setiosflags(ios::left)<<setw(10)<<pass/count
<<setiosflags(ios::left)<<setw(10)<<bad/count<<endl;
cout<<setiosflags(ios::left)<<setw(15)<<"English(人数)"
<<setiosflags(ios::left)<<setw(10)<<exc
<<setiosflags(ios::left)<<setw(10)<<good
<<setiosflags(ios::left)<<setw(10)<<middle
<<setiosflags(ios::left)<<setw(10)<<pass
<<setiosflags(ios::left)<<setw(10)<<bad<<endl;
outfile<<setiosflags(ios::left)<<setw(15)<<"English"
<<setiosflags(ios::left)<<setw(15)<<exc/count
<<setiosflags(ios::left)<<setw(15)<<good/count
<<setw(15)<<middle/count<<setw(15)<<pass/count
<<setiosflags(ios::left)<<setw(15)<<bad/count<<endl;
//Math
t_sum=0,t_score=0,exc=0,good=0,middle=0,pass=0,bad=0,count=0;
s4=s1->Next;
while(s4)
{
t_sum+=s4->Math;
count++;
if(s4->Math>=90)
exc++;
else
if(s4->Math>=80)
good++;
else
if(s4->Math>=70)
middle++;
else
if(s4->Math>=60)
pass++;
else
bad++;
s4=s4->Next;
}
cout<<setiosflags(ios::left)<<setw(15)<<"Math(比例)"
<<setiosflags(ios::left)<<setw(10)<<exc/count
<<setiosflags(ios::left)<<setw(10)<<good/count
<<setw(10)<<middle/count<<setw(10)<<pass/count
<<setiosflags(ios::left)<<setw(10)<<bad/count
<<setiosflags(ios::left)<<setw(10)<<endl;
cout<<setiosflags(ios::left)<<setw(15)<<"Math(人数)"
<<setiosflags(ios::left)<<setw(10)<<exc
<<setiosflags(ios::left)<<setw(10)<<good
<<setw(10)<<middle/count<<setw(10)<<pass
<<setiosflags(ios::left)<<setw(10)<<bad
<<setiosflags(ios::left)<<setw(10)<<endl;
outfile<<setiosflags(ios::left)<<setw(15)<<"Math"
<<setiosflags(ios::left)<<setw(15)<<exc/count
<<setiosflags(ios::left)<<setw(15)<<good/count
<<setiosflags(ios::left)<<setw(15)<<middle/count
<<setiosflags(ios::left)<<setw(15)<<pass/count
<<setiosflags(ios::left)<<setw(15)<<bad/count<<endl;
t_sum=0,t_score=0,exc=0,good=0,middle=0,pass=0,bad=0,count=0;
s4=s1->Next;
while(s4)
{
t_sum+=s4->C;
count++;
if(s4->C>=90)
exc++;
else
if(s4->C>=80)
good++;
else
i