#include"iostream"
#include"string"
using namespace std;
struct stu
{
  string num;
  string name;
  double  math;
  double computer;
  double english;
  double sum;
};
typedef struct stu  ST;
     
        //录入n个学生信息
void print(ST *s,int n)
{

	cout<<"按***学号*****姓名*****数学成绩******计算机成绩*****英语成绩*****"<<endl;
	for(int i=0;i<n;i++)
	{   
		cout<<"输入第"<<i+1<<"学生信息"<<endl;
		cin>>s[i].num>>s[i].name>>s[i].math>>s[i].computer>>s[i].english;
	}

}

       //输出n个学生信息(未经处理)
void display1(ST *s,int n)
{	
	
	cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"数学"<<'\t'<<"计算机"<<'\t'<<"英语"<<endl;

    for(int i=0;i<n;i++)
	{
		
		cout<<s[i].num<<'\t'<<s[i].name<<'\t'<<s[i].math<<'\t'<<s[i].computer<<'\t'<<s[i].english<<endl;
	     
	}
}

       //输出n个学生信息(包括总分)
void display2(ST *s,int n)
{	
	
	cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"数学"<<'\t'<<"计算机"<<'\t'<<"英语"<<'\t'<<"总分"<<endl;

    for(int i=0;i<n;i++)
	{
		
		cout<<s[i].num<<'\t'<<s[i].name<<'\t'<<s[i].math<<'\t'<<s[i].computer<<'\t'<<s[i].english<<'\t'<<s[i].sum<<endl;
	     
	}
}  
      //求总分
void sum(ST *s,int n)  
{
    for(int i=0;i<n;i++)
	{
     s[i].sum=s[i].math+s[i].computer+s[i].english;
	}
}


     //按总分排序

void sortsum(ST *s ,int n)
{
	for(int i=0;i<n-1;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			ST t;
			if(s[i].sum<s[j].sum)
			{
				 t=s[i];
			     s[i]=s[j];
                 s[j]=t;
			}
		}
	}
}
      //按学号查找
void Findnum(ST *s,int n, string key)
{
	int flag;
	   flag=0;
	
	for (int i=0;i<n;i++)
	 {

         
		 
		 if(s[i].num==key)
		 {
			 s[i].sum=s[i].english+s[i].computer+s[i].math;
			
			 cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"数学"<<'\t'<<"计算机"<<'\t'<<"英语"<<'\t'<<"总分"<<endl;
           
			 cout<<s[i].num<<'\t'<<s[i].name<<'\t'<<s[i].math<<'\t'<<s[i].computer<<'\t'<<s[i].english<<'\t'<<s[i].sum<<endl;
		
		     flag=1;
		      break;
		 }
	 }
     
	if(flag==0)
	 {
		 cout<<"该学生信息不存在"<<endl;
	 }
      


}

     //按姓名查找
void Findname(ST *s,int n,string key)
{
		int flag; 
	     flag=0;
	for (int i=0;i<n;i++)
	 {
        
		
		 if(s[i].name==key)
		 {
			 s[i].sum=s[i].computer+s[i].english+s[i].math;
			 cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"数学"<<'\t'<<"计算机"<<'\t'<<"英语"<<'\t'<<"总分"<<endl;
           
			cout<<s[i].num<<'\t'<<s[i].name<<'\t'<<s[i].math<<'\t'<<s[i].computer<<'\t'<<s[i].english<<'\t'<<s[i].sum<<endl;
		
		     flag=1;
		     break;
		 
		 }
	 }
     if(flag==0)
	 {
		 cout<<"该学生信息不存在"<<endl;
	 }
}





    //插入学生信息
void insert(ST *s,int n,ST x)
{
	for(int i=0;i<n;i++)
	{
		if(s[i].sum<x.sum)
		{
			break;
		}
	}

	for(int j=n-1;j>=i;j--)
	{
		s[j+1]=s[j];
	}
    s[i]=x;


}
     //按学号删除信息
void delet(ST *s,int n,string key)

{

    for(int i=0;i<n;i++)
	{
		
		{
			break;
		}
	}

	for(int j=i;j<n;j++)
	{
		s[j]=s[j+1];

	}

}

       //按学号修改信息
void modify(ST *s,int n, string key)
{
	
	
	
	for(int i=0;i<n;i++)
	{
		if(s[i].num==key)
		{
            cout<<"          修改选项"<<endl;
			cout<<endl;
			cout<<'\t'<<"1     数学   "<<endl;
			cout<<'\t'<<"2     计算机"<<endl;
			cout<<'\t'<<"3     英语"<<endl;
			cout<<'\t'<<"4     总分"<<endl;
            cout<<'\t'<<"5     退出修改"<<endl;
		
            while(1)
			{
		         int c;
			   	 cout<<"请选择修改的数据"<<endl;	
                 cin>>c;
				  if(!(c>0&&c<6))
				  {
					 cout<<"输入错误"<<endl;
				  }
				 switch(c)
				   {
  
		     	    case 1:
			      	  int m1;
					  cout<<"输入数据"<<endl;
			   	      cin>>m1;
				      s[i].math=m1;
			          cout<<"已经修改成功"<<endl;
					  break;
                    
					case 2:
				       int m2;
					   cout<<"输入数据"<<endl;
				       cin>>m2;
				       s[i].computer=m2;
				       cout<<"已经修改成功"<<endl;
				       break;
	               
					case 3:
			      	   int m3;
					   cout<<"输入数据"<<endl;
			       	   cin>>m3;
			           s[i].english=m3;
				       cout<<"已经修改成功"<<endl;
				       break;

	                case 4:
				       int m4;
					   cout<<"输入数据"<<endl;
				       cin>>m4;
			       	   s[i].sum=m4;
				       cout<<"已经修改成功"<<endl;
			      	   break;
					
					case 5:
						goto L;
					    
				   }
		   
              L :  break;
			
			}	
          break;
		
		}		                   
	}


}

void main()
{
	
   ST s[100],su;
   int flag=0;
  
   cout<<"                       菜单     "<<endl;
   cout<<endl;
   cout<<"          1       录入学生信息"<<endl;
   cout<<"          2       输出所有学生信息"<<endl;
   cout<<"          3       按总分高低排序输出"<<endl;
   cout<<"          4       按学号查找学生信息"<<endl;
   cout<<"          5       按姓名查找学生信息"<<endl;
   cout<<"          6       按总分大小插入学生信息"<<endl;
   cout<<"          7       按姓名删除学生信息"<<endl;
   cout<<"          8       按学号修改信息"<<endl;
   cout<<"          9       退出系统"<<endl;
   while(1)
   {
         cout<<"请选择:"<<endl;
	     int m;
         cin>>m;
         if(!(m>0&&m<10))
		 {
		    cout<<"输入错误"<<endl;
		 }
		
		switch(m)
		{
	         case 1:
		       flag=1;
			   cout<<"输入学生个数"<<endl;
		       int n;
               cin>>n;
		       cout<<"输入"<<n<<"个学生信息"<<endl;
	   	       print(s,n) ; 
               break;
            
			 case 2:
			   
				 
			   if(flag==0)
			   {
				   cout<<"请先录入学生信息,选择 1  继续"<<endl;
			   }
			   else 
			   {
				   display1(s,n);
			   }
	           break;
	         
			 case 3:
                
				 
				 if(flag==0)
				 {
				   cout<<"请先录入学生信息,选择 1  继续"<<endl;
				 }
			  
			  else
			  {
				  sum(s,n);
		          sortsum(s,n);
                  display2(s,n);
			  }
		      break;
	        
			 case 4: 
	           
				 
			   if(flag==0)
			   {
				   cout<<"请先录入学生信息,选择 1  继续"<<endl;
			   }
			   else
			   {
			   char num1[10]; 
	           cout<<"输入该学生学号"<<endl;
               cin>>num1;
               Findnum( s, n, num1);
			   }
			   break;
       
	         case 5: 
			    
				 
			    if(flag==0)	 
			
				{
				   cout<<"请先录入学生信息,选择 1  继续"<<endl;
				} 
			    else
				{
				char num2[10]; 
	            cout<<"输入该学生姓名"<<endl;
                cin>>num2;
                Findname( s,n, num2);
				}
               break;
	         
			 case 6: 
				
				 if(flag==0)
			   
				 {
				   cout<<"请先录入学生信息,选择 1  继续"<<endl;
				 }
				 else
				 {
				 cout<<"按***学号*****姓名*****数学成绩******计算机成绩*****英语成绩*****总分***"<<endl;
		         cin>>su.num>>su.name>>su.math>>su.computer>>su.english>>su.sum;
                 insert(s, n, su);
				 n++;
				 display2(s,n);
				 }
		         break;
	  
			 case 7: 
			
				 
				 if(flag==0) 
			   
				 {
				   cout<<"请先录入学生信息,选择 1  继续"<<endl;
				 }
				 else
				 {
			     char num3[10];
		    	 cout<<"输入学号"<<endl;
		    	 cin>>num3;
		    	 delet(s,n,num3);
			     n--;
                 display2(s,n);
				 }
				 break;
	        
			 case 8:
				 
				 
				if(flag==0)
		       
				{
				   cout<<"请先录入学生信息,选择 1  继续"<<endl;
				}
				else
				{ 
				char num4[10];
		        cout<<"输入修改学生的学号"<<endl;
		        cin>>num4;
		        modify(s,n,num4);
	            break;
				}
			 case 9:
		        exit(1);
	   
	   }
   }


}