c语言学生成绩管理系统(增、删、查、改、排序、分析优秀及格率等)(二)

简介: 三、总程序清单

三、总程序清单


#include<stdio.h>
#include<stdlib.h>
#include"stdd.h"
#include<string.h>
#include"cjfx.h"
 int main()
 {
  int i,j=1;
  struct node*head;
  last=NULL;
  head=(struct node*)malloc(sizeof(struct node));
  head->next =NULL;
  printf("\t\t---欢迎使用学生成绩管理系统---\n");
  while(j){
    i= menu();
    switch(i){
      case 0:
        j=0; 
        printf("退出成功");
        break;
      case 1:
        head=input(head);system("pause");break;//创建节点函数
      case 2:
        head=add(head);system("pause");break;//增加学生信息及成绩
      case 3:
        find(head);system("pause");break;//查询学生信息及成绩
      case 4:
        del(head);system("pause");break;    //删除学生信息及成绩;
      case 5:
        head=change(head);system("pause");break;//05修改学生信息和成绩
      case 6:
         output(head);system("pause");break;//浏览学生信息及成绩
      case 7:
         file(head);system("pause");break;//(自己创新)保存到桌面
      case 8:
         main1(head);system("pause");break;//(创新)学生成绩分析
      default:break;
    }
    printf("\n");
    printf("\t\t——————————————\n");
  }//while结束
  system("pause");
 }


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node1
{
  int date; //学号
  int me_class;   //班级
  double yuwen;//语文成绩
  double shuxue;//数学成绩
  double yingyu;//英语成绩
  double num;     //总分
  double avg;     //平均分
  char name[20];    //姓名   
  char kemu[20];    //所选科目
}stu1[50],stu2[50],t;
int si1=0,si2=0;
void lbzsz(struct node*head);
void OutPx(struct node*head,struct node1 stu[50],int si,int n);//输出成绩排序//输出成绩统计
void Outtj(struct node1 stu[50],int si,int n);//输出成绩统计
int cjmenu(){
   int i=1;
    printf("\t\t 1.1班成绩排序\n");
    printf("\t\t 2.2班成绩排序\n");
    printf("\t\t 3.1班成绩统计\n");
    printf("\t\t 4.2班成绩统计\n");
    printf("\t\t 0.退出\n");
    printf("\t\t-----------------------------\n");
    printf("\t请选择序号\n");
    scanf_s("%d",&i);
    while(1)
    {
      if(i<0||i>4)
      {
        printf("***没有此选项。请重新选择***\n");
        system("pause");
      }
      break;
    }
  return i;
}
void main1(struct node*head)
{
  int i,j=1;
  printf("\t\t---成绩分析系统---\n");
  while(j){
    i= cjmenu();
     lbzsz(head);
    switch(i){
      case 0:
        j=0; 
        printf("退出成功");
        break;
      case 1:
         OutPx(head,stu1,si1,1);system("pause");break;system("pause");
      case 2:
        OutPx(head,stu2,si2,2);system("pause");break;system("pause");
      case 3:
        Outtj(stu1,si1,1);system("pause");break;system("pause");
      case 4:
        Outtj(stu2,si2,2);system("pause");break;system("pause");
      default:break;
    }
    printf("\n");
    printf("\t\t——————————————\n");
  }//while结束
 }
//链表存入两个数组
void lbzsz(struct node*head)
{
  struct node*p;
  p=head;
  if(head->next==NULL)
    {printf("没有数据请先存入数据");}
  if(head->next)
  {
    for(si1=0,si2=0;p->next !=NULL;)
    {
      p=p->next ;
      if(p->me_class %2==0)
      {
        stu2[si2].avg =p->avg ;//平均分
        stu2[si2].date=p->date;//学号
        strcpy(stu2[si2].kemu,p->kemu);//字符串要用strcpy
        stu2[si2].me_class=p->me_class;
        strcpy(stu2[si2].name,p->name);
        stu2[si2].num=p->num;
        stu2[si2].shuxue=p->shuxue;
        stu2[si2].yingyu=p->yingyu;
        stu2[si2].yuwen=p->yuwen;
        si2++;
      }
      else
      {
        stu1[si1].avg =p->avg ;//平均分
        stu1[si1].date=p->date;//学号
        strcpy(stu1[si1].kemu,p->kemu);
        stu1[si1].me_class=p->me_class;
        strcpy(stu1[si1].name,p->name);
        stu1[si1].num=p->num;
        stu1[si1].shuxue=p->shuxue;
        stu1[si1].yingyu=p->yingyu;
        stu1[si1].yuwen=p->yuwen;
        si1++;
      }
    }
  }
  /******************************************************/
}//链表存入两个数组
//输出成绩排序
void OutPx(struct node*head,struct node1 stu[],int si,int n){//stu[50]数组,int si长度,int n班级。
  int j,k=0;
  int i,h;//控制学科。
   struct xueke
  {
    char aa[15];
   }km[4]={{"语文"},{"数学"},{"英语"},{"总成绩"}};
  lbzsz(head);
  printf("\t\t%d班的成绩排序\n",n);
  for(i=0,h=1;i<4;i++,h++){//for1
    for(j=0;j<si;j++){//for2
      for(k=0;k<si-1-j;k++){//for3
        if(h==1){
          if(stu[k].yuwen<stu[k+1].yuwen){
          t=stu[k+1];
          stu[k+1] =stu[k] ;
          stu[k]=t;
          }
        }
        if(h==2){
          if(stu[k].shuxue<stu[k+1].shuxue){
          t =stu[k+1];
          stu[k+1] =stu[k] ;
          stu[k] =t ;
          }
        }
        if(h==3){
          if(stu[k].yingyu<stu[k+1].yingyu){
          t=stu[k+1];
          stu[k+1] =stu[k] ;
          stu[k] =t ;
          }
        }
        if(h==4){
          if(stu[k].num  <stu[k+1].num  ){
          t =stu[k+1];
          stu[k+1] =stu[k] ;
          stu[k] =t ;
          }
        }
      }//for3结束
    }//for2结束
    printf("%s排名\n学号\t姓名\t班级\t%s成绩\t排名\n",km[i].aa,km[i].aa);
    if(h==1){
      for(j=0,k=1;j<si;j++,k++)
      printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].yuwen,k);
      }
    if(h==2){
        for(j=0,k=1;j<si;j++,k++)
          printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].shuxue ,k);
      }
    if(h==3){
        for(j=0,k=1;j<si;j++,k++)
        printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].yingyu ,k);
      }
    if(h==4){
        for(j=0,k=1;j<si;j++,k++)
        printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].num  ,k);
      }
  }
  }
//输出成绩统计
void Outtj(struct node1 stu[50],int si,int n)
{
  double  avg1=0,avg2=0,avg3=0;
  double  k1=0,k2=0,k3=0;//及格率
  double  j1=0,j2=0,j3=0;//优秀率
  double  max1;
  double  min1;
  int j;
    max1=stu[0].yuwen;
    min1=stu[0].yuwen;
  for(j=0;j<si;j++)
  { 
    avg1+=stu[j].yuwen;
    if(stu[j].yuwen>=60) k1++;
    if(stu[j].yuwen>=90) j1++;
    if(stu[j].yuwen>max1) max1=stu[j].yuwen;
    if(stu[j].yuwen<min1) min1=stu[j].yuwen;
  }
  avg1/=j;
  k1/=j;
  j1/=j;
  printf("\t\t*********%d班成绩*************\n",n);
  printf("语文平均成绩\t\t及格率\t\t优秀率\t\t最高分\t\t最低分\n");
  printf("%f\t\t%f\t%f\t%lf\t%lf\n",avg1,k1,j1,max1,min1);
    max1=stu[0].shuxue;
    min1=stu[0].shuxue;
  for(j=0;j<si;j++)
  {
    avg2+=stu[j].shuxue;
    if(stu[j].shuxue>=60)k2++;
    if(stu[j].shuxue>=90)j2++;
    if(stu[j].shuxue>max1) max1=stu[j].shuxue;
    if(stu[j].shuxue<min1) min1=stu[j].shuxue;
  }
  avg2/=j;
  k2/=j;
  j2/=j;
  printf("数学平均成绩\t\t及格率\t\t优秀率\t\t最高分\t\t最低分\n");
  printf("%lf\t\t%lf\t%lf\t%lf\t%lf\n",avg2,k2,j2,max1,min1);
    max1=stu[0].yingyu;
    min1=stu[0].yingyu;
  for(j=0;j<si;j++)
  {
    avg3+=stu[j].yingyu ;
    if(stu[j].yingyu>=60) k3++;
    if(stu[j].yingyu>=90)j3++;
    if(stu[j].yingyu>max1) max1=stu[j].yingyu;
    if(stu[j].yingyu<min1) min1=stu[j].yingyu;
  }
  avg3/=(j);
  k3/=(j);
  j3/=(j);
  printf("英语平均成绩\t\t及格率\t\t优秀率\t\t最高分\t\t最低分\n");
  printf("%lf\t\t%lf\t%lf\t%lf\t%lf\n",avg3,k3,j3,max1,min1);
}


#include<stdio.h>
//结构体
struct node
{
  int date; //学号
  int me_class;   //班级
  double yuwen;//语文成绩
  double shuxue;//数学成绩
  double yingyu;//英语成绩
  double num;     //总分
  double avg;     //平均分
  char name[20];    //姓名   
  char kemu[20];    //所选科目
  struct node *next;
};
struct node*input(struct node*head);   //01录入学生的资料和成绩.
struct node*add(struct node*head);     //02增加学生信息及成绩
struct node*find(struct node*head);    //3.查询学生信息及成绩
void del(struct node*head);        //04删除学生信息及成绩;
struct node*change(struct node*head);  //05修改学生信息和成绩
struct node* output(struct node*head); //06浏览学生信息及成绩
void file(struct node*head);   //文件夹操作。
 //主菜单
int menu(){
   int i=1;
    printf("\t\t 1.录入学生信息及成绩\n");
    printf("\t\t 2.增加学生信息及成绩\n");
    printf("\t\t 3.查询学生信息及成绩\n");
    printf("\t\t 4.删除学生信息及成绩\n");
    printf("\t\t 5.修改学生信息及成绩\n");
    printf("\t\t 6.浏览学生信息及成绩\n");
    printf("\t\t 7.保存学生成绩到c盘\n");
    printf("\t\t 8.成绩分析系统\n");
    printf("\t\t 0.退出\n");
    printf("\t\t-----------------------------\n");
    printf("\t请选择序号\n");
    scanf_s("%d",&i);
    while(1)
    {
      if(i<0||i>8)
      {
        printf("***没有此选项。请重新选择***\n");
        system("pause");
      }
      break;
    }
  return i;
}
struct node *last;//尾节点
 //01录入学生的资料和成绩.
 struct node*input(node *head)//
{
  int i=0,j=1;
  struct node *p,*n;
  p=(struct node*)malloc(sizeof(struct node));
  p=head;
  while(1)
  {
    if(j>0)
    {
      i++;
      n=(struct node*)malloc(sizeof(struct node));
      printf("请输入第%d个学生的学号,姓名\n",i);
      scanf("%d %s",&n->date,&n->name);
      getchar();
      printf("请输入科目(文或理)和班级(1或者2)\n");
      scanf("%s %d",&n->kemu,&n->me_class);
      fflush(stdin);
      printf("请输当前学生的语文,数学,英语成绩\n");
      scanf("%lf %lf %lf",&n->yuwen,&n->shuxue,&n->yingyu);
      getchar();
      n->num=n->yuwen+n->shuxue+n->yingyu;
      n->avg=(p->num)/3;
      p->next=n;
      p=n;
      printf("是否继续输入下一个同学的信息?输入 1 继续,输入  0  就停止输入\n");
      fflush(stdin);
      scanf("%d",&j);
      fflush(stdin);
    }
    else 
    {
      p->next=last=NULL;
        p=last;
      break;
    }
  }
  free(p);//释放p
  return head;
}
//02增加学生信息及成绩
 struct node*add(struct node*head)
 {
   if(head->next==NULL)
   {
    printf("还没有存储数据,请先存储数据");
    return head;
   }
   else
  {
    struct node*head1,*p;
    head1=(struct node*)malloc(sizeof(struct node));
    printf("正在添加学生信息及成绩\n");
    head1=input(head1);//插入的节点用链表的方式存储.
    p=head->next;
    while(p->next!=NULL)
    {
      p=p->next;
    }
    p->next=head1->next;//因为头结点是空的所以应该链接头结点的下一个节点。
    return head;
   }
 }
  //3.查询学生信息及成绩
 struct node*find(struct node*head)
 {
  int i;
  struct node*p;
  if(head==NULL)
  {
    printf("还没有存储数据,请先存储数据\n");
  }
  else
  {
    printf("请输入你要找查的学号:");
    scanf("%d",&i);
    p=head->next;
    while(p->date!=i&&p->next!=NULL)
    {
        p=p->next;
    }
      if(p->date==i)
      {
        printf("学号\t姓名\t班级\t科目\t语文\t\t数学\t\t英语\n");
        printf("%d\t%s\t%d\t%s\t%lf\t%lf\t%lf",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
        printf("\n");
        return p;
      }
      else
      {
      printf("没有找到你要查找的同学\n");
      return NULL;
      }
  }
 }
 //04删除学生信息及成绩;
 void del(struct node*head)
 {
 int key,j=0;
  struct node*p,*s;
  s=head->next;
  p=head;
  printf("请输入你要删除学生的学号");
  fflush(stdin);//删除缓存的数据。
  scanf("%d",&key);
  while(s!=NULL)
  {
    if(s->date!=key)
    {
      p=s;
      s=s->next;
    }
    else
      break;  
  }
  if(s!=NULL)
  {
    p->next=s->next;
    free(s);
    printf("删除成功\n");
  }
  else
    printf("删除失败\n");
 }
 //05修改学生信息和成绩
 struct node*change(struct node*head)
 {
  struct node*p=NULL;
  p=find(head);
  if(p==NULL)
  {
    printf("修改失败\n");
    return head;
  }
  else
  {
    printf("请输入修改的学生信息\n");
    printf("姓名 班级 科目\n");
    scanf("%s %d %s",&p->name,&p->me_class ,&p->kemu);
    fflush(stdin);
    printf("请输入修改的学生成绩\n");
    printf("语文 数学 英语\n");
    scanf("%lf %lf %lf",&p->yuwen,&p->shuxue,&p->yingyu);
    fflush(stdin);//getchar()
    printf("\n学号\t姓名\t班级\t科目\t语文\t\t数学\t\t英语\n");
    printf("%d\t%s\t%d\t%s\t%lf\t%lf\t%lf\n",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
    return head;
  }
 }
 //06浏览学生信息及成绩(测试)
 struct node* output(struct node*head)
 {
  if(head==NULL)
    printf("还没有数据请先输入数据\n");
  else
  {
    struct node *p;
    p=head->next;
    printf("学号\t姓名\t班级\t科目\t语文\t\t数学\t\t英语\n");
    while(p!=NULL)
    {
      printf("%d\t%s\t%d\t%s\t%lf\t%lf\t%lf",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
      p=p->next;
      printf("\n");
    }
  printf("\n");
  }
  return head;
 }
 void file(struct node*head)
 {
 int i=0;
  FILE *fp;
  struct node*p=head->next;
  fp=fopen("C:\\学生成绩单.txt","wt");
  fprintf(fp,"学号\t姓名\t班级\t科目\t语文\t\t   数学\t\t   英语\n");
   while(p!=NULL) 
 {
   fprintf(fp,"%d\t%s\t%d\t%s\t%lf\t\t%lf\t\t%lf\n",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
   p = p->next;
   i++;
 }
   if(i>0)
     printf("\t\t\t\t\t—————成功保存c盘—————\n");
   else printf("\t\t\t\t\t—————没有数据保存失败到桌面—————\n");
  fclose(fp);
 }
目录
相关文章
|
2月前
|
存储 安全 数据管理
C语言之考勤模拟系统平台(千行代码)
C语言之考勤模拟系统平台(千行代码)
65 4
|
1月前
|
IDE 编译器 开发工具
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
在本文中,我们系统地讲解了常见的 `#pragma` 指令,包括其基本用法、编译器支持情况、示例代码以及与传统方法的对比。`#pragma` 指令是一个强大的工具,可以帮助开发者精细控制编译器的行为,优化代码性能,避免错误,并确保跨平台兼容性。然而,使用这些指令时需要特别注意编译器的支持情况,因为并非所有的 `#pragma` 指令都能在所有编译器中得到支持。
120 41
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
|
12天前
|
存储 算法 安全
【C语言程序设计——选择结构程序设计】按从小到大排序三个数(头歌实践教学平台习题)【合集】
本任务要求从键盘输入三个数,并按从小到大的顺序排序后输出。主要内容包括: - **任务描述**:实现三个数的排序并输出。 - **编程要求**:根据提示在编辑器中补充代码。 - **相关知识**: - 选择结构(if、if-else、switch) - 主要语句类型(条件语句) - 比较操作与交换操作 - **测试说明**:提供两组测试数据及预期输出。 - **通关代码**:完整代码示例。 - **测试结果**:展示测试通过的结果。 通过本任务,你将掌握基本的选择结构和排序算法的应用。祝你成功!
28 4
|
1月前
|
存储 编译器 C语言
【C语言】C语言的变量和声明系统性讲解
在C语言中,声明和定义是两个关键概念,分别用于告知编译器变量或函数的存在(声明)和实际创建及分配内存(定义)。声明可以多次出现,而定义只能有一次。声明通常位于头文件中,定义则在源文件中。通过合理组织头文件和源文件,可以提高代码的模块化和可维护性。示例包括全局变量、局部变量、函数、结构体、联合体、数组、字符串、枚举和指针的声明与定义。
58 12
|
2月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
62 1
|
2月前
|
人工智能 安全 算法
基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。
本文深入探讨了基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。C语言因其高效、可移植、灵活及成熟度高等特点,在嵌入式系统开发中占据重要地位。文章还介绍了从系统需求分析到部署维护的完整开发流程,以及中断处理、内存管理等关键技术,并展望了嵌入式系统在物联网和人工智能领域的未来发展。
107 1
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
82 1
|
2月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
170 7
|
2月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
139 8
|
12天前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
51 23

热门文章

最新文章