#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
#define c1 "Data1.txt"
#define c2 "Data2.txt"
#define c3 "Data3.txt"
#define c4 "Data4.txt"
#define c5 "Data5.txt"
#define c6 "Data6.txt"
static int max = 100; //一个班最多有max个学生
class Stu
{
char *_name;
float e_score,ph_score;
long int _num;
public:
void set(char *na,long int nu,float e,float ph)
{_name=na;_num=nu;e_score=e;ph_score=ph;}
ostream & operator<<(ostream& os)
{
os<<_name<<" "<<_num<<" "<<e_score<<" "<<ph_score<<endl;
return os;
}
friend void line_byEng(Stu s[],int a); // 按英语成绩排名排序
friend void line_byPhy(Stu s[],int a); // 按物理成绩排名排序
friend void line_byTotal(Stu s[],int a); // 按总成绩排名排序
friend void line_byStuNum(Stu s[],int a); // 按学号排序
};
//排序算法(模板函数)
template <class T>
void sequence(T s[])
{
for (int i=1;s[i];i++)
{
for (int t=i;s[t];t++)
{
if (s[t]>s[i])
{
T temp=s[i];
s[i]=s[t];
s[t]=temp;
}
}
}
}
//按英语成绩排名排序
void line_byEng(Stu s[],int a) //友元函数
{
float eng[a];
//将所有对象的英语成绩比较
for (int i=0;i<a;i++)
{
eng[i]=s[i].e_score;
}
sequence(eng);
for (int j=0;j<a;j++)
{
for (int i=0;i<a;i++)
{
if (eng[j]==s[i].e_score)
cout<<s[i]<<endl;
}
}
}
//按物理成绩排名排序
void line_byPhy(Stu s[],int a) //友元函数
{
float phy[a];
//将所有对象的物理成绩比较
for (int i=0;i<a;i++)
{
phy[i]=s[i].ph_score;
}
sequence(phy);
for (int j=0;phy[j];j++)
{
for (int i=0;i<a;i++)
{
if (phy[j]==s[i].ph_score)
cout<<s[i]<<endl;
}
}
}
//按总成绩排名排序
void line_byTotal(Stu s[],int a) //友元函数
{
float total[a];
//将所有对象的总成绩比较
for (int i=0;i<a;i++)
{
total[i]=s[i].ph_score+s[i].e_score;
}
//排序
sequence(total);
for (int j=0;j<a;j++)
{
for (int i=0;i<a;i++)
{
if (total[j]==s[i].e_score+s[i].ph_score)
cout<<s[i]<<endl;
}
}
}
// 按学号排序
void line_byStuNum(Stu s[],int a) //友元函数
{
long int num[a];
//将所有对象的学号比较
for (int i=0;i<a;i++)
{
num[i]=s[i]._num;
}
sequence(num);
for (int j=0;j<a;j++)
{
for (int i=0;i<a;i++)
{
if (num[j]==s[i]._num)cout<<s[i]<<endl;
}
}
}
void instruct();
int main()
{
instruct();
int choice;
cin>>choice;
while (choice)
{
switch (choice)
{
case 1://查看;
break;
case 2://新建;
break;
case 3://修改;
break;
case 4://删除;
break;
default:cout<<"Entered a wrong choice!\n";
}
instruct();cin>>choice;
}
//退出并保存
return 0;
}
void instruct()
{
cout<<"----------------MENU------------------\n"; //◆★▲※■〓
cout<<"1. 查 看 班 级 信 息\n"
"2. 创 建 新 的 班 级 信 息\n"
"3. 修 改 班 级 信 息\n"
"4. 删 除 指 定 的 班 级 信 息\n"
"0. 退 出 并 保 存\n";
}
//查看
void check()
{
int checks;
ifstream ins;
//函数声明
void get_Information(istream& ins);
do
{
cout<<"Input the class-number ( 0 to quit) you want to check from\n"
"0—6"<<endl;
cin>>checks;
switch (checks)
{
case 1:ins.open(c1);
break;
case 2:ins.open(c2);
break;
case 3:ins.open(c3);
break;
case 4:ins.open(c4);
break;
case 5:ins.open(c5);
break;
case 6:ins.open(c6);
break;
default:cout<<"***Error***! Enter a wrong Document!\n";
}
//从外部文件里获得信息,并初始化对象(学生)。
if (ins.fail())
{
cout<<"无此班级信息!"<<endl;continue;//如果无此班级信息,重新查找另外的班级
}
//如果打开文件,开始读取信息。
int i;char name[max][12]; //学生姓名
float e[max],ph[max];
long int num[max];
for (i=0;!ins.eof()&&i<max;i++)
ins>>name[i][12]>>num[i]>>e[i]>>ph[i];
Stu s[i];
for (int j=0;j<i;j++)
s[j].set(name[j],num[j],e[j],ph[j]);
cout<<"Catch a choice you want!\n"
"0. Quit!\n";
"1. Line up by english score!\n"
"2. Line up by physical score!\n"
"3. Line up by total score!\n"
"4. Line up by stu_num!\n";
//"5. Line up by firstname!\n" //不会比较中文名字
int Seq_choice;
cin>>Seq_choice;
//void line_byFirName(Stu &s[]);// 按名字的第一个字母排序
/*---不会做难的,所以要求是输入英文,如果是中文名字就不会比较了---*/
while(Seq_choice)
{
switch (Seq_choice)
{
case 0:
case 1:line_byEng(s,i);break; // 按英语成绩排名排序(此函数代码未写)
case 2:line_byPhy(s,i);break; // 按物理成绩排名排序(此函数代码未写)
case 3:line_byTotal(s,i);break; // 按总成绩排名排序 (此函数代码未写)
case 4:line_byStuNum(s,i);break; // 按学号排序
//case 5:line_byFirName(s);break; // 按名字的第一个字母排序
default:"--err--!\nEntered a wrong choice!\n\n";
}
}
}while(checks!=0);
}