当前位置:编程学习 > C/C++ >>

用C语言编一个成绩管理程序

要求:自定义一个学生表结构:学号、姓名、年龄、数学、英语、C#成绩。输入n(>20)个学生数据,要求每个学生的总成绩,统计各科不及格的人数和名单等功能。

追问:就是帮我编一个程序啊。

答案:参考答案:#include "stdio.h"    /*I/O函数*/
#include "stdlib.h"   /*其它说明*/
#include "string.h"   /*字符串函数*/
#include "conio.h"   /*屏幕操作函数*/
#include "ctype.h"   /*字符操作函数*/
#define  N    3
#define  M  20//可以把M扩大
typedef struct z1   /*定义数据结构*/
{
   int score[N];//三门科目
   int sum;

   char  sex;//性别

   int  age;//年龄

   char  name[10];//姓名

   int  num;//学号
   float average;
   struct z1  *next;
   /*score数组元素代表数学1,英语2,c#3*/
}STUDENT;

/*以下是函数原型*/
STUDENT *Input();   /* 输入学生成绩*/
void Search(STUDENT  *h);    /*查找学生成绩*/
void Stat(STUDENT  *h);     /*统计学生成绩*/
void Modif(STUDENT  *h);/*修改学生成绩*/
menu_select();/*菜单函数*/

void main()
{
 STUDENT *Head=NULL;     /*链表定义头指针*/
   for(;;)             /*无限循环*/
   {
      switch(menu_select())     /*调用主菜单函数,返回值整数作开关语句的条件*/
      {                     /*值不同,执行的函数不同,break 不能省略*/
  case 1:Head=Input();break;   /*输入学生成绩*/
  case 2:Stat(Head);break;     /*统计平均成绩*/
  case 3:Search(Head);break;  /*查找学生成绩*/
  case 4:Modif(Head);break;   /*修改学生成绩*/
  case 5:exit(0);       /*如菜单返回值为5程序结束*/
      }
   }
}
/*菜单函数,返回值为整数*/
menu_select()
{
 int c;

 
    printf("***********学生成绩管理学院**************\n");

 printf("********输入学生成绩********\n");
 printf("********统计平均成绩********\n");
    printf("********查找学生成绩********\n");
 printf("********修改学生成绩********\n");
 printf("********  退出系统  ********\n");
 do
 {
      printf("\n请输入你的选择!!(1~5):");    /*在菜单窗口外显示提示信息*/
      scanf("%d",&c);           /*输入选择项*/
 }
 while(c<1||c>5);    /*选择项不在1~5之间重输*/
    return c;              /*返回选择项,主程序根据该数调用相应的函数*/
}
STUDENT  *Input()  /* 输入学生成绩*/
{
 int i,j;
 int s[M]={0};
 STUDENT *h=NULL,*info;  /* STUDENT指向结构体的指针*/
  printf("*****输入学生成绩*******\n");
 for(j=0;j<M;j++)
   {
      info=(STUDENT *)malloc(sizeof(STUDENT));  /*申请空间*/
      if(!info)   /*如果指针info为空*/
      {
  printf("\n内存溢出!!!\n");   /*输出内存溢出*/
  return NULL;           /*返回空指针*/
      }
      
    

   

   printf("姓名:");

    scanf("%s",info->name);

   if(info->name[0]=='@')   break;//输入@录入完毕

   do{

   printf("性别(男M女W):");

 
   }while((info->sex=getchar())!='M'&&(info->sex=getchar())!='W');

  do{

  printf("学号(111-999之间):");

 scanf("%d",&info->num);

  }while(info->num<111||info->num>999);
   for(i=0;i<N;i++)    /*N门课程循环N次*/
      {
     do{
   printf("现在录入第%d位学生的成绩!!!\n",j+1);

     printf("第[%d]门科目成绩:",i+1);    /*提示输入第几门课程*/
     scanf("%d",&info->score[i]);    /*输入成绩*/
     printf("\n");
     if(info->score[i]>100||info->score[i]<0) /*确保成绩在0~100之间*/
     printf("数据错误!!!!\n");  /*出错提示信息*/
    
  }while(info->score[i]>100||info->score[i]<0);
  s[j]=s[j]+info->score[i];   /*累加各门课程成绩*/
      }
      info->sum=s[j];    /*将总分保存*/
      info->average=(float)s[j]/N;  /*求出平均值*/
      info->next=h;   /*将头结点做为新输入结点的后继结点*/
      h=info;    /*新输入结点为新的头结点*/
   }
   printf("********录入完毕**********\n");
 printf("\n");
   return(h);   /*返回头指针*/
}
void Search(STUDENT  *h)   /*查找学生成绩*/
{
 int i=0,choose;
 STUDENT  *h1;
 h1=h;
 printf("请输入要查询的科目!!\n");
 printf("*******************\n");
 printf("1:数学\n");
 printf("2:英语\n");
 printf("3:C#\n");
  printf("\n");
 printf("请输入你的选择!!");
 scanf("%d",&choose);
 if(choose==1)
 {
  printf("********学生数学成绩************\n");
  while(h1!=NULL)
  {
  
   printf("第%d位学生的数学成绩为:%d",i+1, h1->score[0]);
   printf("\n");
   h1=h1->next;
   i++;
  }
  printf("*********************************\n");
 }
 if(choose==2)
 {
  printf("********学生英语成绩************\n");
  while(h1!=NULL)
  {
   printf("第%d位学生的英语成绩为:%d",i+1,h1->score[1]);
   printf("\n");
   h1=h1->next;
   i++;
  }
  printf("*********************************\n");
 }
 if(choose==3)
 {
  printf("********学生C#成绩************\n");
  while(h1!=NULL)
  {
   printf("第%d位学生的C语言成绩为:%d",i+1,h1->score[3]);
   printf("\n");
   h1=h1->next;
   i++;
  }
  printf("*********************************\n");
 }
}
void Stat(STUDENT  *h)    /*统计学生成绩*/
{
 int i=0;
  STUDENT  *h1;
  h1=h;
  printf("*****平均成绩*****\n");
  while(h1!=NULL)
  {
  
   printf("第%d位学生成绩如下!!!\n",i+1);
  
     printf("数学成绩:%d\n",h1->score[0]);
     printf("英语成绩:%d\n",h1->score[1]);
     printf("C#成绩:%d\n",h1->score[3]);
     printf("总平均分:%f\n",h1->average);
    printf("总分:%d\n",h1->sum);
     printf("*******************\n");
     h1=h1->next;
     i++;
  }
}
void Modif(STUDENT  *h)/*修改学生成绩*/
{
 int  choose;
 int i=0,k=0;
&

上一个:c语言定义常量为什么不建议用#define
下一个:c语言该怎么学才能学好?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,