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

📄 student.c

📁 学生管理系统!&#61548 各模块的功能 1.各种基本数据的录入。如:学生基本情况录入。 2.各种基本数据的修改。即:允许对录入的数据重新进行编辑、修改。 3.各种基本数据的插入。如:在
💻 C
📖 第 1 页 / 共 2 页
字号:
   if (j==1) 
   { 
    printf("please enter name for search\n");
    scanf("%s",s);    /*输入姓名*/
    p=h;    /*将头指针赋给p*/
    printf("****************************have found***************************\n");
    printf("|    no    |      name      | sex | age |course1|course2|course3|\n");
    do
    {
     while(strcmp(p->name[0],s[0])&&p!=NULL)  /*当记录的姓名不是要找的,或指针不为空时*/
     p=p->next;     /*移动指针,指向下一结点*/
     if(p==NULL)         /*如果指针为空*/
       printf("\nlist no %s student\n",s);   /*显示没有该学生*/
     else           /*显示找到的记录信息*/
     {
      printf("|----------|----------------|-----|-----|-------|-------|-------|\n");
      printf("|%-10s|%-16s|%5s|%5d|%7d|%7d|%7d|\n",p->no,p->name,p->sex,p->age,p->xuanxiu[1].score,p->xuanxiu[2].score,p->xuanxiu[3].score);
      p=p->next; 
     }
    }while(p!=NULL);
    printf("******************************end********************************\n");
   }
   if (j==2) 
   { 
    printf("please enter age for search\n");
    scanf("%d",&k);    
    p=h;    /*将头指针赋给p*/
    printf("***********************have found*************************\n");
    printf("|    no    |      name      | sex | age |course1|course2|course3|\n");
    do
    {
     while((p->age-k)>=0&&p!=NULL)  /*当记录的姓名不是要找的,或指针不为空时*/
     p=p->next;     /*移动指针,指向下一结点*/
     if(p==NULL)         /*如果指针为空*/
       printf("\nlist no %s student\n",s);   /*显示没有该学生*/
     else           /*显示找到的记录信息*/
     {
      printf("|----------|----------------|-----|-----|-------|-------|-------|\n");
      printf("|%-10s|%-16s|%5s|%5d|%7d|%7d|%7d|\n",p->no,p->name,p->sex,p->age,p->xuanxiu[1].score,p->xuanxiu[2].score,p->xuanxiu[3].score);
      p=p->next; 
     }
    }while(p!=NULL);
    printf("******************************end********************************\n");
   }
   getch();
}
/*统计每个学生各门功课的平均成绩*/
void sort(STUDENT *h)
{
   int i=0;                  /*保存名次*/
   STUDENT *p,*q,*t,*h1;   /*定义临时指针*/
   clrscr();
   h1=h->next;           /*将原表的头指针所指的下一个结点作头指针*/
   h->next=NULL;        /*第一个结点为新表的头结点*/
   while(h1!=NULL)    /*当原表不为空时,进行排序*/
   {
      t=h1;            /*取原表的头结点*/
      h1=h1->next;     /*原表头结点指针后移*/
      p=h;           /*设定移动指针p,从头指针开始*/
      q=h;         /*设定移动指针q做为p的前驱,初值为头指针*/
      while(t->average<p->average&&p!=NULL)  /*作总分比较*/
      {
	 q=p;            /*待排序点值小,则新表指针后移*/
	 p=p->next;
      }
      if(p==q)      /*p==q,说明待排序点值大,应排在首位*/
      {
	 t->next=p;     /*待排序点的后继为p*/
	 h=t;         /*新头结点为待排序点*/
      }
      else    /*待排序点应插入在中间某个位置q和p之间,如p为空则是尾部*/
      {
	 t->next=p;   /*t的后继是p*/
	 q->next=t;    /*q的后继是t*/
      }
   }
   p=h;               /*已排好序的头指针赋给p,准备填写名次*/
   while(p!=NULL)  /*当p不为空时,进行下列操作*/
   {
      i++;       /*结点序号*/
      p->order=i;   /*将名次赋值*/
      p=p->next;   /*指针后移*/
   }
   printf("*******************************sort sucess!!!*******************************\n");
   printf("|order|    no    |      name      | average |course1|course2|course3|  sum  |\n");
   p=h;
   while(p!=NULL)
   {
     printf("|-----|----------|----------------|---------|-------|-------|-------|-------|\n");
     printf("|%-5d|%-10s|%-16s|%9.2f|%7d|%7d|%7d|%7d|\n",p->order,p->no,p->name,p->average,p->xuanxiu[1].score,p->xuanxiu[2].score,p->xuanxiu[3].score,p->sum);
     p=p->next;
   }
   printf("*************************************end***********************************\n");
}
/*统计并输出各班各门功课的平均成绩和总平均成绩*/
void total(STUDENT *h)
{
   STUDENT *p,*q;   /*定义临时指针变量*/
   char sno[9],qno[9],*ptr;    /*保存班级号的*/
   float s1,s2,s3,ave;        /*保存总分和均分*/
   float i;       /*保存班级人数*/
   clrscr();    /*清屏*/
   printf("******************Total****************\n");
   printf("|  class  |course1|course2|course3|average|\n");
   p=h;       /*从头指针开始*/
   while(p!=NULL)  /*当p不为空时做下面的处理*/
   {
      memcpy(sno,p->no,7);  /*从学号中取出班级号*/
      sno[7]='\0';          /*做字符串结束标记*/
      q=p->next;        /*将指针指向待比较的记录*/
      s1=p->xuanxiu[1].score;      /*当前班级的总分初值为该班级的第一条记录总分*/
      s2=p->xuanxiu[2].score;
      s3=p->xuanxiu[3].score;
      ave=p->average;  /*当前班级的均分初值为该班级的第一条记录均分*/
      i=1.;          /*统计当前班级人数*/
      while(q!=NULL)   /*内循环开始*/
      {
	 memcpy(qno,q->no,7);   /*读取班级号*/
	 qno[7]='\0';     /*做字符串结束标记*/
	 if(strcmp(qno,sno)==0)  /*比较班级号*/
	 {
	    s1+=q->xuanxiu[1].score;     /*累加总分*/
            s2+=q->xuanxiu[2].score;
            s3+=q->xuanxiu[3].score;
 	    ave+=q->average; /*累加均分*/
	    i++;         /*累加班级人数*/
	    q=q->next;   /*指针指向下一条记录*/
	 }
	 else
	     break;  /*不是一个班级的结束本次内循环*/
      }
      printf("|%9s|%7.2f|%7.2f|%7.2f|%7.2f|\n",sno,s1,s2,s3,ave/i);
      if(q==NULL)
	 break;   /*如果当前指针为空,外循环结束,程序结束*/
      else
	 p=q;   /*否则,将当前记录作为新的班级的第一条记录开始新的比较*/
   }
   printf("-------------------------------------------\n");
}
/*统计并输出每个同学已修学分*/
void tjxf(STUDENT *h)
{
 STUDENT *p;
 p=h;
 printf("***************xue fen tong ji***************\n");
 printf("|    no    |      name      | yi xiu xue fen |\n");
 while(p!=NULL)
 {
   printf("|%-10s|%-16s|%16d|\n",p->no,p->name,p->xuanxiu[1].course+p->xuanxiu[2].course+p->xuanxiu[3].course);
   printf("|----------|----------------|----------------|\n");
   p=p->next;
 }
}
/*列出不及格学生清单*/ 
void bjg(STUDENT *h)
{
 STUDENT *p;
 int i;
 p=h;
 clrscr();
 printf("Please change the course for not pass to list!\n");
 printf("1--course1\n");
 printf("2--course2\n");
 printf("3--course3\n");
 scanf("%d",&i);
 printf("********course1 not pass list********\n");
 if (i==1)
 {
  printf("|    no    |      name      |course1|\n");
  do
    {
     while((p->xuanxiu[1].score-60)>=0&&p!=NULL)  
     p=p->next;     
     if(p==NULL)        
       printf(" no  student\n");  
     else         
     {
      printf("|----------|----------------|-------|\n");
      printf("|%-10s|%-16s|%7d|\n",p->no,p->name,p->xuanxiu[1].score);
      p=p->next; 
     }
    }while(p!=NULL);
 }
 if (i==2)
 {
  printf("|    no    |      name      |course2|\n");
  do
    {
     while((p->xuanxiu[2].score-60)>=0&&p!=NULL)  
     p=p->next;     
     if(p==NULL)        
       printf("\n no  student\n");  
     else         
     {
      printf("|----------|----------------|-------|\n");
      printf("|%-10s|%-16s|%7d|\n",p->no,p->name,p->xuanxiu[2].score);
      p=p->next; 
     }
    }while(p!=NULL);
 }
 if (i==3)
 {
  printf("|    no    |      name      |course3|\n");
  do
    {
     while((p->xuanxiu[3].score-60)>=0&&p!=NULL)  
     p=p->next;     
     if(p==NULL)        
       printf("\n no  student\n");  
     else         
     {
      printf("|----------|----------------|-------|\n");
      printf("|%-10s|%-16s|%7d|\n",p->no,p->name,p->xuanxiu[3].score);
      p=p->next; 
     }
    }while(p!=NULL);
 }
 printf("******************end****************\n");
}
/****保存文件****/
void save(STUDENT *h)
{
   FILE *fp;         /*定义指向文件的指针*/
   STUDENT *p;    /* 定义移动指针*/
   char outfile[10];  /*保存输出文件名*/
   printf("Enter outfile name,for example c:\\f1\\te.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;   /*返回头指针*/
}
/*修改*/
STUDENT *revise(STUDENT *h)
{
 int i,j,k,l; 
 int s;
 char xh[11];
 STUDENT *p;
 p=h;
 printf("enter xue hao for xiu gai!\n");
 scanf("%s",xh);
 while(strcmp(p->no,xh)&&p!=NULL)   /*当记录的学号不是要找的,或指针不为空时*/
       p=p->next;      /*将p指针指向下一条记录*/
 if(p==NULL)     /*如果p为空,说明链表中没有该结点*/
   printf("\nlist no %s student\n",xh);
 else       /*p不为空,显示找到的记录信息*/
   {
      printf("***************have found****************\n");
      printf("|    no    |      name      | sex | age |\n");
      printf("|----------|----------------|-----|-----|\n");
      printf("|%-10s|%-16s|%5s|%5d|\n",p->no,p->name,p->sex,p->age);
      printf("*******************end*******************\n");
      getch();
      printf("Please enter new infomation!\n");
    for(;;)
    {
      inputs("enter no(enter @ return):",p->no,11);   /*输入学号并校验*/
      inputs("enter name:",p->name,15); /*输入姓名,并进行校验*/
      inputs("enter sex:",p->sex,1);
      printf("enter age:");
      scanf("%d",&p->age);
      for(k=1;k<10;k++)
      {
        p->xuanxiu[k].score=0;
        p->xuanxiu[k].course=0;
        for(l=1;l<10;l++)
        strcpy(p->xuanxiu[l].chongxiu[l].chengji,"0");
      }
      for(i=1;;)
      {
       printf("enter di %d men xuan xiu ke bian hao(enter @ return):",i);
       scanf("%s",p->xuanxiu[i].clsnum);
       if(p->xuanxiu[i].clsnum[0]=='@') break;
       inputs("enter xuan xiu ke ming cheng:",p->xuanxiu[i].clsnam,16);
       printf("enter shi fou chong xiu(n or y):");
       scanf("%s",&p->xuanxiu[i].rebuild);
       printf("enter xuan xiu ke cheng ji:");
       scanf("%d",&p->xuanxiu[i].score);
       printf("enter xuan xiu ke xue fen:");
       scanf("%d",&p->xuanxiu[i].course);
       for(j=1;;)
       {
        printf("enter di %d chi chong xiu xue qi(such as:2007/1(2);enter @ return):",j);
        scanf("%s",p->xuanxiu[i].chongxiu[j].xueqi);
        if(p->xuanxiu[i].chongxiu[j].xueqi[0]=='@') break;
        printf("enter chong xiu cheng ji:");
        scanf("%s",&p->xuanxiu[i].chongxiu[j].chengji);
        j++;
       }
       i++;
      }
      printf("if want to end enter @\n");
      if(getch()=='@') break;
    }
   }
 return h;
}
      
  
 

⌨️ 快捷键说明

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