C语言课程设计:学生成绩信息管理系统(排序、平均分、总分)详解

这篇具有很好参考价值的文章主要介绍了C语言课程设计:学生成绩信息管理系统(排序、平均分、总分)详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、需求分析

  • 利用C语言编写一个可以对学生成绩信息进行管理的系统
    0、退出系统
    1、录入学生信息和成绩
    2、打印学生信息
    3、统计学生人数
    4、查找学生信息
    5、修改学生信息
    6、删除学生信息
    7、排序学生成绩
    8、生成学生信息文件
    9、读取文件学生信息
    10、输出各科成绩不及格学生信息
    11、输出各科成绩最高分学生信息
    12、计算学生成绩总分和平均分

2、功能模块

C语言课程设计:学生成绩信息管理系统(排序、平均分、总分)详解

3、效果展示

C语言课程设计:学生成绩信息管理系统(排序、平均分、总分)详解

  • 系统可以对学生成绩信息进行录入、修改、查找、删除、插入、打印、保存、读取、排序、计算总分、平均分

C语言课程设计:学生成绩信息管理系统(排序、平均分、总分)详解
C语言课程设计:学生成绩信息管理系统(排序、平均分、总分)详解
C语言课程设计:学生成绩信息管理系统(排序、平均分、总分)详解文章来源地址https://www.toymoban.com/news/detail-511787.html

4、代码详解

(1)学生信息结构体
struct Student   //创建学生信息结构体
{                //每个学生对应一个结构体
  char ID[20];   //学号
  char Name[10]; //姓名
  float Score1;   //英语成绩
  float Score2;   //数学成绩
  float Score3;   //语文成绩
  float Score4;   //程序设计成绩
  float All;     //总分
  float Average; //平均成绩
} students[1000];
(2)学生信息的录入
void InputStudent() //利用循环录入学生信息
{
  while (1)
  {
    printf("请输入学号:");
    scanf("%s", &students[num].ID);
    getchar();
    printf("请输入姓名:");
    scanf("%s", &students[num].Name);
    getchar();
    printf("请输入成绩:");
    scanf("%f", &students[num].Score1);
    getchar();
    printf("请输入成绩:");
    scanf("%f", &students[num].Score2);
    getchar();
    printf("请输入成绩:");
    scanf("%f", &students[num].Score3);
    getchar();
    printf("请输入成绩:");
    scanf("%f", &students[num].Score4); //依次输入各项数据
    getchar();
    students[num].All = students[num].Score1 + students[num].Score2 + students[num].Score3 + students[num].Score4; //输完数据后自动计算总成绩与平均成绩
    students[num].Average = (students[num].Score1 + students[num].Score2 + students[num].Score3 + students[num].Score4) / 4;
    if (Student_SearchByIndex(students[num].ID) == -1)
    {
      num++; //移向下一个位置
    }
    else
    {
      printf("学号重复,输入数据无效 !\n");
    }

    printf("是否继续?(y/n):>");
    if (getchar() == 'n')
    {
      break;
    }
  }
}
(3)学生信息的修改
void ModifyStudent() //修改学生成绩
{
  while (1)
  {
    char id[20];
    int index;
    printf("请输入要修改的学生的学号:");
    scanf("%s", &id);
    getchar();
    index = Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置
    if (index == -1)
    {
      printf("学生不存在!\n");
    }
    else
    {
      printf("你要修改的学生信息为:\n");
      Student_DisplaySingle(index);
      printf("-- 请输入新值--\n");
      printf("请输入学号:");
      scanf("%s", &students[index].ID);
      getchar();
      printf("请输入姓名:");
      scanf("%s", &students[index].Name);
      getchar();
      printf("请输入英语成绩:");
      scanf("%f", &students[index].Score1);
      getchar();
      printf("请输入数学成绩:");
      scanf("%f", &students[index].Score2);
      getchar();
      printf("请输入语文成绩:");
      scanf("%f", &students[index].Score3);
      getchar();
      printf("请输入程序设计成绩:");
      scanf("%f", &students[index].Score4); //重新录入一套新的数据替代
      getchar();
      students[index].All = students[index].Score1 + students[index].Score2 + students[index].Score3 + students[index].Score4;
      students[index].Average = (students[index].Score1 + students[index].Score2 + students[index].Score3 + students[index].Score4) / 4;
    }
    printf("是否继续?(y/n):>");
    if (getchar() == 'n')
    {
      break;
    }
  }
}
(4)学生信息的删除
void DeleteStudent() //删除学生信息
{
  int i;
  while (1)
  {
    char id[20];
    int index;
    printf("请输入要删除的学生的学号:");
    scanf("%s", &id);
    getchar();
    index = Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置
    if (index == -1)
    {
      printf("该学生不存在!\n");
    }
    else
    {
      printf("你要删除的学生信息为:\n");
      Student_DisplaySingle(index);
      printf("是否真的要删除?(y/n)");
      if (getchar() == 'y')
      {
        for (i = index; i < num - 1; i++)
        {
          Copy(students, i, i + 1);
          // students[i]=students[i+1];    //把后边的对象都向前移动
        }
        num--;
      }
      getchar();
    }
    printf("是否继续?(y/n):>");
    if (getchar() == 'n')
    {
      break;
    }
  }
}
(5)学生信息的打印
void display() //打印已录入的学生信息
{
  int a;
  printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "学号", "姓名", "英语", "数学", "语文", "程序设计", "总成绩", "平均成绩");
  printf("-------------------------------------------------------------------------\n");
  for (a = 0; a < num; a++)
  {
    printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[a].ID, students[a].Name,
           students[a].Score1, students[a].Score2, students[a].Score3, students[a].Score4, students[a].All, students[a].Average);
  }
}
(6)学生信息的插入
void InsertStudent() //指定位置插入学生信息
{
  int a, b, c;
  printf("请输入你要插入的位置");
  scanf("%d", &a);
  if (a > num)
  {
    printf("输入的位置有误,请重新输入,当前共%d条数据\n", num);
    scanf("%d", &a);
  }

  b = num - 1;
  for (; b >= a - 1; b--)
  {
    // strcpy(students[b+1].ID,students[b].ID);
    // strcpy(students[b+1].Name,students[b].Name);
    // students[b+1].Score1=students[b].Score1;
    // students[b+1].Score2=students[b].Score2;
    // students[b+1].Score3=students[b].Score3;
    // students[b+1].Score4=students[b].Score4;
    // students[b+1].All=students[b].All;
    // students[b+1].Average=students[b].Average;
    Copy(students, b + 1, b); //根据其输入的位置,将其及以后的数据向后移动一个位置
  }
  num++;
  printf("请输入学号:");
  scanf("%s", &students[a - 1].ID);
  getchar();
  printf("请输入姓名:");
  scanf("%s", &students[a - 1].Name);
  getchar();
  printf("请输入英语成绩:");
  scanf("%f", &students[a - 1].Score1);
  getchar();
  printf("请输入数学成绩:");
  scanf("%f", &students[a - 1].Score2);
  getchar();
  printf("请输入语文成绩:");
  scanf("%f", &students[a - 1].Score3);
  getchar();
  printf("请输入程序设计成绩:");
  scanf("%f", &students[a - 1].Score4); //输入新数据
  getchar();
  students[a - 1].All = students[a - 1].Score1 + students[a - 1].Score2 + students[a - 1].Score3 + students[a - 1].Score4;
  students[a - 1].Average = (students[a - 1].Score1 + students[a - 1].Score2 + students[a - 1].Score3 + students[a - 1].Score4) / 4;
}
(7)学生信息的查询
void search() //查询学生信息
{
  while (1)
  {
    char name[20];
    int index;
    printf("请输入要查询的学生的姓名:");
    scanf("%s", &name);
    getchar();
    index = Student_SearchByName(name); //调用搜查name函数,根据其返回值确定位置
    if (index == -1)
    {
      printf("学生不存在!\n");
    }
    else
    {
      printf("你要查询的学生信息为:\n");
      Student_DisplaySingle(index);
    }
    printf("是否继续?(y/n):>");
    if (getchar() == 'n')
    {
      break;
    }
  }
}
(8)学生成绩的排序
void SortStudent() //根据平均分排序
{
  int i, j;
  // struct students tmp;
  for (i = 0; i < num; i++)
  {
    students[i].Average = (students[i].Score1 + students[i].Score2 + students[i].Score3 + students[i].Score4) / 4;
  }
  for (i = 0; i < num; i++)
  {
    for (j = 1; j < num - i; j++)
    {
      if (students[j - 1].Average < students[j].Average)
      {

        Copy(students, num, j - 1);
        Copy(students, j - 1, j);
        Copy(students, j, num);
        // tmp=students[j-1];
        // students[j-1]=students[j];
        // students[j]=tmp;      //冒泡排序
      }
    }
  }
  int a;
  printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "学号", "姓名", "英语", "数学", "语文", "程序设计", "总成绩", "平均成绩");
  printf("-------------------------------------------------------------------------\n");
  for (a = 0; a < num; a++)
  {
    printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[a].ID, students[a].Name,
           students[a].Score1, students[a].Score2, students[a].Score3, students[a].Score4, students[a].All, students[a].Average);
  }
}
(9)输出各科成绩不及格学生信息
void SearchLow() //搜索不及格的并输出
{
  int a;
  printf("英语不及格的有:%10s%10s%8s\n", "姓名", "学号", "英语");
  for (a = 0; a < num; a++)
  {
    if (students[a].Score1 < 60)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score1); //从头搜索到尾,若小于60就输出
  }

  printf("数学不及格的有:%10s%10s%8s\n", "姓名", "学号", "数学");
  for (a = 0; a < num; a++)
  {
    if (students[a].Score2 < 60)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score2);
  }

  printf("语文不及格的有:%10s%10s%8s\n", "姓名", "学号", "语文");
  for (a = 0; a < num; a++)
  {
    if (students[a].Score3 < 60)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score3);
  }

  printf("程序设计不及格的有%10s%10s%8s\n", "姓名", "学号","程序设计");
  for (a = 0; a < num; a++)
  {
    if (students[a].Score4 < 60)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score4);
  }
  system("pause");
}
(10)输出各科成绩最高分学生信息
void SearchHigh() //搜索成绩最高者输出
{
  int a;
  int max;
  printf("英语成绩最高分为%10s%10s%8s\n", "姓名", "学号", "英语");
  max = students[0].Score1;
  for (a = 1; a < num; a++)
  {
    if (students[a].Score1 > max)
      max = students[a].Score1;
  }
  for (a = 0; a < num; a++)
  {
    if (max == students[a].Score1)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score1);
  }

  printf("数学成绩最高分为%10s%10s%8s\n", "姓名", "学号", "数学");
  max = students[0].Score2;
  for (a = 1; a < num; a++)
  {
    if (students[a].Score2 > max)
      max = students[a].Score2;
  }
  for (a = 0; a < num; a++)
  {
    if (max == students[a].Score2)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score2);
  }

  printf("语文成绩最高分为%10s%10s%8s\n", "姓名", "学号", "语文");
  max = students[0].Score3;
  for (a = 1; a < num; a++)
  {
    if (students[a].Score3 > max)
      max = students[a].Score3;
  }
  for (a = 0; a < num; a++)
  {
    if (max == students[a].Score3)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score3);
  }

  printf("程序设计最高分为%10s%10s%8s\n", "姓名", "学号", "程序设计");
  max = students[0].Score4;
  for (a = 1; a < num; a++)
  {
    if (students[a].Score4 > max)
      max = students[a].Score4;
  }
  for (a = 0; a < num; a++)
  {
    if (max == students[a].Score4)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score4);
  }
  system("pause");
}
(11)生成学生信息文件
void SaveStudent()
{
  FILE *fp = fopen("student-information.txt", "w+");
  fprintf(fp, "%d\n", num);
  for (int i = 0; i < num; i++)
  {
    fprintf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, students[i].Score1, students[i].Score2, students[i].Score3, students[i].Score4, students[i].All, students[i].Average);
  }
  fclose(fp);
  printf("学生信息文件已保存在本地\n");
}
(12)读取文件学生信息
void LoadInformation()
{
  FILE *fp = fopen("student-information.txt", "r");
  fscanf(fp, "%d", &num);
  for (int i = 0; i < num; i++)
  {
    fscanf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, &students[i].Score1, &students[i].Score2, &students[i].Score3, &students[i].Score4, &students[i].All, &students[i].Average);
  }
  fclose(fp);
  printf("系统已读取文件学生信息\n");
}
(13)主程序
/*主程序*/
int main()
{
  int i;
  while (1)
  {
    LoadInformation();
    printf("-------------------------------------------------------------------------\n");
    printf("                               请选择系统功能                     \n");
    printf("-------------------------------------------------------------------------\n");
    printf("                        欢迎使用高校学生信息管理系统               \n");
    printf("-------------------------------------------------------------------------\n");
    printf("                             0.退出系统                          \n");
    printf("                             1.学生信息的录入                    \n");
    printf("                             2.学生信息的修改                    \n");
    printf("                             3.学生信息的删除                    \n");
    printf("                             4.学生信息的插入                    \n");
    printf("                             5.学生信息的打印                    \n");
    printf("                             6.学生信息的查找                    \n");
    printf("                             7.学生成绩的排序                    \n");
    printf("                             8.生成学生信息文件                  \n");
    printf("                             9.读取学生信息文件                  \n");
    printf("                            10.输出各科不及格学生信息            \n");
    printf("                            11.输出各科最高分学生信息            \n");
    printf("-------------------------------------------------------------------------\n");
    printf("--------------------------------作者: wink-------------------------------\n");
    printf("请选择(0-11):>");
    scanf("%d", &i);
    switch (i)
    {
    case 1:
      InputStudent();
      break;
    case 2:
      ModifyStudent();
      break;
    case 3:
      DeleteStudent();
      break;
    case 4:
      InsertStudent();
      break;
    case 5:
      display();
      break;
    case 6:
      search();
      break;
    case 7:
      SortStudent();
      break;
    case 8:
      SaveStudent();
      break;
    case 9:
      LoadInformation();
      break;
    case 10:
      SearchLow();
      break;
    case 11:
      SearchHigh();
      break;
    case 0:
    printf("Thanks for using, See you again !");
      exit(0);
    default:;
    }
  }
  return 0;
}

5、完整代码+注释

#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <string.h>

struct Student   //创建学生信息结构体
{                //每个学生对应一个结构体
  char ID[20];   //学号
  char Name[10]; //姓名
  float Score1;   //英语成绩
  float Score2;   //数学成绩
  float Score3;   //语文成绩
  float Score4;   //程序设计成绩
  float All;     //总分
  float Average; //平均成绩
} students[1000];

int num = 0; //计数器

void Copy(struct Student *arr, int i, int j)
{
  strcpy(arr[i].ID, arr[j].ID);
  strcpy(arr[i].Name, arr[j].Name);
  arr[i].Score1 = arr[j].Score1;
  arr[i].Score2 = arr[j].Score2;
  arr[i].Score3 = arr[j].Score3;
  arr[i].Score4 = arr[j].Score4;
  arr[i].All = arr[j].All;
  arr[i].Average = arr[j].Average;
}
int Student_SearchByName(char name[]) //通过姓名来检索学生
{
  int i;
  for (i = 0; i < num; i++)
  {
    if (strcmp(students[i].Name, name) == 0) //通过strcmp函数来对比学生姓名,找到返回在数组的位置
    {
      return i;
    }
  }
  return -1; //未找到返回 -1
}
int Student_SearchByIndex(char id[]) //通过学号来检索学生信息
{
  int i;
  for (i = 0; i < num; i++)
  {
    if (strcmp(students[i].ID, id) == 0) //通过strcmp函数来对比学生id,找到返回位置
    {
      return i;
    }
  }
  return -1; //未找到返回 -1
}

void Student_DisplaySingle(int index) //输出表头
{
  printf("%10s%10s%8s%8s%8s%10s\n", "学号", "姓名", "英语", "数学", "语文", "程序设计", "总成绩", "平均成绩");
  printf("-------------------------------------------------------------\n");
  printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[index].ID, students[index].Name,students[index].Score1, students[index].Score2, students[index].Score3, students[index].Score4, students[index].All, students[index].Average);
}
void InputStudent() //利用循环录入学生信息
{
  while (1)
  {
    printf("请输入学号:");
    scanf("%s", &students[num].ID);
    getchar();
    printf("请输入姓名:");
    scanf("%s", &students[num].Name);
    getchar();
    printf("请输入成绩:");
    scanf("%f", &students[num].Score1);
    getchar();
    printf("请输入成绩:");
    scanf("%f", &students[num].Score2);
    getchar();
    printf("请输入成绩:");
    scanf("%f", &students[num].Score3);
    getchar();
    printf("请输入成绩:");
    scanf("%f", &students[num].Score4); //依次输入各项数据
    getchar();
    students[num].All = students[num].Score1 + students[num].Score2 + students[num].Score3 + students[num].Score4; //输完数据后自动计算总成绩与平均成绩
    students[num].Average = (students[num].Score1 + students[num].Score2 + students[num].Score3 + students[num].Score4) / 4;
    if (Student_SearchByIndex(students[num].ID) == -1)
    {
      num++; //移向下一个位置
    }
    else
    {
      printf("学号重复,输入数据无效 !\n");
    }

    printf("是否继续?(y/n):>");
    if (getchar() == 'n')
    {
      break;
    }
  }
}

void ModifyStudent() //修改学生成绩
{
  while (1)
  {
    char id[20];
    int index;
    printf("请输入要修改的学生的学号:");
    scanf("%s", &id);
    getchar();
    index = Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置
    if (index == -1)
    {
      printf("学生不存在!\n");
    }
    else
    {
      printf("你要修改的学生信息为:\n");
      Student_DisplaySingle(index);
      printf("-- 请输入新值--\n");
      printf("请输入学号:");
      scanf("%s", &students[index].ID);
      getchar();
      printf("请输入姓名:");
      scanf("%s", &students[index].Name);
      getchar();
      printf("请输入英语成绩:");
      scanf("%f", &students[index].Score1);
      getchar();
      printf("请输入数学成绩:");
      scanf("%f", &students[index].Score2);
      getchar();
      printf("请输入语文成绩:");
      scanf("%f", &students[index].Score3);
      getchar();
      printf("请输入程序设计成绩:");
      scanf("%f", &students[index].Score4); //重新录入一套新的数据替代
      getchar();
      students[index].All = students[index].Score1 + students[index].Score2 + students[index].Score3 + students[index].Score4;
      students[index].Average = (students[index].Score1 + students[index].Score2 + students[index].Score3 + students[index].Score4) / 4;
    }
    printf("是否继续?(y/n):>");
    if (getchar() == 'n')
    {
      break;
    }
  }
}

void DeleteStudent() //删除学生信息
{
  int i;
  while (1)
  {
    char id[20];
    int index;
    printf("请输入要删除的学生的学号:");
    scanf("%s", &id);
    getchar();
    index = Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置
    if (index == -1)
    {
      printf("该学生不存在!\n");
    }
    else
    {
      printf("你要删除的学生信息为:\n");
      Student_DisplaySingle(index);
      printf("是否真的要删除?(y/n)");
      if (getchar() == 'y')
      {
        for (i = index; i < num - 1; i++)
        {
          Copy(students, i, i + 1);
          // students[i]=students[i+1];    //把后边的对象都向前移动
        }
        num--;
      }
      getchar();
    }
    printf("是否继续?(y/n):>");
    if (getchar() == 'n')
    {
      break;
    }
  }
}
void display() //打印已录入的学生信息
{
  int a;
  printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "学号", "姓名", "英语", "数学", "语文", "程序设计", "总成绩", "平均成绩");
  printf("-------------------------------------------------------------------------\n");
  for (a = 0; a < num; a++)
  {
    printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[a].ID, students[a].Name,
           students[a].Score1, students[a].Score2, students[a].Score3, students[a].Score4, students[a].All, students[a].Average);
  }
}
void InsertStudent() //指定位置插入学生信息
{
  int a, b, c;
  printf("请输入你要插入的位置");
  scanf("%d", &a);
  if (a > num)
  {
    printf("输入的位置有误,请重新输入,当前共%d条数据\n", num);
    scanf("%d", &a);
  }

  b = num - 1;
  for (; b >= a - 1; b--)
  {
    // strcpy(students[b+1].ID,students[b].ID);
    // strcpy(students[b+1].Name,students[b].Name);
    // students[b+1].Score1=students[b].Score1;
    // students[b+1].Score2=students[b].Score2;
    // students[b+1].Score3=students[b].Score3;
    // students[b+1].Score4=students[b].Score4;
    // students[b+1].All=students[b].All;
    // students[b+1].Average=students[b].Average;
    Copy(students, b + 1, b); //根据其输入的位置,将其及以后的数据向后移动一个位置
  }
  num++;
  printf("请输入学号:");
  scanf("%s", &students[a - 1].ID);
  getchar();
  printf("请输入姓名:");
  scanf("%s", &students[a - 1].Name);
  getchar();
  printf("请输入英语成绩:");
  scanf("%f", &students[a - 1].Score1);
  getchar();
  printf("请输入数学成绩:");
  scanf("%f", &students[a - 1].Score2);
  getchar();
  printf("请输入语文成绩:");
  scanf("%f", &students[a - 1].Score3);
  getchar();
  printf("请输入程序设计成绩:");
  scanf("%f", &students[a - 1].Score4); //输入新数据
  getchar();
  students[a - 1].All = students[a - 1].Score1 + students[a - 1].Score2 + students[a - 1].Score3 + students[a - 1].Score4;
  students[a - 1].Average = (students[a - 1].Score1 + students[a - 1].Score2 + students[a - 1].Score3 + students[a - 1].Score4) / 4;
}
void search() //查询学生信息
{
  while (1)
  {
    char name[20];
    int index;
    printf("请输入要查询的学生的姓名:");
    scanf("%s", &name);
    getchar();
    index = Student_SearchByName(name); //调用搜查name函数,根据其返回值确定位置
    if (index == -1)
    {
      printf("学生不存在!\n");
    }
    else
    {
      printf("你要查询的学生信息为:\n");
      Student_DisplaySingle(index);
    }
    printf("是否继续?(y/n):>");
    if (getchar() == 'n')
    {
      break;
    }
  }
}
void SortStudent() //根据平均分排序
{
  int i, j;
  // struct students tmp;
  for (i = 0; i < num; i++)
  {
    students[i].Average = (students[i].Score1 + students[i].Score2 + students[i].Score3 + students[i].Score4) / 4;
  }
  for (i = 0; i < num; i++)
  {
    for (j = 1; j < num - i; j++)
    {
      if (students[j - 1].Average < students[j].Average)
      {

        Copy(students, num, j - 1);
        Copy(students, j - 1, j);
        Copy(students, j, num);
        // tmp=students[j-1];
        // students[j-1]=students[j];
        // students[j]=tmp;      //冒泡排序
      }
    }
  }
  int a;
  printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "学号", "姓名", "英语", "数学", "语文", "程序设计", "总成绩", "平均成绩");
  printf("-------------------------------------------------------------------------\n");
  for (a = 0; a < num; a++)
  {
    printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[a].ID, students[a].Name,
           students[a].Score1, students[a].Score2, students[a].Score3, students[a].Score4, students[a].All, students[a].Average);
  }
}

void SearchLow() //搜索不及格的并输出
{
  int a;
  printf("英语不及格的有:%10s%10s%8s\n", "姓名", "学号", "英语");
  for (a = 0; a < num; a++)
  {
    if (students[a].Score1 < 60)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score1); //从头搜索到尾,若小于60就输出
  }

  printf("数学不及格的有:%10s%10s%8s\n", "姓名", "学号", "数学");
  for (a = 0; a < num; a++)
  {
    if (students[a].Score2 < 60)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score2);
  }

  printf("语文不及格的有:%10s%10s%8s\n", "姓名", "学号", "语文");
  for (a = 0; a < num; a++)
  {
    if (students[a].Score3 < 60)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score3);
  }

  printf("程序设计不及格的有%10s%10s%8s\n", "姓名", "学号","程序设计");
  for (a = 0; a < num; a++)
  {
    if (students[a].Score4 < 60)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score4);
  }
  system("pause");
}

void SearchHigh() //搜索成绩最高者输出
{
  int a;
  int max;
  printf("英语成绩最高分为%10s%10s%8s\n", "姓名", "学号", "英语");
  max = students[0].Score1;
  for (a = 1; a < num; a++)
  {
    if (students[a].Score1 > max)
      max = students[a].Score1;
  }
  for (a = 0; a < num; a++)
  {
    if (max == students[a].Score1)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score1);
  }

  printf("数学成绩最高分为%10s%10s%8s\n", "姓名", "学号", "数学");
  max = students[0].Score2;
  for (a = 1; a < num; a++)
  {
    if (students[a].Score2 > max)
      max = students[a].Score2;
  }
  for (a = 0; a < num; a++)
  {
    if (max == students[a].Score2)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score2);
  }

  printf("语文成绩最高分为%10s%10s%8s\n", "姓名", "学号", "语文");
  max = students[0].Score3;
  for (a = 1; a < num; a++)
  {
    if (students[a].Score3 > max)
      max = students[a].Score3;
  }
  for (a = 0; a < num; a++)
  {
    if (max == students[a].Score3)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score3);
  }

  printf("程序设计最高分为%10s%10s%8s\n", "姓名", "学号", "程序设计");
  max = students[0].Score4;
  for (a = 1; a < num; a++)
  {
    if (students[a].Score4 > max)
      max = students[a].Score4;
  }
  for (a = 0; a < num; a++)
  {
    if (max == students[a].Score4)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score4);
  }
  system("pause");
}
void SaveStudent()
{
  FILE *fp = fopen("student-information.txt", "w+");
  fprintf(fp, "%d\n", num);
  for (int i = 0; i < num; i++)
  {
    fprintf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, students[i].Score1, students[i].Score2, students[i].Score3, students[i].Score4, students[i].All, students[i].Average);
  }
  fclose(fp);
  printf("学生信息文件已保存在本地\n");
}
void LoadInformation()
{
  FILE *fp = fopen("student-information.txt", "r");
  fscanf(fp, "%d", &num);
  for (int i = 0; i < num; i++)
  {
    fscanf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, &students[i].Score1, &students[i].Score2, &students[i].Score3, &students[i].Score4, &students[i].All, &students[i].Average);
  }
  fclose(fp);
  printf("系统已读取文件学生信息\n");
}

/*主程序*/
int main()
{
  int i;
  while (1)
  {
    LoadInformation();
    printf("-------------------------------------------------------------------------\n");
    printf("                               请选择系统功能                     \n");
    printf("-------------------------------------------------------------------------\n");
    printf("                        欢迎使用高校学生信息管理系统               \n");
    printf("-------------------------------------------------------------------------\n");
    printf("                             0.退出系统                          \n");
    printf("                             1.学生信息的录入                    \n");
    printf("                             2.学生信息的修改                    \n");
    printf("                             3.学生信息的删除                    \n");
    printf("                             4.学生信息的插入                    \n");
    printf("                             5.学生信息的打印                    \n");
    printf("                             6.学生信息的查找                    \n");
    printf("                             7.学生成绩的排序                    \n");
    printf("                             8.生成学生信息文件                  \n");
    printf("                             9.读取学生信息文件                  \n");
    printf("                            10.输出各科不及格学生信息            \n");
    printf("                            11.输出各科最高分学生信息            \n");
    printf("-------------------------------------------------------------------------\n");
    printf("--------------------------------作者: wink-------------------------------\n");
    printf("请选择(0-11):>");
    scanf("%d", &i);
    switch (i)
    {
    case 1:
      InputStudent();
      break;
    case 2:
      ModifyStudent();
      break;
    case 3:
      DeleteStudent();
      break;
    case 4:
      InsertStudent();
      break;
    case 5:
      display();
      break;
    case 6:
      search();
      break;
    case 7:
      SortStudent();
      break;
    case 8:
      SaveStudent();
      break;
    case 9:
      LoadInformation();
      break;
    case 10:
      SearchLow();
      break;
    case 11:
      SearchHigh();
      break;
    case 0:
    printf("Thanks for using, See you again !");
      exit(0);
    default:;
    }
  }
  return 0;
}

到了这里,关于C语言课程设计:学生成绩信息管理系统(排序、平均分、总分)详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java课程设计——学生成绩管理系统

    1 需求分析 1.1 需求分析概述 需求分析是开发软件系统的重要环节,是系统开发的第一步和基础环节。通过需求分析充分认识系统的目标、系统的各个组成部分、各部分的任务职责、工作流程、工作中使用的各种数据及数据结构、各部门的业务关系和数据流程等, 为系统设计

    2024年02月03日
    浏览(77)
  • 数据结构课程设计:学生成绩管理系统

    目  录 第一章   需求分析 第二章 概要设计 第三章 详细设计 第四章 测试报告 第五章 安装及使用 第六章 项目总结 第七章 源码 一.需求分析        学生成绩管理是一个学校不可缺少的部分,它的内容对于学校的管理者和学生以及学生家长来说都至关重要,所以一个良好

    2024年02月02日
    浏览(70)
  • C语言学生成绩信息管理系统(超详细版)

    主题:一个简易成绩管理系统 功能介绍: 1.以文本形式存储学生信息 2.对以存信息进行   1. 插入 2. 修改3. 删除  4.查询  5.成绩数字特征 目录 一:分析 二:查询  三:菜单 四:初始化函数 五:插入函数 六:修改函数 七:删除函数 八:数字特征 九:显示函数 要进行 插入

    2024年02月12日
    浏览(45)
  • Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

    作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路  关注作者有好处 文末获取源码   语言环境:Python3.7 数据库:

    2024年02月10日
    浏览(59)
  • android课程设计-学生成绩管理系统(Android期末作业,Android课设,AndroidStudio毕业设计)

    博主介绍: 本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的Android开发人员;希望我发布的此篇文件可以帮

    2024年02月02日
    浏览(49)
  • 用C语言实现一个学生信息管理系统,学生基本信息包括学号、姓名、三门课成绩以及个人平均成绩,有不超过70个学生的数据,要求能够建立学生基本信息(结构体数组)、按学号查询学生基本信息、计算学生个人平均成绩...

    下面是一种使用 C 语言实现学生信息管理系统的方案: 首先,定义结构体存储学生的基本信息,其中包括学号、姓名、三门课成绩和平均成绩。例如: 然后,定义结构体数组来存储最多70个学生的信息。 接下来,可以编写函数来实现各种功能。例如,可以定义函数来建立学

    2024年02月03日
    浏览(61)
  • 学生信息管理系统MySql课程设计

    本篇文章是第一次发布在这个平台上,文章的内容是平时课程的一个小作业,由于时间不足,还有很多内容没有完善好,会继续下一次的修改,对该学生管理系统进行修改和创新, 一、 分析 1.1 业务分析   学生信息管理系统是一个面向学生和学校老师的一个多功能数据平台

    2024年02月06日
    浏览(43)
  • 计算机毕业设计 基于JavaWeb的学生成绩信息管理系统(源码+论文)

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 基于JavaWeb的学生成绩信息管理系统 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:3分 项目获取: https://gitee.com/sin

    2024年02月10日
    浏览(64)
  • Python课程设计之学生信息管理系统

    核心代码 运行效果 核心代码 运行效果 核心代码 运行效果 核心代码 运行效果 核心代码 运行效果 核心代码 运行效果 核心代码 运行效果 核心代码 运行效果 点击下载

    2024年02月11日
    浏览(50)
  • MySQL课程设计——简易学生信息管理系统

    1.1.1 业务分析 学生信息管理系统时面向学生和学校教师的一个多功能数据管理平台。 1.1.2 分析系统 本系统所设计到的用户有学校在校学生、教师,对于不同的用户系统所提供给的功能也有所不同,其中对于学生来说,学生可以通过该系统进行学生基本信息查询、考试成绩查

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包