学生管理系统

 学生管理系统 

 

#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <malloc.h>
#include <conio.h>
 
 
typedef struct stu    //学生资料
{
       char _class[20];     //班级
       int num; //学号(两位数)
    char name[8]; //姓名
 
       float elec;              //电子技术
       float C_prog; //c++程序设计
       float media;     //多媒体
       float Eng;       //大学英语
       float math;      //大学数学
       float sport;      //大学体育
       float polity;     //政治
 
       float ave; //平均成绩
       int order; //名次
       stu *next;       //记录下一结点的指针
}stuNode;
 
 
 
 
stuNode *Input(stuNode *link, int *pn);              //录入
stuNode *Statistic(stuNode *link, int n);              //统计 
void Lookup(stuNode *link);         //查询
stuNode *Modify(stuNode *link);         //修改
stuNode *Delete(stuNode *link, int *pn);             //删除
void Output(stuNode *link, int n);         //输出班级学生成绩
 
stuNode *Create(char *pcha);              //创建新结点
stuNode *Insert(stuNode *link, stuNode *s);              //按平均成绩插入结点
stuNode *Search(stuNode *link, int number);
stuNode *Sort(stuNode *link, int n);     //按平均成绩排序(排名)
 
 
// 录入函数:
//      输入学生各科成绩,并按平均成绩降序插入链表。
//
stuNode *Input(stuNode *link, int *pn)
{
       stuNode *s;    //指向新结点
       char op;
       char cla[20];
 
       cout << "学生班级:";
              cin >> cla;
                 
       do
       {
              s=Create(cla); //创建结点
              if (s==NULL)
                     return NULL;
              else
              {
                     printf( "/n班级:%s/n",s->_class);
                     printf( "------------------------------------------------------------------------------/n" );
                     printf( "|学号| 姓名 |电子技术| C++    | 多媒体 | 英语 | 数学 | 体育 |政治经济|/n" );
                     printf( "------------------------------------------------------------------------------/n" );
                     printf( "| %2d |%-8s|%8.0f|%8.0f|%8.0f|%8.0f|%8.0f|%8.0f|%8.0f|/n", s->num,
                                                                                    s->name,
                                                                                                                                 s->elec,
                                                                                                                                 s->C_prog,
                                                                                                                                 s->media,
                                                                                                                                 s->Eng,
                                                                                                                                 s->math,
                                                                                                                                 s->sport,
                                                                                                                                 s->polity );
                     printf( "------------------------------------------------------------------------------/n" );
                     fflush(stdin);   //清空标准缓冲区
                     printf("确认信息是否正确:(正确:(Y);不正确:(N)/n");
                     scanf("%c", &op);
                     if (op=='N'||op=='n')
                     {
                            free(s);
                            Input(link, pn);
                     }
              }
              link=Insert(link, s);
              *pn = *pn+1;
 
              do
              {
                     fflush(stdin);   //清空标准缓冲区
                     cout << "/n继续录入吗?(录入:Y;退出:N)";
                     cin >> op;
              }
              while(op!='n' && op!='N' && op!='y' && op!='Y');
 
       }
       while(op=='Y'||op=='y');
             
 
       return link;
}
 
 
// 统计函数
//      统计各科成绩的平均成绩、学生人数,并显示结果。   
//
stuNode *Statistic(stuNode *link, int n)
{
       stuNode *pstat;             //指向统计结果
       stuNode *t;
       char i, *w=&i;
       if(link==NULL)
       {
              cout << "/n没有学生/n";
              return NULL;
       }
       ;
       if ((pstat = (stuNode *)malloc(sizeof(stuNode)))==NULL)
       {
              cout << "统计失败";
              return NULL;
       }
      
       strcpy(pstat->_class, link->_class);
 
       pstat->elec = link->elec;
       pstat->C_prog = link->C_prog;
       pstat->media = link->media;
       pstat->Eng = link->Eng;
       pstat->math = link->math;
       pstat->sport = link->sport;
       pstat->polity = link->polity;
 
       for(t=link->next; t!=NULL; t=t->next)
       {
              pstat->elec = pstat->elec + t->elec;
              pstat->C_prog = pstat->C_prog + t->C_prog;
              pstat->media = pstat->media + t->media;
              pstat->Eng = pstat->Eng + t->Eng;
              pstat->math = pstat->math + t->math;
              pstat->sport = pstat->sport + t->sport;
              pstat->polity = pstat->polity + t->polity;
       }
       pstat->elec = pstat->elec / n;
       pstat->C_prog = pstat->C_prog / n;
       pstat->media = pstat->media / n;
       pstat->Eng = pstat->Eng / n;
       pstat->math = pstat->math / n;
       pstat->sport = pstat->sport / n;
       pstat->polity = pstat->polity / n;
 
       printf( "/n 班级:%s /n",pstat->_class);
       printf( "----------------------------------------------------------------/n" );
       printf( "|电子技术| C++    | 多媒体 | 英语 | 数学 | 体育 |政治经济|/n" );
       printf( "----------------------------------------------------------------/n" );
       printf( "|%8.0f|%8.0f|%8.0f|%8.0f|%8.0f|%8.0f|%8.0f|/n", pstat->elec,
                                                                                                          pstat->C_prog,
                                                                                                          pstat->media,
                                                                                                          pstat->Eng,
                                                                                                          pstat->math,
                                                                                                          pstat->sport,
                                                                                                          pstat->polity );
       printf( "----------------------------------------------------------------/n" );
       printf( "                                                      共%d人     /n", n);
 
        cout << "输入任意字符继续";
              cin >> *w;
              free(w);
       return pstat;
}
 
 
// 查询函数:
//      按指定学号查询
//
void Lookup(stuNode *link, int n)
{
       int number;
       stuNode *t;
       char i, *w=&i;
       cout << "请输入学号:";
              cin >> number;
       t=Search(link, number);
       if(t!=NULL)
       {
              link=Sort(link, n);
              printf( "/n班级:%s/n", t->_class);
              printf( "-------------------------------------------------------------------------------/n" );
              printf( "|学号| 姓名 |电子技术| C++ |多媒体| 英语 | 数学 | 体育 |政治经济|平均分|名次|/n" );
              printf( "-------------------------------------------------------------------------------/n" );
              printf( "| %2d |%-8s|%8.0f|%5.0f|%6.0f|%6.0f|%6.0f|%6.0f|%8.0f|%6.0f| %2d |/n", t->num,
                                                                                                                                              t->name,
                                                                                                                                              t->elec,
                                                                                                                                              t->C_prog,
                                                                                                                                              t->media,
                                                                                                                                              t->Eng,
                                                                                                                                              t->math,
                                                                                                                                              t->sport,
                                                                                                                                              t->polity,
                                                                                                                                                       t->ave,
                                                                                                                                                       t->order);
              printf( "--------------------------------------------------------------------------------/n" );
       }
       else
       {
              cout << "/n没有这位学生/n";
       }
       cout << "输入任意字符继续";
       cin >> *w;
       free(w);
       return;
}
 
 
//修改函数
//
stuNode *Modify(stuNode *link)
{
       stuNode *t,*p;
       char i,*w=&i;
       int number;
       cout << "/n请输入要修改的学生学号:";
              cin >> number;
       t=Search(link, number);
       if(t==NULL)
       {
              cout << "没有这个学生";
 
       }
       else
       {
              printf( "/n班级:%s/n", t->_class);
              printf( "-------------------------------------------------------------------------------/n" );
              printf( "|学号| 姓名 |电子技术| C++ |多媒体| 英语 | 数学 | 体育 |政治经济|平均分|名次|/n" );
              printf( "-------------------------------------------------------------------------------/n" );
              printf( "| %2d |%-8s|%8.0f|%5.0f|%6.0f|%6.0f|%6.0f|%6.0f|%8.0f|%6.0f| %2d |/n", t->num,
                                                                                                                                             t->name,
                                                                                                                                             t->elec,
                                                                                                                                             t->C_prog,
                                                                                                                                             t->media,
                                                                                                                                             t->Eng,
                                                                                                                                             t->math,
                                                                                                                                             t->sport,
                                                                                                                                             t->polity,
                                                                                                                                                      t->ave,
                                                                                                                                                      t->order);
              printf( "-------------------------------------------------------------------------------/n" );
 
              cout << "/n请输入新信息:";
              t->num=number;
              cout << "/n姓名:";
                     cin >> t->name;
              cout << "/n电子技术:";
                     cin >> t->elec;
              cout << "/nC++:";
                     cin >> t->C_prog;
              cout << "/n多媒体:";
                     cin >> t->media;
              cout << "/n英语:";
                     cin >> t->Eng;
              cout << "/n数学:";
                     cin >> t->math;
              cout << "/n体育:";
                     cin >> t->sport;
              cout << "/n政治:";
                     cin >> t->polity;
              t->ave = (t->elec + t->C_prog + t->media
                  + t->Eng + t->math + t->sport + t->polity) / 7;
              p=link;
              if(p==t)
                     link=t->next;
              else
              {
                     for (p=link; p->next!=t; p=p->next);     //找t的前一个结点      
                     p->next=t->next;    //把t结点与链表分离
              }
              t->next=NULL;
              cout << "/n/nyes/n";
              link=Insert(link,t); //重新插入结点t
              cout << "/n修改成功/n";
        cout << "输入任意字符继续";
              cin >> *w;
              free(w);
    }
    cout <<"/n/n/n/n/n/n";
       return link;
}
 
 
//删除
//
stuNode *Delete(stuNode *link, int *pn)
{
       stuNode *t;
       stuNode *p;
       int number;
       char i, *w=&i;
       cout << "请选择要删除的学号:";
       cin >> number;
       t=Search(link, number);
       if(t==NULL)
       {
          
        return link;
    }
       do
       {
              cout << "真的要删除?是(y);否(n):";
              cin >> i;
       }while(i!='y' && i!='Y' && i!='n' && i!='N');
 
       if(i=='n' || i=='N')
              return link;
       else
       {           
              if(t==link)      
              {
                     link=t->next;
              }
              else
              {
                    
                     for(p=link; p->next!=t; p=p->next);      //找出t结点的前驱结点
 
                     p->next=t->next;
                     t->next;
              }
 
              free(t);
              cout << "/n删除成功/n";
              *pn=*pn-1;
              cout << "输入一个任意字符结束操作";
                     cin >> *w;
              free(w);
              return link;
       }
}
 
 
//输出函数
//
void Output(stuNode *link, int n)
{
       stuNode *t;
       char i, *w=&i;
       if (link==NULL)
       {
              cout << "/n没有学生/n";
      
       }
       else
       {
              link=Sort(link,n);
              printf( "/n班别:%s /n", link->_class);
              printf( "-------------------------------------------------------------------------------/n" );
              printf( "|学号| 姓名 |电子技术| C++ |多媒体| 英语 | 数学 | 体育 |政治经济|平均分|名次|/n" );
              printf( "-------------------------------------------------------------------------------/n" );
              for(t=link; t!=NULL; t=t->next)
              {
                     printf( "| %2d |%-8s|%8.0f|%5.0f|%6.0f|%6.0f|%6.0f|%6.0f|%8.0f|%6.0f| %2d |/n", t->num,
                                                                                                        t->name,
                                                                                                                                                                 t->elec,
                                                                                                                                                                 t->C_prog,
                                                                                                                                                                 t->media, 
                                                                                                                                                                 t->Eng,  
                                                                                                                                                                 t->math,
                                                                                                                                                                 t->sport,
                                                                                                                                                                 t->polity,
                                                                                                                                                                 t->ave,
                                                                                                                                                                 t->order);
              printf( "-------------------------------------------------------------------------------/n" );
              }
       }
       cout << "/n输入任意字符结束操作/n";
       cin >> *w;
       free(w);
       return;
}
      
 
//创建函数
//     创建学生结点
//
stuNode *Create(char *pcla)
{
       stuNode *s;
      
       s = (stuNode *)malloc(sizeof(stuNode));
       if(s==NULL)
       {
              cout << "申请内存失败";
              return (NULL);
       }
       else
       {
              fflush(stdin);   //清空标准缓冲区
              cout << "请输入学生资料:/n";
              cout << "班级:" << pcla << '/n';
                     strcpy(s->_class, pcla);
              cout << "/n学生学号:";
                     cin >> s->num;
              cout << "/n学生姓名:";
                     cin >> s->name;
 
              cout << "/n他的各科成绩:";
 
              cout << "/n电子技术:";
                     cin >> s->elec;
              cout << "/nC++程序设计:";
                     cin >> s->C_prog;
              cout << "/n多媒体:";
                     cin >> s->media;
              cout << "/n大学英语:";
                     cin >> s->Eng;
              cout << "/n高等数学:";
                     cin >> s->math;
              cout << "/n大学体育:";
                     cin >> s->sport;
              cout << "/n马克思主义政治经济学:";
                     cin >> s->polity;
 
              s->ave = (s->elec + s->C_prog + s->media
                  + s->Eng + s->math + s->sport + s->polity) / 7;
        cout << s->ave;
       }
       return s;
}
 
// 插入函数:
//      按平均成绩插入各结点
//
stuNode *Insert(stuNode *link, stuNode *s )
{
       stuNode *p, *t;  
       t=link;
      
       if (link==NULL)
       {
              link=s;
              return link;
       }
       else
       {
           if (t->ave < s->ave)
           {
               link=s;
               s->next=t;
           }
        else
        {   
                     while (t->ave >= s->ave)
                     {
                            if(t->next==NULL)
                            {
                                   t->next=s;
                                   s->next=NULL;
                                   return link;
                            }
                            p=t;
                            t=t->next;
                     }
                     s->next = t;
                     p->next = s;
              }
       }           
       return link;
}
 
//查找函数
// 返回值是结果的结点
stuNode *Search(stuNode *link, int number)
{
       stuNode *t;
       if (link==NULL)
       {
              cout << "/n没有学生/n";
              return NULL;
       }
       else
       {
              for (t=link; (t!=NULL)&&(t->num!=number); t=t->next);
             
        if (t->num==number)
                             return t;            
              cout << "/n没有这位学生/n";
              return t;  
       }
}
 
 
//排序函数
stuNode *Sort(stuNode *link, int n)
{
       int i;   //序号
       stuNode *t;
       if(link==NULL)
              return NULL;
       else
       {
              for(t=link,i=1; i<=n; t=t->next,i++)
                     t->order=i;
              return link;
       }
}
 
 
int main()
{
       stuNode *link=NULL;    //链表头指针
       stuNode *pstat;      //指向记录统计结果
       char op;         //记录操作选项
       int n=0;          //学生人数
      
       while(1)
       {
             
              cout << "/n/n/n/n/n/n";
              cout << " ************************************FOUND************************************/n"
                      << " -----------------------------------------------------------------------------/n"
                      << '/n'
                      << "   请选择操作:1.录入学生成绩            2.统计学生各科成绩的平均成绩           /n"
                      << "               3.查询学生成绩            4.修改学生科目分数                     /n"
                      << "               5.删除学生记录            6.输出全班成绩                         /n"
                      << '/n'
                      << "                                                            0.退出             /n"
                      << '/n'
                      << "         注意:本系统每次打开只能记录一个班的资料                              /n"
                      << '/n'
                      << " -----------------------------------------------------------------------------/n"
                      << " *************************************END*************************************/n";
              cin >> op;
              fflush(stdin);
              switch(op)
              {
              case '0':
                     return 0;
                     break;
              case '1':
                     link=Input(link, &n);
                     break;
              case '2':
                     pstat=Statistic(link, n);
                     break;
              case '3':
                     Lookup(link,n);
                     break;
              case '4':
                     link=Modify(link);
                     break;
              case '5':
                     Delete(link, &n);
                     break;
              case '6':
                     Output(link, n);
                     break;
              default:
                     cout << "错误输入!!";
                     break;
              }
       }
       getch();
       return 0;
}
 
 
 
四、运行环境
 
五、输入值:
 
六、 运行结果 :
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值