学生成绩管理系统(C语言)

系统分析

  1. 主菜单的实现
  2. 增加人员功能的实现
  3. 删除数据功能的实现
  4. 编辑人员功能的实现
  5. 排序功能的实现
  6. 输出功能
  7. 查找信息功能

具体代码

cpp 复制代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 100000


typedef struct  tagStudent
{
  int n;                    /*顺序号*/
  int nNum;                 /*学号*/
  char name[10];            /*姓名*/
  int iCn;                  /*语文成绩*/
  int iMaths;               /*数学成绩*/
  int iEn;                  /*英语成绩*/
  int iPhy;                 /*物理成绩*/
  int iCom;                 /*计算机成绩*/
  float fAvage;             /*平均成绩*/
} Student;

Student stu[SIZE];
/*录入数据*/
void Student_Input()
{ 
  int i,p;  
  FILE *fp;
  fp=fopen("studentfile.dat","wb");                      
  for(i=0;i<SIZE;i++)
  { 
    printf("\n\r请输入序号i(当输入i=-1时,返回),i=",i++);
    scanf("%d",&i);
    if(i==-1|| i ==0)               
    {
      fclose(fp);       
      return;
    }
    else                                      
    { 
      printf("\n\r请输入学号(数字型):");
      scanf("%d",&stu[i].nNum);
      printf("\n\r请输入姓名(字符型):");
      scanf("%s",stu[i].name);
      printf("\n\r请输入语文成绩(0~100):");
      scanf("%d",&stu[i].iCn);
      printf("\n\r请输入数学成绩(0~100):");
      scanf("%d",&stu[i].iMaths);
      printf("\n\r请输入英语成绩:(0~100)");
      scanf("%d",&stu[i].iEn);
      printf("\n\r请输入物理成绩:(0~100)");
      scanf("%d",&stu[i].iPhy);
      printf("\n\r请输入计算机成绩(0~100):");
      scanf("%d",&stu[i].iCom);
      stu[i].fAvage=(stu[i].iCn+stu[i].iMaths+stu[i].iEn+stu[i].iPhy+stu[i].iCom)/5.0;
      stu[i].n=i+1;
      fwrite(&stu[i],sizeof(Student),1,fp);
    }
  }
  fclose(fp);
}

/*输出数据*/
void Student_ListOut()
{
  FILE *fp;
  int i;
  fp=fopen("studentfile.dat","rb");                       
  printf("***********************************************************************\n");
  printf("    成绩列表\n");
  printf("-----------------------------------------------------------------------\n");
  printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  printf("-----------------------------------------------------------------------\n");
  for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
  {
    printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
      stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  }
  printf("-----------------------------------------------------------------------\n");
  fclose(fp);
}

/*查找数据*/
void Student_Search()
{
  FILE *fp;
  int i,num;
  fp=fopen("studentfile.dat","rb");    
  rewind(fp);
  printf("请输入要查找的学号:");
  scanf("%d",&num);
  printf("***********************************************************************\n");
  printf("    查询结果\n");
  printf("-----------------------------------------------------------------------\n");
  printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  printf("-----------------------------------------------------------------------\n");
  for(i=0;i<=SIZE;i++)
    if(stu[i].nNum==num)
    {
      printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
        stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
    }
    printf("-----------------------------------------------------------------------\n");
    printf("***********************************************************************\n");
    fclose(fp);
}

/*增加数据*/
void Student_Add()
{
  int i,s;
  FILE *fp;
  fp=fopen("studentfile.dat","ab+");    
  rewind(fp);
  printf("***********************************************************************\n");
  printf("      成绩列表\n");
  printf("-----------------------------------------------------------------------\n");
  printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  printf("-----------------------------------------------------------------------\n");
  for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
  {
    printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
      stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  }
  printf("***********************************************************************\n");
  s=i;
  for(i=s;i<SIZE;i++)
  {
    printf("输入序号i(当输入i=-1时,返回),i=",i);
    scanf("%d",&i);
    if(i==-1|| i ==0)                                  
    {
      fclose(fp);
      return;
    }
    else
    {
      printf("\n\r请输入学号(数字型):");
      scanf("%d",&stu[i].nNum);
      printf("\n\r请输入姓名(字符型):");
      scanf("%s",stu[i].name);
      printf("\n\r请输入语文成绩(0~100):");
      scanf("%d",&stu[i].iCn);
      printf("\n\r请输入数学成绩(0~100):");
      scanf("%d",&stu[i].iMaths);
      printf("\n\r请输入英语成绩:(0~100)");
      scanf("%d",&stu[i].iEn);
      printf("\n\r请输入物理成绩:(0~100)");
      scanf("%d",&stu[i].iPhy);
      printf("\n\r请输入计算机成绩(0~100):");
      scanf("%d",&stu[i].iCom);
      stu[i].fAvage=(stu[i].iCn+stu[i].iMaths+stu[i].iEn+stu[i].iPhy+stu[i].iCom)/5.0;
      stu[i].n=i+1;
      fwrite(&stu[i],sizeof(Student),1,fp);
      printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
        stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
    }
  }
  fclose(fp);
}
/*删除数据*/
void Student_Delete()
{ 
  FILE *fp;
  int i,num,n;
  int total =0;
  int flag=0;    
  fp=fopen("studentfile.dat","rb");
  printf("***********************************************************************\n");
  printf("      成绩列表\n");
  printf("-----------------------------------------------------------------------\n");
  printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  printf("-----------------------------------------------------------------------\n");
  for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
  {
    printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
      stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  }
  printf("-----------------------------------------------------------------------\n");
  printf("***********************************************************************\n");
  fclose(fp);
  
  total = i-1;
  
  printf("请输入要删除学生的学号:");
  scanf("%d",&num);
  for(i=0;i<=SIZE;i++)
    if(stu[i].nNum==num)
    {
      printf("***********************************************************************\n");
      printf("要删除的学生信息\n");
      printf("-----------------------------------------------------------------------\n");
      printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
      printf("-----------------------------------------------------------------------\n");
      printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
        stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
      printf("-----------------------------------------------------------------------\n");
      printf("***********************************************************************\n");
      n=i+1;
      flag=1;
      break;
    }
  if(flag==0)
    {
      printf("***********************************************************************\n");
      printf("    输入错误!\n");
      printf("    请返回!\n");
      printf("***********************************************************************\n");
      return;
    }
    printf("\n\n\n");  
    for(i=n;i<=total;i++)
    {
      memcpy(&stu[i-1],&stu[i],sizeof(Student));
    }
    memset(&stu[total],0,sizeof(Student));
    
    fp=fopen("studentfile.dat","wb+");
    for(i=0;i<total;i++)
    {
      fwrite(&stu[i],sizeof(Student),1,fp);
    }    
    fclose(fp);
    
    fp=fopen("studentfile.dat","rb");
    printf("***********************************************************************\n");
    printf("当前成绩列表\n");
    printf("-----------------------------------------------------------------------\n");
    printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
    printf("-----------------------------------------------------------------------\n");
    for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
    {
      printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
        stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
    }
    printf("-----------------------------------------------------------------------\n");
    printf("***********************************************************************\n");
    fclose(fp);
}
/*修改数据*/
void Student_Change()
{ 
  FILE *fp;
  int i,num,n;
  int flag=0;    
  printf("请输入要修改学生的学号:");
  scanf("%d",&num);
  for(i=0;i<=SIZE;i++)
    if(stu[i].nNum==num)
    {
      printf("***********************************************************************\n");
      printf("      成绩列表\n");
      printf("-----------------------------------------------------------------------\n");
      printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
      printf("-----------------------------------------------------------------------\n");
      printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
        stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
      printf("-----------------------------------------------------------------------\n");
      printf("***********************************************************************\n");
      n=i+1;
      flag=1;
      break;
    }
    if(flag==0)
    {
      printf("***********************************************************************\n");
      printf("    输入错误!\n");
      printf("    请返回!\n");
      printf("***********************************************************************\n");
      return;
    }
    printf("\n\n\n");  
    fp=fopen("studentfile.dat","rb+");
    fseek(fp,n*sizeof(Student),0);
    printf("\n\r请输入学号(数字型):");
    scanf("%d",&stu[i].nNum);
    printf("\n\r请输入姓名(字符型):");
    scanf("%s",stu[i].name);
    printf("\n\r请输入语文成绩(0~100):");
    scanf("%d",&stu[i].iCn);
    printf("\n\r请输入数学成绩(0~100):");
    scanf("%d",&stu[i].iMaths);
    printf("\n\r请输入英语成绩:(0~100)");
    scanf("%d",&stu[i].iEn);
    printf("\n\r请输入物理成绩:(0~100)");
    scanf("%d",&stu[i].iPhy);
    printf("\n\r请输入计算机成绩(0~100):");
    scanf("%d",&stu[i].iCom);
    stu[i].fAvage=(stu[i].iCn+stu[i].iMaths+stu[i].iEn+stu[i].iPhy+stu[i].iCom)/5.0;
    stu[i].n=i+1;
    fwrite(&stu[i],sizeof(Student),1,fp);
    fclose(fp);
    fp=fopen("studentfile.dat","rb");
    printf("***********************************************************************\n");
    printf("      成绩列表\n");
    printf("-----------------------------------------------------------------------\n");
    printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
    printf("-----------------------------------------------------------------------\n");
    for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
    {
      printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
        stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
    }
    printf("-----------------------------------------------------------------------\n");
    printf("***********************************************************************\n");
    fclose(fp);
}

/*成绩排序*/
void Student_Order()
{
  int i,j,n;
  FILE *fp;
  Student t;
  fp=fopen("studentfile.dat","rb");
  printf("***********************************************************************\n");
  printf("      成绩列表\n");
  printf("-----------------------------------------------------------------------\n");
  printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  printf("-----------------------------------------------------------------------\n");
  for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
  {
    printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
      stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  }
  printf("-----------------------------------------------------------------------\n");
  printf("***********************************************************************\n");
  fclose(fp);
  n=i;
  for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
      if(stu[i].fAvage<stu[j].fAvage)
      {
        t=stu[i];
        stu[i]=stu[j];
        stu[j]=t;
      }
      fp=fopen("studentfile.dats","wb");
      printf("\n\n\n");
      printf("***********************************************************************\n");
      printf("      成绩列表\n");
      printf("-----------------------------------------------------------------------\n");
      printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
      printf("-----------------------------------------------------------------------\n");
      for(i=0;i<n;i++)
      {
        printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
          stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
        fwrite(&stu[i],sizeof(Student),1,fp);
      }
      printf("***********************************************************************\n");
      fclose(fp);
}
/*主函数*/
main()
{
  int n;
  for(;;)
  {
    printf("\n");
    printf("/******************************************\\\n");
    printf("*                                          *\n");
    printf("*             学生信息管理系统             *\n");
    printf("*                  主菜单                  *\n");
    printf("*                                          *\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("*                                          *\n");
    printf("\\******************************************/\n\n");
    printf("请输入选择项(1-8):");
    scanf("%d",&n);
    printf("\n\n\n\n");
    if(n>0&&n<=8)
    {
      switch(n)
      {
      case 1:Student_Input();break;
      case 2:Student_Delete();break;
      case 3:Student_ListOut();break;
      case 4:Student_Search();break;
      case 5:Student_Add();break;
      case 6:Student_Change();break;
      case 7:Student_Order();break;  
      case 8:exit(0);  
      }
    }
    else 
    {
      printf("***********************************************************************\n");
      printf("*                                                                      *\n");
      printf("*                             按任意键                                *\n");
      printf("*                               退出!                                 *\n");
      printf("*                                                                      *\n");
      printf("***********************************************************************\n");
      break;
    }
  }
}
相关推荐
埃菲尔铁塔_CV算法几秒前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法
EasyCVR1 分钟前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
linsa_pursuer2 分钟前
快乐数算法
算法·leetcode·职场和发展
小芒果_013 分钟前
P11229 [CSP-J 2024] 小木棍
c++·算法·信息学奥赛
qq_434085905 分钟前
Day 52 || 739. 每日温度 、 496.下一个更大元素 I 、503.下一个更大元素II
算法
Beau_Will5 分钟前
ZISUOJ 2024算法基础公选课练习一(2)
算法
XuanRanDev8 分钟前
【每日一题】LeetCode - 三数之和
数据结构·算法·leetcode·1024程序员节
gkdpjj9 分钟前
C++优选算法十 哈希表
c++·算法·散列表
代码猪猪傻瓜coding9 分钟前
力扣1 两数之和
数据结构·算法·leetcode
王俊山IT11 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习