• C++小项目 学生成绩管理系统


      1 #include<iostream>
      2 #include<string>
      3 #include<iomanip>
      4 using namespace std;
      5 
      6 int num;                                   //总学生人数
      7 
      8 class student {
      9     friend class studentMessage;
     10 private:
     11     string ID;
     12     string name;
     13     double score[5];                       //1-4代表math、English、OPP和总成绩  ,0号单元空出
     14     student * next;
     15 public:
     16     student();
     17     string getName(){return name;}
     18     string getID(){return ID;}
     19     double getMath(){return score[1];}
     20     double getEnglesh(){return score[2];}
     21     double getOPP(){return score[3];}
     22     double gettotol(){return score[4];}
     23     student* getNext(){return next;}
     24 
     25     static void analyse(int ,student * ); //分析成绩
     26     void display();                          //打印成绩
     27     void swap();                          //交换对象和对象->next的信息
     28 };
     29 
     30 student::student()
     31 {
     32     cout<<"请输入学生学号 : ";cin>>ID;
     33     cout<<"请输入学生姓名 : ";cin>>name;
     34     cout<<"请输入学生的数学、英语和OPP成绩 : "<<endl;
     35     int a,b,c;
     36     cin>>a;
     37     while(a<0||a>100)
     38     {
     39         cout<<"输入成绩有误,请重新输入: "<<endl;
     40         cin>>a;    
     41     }
     42     cin>>b;
     43     while(b<0||b>100)
     44     {
     45         cout<<"输入成绩有误,请重新输入: "<<endl;
     46         cin>>b;
     47     }
     48     cin>>c;
     49     while(c<0||c>100)
     50     {
     51         cout<<"输入成绩有误,请重新输入: "<<endl;
     52         cin>>c;        
     53     }
     54     score[1]=a;
     55     score[2]=b;
     56     score[3]=c;
     57     score[4]=a+b+c;
     58     next=NULL;
     59 }
     60 
     61 void student::analyse(int a,student * first)
     62 {
     63     int you=0,liang=0,zhong=0,jige=0,bujige=0;
     64     student * t=first;
     65     double average=0;                   //平均分
     66     while(t)
     67     {
     68         int b = int(t->score[a]/10);
     69         switch(b)
     70         {
     71         case 10:
     72         case 9:you++;break;
     73         case 8:liang++;break;
     74         case 7:zhong++;break;
     75         case 6:jige++;break;
     76         default:bujige++;
     77         }
     78         average+=t->score[a];
     79         t=t->next;
     80     }
     81     average=average/num;
     82     cout<<" 考生总人数 : "<<num<<"        平均分 : "<<average<<endl;
     83     cout<<"\n 优     良      中     及格    不及格  "<<endl;
     84     cout<<" "<<you<<" \t"<<liang<<" \t"<<zhong<<"\t"<<jige<<"\t"<<bujige<<endl;
     85 }
     86 
     87 void student::display()
     88 {
     89     cout<<" "<<setw(3)<<ID<<"     "<<setw(3)<<name<<"      ";
     90     for (int i=1;i<=4;i++)
     91     {
     92         cout<<setw(3)<<score[i]<<"      ";
     93     }
     94     cout<<endl; 
     95 }
     96 
     97 void student::swap()
     98 {
     99     int j;
    100     string na,id;
    101     double sco[5];
    102     na=name;name=next->name;next->name=na;
    103     id=ID;ID=next->ID;next->ID=id;
    104     for(j=1;j<=4;j++)
    105     {                                            
    106         sco[j]=score[j];
    107         score[j]=next->score[j];    
    108         next->score[j]=sco[j];
    109     }
    110 }
    111 
    112 class studentMessage{
    113 private:
    114     student * first;
    115     student * last;
    116 public:
    117     studentMessage();
    118     student* getFirst(){return first;}
    119     student* getLast(){return last;}
    120     int getNum(){return num;}
    121     void add();                             //向表中增加学生成绩记录
    122     void search();                          //在表中查找学生成绩记录
    123     void del();                             //在表中删除学生成绩记录
    124     void showOne();                         //分析一门课的成绩
    125     void showAll();                         //输出所有同学所有科目的成绩
    126     void sort();                            //按一门课成绩或总成绩排序
    127     void clear();                           //清空所有信息并退出系统
    128 
    129 };
    130 
    131 studentMessage::studentMessage()
    132 {
    133     first=NULL;
    134     last=NULL;
    135     num=0;
    136 }
    137 
    138 void studentMessage::add() 
    139 {
    140     student * t =new student;
    141     student *p = first;
    142     while(p){
    143         if(p->ID==t->ID)
    144         {
    145             cout<<"\n学号输入错误或该学生成绩已经存在!(如需修改,请先删除再重新录入)"<<endl;
    146             return;
    147         }
    148         p=p->next;
    149     }
    150     num++;
    151     if(first==NULL)
    152     {
    153         first=last=t;
    154         
    155     }
    156     else
    157     {    
    158         last->next=t;
    159         last=last->next;
    160     }
    161 }
    162 
    163 void studentMessage::search()
    164 {
    165     string a;
    166     cout<<"\n请输入要查找的学生的学号:";cin>>a;
    167     student *t = first;
    168     while(t){
    169         if(t->ID==a)
    170             break;
    171         t=t->next;
    172     }
    173     if(!t)
    174     {
    175         cout<<"\n未找到要查找学生!"<<endl;
    176         return;
    177     }
    178     cout<<"\n查找成功!"<<endl;
    179     cout << " 学号    姓名     数学     英语     OPP     总成绩" << endl;
    180     t->display();        
    181 }
    182 
    183 void studentMessage::del()    
    184 {
    185     string a;
    186     cout<<"\n请输入要删除的学生的学号: ";cin>>a;
    187     student *t = first;
    188     student *p=NULL;
    189     while(t){
    190         if(t->ID==a)
    191             break;
    192         p=t;
    193         t=t->next;
    194     }
    195     if(!t)
    196     {
    197         cout<<"\n未找到要删除学生!"<<endl;
    198         return;
    199     }
    200     if(!p)
    201     {
    202         first=first->next;
    203         cout<<"\n成功删除学生"<<a<<endl;
    204         delete t;
    205     }
    206     else
    207     {
    208         p->next=t->next;
    209         cout<<"成功删除学生"<<a<<endl;
    210         delete t;
    211     }
    212     
    213     num--;
    214 }
    215 
    216 void studentMessage::showOne()
    217 {
    218     int a;
    219     while(1)
    220     {
    221         cout<<"\n想要分析哪一门成绩?请输入相应序号(1:math 2:English 3:OPP):  ";cin>>a;
    222         if(a!=1&&a!=2&&a!=3)
    223             cout<<"\n输入序号有误,请重新输入!"<<endl;
    224         else 
    225             break;
    226     }
    227     cout<<"\n\t成绩分析如下: \n"<<endl;
    228     student::analyse(a,first);
    229 }
    230 
    231 void studentMessage::showAll()
    232 {
    233     cout << "---------------------成绩列表----------------------"<< endl;
    234     cout << " 学号    姓名     数学     英语     OPP     总成绩" << endl;
    235     student *t = first;
    236     while(t){
    237         t->display();
    238         t=t->next;
    239     }
    240 }
    241 
    242 void studentMessage::sort()
    243 {
    244     int a,n=0;                  //n--排名
    245     cout<<"想要按照什么成绩排序?请输入相应序号(1.数学 2.英语 3.OPP 4.总成绩): ";
    246     while(1)
    247     {
    248         cin>>a;
    249         if (a!=1&&a!=2&&a!=3&&a!=4)
    250             cout<<"\n输入序号有误,请重新输入 : ";
    251         else
    252             break;
    253     }
    254     student *t=first;
    255     student *p=t;
    256     while(p->next)
    257     {
    258         t=first;
    259         while(t->next)
    260         {
    261             if(t->next->score[a]>=t->score[a])
    262             {
    263                 t->swap();
    264             }
    265             t=t->next;
    266         }
    267         p=p->next;
    268     }
    269     t = first;
    270     cout<<"\n\t 成绩表如下: "<<endl;
    271     cout<<"学号    姓名    成绩    排名"<<endl;
    272     while(t){
    273         n++;
    274         cout<<" "<<t->getID()<<"  \t"<<t->getName()<<"  \t";
    275         switch(a)
    276         {
    277             case 1 :cout<<t->getMath()<<"  \t"<<n<<endl;break;
    278             case 2 :cout<<t->getEnglesh()<<"  \t"<<n<<endl;break;
    279             case 3 :cout<<t->getOPP()<<"  \t"<<n<<endl;break;
    280             case 4 :cout<<t->gettotol()<<"  \t"<<n<<endl;break;
    281         }
    282         t=t->next;    
    283     }
    284 }
    285 
    286 void studentMessage::clear()
    287 {
    288     int x;
    289     cout<<"确认要清空所有信息?请输入1或2 (1:确认 2:取消) : ";cin>>x;
    290     if (x==2) 
    291     {
    292         cout<<"\n取消清空\n"<<endl;
    293         return;
    294     }
    295     student *t = first;
    296     student *p; 
    297     while(t){
    298         p=t;
    299         t=t->next;
    300         delete p;
    301     }
    302     cout<<"\n清空成功!\n";
    303     cout<<"退出成功!\n";
    304 }
    305 
    306 void showMenu()
    307 {
    308     cout << "                               \n";
    309     cout << "===============================\n";
    310     cout << "      学生成绩管理系统\n\n";
    311     cout << "      1.显示所有学生成绩\n";
    312     cout << "      2.添加信息\n";
    313     cout << "      3.查询信息\n";
    314     cout << "      4.删除信息\n";
    315     cout << "      5.成绩排序\n";
    316     cout << "      6.单科成绩分析\n";
    317     cout << "      7.清空所有信息并退出系统\n";
    318     cout << "      0.退出系统\n";
    319     cout << "===============================\n";
    320     cout << "                               \n";
    321 }
    322 
    323 int main()
    324 {
    325     int h;
    326     studentMessage stuM=studentMessage();
    327     while(1)
    328     {
    329         showMenu();
    330         cout << "请输入操作对应的序号 : ";
    331         cin >>h;
    332         cout<<endl;
    333         switch(h)
    334         {
    335             case 1: stuM.showAll(); break;
    336             case 2: stuM.add(); break;
    337             case 3: stuM.search(); break;
    338             case 4: stuM.del(); break;
    339             case 5: stuM.sort(); break;
    340             case 6: stuM.showOne(); break;
    341             case 7: stuM.clear(); return 0;
    342             case 0: cout<<"\n退出成功!";return 0;
    343             default:cout<<"\n输入序号有误!请输入正确的序号。"<<endl;
    344         }
    345     }
    346 }

    历时两天整 重要把C++的课设做出来啦!吼开心!   第一次写课设  有不完善的还请多多指教哈

  • 相关阅读:
    对字符串进行编码解码
    C#重新启动时,关闭较早的进程
    JS给HTML5页面<Select></Select>绑定选中项
    获取该项目路径下的文件路径
    IE浏览器从页面向后台Controller传中文值出现乱码问题
    委托
    win10激活命令
    判断窗口是否已经被打开
    JS之对象数组遍历?
    JS之arguments属性解读函数传参?
  • 原文地址:https://www.cnblogs.com/esperanza/p/8056952.html
Copyright © 2020-2023  润新知