#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<vector>
#include<algorithm>
using namespace std;
class Stu
{
public:
string num;
string sex;
string name;
float score;
}s;
bool Comp(Stu a,Stu b)
{
return a.score>b.score;//从大到小排
}
void system()
{
cout<<"-------------------------------学生管理系统----------------------------------"<<endl;
cout<<" 1.输入学生信息; "<<endl;
cout<<" 2.删除学生信息; "<<endl;
cout<<" 3.修改学生信息; "<<endl;
cout<<" 4.对学生成绩排序并输出; "<<endl;
cout<<" 5.输出所保存的学生信息; "<<endl;
cout<<" 6.查看单个学生信息; "<<endl;
cout<<" 0.退出学生管理系统; "<<endl;
}
class xt
{
public:
void set_stu(vector<Stu>&stu);//&不能没有。
void shan_stu(vector<Stu>&stu);
// void cha_stu(vector<Stu>&stu);
void gai_stu(vector<Stu>&stu);
void pai_stu(vector<Stu>&stu);
void get_stu(vector<Stu>&stu);
// void get_stu1(vector<Stu>&stu1);
void zhao_stu(vector<Stu>&stu);
};
void xt::set_stu(vector<Stu>&stu)
{
printf("请输入学生学号:");
cin>>s.num;
printf("请输入学生姓名:");
cin>>s.name;
printf("请输入学生性别:");
cin>>s.sex;
printf("请输入学生成绩:");
cin>>s.score;
stu.push_back(s);
}
void xt::get_stu(vector<Stu>&stu)
{
vector<Stu>::iterator it=stu.begin();
printf("学号 姓名 性别 成绩\n");
for(;it!=stu.end();it++)
{
cout<<(*it).num<<" "<<(*it).name<<" "<<(*it).sex<<" "<<(*it).score<<endl;
}
// if(stu.begin() == stu.end()){
// printf("无信息\n");//表示系统里没有存任何数据。
// }
}
//void xt::get_stu1(vector<Stu>&stu1)
//{
// vector<Stu>::iterator it=stu1.begin();
// printf("学号 姓名 性别 成绩\n");
// for(;it!=stu1.end();it++)
// {
// cout<<(*it).num<<" "<<(*it).name<<" "<<(*it).sex<<" "<<(*it).score<<endl;
// }
//}
void xt::shan_stu(vector<Stu>&stu)
{
string n;
printf("请输入所要查看的学生学号:___\b\b");
cin>>n;
for(vector<Stu>::iterator it = stu.begin();it!=stu.end();it++)
{
if((*it).num==n)
{
stu.erase(it);break;
}
}
}
//void xt::cha_stu(vector<Stu>&stu)插入函数在这里不能用,它是根据数组里的序号插入的,
//{ 我也没把它写好。。。
// string n;
// printf("请输入所要查看的学生学号:___\b\b");
// cin>>n;
// for(vector<Stu>::iterator it = stu.begin();it!=stu.end();it++)
// {
// if((*it).num==n)
// {
// stu.insert(it,s);break; 这就是动态数组插入的函数:在it后插入s。
// }
// }
//}
void xt::gai_stu(vector<Stu>&stu)
{
string n;
vector<Stu>::iterator it;//迭代器
printf("请输入所要修改信息的学生的学号:___\b\b");
cin>>n;
printf("学号 姓名 性别 成绩\n");
for(it = stu.begin();it!=stu.end();it++)
{
if((*it).num==n)
{
cout<<(*it).num<<" "<<(*it).name<<" "<<(*it).sex<<" "<<(*it).score<<endl; break;
}
}
printf("请输入学生学号:");
cin>>s.num;(*it).num=s.num;
printf("请输入学生姓名:");
cin>>s.name;(*it).name=s.name;
printf("请输入学生性别:");
cin>>s.sex;(*it).sex=s.sex;
printf("请输入学生成绩:");
cin>>s.score;(*it).score=s.score;
}
void xt::pai_stu(vector<Stu>&stu)
{
// vector<Stu>stu1(stu);不知道为啥,不能对stu1排序并输出?
sort(stu.begin(),stu.end(),Comp);
}
void xt::zhao_stu(vector<Stu>&stu)
{
string n;
printf("请输入所要查看的学生学号:___\b\b");
cin>>n;
printf("学号 姓名 性别 成绩\n");
for(vector<Stu>::iterator it = stu.begin();it!=stu.end();it++)
{
if((*it).num==n)
{
cout<<(*it).num<<" "<<(*it).name<<" "<<(*it).sex<<" "<<(*it).score<<endl; break;
}
}
}
int main()
{
xt p;
int x;
vector<Stu>stu;
// vector<Stu>stu1;
system();
printf("请输入操作前的标号选择所要进行的操作:___\b\b");
while(cin>>x,x)
{
switch(x)
{
case 1:{ p.set_stu(stu);
printf("保存成功!请按回车继续操作。\n");
break; }
case 2:{ p.shan_stu(stu);
printf("删除成功!请按回车继续操作。\n");
break; }
case 3:{ p.gai_stu(stu);
printf("修改成功!请按回车继续操作。\n");
break; }
case 4:{ p.pai_stu(stu);
p.get_stu(stu);
printf("请按回车继续操作。\n");
break; }
case 5:{ p.get_stu(stu);
printf("请按回车继续操作。\n");
break; }
case 6:{ p.zhao_stu(stu);
printf("请按回车继续操作。\n");
break; }
}
getchar();
getchar();
system("cls");//清屏
system();
printf("请输入操作前的标号选择所要进行的操作:___\b\b");
}
return 0;
}