C++学生成绩管理系统,包含增删改查,冒泡排序

第一次博客,就写人生第一个系统吧–C++学生成绩管理系统.该系统是楼主(菜鸟)大一上学期简单学习C++两个月老师布置的作业.实现了较为简单的成绩录入,增删改查,平均分以及排名功能,记录一下.

实现功能

  1. 录入、查看成绩
  2. 学生增加,成绩查询、修改以及删除
  3. 学生成绩排名(冒泡排序)
  4. 各科情况分析(最高分、最低分以及平均分)

输出首页代码

void shouye()          /*输出首页*/
{
 cout<<endl;cout<<endl;
 cout<<"\t"<<"\t"<<"\t"<<"  欢迎来到学生成绩管理系统  "<<endl;
 cout<<"\t"<<"\t"<<"\t"<<"---------------------------"<<endl;
 cout<<"\t"<<"\t"<<"\t"<<"   1.继续"<<endl;
 cout<<"\t"<<"\t"<<"\t"<<"   2.退出"<<endl;
 cout<<"\t"<<"\t"<<"\t"<<"---------------------------"<<endl;
 cout<<"\t"<<"\t"<<"\t"<<"   您选择的是:";
}
void mingling()          
{
 int ling;     
 cin>>ling;         /*输入指令*/
 cout<<endl;
  switch(ling)
  {
 case 2:cout<<"\t"<<"即将退出,请稍候......"<<endl;exit(1);       /*退出系统*/
 case 1:cout<<"\t"<<"即将进入系统......"<<endl;system("cls"); break;//清屏,然后break
 default:cout<<"\t"<<"选择错误,请重新输入!!!"<<endl;
 mingling();        /*重新选择*/     
  }
}

主菜单代码

void menu()          /*输出主菜单*/
{
 cout<<endl<<"\t"<<"               菜单"<<endl;
 cout<<"\t"<<"——————————————————"<<endl;
 cout<<"\t"<<"\t"<<"1.录入学生成绩"<<endl;
 cout<<"\t"<<"\t"<<"2.显示完整成绩表"<<endl;
 cout<<"\t"<<"\t"<<"3.查看成绩排名"<<endl;
 cout<<"\t"<<"\t"<<"4.各科情况分析"<<endl;
 cout<<"\t"<<"\t"<<"5.查询学生成绩"<<endl;
 cout<<"\t"<<"\t"<<"6.增加学生成绩"<<endl;
 cout<<"\t"<<"\t"<<"7.修改学生成绩"<<endl;
 cout<<"\t"<<"\t"<<"8.删除学生成绩"<<endl;
 cout<<"\t"<<"\t"<<"9.离开"<<endl;
 cout<<"\t"<<"——————————————————"<<endl;
 cout<<endl;
}

录入学生成绩代码,限制语数英成绩在0~100之间

void luru()            /*1.输入学生信息*/
{
 int r;
 cout<<endl;
 cout<<"\t"<<"请输入学生人数:";            /*学生人数*/
 cin>>n;
 for(r=0;r<n;r++)         
 {
  cout<<"\t"<<"请输入第"<<r+1<<"个学生的学号:";
  cin>>x[r];
     cout<<"\t"<<"                 姓名:";
  cin>>name[r];
  cout<<"\t"<<"                 性别:";
  cin>>sex[r];
    if(sex[r]!="男"&sex[r]!="女")             /*限制性别只能为男或女*/
      {
      cout<<"\t"<<" 输入错误,请重新输入:";
      cin>>sex[r];
      }
     cout<<"\t"<<"             语文成绩:";             
  cin>>yw[r];
    if(yw[r]>100||yw[r]<0)                /*限制分数在0-100之间*/
      {
     cout<<"\t"<<" 输入错误,请重新输入:";
     cin>>yw[r];
       }
     cout<<"\t"<<"             数学成绩:";
  cin>>sx[r];
     if(sx[r]>100||sx[r]<0)
       {
     cout<<"\t"<<" 输入错误,请重新输入:";
     cin>>sx[r];
       }
     cout<<"\t"<<"             英语成绩:";
  cin>>yy[r];
     if(yy[r]>100||yy[r]<0)
       {
     cout<<"\t"<<" 输入错误,请重新输入:";
     cin>>yy[r];
    }
  cout<<endl;
  }       
}

效果图如下
在这里插入图片描述
排名功能代码,采用冒泡排序,同分情况,按语数英顺序优先

void paiming()           /*3.显示成绩排名*/
{
 int i,r,j,k,z[100],pai_x[100];
 string y[100],pai_name[100],pai_sex[100];
 float t[100],pai_yw[100],pai_sx[100],pai_yy[100],pai_zf[100],pai_ave[100];        /*pai_[]用来存放成绩排名的数组*/
 cout<<endl;
 cout<<"\t"<<"-------------------------------------------------------------------"<<endl;
 cout<<"\t"<<"学号    姓名    性别    语文    数学    英语    总分   平均分   排名"<<endl;
    for(i=0;i<n;i++)
    {
     pai_x[i]=x[i];pai_name[i]=name[i];pai_sex[i]=sex[i];pai_yw[i]=yw[i];pai_sx[i]=sx[i];pai_yy[i]=yy[i];
     pai_zf[i]=pai_yw[i]+pai_sx[i]+pai_yy[i];
     pai_ave[i]=pai_zf[i]/3;
    }
    for(r=0;r<n-1;r++)           
 {            
     for(j=0;j<n-r-1;j++)
    {
     if(pai_zf[j+1]>pai_zf[j])           /*将各项用冒泡排序法按总分高到低排序*/
    {   
       z[j]=pai_x[j];pai_x[j]=pai_x[j+1];pai_x[j+1]=z[j];          /*z[]用来暂存整数数据*/
        y[j]=pai_name[j];pai_name[j]=pai_name[j+1];pai_name[j+1]=y[j];          /*y[]用来暂存字符数据*/
        y[j]=pai_sex[j];pai_sex[j]=pai_sex[j+1];pai_sex[j+1]=y[j];                 
        t[j]=pai_yw[j];pai_yw[j]=pai_yw[j+1];pai_yw[j+1]=t[j];           /*t[]用来暂存数字数据*/
        t[j]=pai_sx[j];pai_sx[j]=pai_sx[j+1];pai_sx[j+1]=t[j];
        t[j]=pai_yy[j];pai_yy[j]=pai_yy[j+1];pai_yy[j+1]=t[j];
        t[j]=pai_zf[j];pai_zf[j]=pai_zf[j+1];pai_zf[j+1]=t[j];
        t[j]=pai_ave[j];pai_ave[j]=pai_ave[j+1];pai_ave[j+1]=t[j];            
    }
   else if(pai_zf[j+1]==pai_zf[j])
    {
        if(pai_sx[j+1]>pai_sx[j])        /*总分相同按数学优先排名*/
       {
           z[j]=pai_x[j];pai_x[j]=pai_x[j+1];pai_x[j+1]=z[j];          
           y[j]=pai_name[j];pai_name[j]=pai_name[j+1];pai_name[j+1]=y[j];          
           y[j]=pai_sex[j];pai_sex[j]=pai_sex[j+1];pai_sex[j+1]=y[j];                 
           t[j]=pai_yw[j];pai_yw[j]=pai_yw[j+1];pai_yw[j+1]=t[j];
           t[j]=pai_sx[j];pai_sx[j]=pai_sx[j+1];pai_sx[j+1]=t[j];
           t[j]=pai_yy[j];pai_yy[j]=pai_yy[j+1];pai_yy[j+1]=t[j];
           t[j]=pai_zf[j];pai_zf[j]=pai_zf[j+1];pai_zf[j+1]=t[j];
           t[j]=pai_ave[j];pai_ave[j]=pai_ave[j+1];pai_ave[j+1]=t[j];             
       }
        else if(pai_sx[j+1]==pai_sx[j])             
       {
          if(pai_yw[j+1]>pai_yw[j])               /*总分,数学相同按语文排名*/
          {
             z[j]=pai_x[j];pai_x[j]=pai_x[j+1];pai_x[j+1]=z[j];          
             y[j]=pai_name[j];pai_name[j]=pai_name[j+1];pai_name[j+1]=y[j];          
             y[j]=pai_sex[j];pai_sex[j]=pai_sex[j+1];pai_sex[j+1]=y[j];                 
             t[j]=pai_yw[j];pai_yw[j]=pai_yw[j+1];pai_yw[j+1]=t[j];
             t[j]=pai_sx[j];pai_sx[j]=pai_sx[j+1];pai_sx[j+1]=t[j];
             t[j]=pai_yy[j];pai_yy[j]=pai_yy[j+1];pai_yy[j+1]=t[j];
             t[j]=pai_zf[j];pai_zf[j]=pai_zf[j+1];pai_zf[j+1]=t[j];
             t[j]=pai_ave[j];pai_ave[j]=pai_ave[j+1];pai_ave[j+1]=t[j];
          }
            else if(pai_yy[j+1]>pai_yy[j])                      /*总分,数学相同,先按语文再按英语排*/
            {
              z[j]=pai_x[j];pai_x[j]=pai_x[j+1];pai_x[j+1]=z[j];          
              y[j]=pai_name[j];pai_name[j]=pai_name[j+1];pai_name[j+1]=y[j];          
              y[j]=pai_sex[j];pai_sex[j]=pai_sex[j+1];pai_sex[j+1]=y[j];                 
              t[j]=pai_yw[j];pai_yw[j]=pai_yw[j+1];pai_yw[j+1]=t[j];
              t[j]=pai_sx[j];pai_sx[j]=pai_sx[j+1];pai_sx[j+1]=t[j];
              t[j]=pai_yy[j];pai_yy[j]=pai_yy[j+1];pai_yy[j+1]=t[j];
              t[j]=pai_zf[j];pai_zf[j]=pai_zf[j+1];pai_zf[j+1]=t[j];
              t[j]=pai_ave[j];pai_ave[j]=pai_ave[j+1];pai_ave[j+1]=t[j]; 
           }
      }
    }
    }
 }
    for(k=0;k<n;k++)
   {
     pai[k]=k+1;
     cout<<"\t"<<pai_x[k]<<"\t"<<pai_name[k]<<"\t"<<pai_sex[k]<<"\t"<<pai_yw[k]<<"\t"<<pai_sx[k]<<"\t"<<pai_yy[k]<<"\t"<<pai_zf[k]<<"\t"<<pai_ave[k]<<"\t"<<pai[k]<<endl;
   }
 cout<<"\t"<<"-------------------------------------------------------------------"<<endl;
}

各科情况分析代码

void gekeqingkuang()         /*4.各科情况分析*/
{
    int i,r,j,yw_overn=0,yw_youliang=0,yw_jige=0,sx_overn=0,sx_youliang=0,sx_jige=0,yy_overn=0,yy_youliang=0,yy_jige=0;
 float ave_yw,yw_max=0,yw_min=100,yw_sum=0,       /*语文的变量*/
       ave_sx,sx_max=0,sx_min=100,sx_sum=0,       /*数学的变量*/
       ave_yy,yy_max=0,yy_min=100,yy_sum=0;       /*英语的变量*/
   {
     for(i=0;i<n;i++)
      {
        yw_sum=yw[i]+yw_sum;
      if(yw[i]>yw_max)
         yw_max=yw[i];
      if(yw[i]<yw_min)
         yw_min=yw[i];
      } 
         ave_yw=yw_sum/n; 
        for(i=0;i<n;i++)
      {
        if(yw[i]>=60)
         yw_jige++;
       }
        for(j=0;j<n;j++)
      {
      if(yw[j]>=80)
         yw_youliang++;  
       }
        for(r=0;r<n;r++)
      {
        if(yw[r]>=ave_yw)
         yw_overn++;
      }
        cout<<endl;
        cout<<"\t"<<"语文成绩情况如下:"<<endl;
  cout<<"\t"<<"---------------------------------------------------------------"<<endl;
  cout<<"\t"<<"最高分  最低分  平均分    优良人数    及格人数   超过平均分的人数"<<endl;
  cout<<"\t"<<yw_max<<"\t"<<yw_min<<"\t"<<ave_yw<<"\t"<<"\t"<<yw_youliang<<"\t"<<yw_jige<<"\t"<<"\t"<<yw_overn<<endl;
  cout<<"\t"<<"---------------------------------------------------------------"<<endl;
  cout<<endl;
    }
    {
     for(i=0;i<n;i++)
      {
        sx_sum=sx[i]+sx_sum;
      if(sx[i]>sx_max)
         sx_max=sx[i];
      if(sx[i]<sx_min)
         sx_min=sx[i];
      } 
        ave_sx=sx_sum/n;
        for(i=0;i<n;i++)
      { 
      if(sx[i]>=60)
         sx_jige++;
      }
        for(j=0;j<n;j++)
      {
      if(sx[j]>=80)
         sx_youliang++;  
       }
         for(r=0;r<n;r++)
      {
        if(sx[r]>=ave_sx)
         sx_overn++;
       }
        cout<<"\t"<<"数学成绩情况如下:"<<endl;
  cout<<"\t"<<"---------------------------------------------------------------"<<endl;
  cout<<"\t"<<"最高分  最低分  平均分    优良人数    及格人数   超过平均分的人数"<<endl;
  cout<<"\t"<<sx_max<<"\t"<<sx_min<<"\t"<<ave_sx<<"\t"<<"\t"<<sx_youliang<<"\t"<<sx_jige<<"\t"<<"\t"<<sx_overn<<endl;
  cout<<"\t"<<"---------------------------------------------------------------"<<endl;
  cout<<endl;
    }
    {
     for(i=0;i<n;i++)
      {
        yy_sum=yy[i]+yy_sum;
      if(yy[i]>yy_max)
         yy_max=yy[i];
      if(yy[i]<yy_min)
         yy_min=yy[i];
       }
        ave_yy=yy_sum/n;
        for(i=0;i<n;i++)
      {
      if(yy[i]>=60)
         yy_jige++;
       }
        for(j=0;j<n;j++)
      {
      if(yy[j]>=80)
         yy_youliang++;  
       }
        for(r=0;r<n;r++)
      {
         if(yy[r]>=ave_yy)
         yy_overn++;
       }
        cout<<"\t"<<"英语成绩情况如下:"<<endl;
  cout<<"\t"<<"---------------------------------------------------------------"<<endl;
  cout<<"\t"<<"最高分  最低分  平均分    优良人数    及格人数   超过平均分的人数"<<endl;
  cout<<"\t"<<yy_max<<"\t"<<yy_min<<"\t"<<ave_yy<<"\t"<<"\t"<<yy_youliang<<"\t"<<yy_jige<<"\t"<<"\t"<<yy_overn<<endl;
  cout<<"\t"<<"---------------------------------------------------------------"<<endl;
  cout<<endl;
    }
}

效果图如下
在这里插入图片描述

查询学生成绩代码,输入学生姓名查询

void chaxun()           /*5.查询学生信息*/
{
 int r;string find_name;
 cout<<"\t"<<"请输入你要查找的学生的姓名:";
 cin>>find_name;
 cout<<endl;
 bool flag=false;
 for(r=0;r<n;r++)
 { if(name[r]==find_name)
      { 
       cout<<"\t"<<"该学生的信息为:"<<endl;
       cout<<"\t"<<"------------------------------------------------------"<<endl;
     cout<<"\t"<<"学号    姓名    语文    数学    英语    总分   平均分"<<endl;
     cout<<"\t"<<x[r]<<"\t"<<name[r]<<"\t"<<yw[r]<<"\t"<<sx[r]<<"\t"<<yy[r]<<"\t"<<zf[r]<<"\t"<<ave[r]<<endl;
     cout<<"\t"<<"------------------------------------------------------"<<endl;
     flag=true;
     break;
      }
 }
 if(flag==false)
   cout<<"\t"<<"查无此人!!!"<<endl;
}

效果图如下
在这里插入图片描述
删除功能代码,同样是输入姓名进行删除,增加和修改的代码与录入差不多,就不再列出来

void shanchu()          /*8.删除学生信息*/
{
 int i,r;
 string shan_name;
 cout<<endl;
 cout<<"\t"<<"请输入你要删除的学生的姓名:";
 cin>>shan_name;
 cout<<endl;
 bool flag=false;
 for(r=0;r<n;r++)
   {
  if(name[r]==shan_name)
    {
       for(i=r;i<n;i++)
       {
          x[i]=x[i+1];name[i]=name[i+1];sex[i]=sex[i+1];yw[i]=yw[i+1];sx[i]=sx[i+1];yy[i]=yy[i+1];zf[i]=zf[i+1];ave[i]=ave[i+1];pai[i]=pai[i]+1;
       }
        n--;
        cout<<"\t"<<"删除成功!!!";
        flag=true;
        break;
    }
   }
   if(flag==false)
   cout<<"查无此人!!!"<<endl;
}

主函数实现菜单循环

int main()
{
 shouye();
 mingling();
 cout<<endl;
 cout<<"\t"<<"请先录入学生信息,才能执行其它操作!";
 luru();
 for(;zhiling<10;)          /*菜单循环*/
 {
  menu();
  cout<<"\t"<<"请输入你想执行的功能:";
     cin>>zhiling;
     switch (zhiling)
        {
         case 1:luru();break;
         case 2:chengjibiao();break;
         case 3:paiming();break;
         case 4:gekeqingkuang();break;
         case 5:chaxun();break;
         case 6:zengjia();break;
         case 7:xiugai();break;
         case 8:shanchu();break;
         case 9:cout<<endl<<"\t"<<"即将退出,请稍侯......";exit(1);        /*结束程序*/
         default:cout<<"\t"<<"选择错误,按任意数字键即可返回菜单!!!"<<endl;     /*输入数字指令,返回菜单*/
                 cout<<"\t";cin>>zhiling;
     }
 }
 return 0;
}

该学生成绩管理系统大致如上,有问题可留言,看到会尽量回复.

发布了1 篇原创文章 · 获赞 0 · 访问量 12

猜你喜欢

转载自blog.csdn.net/weixin_43753937/article/details/104521429