⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 koo.c

📁 一个学生成绩管理系统的要求和在此要求下的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
      printf(" |----------|---------------|---|----|----|----|----|----|--------|-------|\n");
      printf(" |%-10s|%-15s| %1s |%4d|%4d|%4d|%4d|%4d| %4.2f | %4.2f |\n", p->no,p->name,p->sex,p->age,p->score[0],p->score[1],
p->score[2],p->score[3],p->sum,p->average);
      printf(" ************************************end************************************\n");
      getch();      /*压任一键后,开始删除*/
      if(p==h)    /*如果p==h,说明被删结点是头结点*/
     h=p->next;     /*修改头指针指向下一条记录*/
      else
     q->next=p->next; /*不是头指针,将p的后继结点作为q的后继结点*/
      free(p);          /*释放p所指结点空间*/
      printf("\n have deleted No. %s student\n",s);
      printf("Don't forget save\n");/*提示删除后不要忘记保存文件*/
   }
   return(h);      /*返回头指针*/
}
/*查找记录*/
void search(STUDENT *h)
{
   STUDENT *p;    /*  移动指针*/
   char s[15];    /*存放姓名的字符数组*/
   clrscr();    /*清屏幕*/
   printf("Please enter name for searching\n");
   scanf("%s",s);    /*输入姓名*/
   p=h;    /*将头指针赋给p*/
   while(strcmp(p->name,s)&&p!=NULL)  /*当记录的姓名不是要找的,或指针不为空时*/
   p=p->next;     /*移动指针,指向下一结点*/
   if(p==NULL)         /*如果指针为空*/
      printf("\nlist No. %s student\n",s);   /*显示没有该学生*/
   else           /*显示找到的记录信息*/
   {
      printf("\n\n\n **********************************STUDENT*************************************\n");
      printf(" |    No.   |      name     |sex|age |sc1 |sc2 |sc3 |sc4 |   sum  |  ave  |\n");
      printf(" |----------|---------------|---|----|----|----|----|----|--------|-------|\n");
      printf(" |%-10s|%-15s| %1s |%4d|%4d|%4d|%4d|%4d| %4.2f | %4.2f |\n", p->no,p->name,p->sex,p->age,p->score[0],p->score[1],
p->score[2],p->score[3],p->sum,p->average);
      printf(" ************************************end***************************************\n");
   }
}





/*****插入记录*****/
STUDENT  *insert(STUDENT *h)
{
   STUDENT *p,*q,*info; /*p指向插入位置,q是其前驱,info指新插入记录*/
   char s[11];  /*保存插入点位置的学号*/
   int s1,i;
   printf("Please enter location  before the no\n");
   scanf("%s",s);   /*输入插入点学号*/
   printf("\nPlease new record\n");      /*提示输入记录信息*/
   info=(STUDENT *)malloc(sizeof(STUDENT));   /*申请空间*/
   if(!info)
   {
      printf("\nout of memory");   /*如没有申请到,内存溢出*/
      return NULL;             /*返回空指针*/
   }
   inputs("Enter No.:",info->no,9); /*输入学号*/
   inputs("Enter name:",info->name,15); /*输入姓名*/
   inputs("Enter the sex M(ale) or F(emale):",info->sex,2);
     do{
        printf("Enter the age of the student:");
        scanf("%d",&info->age);
        if(info->age>30||info->age<0)
        printf("\x07 AGE ERROR!!TYPE AGAIN!\n");
       }while(info->age<0||info->age>30);
   printf("Please input %d score \n",N);  /*提示输入分数*/
   s1=0;    /*保存新记录的总分,初值为0*/
   for(i=0;i<N;i++)    /*N门课程循环N次输入成绩*/
   {
      do{        /*对数据进行验证,保证在0~100之间*/
     printf("score%d:",i+1);
     scanf("%d",&info->score[i]);
     if(info->score[i]>100||info->score[i]<0)
        printf("bad data,repeat input\n");
      }while(info->score[i]>100||info->score[i]<0);
      s1=s1+info->score[i];    /*计算总分*/
   }
   info->sum=s1;    /*将总分存入新记录中*/
   info->average=(float)s1/N;  /*计算均分*/
   info->order=0;         /*名次赋值0*/
   info->next=NULL;     /*设后继指针为空*/
   p=h;               /*将指针赋值给p*/
   q=h;             /*将指针赋值给q*/
   while(strcmp(p->no,s)&&p!=NULL)    /*查找插入位置*/
   {
      q=p;                 /*保存指针p,作为下一个p的前驱*/
      p=p->next;          /*将指针p后移*/
   }
   if(p==NULL)      /*如果p指针为空,说明没有指定结点*/
      if(p==h)      /*同时p等于h,说明链表为空*/
     h=info;   /*新记录则为头结点*/
      else
     q->next=info;  /*p为空,但p不等于h,将新结点插在表尾*/
   else
      if(p==h)     /*p不为空,则找到了指定结点*/
      {
     info->next=p; /*如果p等于h,则新结点插入在第一个结点之前*/
     h=info;    /*新结点为新的头结点*/
      }
      else
      {
     info->next=p;   /*不是头结点,则是中间某个位置,新结点的后继为p*/
     q->next=info;  /*新结点作为q的后继结点*/
      }
   printf("\n ----Have inserted %s student----\n",info->name);    printf("---Don't forget save---\n");     /*提示存盘*/
   return(h);         /*返回头指针*/
}





/*****保存数据到文件*****/
void save(STUDENT *h)
{
   FILE *fp;         /*定义指向文件的指针*/
   STUDENT *p;    /* 定义移动指针*/
   char outfile[10];  /*保存输出文件名*/
   printf("Enter outfile name,for example c:\\f1\\example.txt:\n"); /*提示文件名格式信息*/
   scanf("%s",outfile);
   if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件,如没有则建立*/
   {
      printf("Can not open file\n");
      exit(1);
   }
   printf("\nSaving file......\n");  /*打开文件,提示正在保存*/
   p=h;                    /*移动指针从头指针开始*/
   while(p!=NULL)        /*如p不为空*/
   {
      fwrite(p,sizeof(STUDENT),1,fp);/*写入一条记录*/
      p=p->next;        /*指针后移*/
   }
   fclose(fp);      /*关闭文件*/
   printf("-----save success!!-----\n");  /*显示保存成功*/
}





/*****读文件读取数据******/
STUDENT *load()
{
   STUDENT *p,*q,*h=NULL;    /*定义记录指针变量*/
   FILE *fp;            /* 定义指向文件的指针*/
   char infile[10];       /*保存文件名*/
   printf("Enter infile name,for example c:\\f1\\te.txt:\n");   scanf("%s",infile);           /*输入文件名*/
   if((fp=fopen(infile,"rb"))==NULL)   /*打开一个二进制文件,为读方式*/
   {
      printf("can not open file\n");    /*如不能打开,则结束程序*/
      exit(1);
   }
   printf("\n -----Loading file!-----\n");
   p=(STUDENT *)malloc(sizeof(STUDENT));   /*申请空间*/
   if(!p)
   {
      printf("out of memory!\n");    /*如没有申请到,则内存溢出*/
      return h;       /*返回空头指针*/
   }
   h=p;         /*申请到空间,将其作为头指针*/
   while(!feof(fp))  /*循环读数据直到文件尾结束*/
   {
      if(1!=fread(p,sizeof(STUDENT),1,fp))
     break;  /*如果没读到数据,跳出循环*/
      p->next=(STUDENT *)malloc(sizeof(STUDENT));  /*为下一个结点申请空间*/
      if(!p->next)
      {
     printf("out of memory!\n");  /*如没有申请到,则内存溢出*/
     return h;
      }
      q=p;   /*保存当前结点的指针,作为下一结点的前驱*/
      p=p->next;   /*指针后移,新读入数据链到当前表尾*/
   }
   q->next=NULL;   /*最后一个结点的后继指针为空*/
   fclose(fp);       /*关闭文件*/
   printf("---You have success read data from file!!!---\n");
   return h;   /*返回头指针*/
}





   





/*****计算各科总成绩和平均成绩*****/
void computer(STUDENT *h)
{
   STUDENT *p;
   int i=0;
   long s1=0;
   long s2=0;
   long s3=0;
   long s4=0;
   long sall=0;
   float ave1=0;
   float ave2=0;
   float ave3=0;
   float ave4=0;
   float aall=0;
   p=h;
   while(p!=NULL)
    {
        s1+=p->score[0];
        s2+=p->score[1];
        s3+=p->score[2];
        s4+=p->score[3];
        sall+=p->sum;
        i++;
        p=p->next;
    }
   ave1=(float)s1/i;
   ave2=(float)s2/i;
   ave3=(float)s3/i;
   ave4=(float)s4/i;
   aall=(float)sall/i;

   clrscr();
   printf("\n\\n\n\x0f\x0f All students` sum score and average score is average is\x0f\x0f\x0f\n\n\n\n\n");
   printf("| type |   sc1   |   sc2   |   sc3   |   sc4   |   all   |\n");
   printf("|------|---------|---------|---------|---------|---------|\n");
   printf("| aver |  %3.2f  |  %3.2f  |  %3.2f  |  %3.2f  | %4.2f |\n",ave1,ave2,ave3,ave4,aall);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -