【c语言学生管理系统】c语言学生成绩管理系统设计学生成绩信息包括:学号...

发布时间:2021-04-02 16:49:33

c语言 学生成绩管理系统设计学生成绩信息包括:学号,姓名,三门课程成绩(数学、英语和计算机)等。主要功能:(1) 计算各个学生的总分及平均分,并按平均分排出名次。(2) 统计全班学生平均分成绩,输出60分以下、60~79、80~89、90分以上各分数人数。(3) 能按学号查询学生成绩,并能输出学生的成绩单。(4) 输出不及格科目及学生名单。(5) 选做:在屏幕输出优等生名单(学号,三门课程成绩,平均成绩,名次),优等生必须满足下列条件:1)平均成绩大于90分;或平均分大于85分且至少有一门功课为100分;或者平均分大于85分且至少两门课程成绩为95分以上;2) 名次在前三名; 3) 每门功课及格以上;要求:系统以菜单方式工作。

网友回答

【答案】 希望对你有所帮助。
  #includestdio.h
  #includestdlib.h
  #includestring.h
  #define N 3
  typedef struct z1
  {
   char no[11];
   char name[15];
   int score[N];
   float sum;
   float average;
   int order;
   struct z1 *next;
  }STUDENT;
  STUDENT *init();
  STUDENT *create();
  STUDENT *del(STUDENT *h);
  void print(STUDENT *h);
  void search1(STUDENT *h);
  void search2(STUDENT *h);
  STUDENT *insert(STUDENT *h);
  void sort(STUDENT *h);
  void save(STUDENT *h);
  void tongji(STUDENT *h);
  int menu_select();
  STUDENT *load();
  void inputs(char *prompt,char *s,int count);
  STUDENT *load();
  main()
  {
   int i;
   STUDENT *head;
   head=init();
   for(;;)
   {
   switch(menu_select())
   {
   case 0:head=init();break;
   case 1:head=create();break;
   case 2:head=insert(head);break;
   case 3:save(head);break;
   case 4:print(head);break;
   case 5:search1(head);break;
   case 6:head=del(head);break;
   case 7:sort(head);break;
   case 8:tongji(head);break;
   case 9:search2(head);break;
   case 10:exit(0);
   }
   }
  }
  int menu_select()
  {
   char *menu[]={************菜单************,
   0. 初始化链表,
   1. 输入学生成绩,
   2. 插入学生成绩,
   3. 保存学生记录,
   4. 显示学生记录,
   5. 按学号查找学生信息,
   6. 删除指定学号的学生信息,
   7. 按某一门课对学生成绩排序,
   8. 统计某门课程的学生成绩,
   9. 按姓名查找学生信息,
   10. 退出系统};
   char s[3];
   int c,i;
   for(i=0;i10);
   return c;
  }
  STUDENT *init()
  {
   return NULL;
  }
  STUDENT *create()
  {
   int i;int s;
   STUDENT *h=NULL,*info;
   for(;;)
   {
   info=(STUDENT *)malloc(sizeof(STUDENT));
   if(!info)
   {
   printf(\n内存不足);
   return NULL;
   }
   inputs(输入学号:,info->no,11);
   if(info->no[0]=='@')break;
   inputs(输入姓名:,info->name,15);
   printf(开始输入%d门课的成绩\n,N);
   s=0;
   for(i=0;iscore[i]);
   if(info->score[i]>100||info->score[i]score[i]>100||info->score[i]score[i];
   }
   info->sum=s;
   info->average=(float)s/N;
   info->order=0;
   info->next=h;
   h=info;
   }
   return h;
  }
  void inputs(char *prompt,char *s,int count)
  {
   char p[255];
   do
   {
   printf(prompt);
   scanf(%s,p);
   if(strlen(p)>count)
   printf(\n太长了!\n);
   }while(strlen(p)>count);
   strcpy(s,p);
  }
  void print(STUDENT *h)
  {
   int i=0;
   STUDENT *p;
   p=h;
   printf(\n\n\n***********************学生***********************\n);
   printf(|序号|学号 | 姓名 | 数学 | 英语 |计算机 | 总分 |平均分 |名次 |\n);
   printf(|---|-------|--------|----|----|----|------|------|---|\n);
   while(p!=NULL)
   {
   i++;
   printf(|%3d |%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n,i,p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
   p=p->next;
   }
   printf(***********************end***********************\n);
  }
  STUDENT *del(STUDENT *h)
  {
   STUDENT *p,*q;
   char s[11];
   printf(请输入要删除的学生的学号\n);
   scanf(%s,s);
   q=p=h;
   while(strcmp(p->no,s)&&p!=NULL)
   {
   q=p;
   p=p->next;
   }
   if(p==NULL)
   printf(\n链表中没有学号为%s的学生\n,s);
   else
   {
   printf(\n\n\n***********************找到了***********************\n);
   printf(|学号 | 姓名 | 数学 | 英语 | 计算机 | 总分 | 平均分 | 名次 |\n);
   printf(|----------|----------|----|----|----|------|------|---|\n);
   printf(|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n,p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
   printf(***********************end***********************\n);
   printf(请按任意键删除\n);
   getchar();
   if(p==h)
   h=p->next;
   else q->next=p->next;
   free(p);
   printf(\n已经删除学号为%s的学生\n,s);
   printf(不要忘了保存数据\n);
   }
   return h;
  }
  void search1(STUDENT *h)
  {
   STUDENT *p;
   char s[11];
   printf(请输入你要查找的同学的学号\n);
   scanf(%s,s);
   p=h;
   while(strcmp(p->no,s)&&p!=NULL)
   p=p->next;
   if(p==NULL)
   printf('n没有学号为%s的学生\n,s);
   else
   {
   printf(\n\n\n***********************找到了***********************\n);
   printf(|学号 | 姓名 | 数学 | 英语 | 计算机 | 总分 | 平均分 | 名次 |\n);
   printf(|----------|-----------|----|----|----|------|------|---|\n);
   printf(|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n,p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
   printf(***********************end***********************\n);
   }
  }
  void search2(STUDENT *h)
  {
   STUDENT *p;
   char s[11];
   printf(请输入你要查找的同学的姓名\n);
   scanf(%s,s);
   p=h;
   while(strcmp(p->name,s)&&p!=NULL)
   p=p->next;
   if(p==NULL)
   printf(\n没有姓名为%s的学生\n,s);
   else
   {
   printf(\n\n\n***********************找到了***********************\n);
   printf(|学号 | 姓名 | 数学 | 英语 | 计算机 | 总分 | 平均分 | 名次 |\n);
   printf(|----------|-----------|----|----|----|------|------|---|\n);
   printf(|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|\n,p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
   printf(***********************end***********************\n);
   }
  }
  STUDENT *insert(STUDENT *h)
  {
   STUDENT *p,*q,*info;
   char s[11];
   int s1,i;
   printf(请输入插入点的学生学号\n);
   scanf(%s,s);
   printf(\n请输入新的学生信息\n);
   info=(STUDENT *)malloc(sizeof(STUDENT));
   if(!info)
   {
   printf(\n内存不足!);
   return NULL;
   }
   inputs(输入学号:,info->no,11);
   inputs(输入姓名:,info->name,15);
   printf(请输入%d门课的分数\n,N);
   s1=0;
   for(i=0;iscore[i]);
   if(info->score[i]>100||info->score[i]score[i]>100||info->score[i]score[i];
   }
   info->sum=s1;
   info->average=(float)s1/N;
   info->order=0;
   info->next=NULL;
   p=h;
   q=h;
   while(strcmp(p->no,s)&&p!=NULL)
   {q=p;p=p->next;}
   if(p==NULL)
   if(p==h)
   h=info;
   else q->next=info;
   else
   if(p==h)
   {
   info->next=p;
   h=info;
   }
   else
   {
   info->next=p;
   q->next=info;
   }
   printf(\n已经插入了%s这个学生\n,info->name);
   printf(----不要忘了存盘啊--\n);
   return(h);
  }
  void save(STUDENT *h)
  {
   FILE *fp;
   STUDENT *p;
   char outfile[10];
   printf(请输入保存文件的文件名,例如 c:\\f1\\te.txt:\n);
   scanf(%s,outfile);
   if((fp=fopen(outfile,wb))==NULL)
   {
   printf(不能打开文件\n);
   exit(1);
   }
   printf(\n正在保存......\n);
   p=h;
   while(p!=NULL)
   {
   fwrite(p,sizeof(STUDENT),1,fp);
   p=p->next;
   }
   fclose(fp);
   printf(------保存成功!!!------\n);
  }
  void sort(STUDENT *h)
  {
   int i=0,j;
   STUDENT *p,*q,*t,*h1;
   printf(请输入要按哪门课程的编号来排序:(1.数学 2.英语 3.计算机)\n);
   scanf(%d,&j);
   h1=h->next;
   h->next=NULL;
   while(h1!=NULL)
   {
   t=h1;
   h1=h1->next;
   p=h;
   q=h;
   while(t->score[j]score[j]&&p!=NULL)
   {
   q=p;
   p=p->next;
   }
   if(p==q)
   {
   t->next=p;
   h=t;
   }
   else
   {
   t->next=p;
   q->next=t;
   }
   }
   p=h;
   while(p!=NULL)
   {
   i++;
   p->order=i;
   p=p->next;
   }
   print(h);
   printf(排序成功!!!\n);
  }
  void tongji(STUDENT *h)
  {
   STUDENT *p;
   int a,b,i;
   printf(请输入课程编号\n);
   scanf(%d,&i);
   printf(请输入分数段:\n);
   scanf(%d,%d,&a,&b);
   p=h;
   while(p!=NULL)
   {
   printf(\n\n\n***********************找到了***********************\n);
   if(p->score[i]>=a&&p->score[i]no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
   }
   p=p->next;
   }
   printf(***********************end***********************\n);
  }
以上问题属网友观点,不代表本站立场,仅供参考!