• 当前位置:首页>>C语言>>C语言编程实例>>学生成绩管理系统实习
  • 学生成绩管理系统实习
  • #include <malloc.h>
    #include <stdio.h>
    #include <stdlib.h>
    #define LEN sizeof(struct scorenode)
    #define DEBUG
    #include <string.h>
    struct scorenode
    {int number;/*学号*/
    char name[10];/*姓名*/
    float yuwen;/*语文成绩*/
    float yingyu;/*英语成绩*/
    float shuxue;/*数学成绩 */
    struct scorenode *next;
    };
    typedef struct scorenode score;
    int n,k;/*n,k为全局变量,本程序中的函数均可以使用它*/
    /*==============================================================================================*/
    score *creat2311(void)
    /*函数creat2311,功能:创建链表,此函数带回一个指向链表头的指针*/
    {
     score*head;
     score *p1,*p2,*p3,*max;
     int i,j;
     float fen;
        char t[10];
      n=0;
         p1=p2=p3=(score *)malloc(LEN);head=p3; /*开辟一个新单元*/
           printf("请输入学生资料,输0退出!\n");
    repeat1: printf("请输入学生学号(学号应大于0):");/*输入学号,学号应大于0*/
           scanf("%d",&p1->number);
         while(p1->number<0)
       {getchar();
        printf("输入错误,请重新输入学生学号:");
           scanf("%d",&p1->number);}      
      /*输入学号为字符或小于0时,程序报错,提示重新输入学号*/
      if(p1->number==0)
       goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/
      else
      {
      p3=head;
      if(n>0)
       {for(i=0;i<n;i++)
               {if(p1->number!=p3->number)
         p3=p3->next;
         else
         {printf("学号重复,请重输!\n");
         goto repeat1;
         /*当输入的学号已经存在,程序报错,返回前面重新输入*/
            }
        }    
       }         
      }
           printf("请输入学生姓名:");
           scanf("%s",&p1->name);/*输入学生姓名*/
           printf("请输入语文成绩(0~100):");/*输入语文成绩,成绩应在0-100*/
           scanf("%f",&p1->yuwen);
        while(p1->yuwen<0||p1->yuwen>100)
     {getchar();
      printf("输入错误,请重新输入语文成绩");/*输入错误,重新输入语文成绩直到正确为止*/
                scanf("%f",&p1->yuwen);}
           printf("请输入英语成绩(0~100):");/*输入英语成绩,成绩应在0-100*/
           scanf("%f",&p1->yingyu);
        while(p1->yingyu<0||p1->yingyu>100)
     {getchar();
      printf("输入错误,请重新输入英语成绩");/*输入错误,重新输入英语成绩直到正确为止*/
               scanf("%f",&p1->yingyu);}
           printf("请输入数学成绩(0~100):");/*输入数学成绩,成绩应在0-100*/
           scanf("%f",&p1->shuxue);
        while(p1->shuxue<0||p1->shuxue>100)
     {getchar();
      printf("输入错误,请重新输入数学成绩");
                scanf("%f",&p1->shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/
         head=NULL;
     while(p1->number!=0)
      {
        n=n+1;
     if(n==1) 
      head=p1;
     else
     
        p2->next=p1;
        p2=p1;
        p1=(score *)malloc(LEN);
        printf("请输入学生资料,输0退出!\n");
    repeat2:printf("请输入学生学号(学号应大于0):");
          scanf("%d",&p1->number);/*输入学号,学号应大于0*/
      
       while(p1->number<0)
       {getchar();
        printf("输入错误,请重新输入学生学号:");
           scanf("%d",&p1->number);}     
       /*输入学号为字符或小于0时,程序报错,提示重新输入学号*/
      if(p1->number==0)
       goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/
      else
      {
      p3=head;
      if(n>0)
       {for(i=0;i<n;i++)
          {if(p1->number!=p3->number)
        p3=p3->next;
        else
        {printf("学号重复,请重输!\n");
         goto repeat2;
         /*当输入的学号已经存在,程序报错,返回前面重新输入*/
        }
        }    
       }         
     
      }
      printf("请输入学生姓名:");
           scanf("%s",&p1->name);/*输入学生姓名*/
         printf("请输入语文成绩(0~100):");
           scanf("%f",&p1->yuwen);/*输入语文成绩,成绩应在0-100*/
         while(p1->yuwen<0||p1->yuwen>100)
      {getchar();
       printf("输入错误,请重新输入语文成绩");
             scanf("%f",&p1->yuwen);}/*输入错误,重新输入语文成绩直到正确为止*/
         printf("请输入英语成绩(0~100):");
          scanf("%f",&p1->yingyu);/*输入英语成绩,成绩应在0-100*/
         while(p1->yingyu<0||p1->yingyu>100)
      {getchar();
       printf("输入错误,请重新输入英语成绩");
             scanf("%f",&p1->yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/
          printf("请输入数学成绩(0~100):");
           scanf("%f",&p1->shuxue);/*输入数学成绩,成绩应在0-100*/
         while(p1->shuxue<0||p1->shuxue>100)
      {getchar();
       printf("输入错误,请重新输入数学成绩");
             scanf("%f",&p1->shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/
        
     }

    [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] 下一页