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);
}

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

(0)

相关推荐

  • C语言学生信息管理系统设计与实现

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 #include"stdio.h" //标准的输入输出函数文件头部说明 #include"math.h" // 数学函数头部说明 #include"string.h" #include"stdlib.h" //通过该函数头部里的函数,改变控制台的背景和颜色 #include"windows.h" //头文件声明,下文用到了改变控

  • C语言单链表版学生信息管理系统

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 代码: //以单链表作为存储结构,设计和实现课程成绩管理的完整程序. //程序包括如下功能. //1.建立学生成绩表,包含学生的学号.姓名和成绩. //2.可以显示所有学生成绩. //3.可以计算学生的总数. //4.可以按学号和序号查找学生. //5.可以在指定位置插入学生成绩数据. //6.可以删除指定位置的学生数据. //7.可以把学生成绩按从高到低的顺序排序. //作者: yinlinqvan //操作系统:

  • C语言实现学生信息管理系统(文件版)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 下面是我自己用写的学生信息管理系统,为了增加数据的利用率,分为学生端和教师端,同时实现账号密码登录,以文件的形式将其存入. 代码如下 #include <stdio.h> #include <string.h> #include <string> #include<Windows.h> #define USER "TOM" // 事先定义用户名,用于登录页

  • C语言实现学生信息管理系统(单链表)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 /*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:吴敬超 * 完成日期:2016年7月1日 * 版本号:codeblock * * 问题描述: 学生信息管理系统 * 输入描述: * 程序输出: 输出结果 */ #include <stdio.h> #include <stdlib.h> #include

  • 学生信息管理系统C语言版

    C语言学生信息管理系统包括以下功能: 1.学生信息的整体注册 2.学生信息的修改 3.学生成绩信息的录入 4.学生信息的添加 5.恢复误删的学生信息 6.学生信息的删除 7.密码修改保存函数 8.学生信息的查询 9.密码修改函数 10.学生信息管理系统的菜单函数 #include "stdio.h" #include "malloc.h" #include "string.h" #include "stdlib.h" #inc

  • C语言版学生信息管理系统

    本文实例为大家分享了C语言版学生信息管理系统的具体代码,供大家参考,具体内容如下 一.题目分析 1.功能概述 1)查询学生信息 2)添加学生信息 3)修改学生信息 4)删除学生信息 5)刷新学生信息 6)保存学生信息 7)输出当前学生信息 2.题目要求: 1)使用结构体建立学生信息体制 2)实现七大基本功能 3)采用文件存储学生信息 二.算法构造 1.难点解析----对文件的操作 1.1文件读取 FILE * fp; if ((fp = fopen(filename, "r")) ==

  • C语言数据结构之学生信息管理系统课程设计

    本文实例为大家分享了学生信息管理系统设计的具体代码,供大家参考,具体内容如下 建立一个动态链表,链表中每一结点包括:学号.姓名.性别.年龄.成绩.程序能实现以下功能: 建立链表      显示链表      查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示"无此记录!"的信息.      删除链表中指定学号的结点.      在链表中指定的位置插入一个新结点(学号不能和其他结点重复). 要求:程序运行中,先显示实现以上功能所构成的菜单,然后根据选项调用相应程序

  • C语言使用链表实现学生信息管理系统

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 代码实现的功能: 1.插入学生信息 2.显示学生信息 3.删除学生信息 4.在指定位置插入学生信息 5.查找学生信息 代码内容: #include <stdio.h> #include <stdlib.h> #include <string.h> #define Max_Student_Num 10 #define Max_Str_len 20 typedef struct T_stud

  • C语言数组实现学生信息管理系统设计

    概述 单纯只用多个数组管理学生成绩信息,不使用结构体,该程序最主要的难点是依据学号或总成绩对学生信息进行排序,借助了临时数组来标记排好序的下标. 运行结果如下: 输入数据: 打印数据: 根据学号对信息进行排序: 根据总成绩对信息进行排序: 根据学号删除某一信息: 代码如下: #include <stdio.h> #include <stdlib.h> //exit函数头文件 #include <string.h> //字符串相关操作头文件 #define MAX_STU

  • C语言学生信息管理系统小项目

    本文为大家分享了C语言学生信息管理系统小项目,供大家参考,具体内容如下 /* 运行环境:我是在linux里面用gcc编译的,在windows里应该也能运行,用的一些文件库函数都是c标准库,没有用linux的系统调用(纠正一下:system("clear")这个系统调用是linux的,windows里面用system("cls") ) (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等.试设计一学生信息管理系统,使之能提供以下功

随机推荐