C语言实现学生信息管理系统开发

 更新时间:2022年08月05日 15:14:29   作者:D@@  
这篇文章主要为大家详细介绍了C语言实现学生信息管理系统开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下

程序介绍

运行程序时,首先进入到菜单部分,菜单部分提供了菜单显示和输入功能部分。其运行效果如图所示。在主界面上输入0——8内的数字,实现相应的功能。

主界面输入1时,进入录入学生信息的界面,当没有存储记录时,根据提示对学生的信息进行输入,运行效果如图所示。

在存在学生信息的情况下继续添加学生信息时,会首先显示存在的学生信息,运行效果如图所示。

主界面输入2时,进入查询学生信息模块,根据学生学号,对学生信息进行查询。运行效果如图所示。

在主界面输入3时,进入到删除学生信息模块,输入需要删除的学生学号,即可在文件中将该学号的所有信息删除,运行效果如图所示。

当在主界面输入4时,系统进入到修改学生信息模块,首先会显示出所有学生的信息,输入要修改的学生学号,系统会对输入的学号进行匹配,若在显示出来的学生信息中存在,则会提示输入修改的内容。运行效果如图所示。

在主界面输入5时,可以插入学生信息,根据提示输入想要插入的位置,以及插入的学号等信息。运行效果如图所示。

在主界面输入6时,可以根据学生的总成绩从高到低进行排序。排序完成后,将排序结果保存,但是排序后的结果并不现实在该界面。运行效果如图所示。

当在主界面输入7时,可以对学生的人数进行统计,显示出统计的人数。运行效果如图所示。

当在主界面输入8时,可以对学生的信息进行显示,运行效果如图所示。该图为对成绩进行排序后的显示结果。

代码

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<string.h>
#define LEN sizeof(struct student)
#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf\n"
#define DATA stu[i].num,stu[i].name,stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum
/**
*  结 构 体
*/
struct student/*定义学生成绩结构体*/
{ 
    int num;        /*学号*/
      char name[15];    /*姓名*/
      double elec;    /*选修课*/
      double expe;    /*实验课*/
      double requ;    /*必修课*/
      double sum;        /*总分*/
};
/**
*  函数声明
*/
struct student stu[50];    /*定义结构体数组*/
void in();                /*录入学生成绩信息*/
void show();            /*显示学生信息*/
void order();            /*按总分排序*/
void del();                /*删除学生成绩信息*/
void modify();            /*修改学生成绩信息*/
void menu();            /*主菜单*/
void insert();            /*插入学生信息*/
void total();            /*计算总人数*/
void search();            /*查找学生信息*/

void main()                /*主函数*/
{ 
    system("color f0\n");    //白底黑字
    int n;
      menu();
      scanf("%d",&n);/*输入选择功能的编号*/
      while(n)
      { 
          switch(n)
         { 
             case 1: in();break;
               case 2: search();break;
               case 3: del();break;
               case 4: modify();break;
               case 5: insert();break;
               case 6: order();break;
               case 7: total();break;
               case 8: show();break;
               default:break;
         }
    getch();
    menu();/*执行完功能再次显示菜单界面*/
    scanf("%d",&n);
      }
}

void in()/*录入学生信息*/
{ 
    int i,m=0;/*m是记录的条数*/
      char ch[2];
      FILE *fp;/*定义文件指针*/
      if((fp=fopen("data.txt","a+"))==NULL)/*打开指定文件*/
      { 
          printf("文件不存在!\n");
          return;//直接返回,不在执行
      }
      while(!feof(fp))//判断是否指向结束符
    {
          if(fread(&stu[m] ,LEN,1,fp)==1)
        {
              m++;/*统计当前记录条数*/
        }
      }
      fclose(fp);
      if(m==0)
      {
          printf("文件中没有记录!\n");
    }
      else
      {          
        show();/*调用show函数,显示原有信息*/
      }
      if((fp=fopen("data.txt","wb"))==NULL)
      {
          printf("文件不存在!\n");
          return;
      }


      printf("输入学生信息(y/n):");
      scanf("%s",ch);
    while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/
    {
        printf("number:");
        scanf("%d",&stu[m].num);/*输入学生学号*/
        for(i=0;i<m;i++)
            if(stu[i].num==stu[m].num)
            {
                   printf("number已经存在了,按任意键继续!");
                getch();
                fclose(fp);
                return;
            }
         printf("name:");
         scanf("%s",stu[m].name);/*输入学生姓名*/
         printf("elective:");
        scanf("%lf",&stu[m].elec);/*输入选修课成绩*/
         printf("experiment:");
         scanf("%lf",&stu[m].expe);/*输入实验课成绩*/
         printf("required course:");
         scanf("%lf",&stu[m].requ);/*输入必修课成绩*/
         stu[m].sum=stu[m].elec+stu[m].expe+stu[m].requ;/*计算出总成绩*/
         if(fwrite(&stu[m],LEN,1,fp)!=1)/*将新录入的信息写入指定的磁盘文件*/
         {
             printf("不能保存!");
             getch();
         }
         else
         {
             printf("%s 被保存!\n",stu[m].name);
             m++;
         }
         printf("继续?(y/n):");/*询问是否继续*/
         scanf("%s",ch);
      }
      fclose(fp);
      printf("OK!\n");
}

void show()                //增加data.txt文件不存在或者文件内容为空时的显示 
 { 
    FILE *fp;
      int i,m=0;
      fp=fopen("data.txt","rb");
       
//      if((fp=fopen("data.txt","a+"))==NULL)/*打开指定文件*/
//      { 
//          printf("文件不存在!\n");
//          return;
//      }
//      fclose(fp);
//      if(m==0)
//          printf("文件中没有记录!\n");
//        return;          
      while(!feof(fp))
      {
          if(fread(&stu[m] ,LEN,1,fp)==1) 
           m++;
       }  
       fclose(fp);
       printf("number  name           elective    experiment  required    sum\t\n");
       for(i=0;i<m;i++)
    { 
       printf(FORMAT,DATA);/*将信息按指定格式打印*/
    }
}
 
void menu()/*自定义函数实现菜单功能*/
{
      system("cls");
      printf("\n\n\n\n");
      printf("\t\t|---------------学生信息管理系统---------------|\n");
      printf("\t\t|\t\t\t\t\t       |\n");
      printf("\t\t|\t\t 1. 录入学生信息\t       |\n");
      printf("\t\t|\t\t 2. 查找学生信息\t       |\n");
      printf("\t\t|\t\t 3. 删除学生信息\t       |\n");
      printf("\t\t|\t\t 4. 修改学生信息\t       |\n");
     printf("\t\t|\t\t 5. 插入学生信息\t       |\n");
     printf("\t\t|\t\t 6. 排序\t\t       |\n");
      printf("\t\t|\t\t 7. 统计学生总数\t       |\n");
      printf("\t\t|\t\t 8. 显示所有学生信息\t       |\n");
    printf("\t\t|\t\t 0. 退出系统\t\t       |\n");
    printf("\t\t|\t\t\t\t\t       |\n");
      printf("\t\t|----------------------------------------------|\n\n");
      printf("\t\t\t请选择(0-8):");
}

void order()/*自定义排序函数*/
{ 
    FILE *fp;
      struct student t;
      int i=0,j=0,m=0;
      if((fp=fopen("data.txt","r+"))==NULL)
    { 
        printf("文件不存在!\n");
        return;
      }
      while(!feof(fp)) 
     if(fread(&stu[m] ,LEN,1,fp)==1) 
          m++;
      fclose(fp);
      if(m==0) 
      {
          printf("文件中没有记录!\n");
          return;
      }
      if((fp=fopen("data.txt","wb"))==NULL)
    {
          printf("文件不存在!\n");
          return;
    }
    for (i = 0; i < m - 1; i++)
        for (j = i + 1; j < m; j++)/*双重循环实现成绩比较并交换*/
            if (stu[i].sum < stu[j].sum)                                         
            {                                                                          
              t=stu[i];stu[i]=stu[j];stu[j]=t;
        }
    if((fp=fopen("data.txt","wb"))==NULL)
    { 
        printf("文件不存在!\n");
        return;
    }
      for(i=0;i<m;i++)/*将重新排好序的内容重新写入指定的磁盘文件中*/
          if(fwrite(&stu[i] ,LEN,1,fp)!=1)
           { 
            printf("%s 不能保存文件!\n"); 
            getch();
          }
      fclose(fp);
      printf("保存成功\n");
}

void del()/*自定义删除函数*/   /*逻辑:首先判断data.txt文件是否存在,如果存在,继续操作,判断文件是否为空,不为空,则输入要删除的学生学号;如果文件不存在
                                返回“文件不存在”,文件内容为空则返回“文件中没有记录”
                                输入学号----判断是否有这个学号。有:询问是否删除,y删除;n不删除 ,“找到了记录,选择不删除!” 
                                                                没有:“没有找到这名学生!” 
                                */ 
{    
    FILE *fp;
      int snum,i,j,m=0;
      char ch[2];
      if((fp=fopen("data.txt","r+"))==NULL)        //data.txt文件不存在 
    { 
        printf("文件不存在!\n");
        return;
    }
      while(!feof(fp))  if(fread(&stu[m],LEN,1,fp)==1) m++;
      fclose(fp);
      if(m==0) 
      {
          printf("文件中没有记录!\n");            //data.txt文件存在,但里面没有内容 
          return;
      }
  
      printf("请输入学生学号");
      scanf("%d",&snum); 
    for(i=0;i<m;i++)            
         if(snum==stu[i].num)
           {           
             printf("找到了这条记录,是否删除?(y/n)");
             scanf("%s",ch);
              if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/
              {
                  for(j=i;j<m;j++)
                  stu[j]=stu[j+1];/*将后一个记录移到前一个记录的位置*/
                   m--;/*记录的总个数减1*/
                  if((fp=fopen("data.txt","wb"))==NULL)
                 { 
                     printf("文件不存在\n");
                    return;
                }
                  for(j=0;j<m;j++)/*将更改后的记录重新写入指定的磁盘文件中*/
                  if(fwrite(&stu[j] ,LEN,1,fp)!=1)
                   { 
                       printf("can not save!\n");
                      getch();
                }
                  fclose(fp);
                  printf("删除成功!\n");
              }else{
                  printf("找到了记录,选择不删除!"); 
              }
                  break;
          }
        else
        {
              printf("没有找到这名学生!\n");/*未找到要查找的信息*/  
        }
}

void search()/*自定义查找函数*/            //新增:搜索文件中没有的学号时的情况 
{ 
    FILE *fp;
      int snum,i,m=0;
      if((fp=fopen("data.txt","rb"))==NULL)
     { 
         printf("文件不存在!\n");
        return;
    }
      while(!feof(fp))  
      if(fread(&stu[m],LEN,1,fp)==1) 
      m++;
      fclose(fp);
      if(m==0) 
    {
          printf("文件中没有记录!\n");
          return;
    }
      printf("请输入number:");
      scanf("%d",&snum);
      for(i=0;i<m;i++)
    if(snum==stu[i].num)/*查找输入的学号是否在记录中*/
    { 
          printf("number  name           elective    experiment  required    sum\t\n");
          printf(FORMAT,DATA);/*将查找出的结果按指定格式输出*/
      break;
    }   
      if(i==m) printf("没有找到这名学生!\n");/*未找到要查找的信息*/
}

void modify()/*自定义修改函数*/            //修正:要修改文件中没有记录的学号时,还是说“找到了。。。” 
{
      FILE *fp;
      struct student t;
      int i=0,j=0,m=0,snum;         
      if((fp=fopen("data.txt","r+"))==NULL)
    { 
        printf("文件不存在!\n");
        return;
      }
      while(!feof(fp)) 
          if(fread(&stu[m] ,LEN,1,fp)==1) 
            m++;      
      if(m==0) 
      {
          printf("文件中没有记录!\n");
        fclose(fp);
          return;
      }
      show();
      printf("请输入要修改的学生number: ");
      scanf("%d",&snum);
      for(i=0;i<m;i++)          
          if(snum==stu[i].num)/*检索记录中是否有要修改的信息*/
          {
              printf("找到了这名学生,可以修改他的信息!\n");     
              printf("name:");
              scanf("%s",stu[i].name);/*输入名字*/
                  printf("elective:");
              scanf("%lf",&stu[i].elec);/*输入选修课成绩*/
              printf("experiment:");
              scanf("%lf",&stu[i].expe);/*输入实验课成绩*/
              printf("required course:");
              scanf("%lf",&stu[i].requ);/*输入必修课成绩*/
              printf("修改成功!");
              stu[i].sum=stu[i].elec+stu[i].expe+stu[i].requ;
    
            if((fp=fopen("data.txt","wb"))==NULL)
             { 
                 printf("can not open\n");
                 return;
            }
              for(j=0;j<m;j++)/*将新修改的信息写入指定的磁盘文件中*/
              if(fwrite(&stu[j] ,LEN,1,fp)!=1)
               { 
                   printf("can not save!"); 
                   getch(); 
            }
             fclose(fp);  
             break;
          }
          if(i==m)     
              printf("没有找到这名学生!\n");/*未找到要查找的信息*/    
}

void insert()/*自定义插入函数*/
{ 
    FILE *fp;
      int i,j,k,m=0,snum;
      if((fp=fopen("data.txt","r+"))==NULL)
    { 
        printf("文件不存在!\n");
        return;
    }
      while(!feof(fp))  
         if(fread(&stu[m],LEN,1,fp)==1) 
         m++;
      if(m==0) 
    {
          printf("文件中没有记录!\n");
          fclose(fp);
          return;
      }
      printf("请输入要插入的位置(number):\n");
      scanf("%d",&snum);/*输入要插入的位置*/
    for (i = 0; i < m; i++)//遍历
        if (snum == stu[i].num)//判断是否存在
            break;                                          
          for(j=m-1;j>i;j--)//学号下面的内容
               stu[j+1]=stu[j];/*从最后一条记录开始均向后移一位*/
          printf("现在请输入要插入的学生信息.\n");
              printf("number:");
          scanf("%d",&stu[i+1].num);
          for(k=0;k<m;k++)//判断是否存在
            if(stu[k].num==stu[m].num)
            {
                printf("number已经存在,按任意键继续!");
                getch();
                fclose(fp);
                return;
            }
          printf("name:");
          scanf("%s",stu[i+1].name);
              printf("elective:");
          scanf("%lf",&stu[i+1].elec);
              printf("experiment:");
          scanf("%lf",&stu[i+1].expe);
              printf("required course:");
          scanf("%lf",&stu[i+1].requ);
          stu[i+1].sum=stu[i+1].elec+stu[i+1].expe+stu[i+1].requ;
          printf("插入成功!按任意键返回主界面!"); 
          if((fp=fopen("data.txt","wb"))==NULL)
        { 
             printf("不能打开!\n");
             return;
        }
          for(k=0;k<=m;k++)
          if(fwrite(&stu[k] ,LEN,1,fp)!=1)/*将修改后的记录写入磁盘文件中*/
           { 
           printf("不能保存!"); 
           getch(); 
        }
      fclose(fp);
}

void total()
{ 
    FILE *fp;
      int m=0;
      if((fp=fopen("data.txt","r+"))==NULL)
     { 
         printf("文件不存在!\n");
         return;
    }
      while(!feof(fp))  
          if(fread(&stu[m],LEN,1,fp)==1) 
              m++;            /*统计记录个数即学生个数*/
      if(m==0) {printf("no record!\n");fclose(fp);return;}
      printf("这个班级一共有 %d 名学生!\n",m);/*将统计的个数输出*/
      fclose(fp);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 利用boost获取时间并格式化的方法

    利用boost获取时间并格式化的方法

    下面小编就为大家带来一篇利用boost获取时间并格式化的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • C语言模拟实现学生学籍管理系统

    C语言模拟实现学生学籍管理系统

    这篇文章主要为大家详细介绍了C语言模拟实现学生学籍管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • C语言示例讲解switch分支语句的用法

    C语言示例讲解switch分支语句的用法

    这篇文章主要为大家介绍了switch语句,switch语句是我们常见会用到的结构,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 利用Matlab绘制一款专属进度条

    利用Matlab绘制一款专属进度条

    MATLAB自带的进度条是很简单的,这样的进度条显得冷冰冰的。因此,本文将用Matlab来DIY一款专属的进度条,感兴趣的小伙伴可以了解一下
    2022-02-02
  • C++实现简单单向链表

    C++实现简单单向链表

    这篇文章主要为大家详细介绍了C++实现简单单向链表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C++实现LeetCode(65.验证数字)

    C++实现LeetCode(65.验证数字)

    这篇文章主要介绍了C++实现LeetCode(65.验证数字),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言菜鸟基础教程之a++与++a

    C语言菜鸟基础教程之a++与++a

    很多同学在学习c语言的时候是不是会碰到a++和++a都有甚么作用啊。今天我们就来探讨下
    2017-10-10
  • C++实现图书馆案例

    C++实现图书馆案例

    这篇文章主要为大家详细介绍了C++实现图书馆案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C++之vector容器的的声明初始化和增删改查

    C++之vector容器的的声明初始化和增删改查

    这篇文章主要给大家介绍了关于C++vector容器的的声明初始化和增删改查的相关资料,向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container),跟任意其它类型容器一样,它能够存放各种类型的对象,需要的朋友可以参考下
    2021-07-07
  • C++左值与右值,右值引用,移动语义与完美转发详解

    C++左值与右值,右值引用,移动语义与完美转发详解

    这篇文章主要为大家详细介绍了Python实现学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03

最新评论