//#include<bits/stdc++.h>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
class Student
{
public:
Student();
Student(string name,int no,int x,int y,int z);
int GetNo(){return No;}
float GetAverage(){return Average;}
int GetOrder(){return Order;}
string GetName(){return Name;}
//改学号
void SetNo(int No){this->No=No;}
//改名
void SetName(string Name){this->Name=Name;}
//修改平均值
void SetScore(int math,int english,int cpp);
//建立序号
void SetOrder(int Order){this->Order=Order;}
//输出
void display();
private:
string Name;
int No;
int Score[3];
float Average;
int Order;
};
Student::Student()
{
Score[0]=Score[1]=Score[2]=0;
Average=0;
Order=-1;
}
Student::Student(string name,int no,int x,int y,int z):Name(name),No(no)
{
Score[0]=x;
Score[1]=y;
Score[2]=z;
Average=(Score[0]+Score[1]+Score[2])/3.0;
Order=-1;
}
void Student::display()
{
cout<<Name<<"\t"<<No<<"\t"<<Score[0]<<"\t"<<Score[1]<<"\t"<<Score[2]<<"\t";
cout<<Average<<"\t\t"<<Order<<endl;
}
void Student::SetScore(int math,int english,int cpp)
{
Score[0]=math;
Score[1]=english;
Score[2]=cpp;
Average=(Score[0]+Score[1]+Score[2])/3.0;
}
//成绩从大到小和学号优先
bool cmp1(Student s1,Student s2)//cmp1可以写成cmp2的格式
{
if(s1.GetAverage()==s2.GetAverage())
return s1.GetNo()<s2.GetNo();
else
return s1.GetAverage()>s2.GetAverage();
}
//按照学号排列
bool cmp2(Student s1,Student s2)
{
return s1.GetNo()<s2.GetNo();
}
class Student_List
{
public:
//初始化
Student_List():n(0){}
int Getn(){return n; }
//排序,并对成绩序号更新
void Listsort();
//该函数的功能是添加一个或多个学生信息
void add();
//按照自己的意愿排序输出
//flag=2 学号,flag=1 成绩从大到小和学号小的优先
void display(int flag);
//按照学号查找,返回学号在成绩表中的位置,返回-1表示未找到
int searchNo(int no);
//该函数的功能是实现按学号查找,并输出查找结果
void query();
//修改学号
void changNo();
//修改成绩
void changescore();
//修改姓名
void changName();
//删除
void Delete();
//菜单
void menu();
//输出-成绩
void Printinfor();
private:
Student List[60];
int n;
};
void Student_List::Listsort()
{
sort(List,List+n,cmp1);//按照成绩和学号排列
//sort(List,List+n,cmp2);//按照学号排列
for(int i=0; i<n; ++i) //n-1个同学
List[i].SetOrder(i+1);//建立序号
}
void Student_List::add()
{
int no;
string name;
int x,y,z;
system("cls");//清屏
cout<<"请按照学号 姓名 数学 英语 C++ 顺序输入学生信息,学号输入-1表示输入结束"<<endl;
while(cin>>no&&no!=-1)
{
cin>>name;
cin>>x>>y>>z;
Student s(name,no,x,y,z);
List[n++]=s;
Listsort();
}
}
void Student_List::display(int flag)
{
if(flag==1)//成绩从大到小和学号小的优先
sort(List,List+n,cmp1);
else//学号
sort(List,List+n,cmp2);
system("cls");//清屏
cout<<"姓名\t"<<"学号\t\t"<<"数学\t"<<"英语\t"<<"C++\t"<<"平均成绩\t"<<"名次"<<endl;
for(int i=0; i<n; i++)
List[i].display();
}
int Student_List::searchNo(int no)
{
for(int i=0; i<n; ++i)
if(List[i].GetNo()==no)
return i;
return -1;
}
void Student_List::query()
{
int no,i;
system("cls");
if(this->n==0)
{
cout<<"当前尚未储存数据,是否转到输入界面?"<<endl;
cout<<"输入1,转到输入界面,输入其他返回菜单界面"<<endl;
int t;
cin>>t;
if(t==1)
add();
return ;
}
cout<<"请输入要查询的学号,输入-1结束"<<endl;
while(cin>>no&&no!=-1)
{
i=searchNo(no);
if(i!=-1)
{
cout<<"姓名\t"<<"学号\t\t"<<"数学\t"<<"英语\t"<<"C++\t"<<"平均成绩\t"<<"名次"<<endl;
List[i].display();
}
else
cout<<"输入的学号有误,请重试,输入-1结束查询"<<endl;
}
}
void Student_List::changNo()
{
int no,cno,i;
system("cls");//清屏
if(this->n==0)
{
cout<<"当前尚未储存数据,是否转到输入界面?"<<endl;
cout<<"输入1,转到输入界面,输入其他返回菜单界面"<<endl;
int t;
cin>>t;
if(t==1)
add();
return ;
}
cout<<"请输入要修改的学号,输入-1结束修改"<<endl;
while(cin>>no&&no!=-1)
{
i=searchNo(no);
if(i!=-1)
{
cout<<"请输入修改之后的学号:"<<endl;
cin>>cno;
cout<<"修改之前"<<endl;
cout<<"姓名\t"<<"学号\t\t"<<"数学\t"<<"英语\t"<<"C++\t"<<"平均成绩\t"<<"名次"<<endl;
List[i].display();
List[i].SetNo(cno);
cout<<"修改之后"<<endl;
cout<<"姓名\t"<<"学号\t\t"<<"数学\t"<<"英语\t"<<"C++\t"<<"平均成绩\t"<<"名次"<<endl;
List[i].display();
}
else
cout<<"输入的学号有误,请重试,输入-1结束修改"<<endl;
}
}
void Student_List::changescore()
{
int no,i;
int math,english,cpp;
system("cls");//清屏
if(this->n==0)
{
cout<<"当前尚未储存数据,是否转到输入界面?"<<endl;
cout<<"输入1,转到输入界面,输入其他返回菜单界面"<<endl;
int t;
cin>>t;
if(t==1)
add();
return ;
}
cout<<"请输入要修改成绩学生的学号,输入-1结束修改"<<endl;
while(cin>>no&&no!=-1)
{
i=searchNo(no);
if(i!=-1)
{
cout<<"请按照数学 英语 C++ 顺序输入修改之后的成绩"<<endl;
cin>>math>>english>>cpp;
cout<<"修改之前"<<endl;
cout<<"姓名\t"<<"学号\t\t"<<"数学\t"<<"英语\t"<<"C++\t"<<"平均成绩\t"<<"名次"<<endl;
List[i].display();
List[i].SetScore(math,english,cpp);
Listsort();//重新排序
cout<<"修改之后"<<endl;
cout<<"姓名\t"<<"学号\t\t"<<"数学\t"<<"英语\t"<<"C++\t"<<"平均成绩\t"<<"名次"<<endl;
List[i].display();
}
else
cout<<"输入的学号有误,请重试,输入-1结束修改"<<endl;
}
}
void Student_List::changName()
{
int no,i;
string cname;
system("cls");//清屏
if(this->n==0)
{
cout<<"当前尚未储存数据,是否转到输入界面?"<<endl;
cout<<"输入1,转到输入界面,输入其他返回菜单界面"<<endl;
int t;
cin>>t;
if(t==1)
add();
return ;
}
cout<<"请输入要修改姓名学生的学号,输入-1结束修改"<<endl;
while(cin>>no&&no!=-1)
{
i=searchNo(no);
if(i!=-1)
{
cout<<"请输入修改之后的姓名:"<<endl;
cin>>cname;
cout<<"修改之前"<<endl;
cout<<"姓名\t"<<"学号\t\t"<<"数学\t"<<"英语\t"<<"C++\t"<<"平均成绩\t"<<"名次"<<endl;
List[i].display();
List[i].SetName(cname);
cout<<"修改之后"<<endl;
cout<<"姓名\t"<<"学号\t\t"<<"数学\t"<<"英语\t"<<"C++\t"<<"平均成绩\t"<<"名次"<<endl;
List[i].display();
}
else
cout<<"输入的学号有误,请重试,输入-1结束修改"<<endl;
}
}
void Student_List::Delete()
{
int no,i;
system("cls");//清屏
if(this->n==0)
{
cout<<"当前尚未储存数据,是否转到输入界面?"<<endl;
cout<<"输入1,转到输入界面,输入其他返回菜单界面"<<endl;
int t;
cin>>t;
if(t==1)
add();
return ;
}
cout<<"请输入要删除信息的学生的学号,输入-1结束删除"<<endl;
while(cin>>no&&no!=-1)
{
i=searchNo(no);
if(i!=-1)
{
--n;
for(int j=i; i<n; ++i)
List[i]=List[i+1];
Listsort();
cout<<"\t删除完成"<<endl;
}
else
cout<<"输入的学号有误,请重试,输入-1结束删除"<<endl;
}
}
void Student_List::Printinfor()
{
int i;
system("cls");//清屏
if(this->n==0)
{
cout<<"当前尚未储存数据,是否转到输入界面?"<<endl;
cout<<"输入1,转到输入界面,输入其他返回菜单界面"<<endl;
int t;
cin>>t;
if(t==1)
add();
return ;
}
cout<<"输入1,按照成绩输出;输入2,按照学号输出,输入-1结束输出"<<endl;
while(cin>>i&&i!=-1)
{
if(i==1)
{
cout<<"姓名\t"<<"学号\t\t"<<"数学\t"<<"英语\t"<<"C++\t"<<"平均成绩\t"<<"名次"<<endl;
for(int i=0; i<n; i++)
List[i].display();
}
else if(i==2)
{
sort(List,List+n,cmp2);
cout<<"姓名\t"<<"学号\t\t"<<"数学\t"<<"英语\t"<<"C++\t"<<"平均成绩\t"<<"名次"<<endl;
for(int i=0; i<n; i++)
List[i].display();
sort(List,List+n,cmp1);
}
else
{
cout<<"输入有误,请重新输入:"<<endl;
}
}
}
void Student_List::menu()
{
int i;
system("cls");//清屏
while(1)
{
cout<<"\t\t功能目录:\n"<<endl;
cout<<"\t\t增加学生信息:1\n"<<endl;
cout<<"\t\t修改学生学号:2\n"<<endl;
cout<<"\t\t修改学生姓名:3\n"<<endl;
cout<<"\t\t修改学生成绩:4\n"<<endl;
cout<<"\t\t查找学生信息:5\n"<<endl;
cout<<"\t\t删除学生信息:6\n"<<endl;
cout<<"\t\t学生成绩输出:7\n"<<endl;
cout<<"\t\t结束程序:-1\n"<<endl;
cout<<"\t";
cin>>i;
if(i==-1)
break;
else
{
if(i>=1&&i<=7)
{
switch(i)
{
case 1:
add();
break;
case 2:
changNo();
break;
case 3:
changName();
break;
case 4:
changescore();
break;
case 5:
query();
break;
case 6:
Delete();
break;
case 7:
Printinfor();
break;
}
system("cls");//清屏
}
else
{
system("cls");//清屏
cout<<"\t输入有误,请重新输入:\n"<<endl;
}
}
}
}
int main()
{
system (" title 学生管理系统 ");
Student_List c;
c.menu();//菜单
/*
Student s("fsf",20171786,100,100,100);
s.display();
cout<<s.GetAverage()<<endl;
s.SetName("房施峰");
s.display();
Student_List c;
//输入学生信息
c.add();
//全部输出flag=2 学号,flag=1 成绩从大到小和学号小的优先
c.display(1);
//查找信息
c.query();
//修改学号
c.changNo();
//修改姓名
c.changName();
//修改成绩
c.changescore();
//删除信息
c.Delete();
if(c.Getn())
c.display(2);//学号输出
*/
return 0;
}
学生信息管理系统
最新推荐文章于 2022-10-05 16:51:48 发布