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

2022-11-13 14:11:44 语言 开发 信息管理系统

本文实例为大家分享了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;
      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();
      }
      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()    
{    
    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--;
                  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);
}

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

相关文章