| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2152 人关注过本帖, 4 人收藏
标题:纯数组知识实现学生成绩管理(可排序,不及格统计,删除,查找,插入)
取消只看楼主 加入收藏
xm476013472
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-3-25
结帖率:100%
收藏(4)
已结贴  问题点数:20 回复次数:3 
纯数组知识实现学生成绩管理(可排序,不及格统计,删除,查找,插入)
此程序完全是数组和函数实现,可在VC 6.0下通过编译;有兴趣的人可以自己添加些控制函数
程序代码:
#include<stdio.h>
#include<string.h>
#include <windows.h>
#define M 1000//定义此表最大容量(即学生人数最大为1000人)
int r;//定义全局变量,记录保存用户输入了r个学生

void get(char name[M][20],int num[M],int score[M][3])   //定义输入函数。
{
    char c;
    for(r=0;r<M;r++)
    {
        if(r==0)
        {
            printf(">>请按顺序输入第[%d]个学生的信息,空格隔开(姓名 学号 英语 数学 物理)\n",r+1);
            scanf("%s%d%d%d%d",name[r],&num[r],&score[r][0],&score[r][1],&score[r][2]);
        }
        if(r>0)
        {
            printf(">>请按顺序输入第[%d]个学生的信息(同上)[结束输入请按Q,继续输入按ENTER]:",r+1);
            getchar();
             c=getchar();
            if(c=='Q'||c=='q')
                goto tuichu;
            else
                scanf("%s%d%d%d%d",name[r],&num[r],&score[r][0],&score[r][1],&score[r][2]);
        }
    }
tuichu: ;
}

void list()//画出框架
{
    printf("*****************************************************************************\n");
    printf("*                            09软件<2>班成绩表                              *\n");
    printf("*\t姓名\t学号\t英语\t数学\t物理\t平均分\t总分\t名次        *\n");
    printf("*****************************************************************************\n");
}
void order(char name[M][20],int num[M],int score[M][3],int sum[M],float mean[M],int rank[M])//排序,输出总分、平均分、名次。
{
    int i,j,w,x,y,z,s;
    float m;
    char a[20];
    for(i=0;i<r;i++)
    {
        sum[i]=score[i][0]+score[i][1]+score[i][2];
        mean[i]=float(sum[i])/3;
    }
    for(j=0;j<r;j++)
    {
        for(i=r-1;i>j;i--)
        {
            if(sum[i]>=sum[i-1])
            {
                strcpy(a,name[i]);//交换姓名
                strcpy(name[i],name[i-1]);
                strcpy(name[i-1],a);

                w=num[i];//交换学号
                num[i]=num[i-1];
                num[i-1]=w;

                x=score[i][0];//交换英语成绩
                score[i][0]=score[i-1][0];
                score[i-1][0]=x;

                y=score[i][1];//交换数学成绩
                score[i][1]=score[i-1][1];
                score[i-1][1]=y;

                z=score[i][2];//交换物理成绩
                score[i][2]=score[i-1][2];
                score[i-1][2]=z;

                s=sum[i];//交换总分
                sum[i]=sum[i-1];
                sum[i-1]=s;

                m=mean[i];//交换平均分
                mean[i]=mean[i-1];
                mean[i-1]=m;
            }
        }
    }
    for(j=0;j<r;j++)
        printf("*\t%s\t%d\t %d\t %d\t %d\t%.2f\t%d\t %d\t    *\n",name[j],num[j],score[j][0],score[j][1],score[j][2],mean[j],sum[j],rank[j]);
}
void fail(char name[M][20],int num[M],int score[M][3])//不及格学生统计
{
    printf(">>存在不及格的学生有:\n");
    int i,j,k;
    for(i=0;i<r;i++)
    {
        for(j=0;j<3;j++)
        {
            if(score[i][j]<60)
            {
                printf("  %s   %d  ",name[i],num[i]);
                switch(j)
                {
                case 0:printf("英语");break;
                case 1:printf("数学");break;
                case 2:printf("物理");break;
                }
                printf(" %d分 不及格\n",score[i][j]);
            }
        }
    }
    k=score[0][0];
    for(i=0;i<r;i++)
    {
        for(j=0;j<r-1;j++)
        {
            if(score[i][j]<k)
                k=score[i][j];
        }
    }
    if(k>=60)
        printf("  该班级学生无不及格现象\n");
}
void search(char name[M][20],int num[M],int score[M][3],int sum[M],float mean[M],int rank[M])//查找函数
{
    int h,i;
    char c;
loop1:printf(">>请输入您要查找学生的学号:");
      scanf("%d",&h);
      for(i=0;i<=r;i++)
      {
          if(i==r)
          {
              printf("  没有查询到该学生的信息,请重新输入\n");
              goto loop1;
          }
          if(h==num[i])
          {
              system("cls");
              list();
              printf("*\t%s\t%d\t %d\t %d\t %d\t%.2f\t%d\t %d\t    *\n",name[i],num[i],score[i][0],score[i][1],score[i][2],mean[i],sum[i],rank[i]);
              printf("-----------------------------------------------------------------------------\n");
jixu:         printf(">>继续查询请按G,结束请按Q:");
              getchar();
              c=getchar();
              if(c=='G'||c=='g')
                  goto loop1;
              else if(c=='Q'||c=='q')
                  goto exit;
              else
                  goto jixu;
          }
      }
exit:;
}

int delete_1(char name[M][20],int num[M],int score[M][3],int sum[M],float mean[M],int rank[M])//删除函数
{
    int u,i,j,k;
    char c;
    char b[20]={'\0'};
loop3:printf(">>请输入您要删除学生的学号:");
      scanf("%d",&u);
      for(i=0;i<=r;i++)
      {
          if(i==r)
          {
              printf("  没有查询到该学生的信息,请重新输入\n");
                    goto loop3;
          }   
          if(u==num[i])
          {
              for(j=i;j<r;j++)
              {
                  if(j==r-1)
                  {
                       strcpy(name[j],b);
                       num[j]=NULL;
                          sum[j]=NULL;
                       mean[j]=NULL;
                      
                       for(k=0;k<3;k++)
                           score[j][k]=NULL;
                  }
                  else
                  {
                       strcpy(name[j],name[j+1]);
                       num[j]=num[j+1];
                       sum[j]=sum[j+1];
                       mean[j]=mean[j+1];
                   
                       for(k=0;k<3;k++)
                           score[j][k]=score[j+1][k];
                  }
              }
                 
                list();
                for(j=0;j<r-1;j++)
                    printf("*\t%s\t%d\t %d\t %d\t %d\t%.2f\t%d\t %d\t    *\n",name[j],num[j],score[j][0],score[j][1],score[j][2],mean[j],sum[j],rank[j]);
                printf("-----------------------------------------------------------------------------\n");
                r--;
jixu:        if(r>0)
                {
               printf(">>继续删除请按G,结束请按Q:");
                    getchar();
                    c=getchar();
                    if(c=='G'||c=='g')
                        goto loop3;
                    else if(c=='Q'||c=='q')
                        goto exit;
                    else
                        goto jixu;
                }
                else
                {
                    printf("注意!该表已无数据!\n");
                    return 0;
                }


          }
      }
exit: return 0;
}
void insert(char name[M][20],int num[M],int score[M][3],int sum[M],float mean[M],int rank[M])//插入函数
{
    int i,j,k,w,x,y,z,s;
    float m;
    char c;
    char d[20];
loop4:printf(">>请按顺序输入插入的学生的信息(姓名 学号 英语 数学 物理)\n");
      scanf("%s%d%d%d%d",name[r],&num[r],&score[r][0],&score[r][1],&score[r][2]);
      sum[r]=score[r][0]+score[r][1]+score[r][2];
      mean[r]=float(sum[r])/3;
      for(i=0;i<r;i++)
      {
          if(sum[r]>sum[i])
          {
              for(j=i+1;j<r;j++)
              {
                  for(k=r;k>=j;k--)
                  {
                      strcpy(d,name[k]);//交换姓名
                      strcpy(name[k],name[k-1]);
                      strcpy(name[k-1],d);

                      w=num[k];//交换学号
                      num[k]=num[k-1];
                      num[k-1]=w;

                      x=score[k][0];//交换英语成绩
                      score[k][0]=score[k-1][0];
                      score[k-1][0]=x;

                         y=score[k][1];//交换数学成绩
                      score[k][1]=score[k-1][1];
                      score[k-1][1]=y;

                      z=score[k][2];//交换物理成绩
                      score[k][2]=score[k-1][2];
                      score[k-1][2]=z;

                      s=sum[k];//交换总分
                      sum[k]=sum[k-1];
                      sum[k-1]=s;

                      m=mean[k];//交换平均分
                      mean[k]=mean[k-1];
                      mean[k-1]=m;
                  }         
loop5:              list();
                  for(j=0;j<=r;j++)
                       printf("*\t%s\t%d\t %d\t %d\t %d\t%.2f\t%d\t %d\t    *\n",name[j],num[j],score[j][0],score[j][1],score[j][2],mean[j],sum[j],rank[j]);
                  printf("-----------------------------------------------------------------------------\n");
                  r++;
jixu:             printf(">>继续插入请按G,结束请按Q:");
                  getchar();
                  c=getchar();
                  if(c=='G'||c=='g')
                       goto loop4;
                  else if(c=='Q'||c=='q')
                       goto exit;
                  else
                       goto jixu;
              }
          }
          else if(sum[r]<=sum[r-1])
              goto loop5;
      }
      for(i=0;i<r;i++)
      {
          if(sum[r]<=sum[i]&&sum[r]>sum[i+1])   
          {
              for(j=i+1;j<r;j++)
              {
                   for(k=r;k>j;k--)
                    {
                                strcpy(d,name[k]);//交换姓名
                                strcpy(name[k],name[k-1]);
                                strcpy(name[k-1],d);

                                w=num[k];//交换学号
                                num[k]=num[k-1];
                                num[k-1]=w;

                                x=score[k][0];//交换英语成绩
                                score[k][0]=score[k-1][0];
                                score[k-1][0]=x;

                                   y=score[k][1];//交换数学成绩
                                score[k][1]=score[k-1][1];
                                score[k-1][1]=y;

                                z=score[k][2];//交换物理成绩
                                score[k][2]=score[k-1][2];
                                score[k-1][2]=z;

                                s=sum[k];//交换总分
                                sum[k]=sum[k-1];
                                sum[k-1]=s;

                                m=mean[k];//交换平均分
                                mean[k]=mean[k-1];
                                mean[k-1]=m;
                    }
              list();
                  for(j=0;j<=r;j++)
                       printf("*\t%s\t%d\t %d\t %d\t %d\t%.2f\t%d\t %d\t    *\n",name[j],num[j],score[j][0],score[j][1],score[j][2],mean[j],sum[j],rank[j]);
                  printf("-----------------------------------------------------------------------------\n");
                  r++;
jixu_1:             printf(">>继续插入请按G,结束请按Q:");
                  getchar();
                  c=getchar();
                  if(c=='G'||c=='g')
                       goto loop4;
                  else if(c=='Q'||c=='q')
                       goto exit;
                  else
                       goto jixu_1;
              }
          }
          else
              continue;
      }
exit:;
}

int main()
{
    int i;
    int sum[M]={NULL},rank[M]={NULL};
    char name[M][20]={NULL};
    int num[M]={NULL},score[M][3]={NULL};
    float mean[M]={NULL};
    get(name,num,score);
    for(i=0;i<M;i++)
        rank[i]=i+1;
    system("cls");
    list();
    order(name,num,score,sum,mean,rank);
    printf("-----------------------------------------------------------------------------\n");                                                                                       
    fail(name,num,score);
    printf("-----------------------------------------------------------------------------\n");
    char m;
loop2:    printf(">>请选择接下来操作的流程(查找S,删除D,插入I,退出Q):");
    getchar();
    m=getchar();
    if(m=='S'||m=='s')
        goto chazhao;
    else if(m=='D'||m=='d')
        goto shanchu;
    else if(m=='I'||m=='i')
        goto charu;
    else if(m=='Q'||m=='q')
        goto exit;
    else
    {
        printf("  输入错误!请重新输入\n");
        goto loop2;
    }
chazhao:search(name,num,score,sum,mean,rank);
    goto loop2;
shanchu:delete_1(name,num,score,sum,mean,rank);
    goto loop2;
charu:insert(name,num,score,sum,mean,rank);
    goto loop2;
exit:return 0;
}


搜索更多相关主题的帖子: 统计 
2011-03-25 11:36
xm476013472
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-3-25
收藏
得分:0 
忘了说了,我也是新手,正一步一步地学C,觉得每学完一章进行总结挺好的,这样也会增加自己的成就感,并不是在炫耀自己。多说无意。
2011-03-25 12:58
xm476013472
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-3-25
收藏
得分:0 
回复 11楼 一个SB
貌似你还没看到8楼写的。
不过谢谢你,毕竟我还是个新手,让我更会努力学好C。
2011-03-25 17:41
xm476013472
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-3-25
收藏
得分:0 
回复 12楼 wujieru
恩,谢谢你的意见,新手要走的路还很长很长。。
2011-03-25 17:42
快速回复:纯数组知识实现学生成绩管理(可排序,不及格统计,删除,查找,插入) ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034087 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved