zoukankan      html  css  js  c++  java
  • C语言学生管理系统完善版

    #include<stdio.h>
    #include<string.h>
    #include <stdlib.h>
    #define M 100
    struct score                                    //学生成绩信息结构体定义 
    {
    int china;
    int english;
    int math;
    int  add;

    };


    struct info     //学生信息结构体定义
    {
    int num;            //学生学号5
    char name[10];      //学生姓名
    struct score mark;       //学生成绩 
       


    };




    float guake[10];                         //定义一个各科挂科率 
    float aver[10];                     //定义一个各科平均分 
    struct info student[M];           //定义一个全局数组student,用来存放学生信息,最多存放100个学生。
    char ch[20]={"物联1161学生信息"};                                         //定义一个数据库文件名称 
    int count=0;                                    //存放实际输入的学生人数
    int input(struct info st[]) ;                   //录入学生信息函数声明
    void show(struct info st[],int n) ;             //显示学生信息函数声明
    int del(struct info st[],int n);                //删除学生信息函数声明
    int add_up(struct info st[],int n);                //统计学生信息函数声明
    void change(struct info st[],int n);            // 修改学生信息函数声明
    void search(struct info st[],int n);            //查询学生信息函数声明
    void read();                                    //遍历以往学生信息数据库声明 
    void write();                                     //用于修改和删除 重新写入数据库 
    void all_del();                                    //清空以往所有学生信息 
    void add_date();                                    //自定义学生信息存储文件库
    void read_date();                                   //打开自定义学生信息存储文件库 
    char b[20]={"物联1161学生信息"};                                   //保存文件名称 用于打开失败 原名称变回 
    main()
    {
    int select;
      system("color E");
        read();
    while(1)
    {
    system("cls");
    printf(" ******************欢迎使用****************** ");
    printf(" **************学生信息管理系统************** ");
    printf("   *--------------作者:徐伟明--------------* ");
    printf("   *         1--录入/增加学生信息           * ");
    printf("   *         2--显示学生信息                * ");
    printf("   *         3--查询学生信息                * ");
    printf("   *         4--修改学生信息                * ");
    printf("   *         5--统计学生信息                * ");
    printf("   *         6--删除学生信息                * ");
        printf("   *         7--清空数据库的学生信息        * ");
        printf("   *         8--自定义存储学生信息文件库    * ");
        printf("   *         9--打开自定义存储学生信息文件库* ");
        printf("   *         0--退出                        * ");
    printf(" *------------------------------------------* ");
    printf(" *目前存储信息文件名为<<%s>>* ",ch);
    printf(" 你要输入的功能号是(0--9):");
    scanf("%d",&select);
    if(select==0) break;
    switch(select){
                  case 1: count=input(student); //调用input函数录入数据
    break;
                  case 2: show(student,count); //调用show函数显示学生信息
    system("pause");
    break;
                  case 3: search(student,count);  //调用search函数查询学生信息
    system("pause");
    break;
                  case 4: change(student,count);  //调用change函数修改学生信息
    system("pause");
    break;
                  case 5: count=add_up(student,count);     //调用add_up函数统计学生信息
    system("pause");
    break;

              case 6: count=del(student,count);    // 调用del函数删除学生信息
    system("pause");
    break;
              case 7: all_del();    // //清空以往学生信息数据库声明 
    system("pause");
    break;
              case 8: add_date();    // //自定义增加数据库声明 
    system("pause");
    break;
              case 9: read_date();    // //打开自定义增加数据库声明 
    system("pause");
    break;
                  case 0: exit(0);    // //打开自定义增加数据库声明 
    system("pause");
    break;
    default:printf("没有此选项,请重新选择! "); system("pause");
    getchar();
    }


    }
    }


    void all_del()
    {
    int a=0;
             FILE *fp;
             printf("请输入欲清空文件库名:");
             strcpy(b,ch);
             scanf("%s",&ch);
    if((fp=fopen(ch,"rb"))==NULL)
    {
    printf("清空失败~~未发现文件名%s ",ch);
    strcpy(ch,b);
    fclose(fp);
    goto end;
    }
    fclose(fp);
    fp=fopen(ch,"wb");
    strcpy(ch,b);
         fp=fopen(ch,"rb");
    while(fread(&student[a],sizeof(struct info),1,fp)!=0)
    {
    a++;
    }   
    count=a;
    printf("成功清除%s所有学生信息 ",ch);
    fclose(fp);
    end:;
     } 
     
    void read()
    {
    int a=0;

             FILE *fp;
    if((fp=fopen(ch,"rb"))==NULL)
    {
    printf("~~~~~~~~~~~~~~!!!!!!!!!!未发现该文件!!!!!!!!!!~~~~~~~~~~~~~~");

                strcpy(ch,b);
         fclose(fp);
    goto end; 
    }
    while(fread(&student[a],sizeof(struct info),1,fp)!=0)
    {
    a++;
    }   
    count=a;
    fclose(fp);
    printf("··············恭喜遍历%s成功················ ",ch); 
    end:;



    void write()                                                        //格式化文件 重新录入所有信息 
    {
    FILE *fp;
    int i;
    if((fp=fopen(ch,"wb"))==NULL)
    {
    printf("error");
    exit(0);
    }
    for(i=0;i<count;i++)
    {
    if(fwrite(&student[i],sizeof(struct info),1,fp)!=1)
    {
    printf("error");
    fclose(fp);
    }
    }
    fclose(fp);
     } 


    void add_date()
     {
      FILE *fp;
      int a=0;
      printf("请输入数据库文件名称:");
      scanf("%s",&ch);
      if(!(fp=fopen(ch,"wb")))
      {
      printf("cannoe open the file");


    }
    fclose(fp);
    fp=fopen(ch,"rb");
    while(fread(&student[a],sizeof(struct info),1,fp)!=0)
    {
    a++;
    }   
    count=a;
    printf("···················成功创建数据库%s··················· ",ch); 
    fclose(fp);
     }
     
     void read_date()
     {
      printf("输入你下要打开数据库名称:"); 
      strcpy(b,ch);
      scanf("%s",&ch);
      char b[20]={"a"};
      read();
     }




    int input(struct info st[]) //录入学生信息的函数
    {
    char sel;
    FILE *fp;

    if((fp=fopen(ch,"ab+"))==NULL)
    {
    printf("sfsdf");
    exit(0);
    }
      int i=count;                                
    do
      {

    printf(" 请输入第%d个学生信息: ",i+1);
    printf(" 学生学号:");
    scanf("%d",&st[i].num);
    printf(" 学生姓名:");
    scanf("%s",&st[i].name);
    printf(" 语文成绩:");
    scanf("%d",&st[i].mark.china);
    printf(" 英语成绩:");
    scanf("%d",&st[i].mark.english);
    printf(" 数学成绩:");
    scanf("%d",&st[i].mark.math);
    st[i].mark.add=st[i].mark.china+st[i].mark.english+st[i].mark.math;
    if(fwrite(&student[i],sizeof(struct info),1,fp)!=1)         //录入数据库 
    printf("error");
    i++;
    printf(" 是否要继续录入学生信息(Y/N):");
    getchar();                               //此处是读走缓冲区的换行符
    sel=getchar();     
    }while(sel=='Y' || sel=='y' ); 
    fclose(fp);                                  //关闭文件 
    return i;
    }


    void show(struct info st[],int n)               //显示所有学生信息函数
    {
    int i,j,min;
    for(i=0;i<count-1;i++)                            //步骤:学号排序 
      {   min=i;                 
         
          for(j=i+1;j<count;j++)
          if(st[min].num>st[j].num)
          {
          st[99]=st[min]; st[min]=st[j]; st[j]=st[99];
    }
    }
    printf(" %-10s%-15s%-10s%-10s%-10s%-10s ","学生学号","学生姓名","语文","英语","数学","总分");
    for(i=0;i<n;i++)
    {
    printf(" %-10d%-15s%-10d%-10d%-10d%-10d ",st[i].num,st[i].name,st[i].mark.china,st[i].mark.english,st[i].mark.math,st[i].mark.add);
    }
    printf(" ");
    }




    void search(struct info st[],int n)                   //根据学号查询学生信息 
    {
    int num,i;
    printf(" 请输入需要查询的学号:");
    scanf("%d",&num);
    for(i=0;i<count;i++)
    {
    if(num==st[i].num) 
    {
    printf(" %-10s%-15s%-10s%-10s%-10s%-10s ",
    "学生学号","学生姓名","语文","英语","数学","总分");
    printf(" %-10d%-15s%-10d%-10d%-10d%-10d ",st[i].num,st[i].name,st[i].mark.china,st[i].mark.english,st[i].mark.math,st[i].mark.add);
    }
        
    }
    return;
    }


    void change(struct info st[],int n)                                     //修改学生信息 
    {
    int num,i;
    printf(" %-10s%-15s%-10s%-10s%-10s%-10s ",
    "学生学号","学生姓名","语文","英语","数学","总分");
    for(i=0;i<count;i++)
    {
    printf(" %-10d%-15s%-10d%-10d%-10d%-10d ",st[i].num,st[i].name,st[i].mark.china,st[i].mark.english,
    st[i].mark.math,st[i].mark.add);   
    }
    printf(" 请输入需要修改信息的学号:");
    scanf("%d",&num);
    for(i=0;i<count;i++)
    {
    if(num==st[i].num) 
    {
    printf(" %-10s%-15s%-10s%-10s%-10s%-10s ",
    "学生学号","学生姓名","语文","英语","数学","总分");
    printf(" %-10d%-15s%-10d%-10d%-10d%-10d ",st[i].num,st[i].name,st[i].mark.china,st[i].mark.english,st[i].mark.math,st[i].mark.add);break;
    }
    if(i==count-1){  printf("修改失败~未发现学号%d ",num);goto end;}
     }
        printf(" 请输入学号为%d学生信息: ",st[i].num);
    printf(" 学生学号:");
    scanf("%d",&st[i].num);
    printf(" 学生姓名:");
    scanf("%s",&st[i].name);
    printf(" 语文成绩:");
    scanf("%d",&st[i].mark.china);
    printf(" 英语成绩:");
    scanf("%d",&st[i].mark.english);
    printf(" 数学成绩:");
    scanf("%d",&st[i].mark.math);
    getchar();
    printf("。。。。。。。。。。。修改成功。。。。。。。。。。。。 "); 
    write();
    end:;
    }




    int add_up(struct info st[],int n)                     //统计学生信息 
    {
    int a,b,c,d,e,f;
         int i,j,max;
         float add=0.0,g=0.0;
         for(i=0;i<count-1;i++)                            //步骤:总分排序 
      {   max=i;                 
         
          for(j=i+1;j<count;j++)
          if(st[max].mark.add<st[j].mark.add)
          {
          st[99]=st[max]; st[max]=st[j]; st[j]=st[99];
    }
    }
         
         
          printf(" %-10s%-15s%-10s%-10s%-10s%-10s%-10s ",
    "学生学号","学生姓名","语文","英语","数学","总分","名次");
    max=1;
         for(i=0;i<count;i++)
        {
    printf(" %-10d%-15s%-10d%-10d%-10d%-10d%-10d ",st[i].num,st[i].name,st[i].mark.china,st[i].mark.english,st[i].mark.math,st[i].mark.add,max++);
        }


         for(i=0;i<count;i++)                                                           //步骤:统计平均分 
         add=st[i].mark.china+add;
         aver[0]=add/count;
         
    add=0;
         for(i=0;i<count;i++)
         add+=st[i].mark.english;
         aver[1]=add/count;
         
         add=0;
         for(i=0;i<count;i++)
         add+=st[i].mark.math;
         aver[2]=add/count;
         


    printf("             平均分:  %-10.2f%-10.2f%-10.2f ",aver[0],aver[1],aver[2]) ;   
     
     
    for(i=0;i<count;i++)                                              //步骤: 统计各科挂科率 
    {if(st[i].mark.china<60)  g++; } guake[0]=(g/count)*100;
    g=0;
    for(i=0;i<count;i++)
    {if(st[i].mark.english<60)  g++; } guake[1]=(g/count)*100;
    g=0;
    for(i=0;i<count;i++)
    {if(st[i].mark.math<60)  g++; }   guake[2]=(g/count)*100;


     
    printf("             挂科率:  %-10.2f%-10.2f%-10.2f ",guake[0],guake[1],guake[2]) ; 
     
    printf(" 各科状元郎: ");
    printf(" %-10s%-15s%-15s%-10s ","状元科目","分数","姓名","学号");
                              
          a=0;                 
          for(j=1;j<count;j++)                                               //步骤: 通过打雷法寻最高分 
          if(st[a].mark.china<st[j].mark.china) a=j;
           
      b=0;                 
          for(j=1;j<count;j++)
          if(st[b].mark.english<st[j].mark.english)
          {
              b=j;
    }
     
      c=0;                 
          for(j=1;j<count;j++)
          if(st[c].mark.math<st[j].mark.math)
          {
              c=j;
    }


    printf("%-10s%-15d%-15s%-10d ","语文",st[a].mark.china,st[a].name,st[a].num);
         printf("%-10s%-15d%-15s%-10d ","英语",st[b].mark.english,st[b].name,st[b].num);
         printf("%-10s%-15d%-15s%-10d ","数学",st[c].mark.math,st[c].name,st[c].num);
                             
         return i;
    }












    int del(struct info st[],int n)                 //删除学生信息 
    {
    int num,i;
    printf(" %-10s%-15s%-10s%-10s%-10s%-10s ",
    "学生学号","学生姓名","语文","英语","数学","总分");
    for(i=0;i<count;i++)
    {
    printf(" %-10d%-15s%-10d%-10d%-10d%-10d ",st[i].num,st[i].name,st[i].mark.china,st[i].mark.english,
    st[i].mark.math,st[i].mark.add);   
    }
    printf(" 请输入需要删除信息的学号:");
    scanf("%d",&num);
    for(i=0;i<count;i++)
    {
    if(num==st[i].num) break;
    if(i==count-1) {printf("删除失败~未发现学号%d ",num);goto end;}
    }
    for(;i<count-1;i++)
    {
    st[i]=st[i+1];
    }
    count--;
    printf("。。。。。。。。。。。删除成功。。。。。。。。。。。。 "); 
    write();
         end:
        return i;

    }



  • 相关阅读:
    浅谈Linux的内存管理机制
    [SCM]源码管理 perforce状态的检测
    轻松构建Mysql高可用集群系统
    [BuildRelease].NET代码静态检测FxCop
    Ant高级task
    Jenkins master在windows上安装
    Jenkins的Windows Slave的配置
    Jenkins的配置
    [BuildRelease]跨平台build脚本
    使用Synergy多台电脑共享键盘鼠标和剪贴板
  • 原文地址:https://www.cnblogs.com/viplanyue/p/12700737.html
Copyright © 2011-2022 走看看