| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 709 人关注过本帖
标题:学生成绩管理
取消只看楼主 加入收藏
lyj2010lyj
Rank: 2
等 级:论坛游民
帖 子:25
专家分:27
注 册:2010-9-28
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:0 
学生成绩管理
#include<stdio.h>

#include<stdlib.h>

#include<string.h>

/* 定义结构体类型STU */

typedef struct

{ char num[10];   /* 学号 */

  char name[20];   /* 姓名 */

  int score;    /* 成绩 */

}STU;

STU stu[80];    /* 定义结构体数组 */

/*按照学号查询*/

void search_num(STU *stu,int n)

{int i,temp=0;

char x[10]={};

  gets(x);

for(i=0;i<n;i++)

{

if(strcmp(stu[i].num,x)==0)

{

  printf(" 学号       姓名        分数\n");

        printf("%-15s%-15s%-15d\n",stu[i].num,stu[i].name,stu[i].score);

  temp++;

  break;

}

}

if(!temp)printf("未找到你输入的学号\n");

}

/* 输入记录函数Input */

int Input(STU stu[],int n)

{ int i=0;    /* 统计输入记录的个数 */

  char sign='Y';    /* 存放用户输入的选择Y/N */

char x[10];   /* x[10]为清除多余的数据所用 */

  while(sign!='n'&&sign!='N')

  { printf("学生学号:");

    scanf("%s",stu[n+i].num);

    printf("学生姓名:");

    scanf("%s",stu[n+i].name);

    printf("学生成绩:");

    scanf("%d",&stu[n+i].score);

    gets(x);          /* 清除多余的输入 */

    printf("是否继续输入记录?(Y/N)"); /* 选Y输入下一个记录,选N输入结束 */

    scanf("%c",&sign);      

    i++;

  }

  return(n+i);

}

/* 显示原样记录函数Display */

void Display(STU stu[],int n)

{ int i;

  printf("%-15s%-15s%-15s\n","学号","姓名","成绩");

  for(i=0;i<n;i++)

  { printf("%-15s%-15s%-15d\n",stu[i].num,stu[i].name,stu[i].score);

    if(i>0&&i%20==0) system("pause");    /* 每输出20个记录暂停 */

  }

  system("pause");

}

/*记录学号排序函数Sort_by_num */

void Sort_by_num(STU *stu,int n)

{ int i,j;

  STU temp;

  for(i=0;i<n-1;i++)    /*冒泡法排序*/

    for(j=0;j<n-1-i;j++)

      if(strcmp(stu[j].num,stu[j+1].num)>0)

   { temp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=temp;

   }

}

/*记录成绩排序函数Sort_by_score*/

void Sort_by_score(STU *stu,int n)

{ int i,j;

  STU temp;

  for(i=0;i<n-1;i++)    /*冒泡法排序*/

    for(j=0;j<n-1-i;j++)

      if(stu[j].score<stu[j+1].score)

   { temp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=temp;

   }

}

/*统计数据函数Statistic */

void Statistic(STU stu[],int n)

{ int i,j=0,k=0,sum=0;

  double aver;

  for(i=0;i<n;i++)

  { sum+=stu[i].score;

    if(stu[j].score>stu[i].score) j=i;

    if(stu[k].score<stu[i].score) k=i;

  }

  aver=1.0*sum/n;

  printf("有%d 个记录.\n",n);

  printf("最高分:\n");

  printf("学号:%s 姓名:%s 分数:%d\n",stu[k].num,stu[k].name,stu[k].score);

  printf("最低分:\n");

  printf("学号:%s 姓名:%s 分数:%d\n",stu[j].num,stu[j].name,stu[j].score);

  printf("平均分: %5.2f\n",aver);

}

/*从文件读记录函数Read_from_file */

int Read_from_file(STU stu[],int n)

{ int i=0,num;

  FILE *fp;     /* 定义文件指针 */

  char filename[20];      /*存放文件名*/

  printf("输入文件名:");

  scanf("%s",filename);   /*输入文件名*/

  if((fp=fopen(filename,"r"))==NULL)    /*打开文件*/

   { printf("cann't open the file\n");  /*打开失败信息*/

  system("pause");

        return(n);  }   

  fscanf(fp,"%d",&num);     /*读入记录个数*/

  while(i<num)

  { fscanf(fp,"%s%s%d",stu[n+i].num,stu[n+i].name,&stu[n+i].score);

    i++;

  }

  n+=num;

  fclose(fp);   /*关闭文件*/

  printf("已读入!\n");

  system("pause");

  return(n);

}

/*向文件写记录函数Write_to_file */

void Write_to_file(STU stu[],int n)

{ int i=0;

  FILE *fp;  /* 定义文件指针 */

  char filename[20];  /* 存放文件名 */

  printf("输入文件名:");

  scanf("%s",filename);

  if((fp=fopen(filename,"w"))==NULL) /* 打开文件 */

  { printf("cann't open the file\n");

    system("pause");

    return;

  }

  fprintf(fp,"%d\n",n);  /* 写入记录个数 */

  while(i<n)

  { fprintf(fp,"%-16s%-15s%d\n",stu[i].num,stu[i].name,stu[i].score);

    i++;

  }

  fclose(fp); /* 关闭文件 */

  printf("已存盘!\n");  /* 返回成功信息 */

}

void main() /* 主函数 */

{ int n=0;  /* 存放记录个数 */

  char c;/* 存放用户选择的数字字符 */

  char m;

  int f;

  for(;;)

  {

do{

         system("cls");  /* 清屏幕函数 */

    printf("**********************************\n");

    printf("     学生成绩管理系统 \n");

    printf("       1. 输入记录 \n");

    printf("       2. 显示记录 \n");

    printf("       3. 统计数据 \n");

    printf("       4. 从文件读记录 \n");

    printf("       5. 向文件写记录 \n");

printf("       6. 查找数据\n");

    printf("       0. 退出系统  \n");

        printf("**********************************\n");

    printf("输入选择(0-9):");

    c=getchar();

  } while(c<'0'||c>'9');  /* 若输入的不是数字字符,则重新输入 */



switch(c)

  { case '1':

          printf("输入记录\n");

          /*  调用输入记录函数*/

          n=Input(stu,n);

          system("pause");

          break;

       case '2':

          printf("显示记录\n");

    printf("***********************\n");

    printf("   A 按照输入的原样输出\n");

    printf("   B 按学号高底顺序输出\n");

    printf("   C 按成绩高底顺序输出\n");

    printf("***********************\n");

    printf("输入序列号:");

    getchar();

    scanf("%c",&m);

    getchar();

    switch(m)

    {

    case 'A':

    case 'a':

     printf("按照原样输出\n");

     /*调用原样显示函数*/

              Display(stu,n);

     break;

    case 'B':

    case 'b':

     printf("按照学号高到底顺序输出\n");

     /*调用num函数*/

              Sort_by_num(stu,n);

              Display(stu,n);

     break;

    case 'C':

    case 'c':

     printf("按照成绩的高低顺序输出\n");

     /*调用score函数*/

     Sort_by_score(stu,n);

              Display(stu,n);

     break;

    default:

     printf("Erroy\n");

     break;

    }

          system("pause");

          break;

    case '3':

          printf("统计数据\n");

          /*  调用统计数据函数*/

          Statistic(stu,n);

          system("pause");

          break;

    case '4':

          printf("从文件读记录\n");

          /*  调用读文件函数*/

          n=Read_from_file(stu,n);

          system("pause");

       break;

    case '5':

          printf("向文件写记录\n");

          /*  调用写文件函数*/

          Write_to_file(stu,n);

          system("pause");

          break;

    case '6':

          printf("查找函数\n");

    printf("****************\n");

    printf("  1.按照学号查找\n");

    printf("  2.按照姓名查找\n");

    printf("****************\n");

    scanf("%d",&f);

    getchar();

  switch(f)   

    {

    case 1:

     printf("学号:");

     /*调用学号查找函数*/

              search_num(stu,n);

     break;

    case 2:

     printf("姓名:");

     /*调用名字查找函数*/

     break;

    default:

     printf("Erroy\n");

     break;

    }

          system("pause");

    break;

    case '0':

          printf("再见 !\n"); /* 结束程序 */

          system("pause");

          exit(0);

     }

  }

}
搜索更多相关主题的帖子: 管理 学生 
2010-10-14 16:16
快速回复:学生成绩管理
数据加载中...
 
   



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

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