C语言--简易的学生信息系统

🎁引语–本章所用到的知识点和头文件

🎉知识点

循环结构、选择结构、数组、函数、动态内存分配、指针、qsort排序、结构体

🎊头文件

#include <stdio.h>
#include <string.h>
#include <unistd.h>  //sleep的头文件,linux下用这个,我是在linux系统下跑的代码
#include <stdlib.h>     
//#include <Windows.h>  //sleep的头文件,windows下用这个

✨界面展示

登录
录入
打印所有学生信息
查询某课成绩
查询某个学生信息
删除

🎪1.该系统需要实现的功能

1.登录界面
2.录入学生信息
3.删除某学生的信息
4.查询某学科成绩表
5.打印所有学生信息
6.查询某个学生的信息

🐲2. 创建学生个体和给系统开辟空间

用结构体来定义学生个体,用全局数组来给系统开辟静态空间(1000个),全局变量end记录当前系统有多少学生。

typedef struct student
{
   char id[20];  //学号
   char name[20]; //姓名
   char sex[4];  //性别
   //各科成绩
   int Math;      //数学
   int Language;  //语文
   int Einglish;  //英语

}St;

  
St  arr_st[1000]; //系统最多容纳1000个学生
int  end=0; //记录系统的总人数

🎪3.主函数框架main()

int main()
{
    //登录密码:123456pcj 三次登录机会
    int input=0;
    Register(3);//登录
   
    while(1)
    {
            printf("***********************************************************************\n");
            printf("***************请输入你要进行的操作:0 1 2 3 4**************************\n");
            printf("**********▶ 0.退出教务系统         ▶ 1.录入学生个人信息****************\n");
            printf("**********▶ 2.删除学生个人信息     ▶ 3.查询某学科成绩表****************\n");
            printf("**********▶ 4.打印所有学生信息     ▶ 5.查询某个学生信息****************\n");
            printf("***********************************************************************\n\n\n\n");
            printf("请输入你要进行的操作(0-退出,1-录入,2-删,3-查询某成绩,4-打印,5-查询某信息)->:");
            scanf("%d",&input);
            switch(input)
            {
                case 1:  Logging_Data();break;  
                case 2:  Delete_Data(); break;
                case 3:  Select_stu_subject();break;
                case 4:  Print_stu_data();break;
                case 5:  Select_stu_Data();break;
                case 0:  printf("退出教务系统\n");
                         exit(0);  
               default:printf("请输入正确的操作,傻叼🙂!!!!\n");break;
            }
    }
    return 0;
}

✍4. 各模块功能的具体实现

📔 4.1登录功能的实现

密码内置为123456pcj,只有三次登录机会,密码输入错误系统会提示你并且告知你还有几次输入机会,三次机会都用完且没有进入学生信息系统将会退出程序。

//登录
void Register(int n)
{
char s[12];
   while(n)
    {
        printf("🔒请输入登录密码:->");
        gets(s);
        if(strcmp(s,"123456pcj")==0)
        {
            printf("密码正确!\n");
            sleep(1);
            printf("正在登录~~\n");
            sleep(1.5);
            printf("正在登录~~~~~\n");
            sleep(1.2);
            printf("正在登录~~~~~~~\n");
            sleep(1);
            printf("教务系统登录成功!🔓\n");
            return;
        }
        else
        {
             n--;
             if(n!=0)
             printf("密码错误,🙂傻屌你还有%d次机会\n",n);
        }
    }
     printf("密码错误,登录机会已经用完,请重启系统吧,骚年🧙‍♂️ !!!\n");
}

📕 4.2录入学生信息功能的实现

录入学生信息时,应注意一下几个问题:
1.当系统已经被存满时,将无法录入学生信息
2.学生的学号不可以重复,名字可以
3.学生的学科成绩范围为[0,100]

//录入
void Logging_Data()
{
    printf("\n***********************************************************************\n");
    printf("***********************************************************************\n");
    //判断系统是否人数已满
    if(end==1000)
    {
        printf("该学校人数已经招满!!!");
        sleep(1.5);
        printf("正在退出~~\n");      
        sleep(1.4);
        printf("正在退出~~~~~\n");   
        sleep(1.2);
        printf("正在退出~~~~~~~\n"); 
        sleep(1.1);
        printf("已经退出了录入系统,进入到了主界面\n\n");
        return;
    }

    printf("🧠你已经进入录入系统!\n");
    sleep(1);
    printf("请输入你需要录多少个学生的信息,目前该学校最多招1000个人,系统还剩%d个名额!\n-->请输入N:",1000-end);
    int N;
    while(1)
    {
       scanf("%d",&N);
       if(end+N<=1000)
       {
          break;
       } 
       else
       {
           printf("🙂沙雕人数超出了,请重新输入N:");
       }
    }
    sleep(0.5);
    int Curent_num=end; //注意这里的细节,不能用end来结尾,因为插入一个学生,end就要加1
    for(int i=end;i<Curent_num+N;i++,end++)
    {
         printf("\n请输入第%d个学生的信息\n",i+1);
         while(1)
         {
            int flag=0;
             printf("学号:");
             scanf("%s",&arr_st[i].id);
               for(int j=0;j<i;j++)
                {
                    if(strcmp(arr_st[i].id,arr_st[j].id)==0)
                    {
                        printf("🤔此学号已经存在,请重新输入新的学号!\n");
                        flag=1;
                        break;
                    }
                }
            if(flag==0) break;
         }
         printf("姓名:");
         scanf("%s",&arr_st[i].name);
         printf("性别:");
         scanf("%s",&arr_st[i].sex);
         while(1)
         {
           printf("数学 语文 英语 成绩[0,100]:");
          scanf("%d %d %d",&arr_st[i].Math,&arr_st[i].Language,&arr_st[i].Einglish);
           if((arr_st[i].Math>=0&&arr_st[i].Math<=100)&&
            (arr_st[i].Language>=0&&arr_st[i].Language<=100)&&
            (arr_st[i].Einglish>=0&&arr_st[i].Einglish<=100))
            {
                break;
            }
            else
            {
                printf("成绩输入不符合条件,🙂沙雕!!!\n");
                printf("请重新输入:\n");
                sleep(0.5);
            }
         }

    }
    printf("学生信息录入完毕!\n");
    sleep(1.5);
    printf("正在退出~~\n");      
    sleep(1.4);
    printf("正在退出~~~~~\n");   
    sleep(1.2);
    printf("正在退出~~~~~~~\n"); 
    sleep(1.1);
    printf("已经退出了录入系统,进入到了主界面\n\n");
    
}

📗4.3删除学生信息

注意的问题:
1.系统没有学生不进行删除操作
2.end等于0,不再进行删除操作

void Delete_Data()
{
    printf("\n***********************************************************************\n");
    printf("***********************************************************************\n");
    if(end==0)
    {
        printf("👻系统没有学生,无法进行删除!");
        sleep(1.5);
        printf("正在退出~~\n");      
        sleep(1.1);
        printf("已经退出了录入系统,进入到了主界面\n\n");
        return;
    }
    printf("👻你已经进入到了删除系统\n");
    int input=1;
    while(input)
    {
        printf("\n请输入你需要删除的学生的id->:");
        int flag=0;
        char id[20];
        scanf("%s",id);
        getchar(); //吃掉'\n'
        for(int i=0;i<end;i++)
        {
            if(strcmp(id,arr_st[i].id)==0)
            {
                for(int j=i;j<end-1;j++)
                {
                    arr_st[j]=arr_st[j+1];
                }
                flag=1;
                break;
            }
        }
        if(flag==1)
        {
            end--;
            printf("删除成功!\n");
            printf("这个学生id:%s已被删除\n",id);
            printf("系统还剩%d个学生\n",end);
        }
        if(flag==0)
        {
            printf("删除失败!\n");
            printf("不存在这个学生id:%s\n",id);
        }

        if(end==0)
        {//系统无学生了
           printf("系统已经没有学生了\n");
           break;
        }
       printf("是否要继续删除,0表示退出,非0表示继续->\n请输入数据input:->");
       scanf("%d",&input);
       getchar();  //吃掉'\n'
    }
    sleep(1.5);
    printf("正在退出~~\n");      
    sleep(1.4);
    printf("正在退出~~~~~\n");   
    sleep(1.2);
    printf("正在退出~~~~~~~\n"); 
    sleep(1.1);
    printf("已经退出了删除系统,进入到了主界面\n\n");
}

📘4.4查询某学科的成绩表(从高到底)

这个功能实现起来比较麻烦,这个功能我是放到最后才去实现它的。

我的思路走向:
1.我先动态开辟一段连续的end(end:目前有多少个学生)个(struct student类型)空间,用指针arr指向这一段空间的首地址。可以理解为我开辟一个(end个)大小的arr数组arr[end]。
2.把arr_st数组目前里面(end个)学生赋值到arr指针指向的那段空间(arr数组)。
3.再调用#include <stdlib.h> 的qsort函数对arr数组排序,qsort函数可以对结构体进行排序,
0代表我以数学学科成绩进行降序排序 ;打印
1代表我以语文学科成绩进行降序排序 ;打印
2代表我以英语学科成绩进行降序排序 ;打印

需要注意的问题:
1.end == 0不打印
2.每次调用完这个功能,一定要把动态开辟的空间free释放,如果不释放将会造成内存泄漏。

//查询某学科成绩表
void Select_stu_subject()
{
    
    printf("\n***********************************************************************\n");
    printf("***********************************************************************\n");
    if(end==0)
    {
        printf("\n📑系统不存在学生-->退出\n");
        sleep(1.5);
        printf("正在退出~~~~~~~\n"); 
        sleep(1.1);
        printf("已经退出了查询某个学生信息系统,进入到了主界面\n\n");
        return;
    }
     printf("\n📑你已经进入到了查询某学科成绩表系统\n");

    St*arr=(St*)malloc(sizeof(arr_st)*end);
        for(int i=0;i<end;i++)
        {//赋值
            arr[i]=arr_st[i];
        }
    while(1)
    {
        
       printf("查询某学科的成绩表(0-数学,1-语文,2-英语,-1-退出查询某学科成绩表系统)input:->");
      int input;
      scanf("%d",&input);
      switch(input)
      {
        case 0:qsort(arr,end,sizeof(arr[0]),cmpare_math);Print_subject(arr,0);break;
        case 1:qsort(arr,end,sizeof(arr[0]),cmpare_language);Print_subject(arr,1);break;
        case 2:qsort(arr,end,sizeof(arr[0]),cmpare_einglish);Print_subject(arr,2);break;
        default: printf("请输入正确的操作\n");break;
        case -1:free(arr);
                sleep(1.5);
                printf("正在退出~~\n");      
                sleep(1.4);
                printf("正在退出~~~~~\n");   
                sleep(1.2);
                printf("正在退出~~~~~~~\n"); 
                sleep(1.1);
                printf("已经退出了查询某个学科的成绩表系统,进入到了主界面\n\n");
                return;
      }
    }
}
int cmpare_math( const void *a , const void *b )   //数学比较
{ 
return (*(St*)a).Math > (*(St*)b).Math ? -1 : 1;  
} 

int cmpare_language( const void *a , const void *b )  //语文比较
{ 
return (*(St*)a).Language > (*(St*)b).Language ? -1 : 1;  
} 

int cmpare_einglish( const void *a , const void *b )  //英语比较
{ 
return (*(St*)a).Einglish > (*(St*)b).Einglish ? -1 : 1;  
} 

//打印某学科
void Print_subject(St*arr,int num)
{
    puts("--------------------------------------------------------");
    if(num==0)
    {
       puts("学号\t\t姓名\t\t性别\t\t数学");
       for(int i=0;i<end;i++)
        {
            printf("%s\t\t%s\t\t%s\t",arr[i].id,arr[i].name,arr[i].sex);
            printf("\t%d\n",arr[i].Math);
        }
    }
    if(num==1)
    {
         puts("学号\t\t姓名\t\t性别\t\t语文");
       for(int i=0;i<end;i++)
        {
            printf("%s\t\t%s\t\t%s\t",arr[i].id,arr[i].name,arr[i].sex);
            printf("\t%d\n",arr[i].Language);
        }
    }
    if(num==2)
    {
         puts("学号\t\t姓名\t\t性别\t\t英语");
       for(int i=0;i<end;i++)
        {
            printf("%s\t\t%s\t\t%s\t",arr[i].id,arr[i].name,arr[i].sex);
            printf("\t%d\n",arr[i].Einglish);
        }
    }
    
}

📙4.5打印所有学生的信息

//打印
void Print_stu_data()
{
    if(end==0)
    {
        printf("🎅系统暂时没有学生,请去录入学生信息!!\n");   
        sleep(0.8);
        printf("正在退出~~~~~~~\n"); 
        sleep(1.1);
        printf("已经退出了录入系统,进入到了主界面\n\n");
        return;
    }
    printf("\n🎅正在打印所有学生信息!\n");
    printf("--------------------------------------------------------------------------------------------------\n");
    printf("--------------------------------------------------------------------------------------------------\n");
    for(int i=0;i<end;i++)
    {
       printf("\n第%d个学生的信息\n",i+1);
       printf("学号:%-4s  姓名:%-10s 性别:%-3s",arr_st[i].id,arr_st[i].name,arr_st[i].sex);
       printf(" 学科成绩:数学:%-3d  语文:%-3d 英语:%-3d",arr_st[i].Math,arr_st[i].Language,arr_st[i].Einglish);
       printf("\n");
       sleep(1);
    }
    printf("--------------------------------------------------------------------------------------------------\n");
    printf("--------------------------------------------------------------------------------------------------\n");
    printf("\n所有学生信息打印完毕!\n");
    sleep(1.5);
    printf("正在退出~~\n");      
    sleep(1.4);
    printf("正在退出~~~~~\n");   
    sleep(1.2);
    printf("正在退出~~~~~~~\n"); 
    sleep(1.1);
    printf("已经退出了打印系统,进入到了主界面\n\n");
}

📓4.6查询某个学生信息

存在找到和找不到两种可能性

void Select_stu_Data()
 {
    printf("\n***********************************************************************\n");
    printf("***********************************************************************\n");
    if(end==0) 
    {
        printf("\n👺系统不存在学生-->退出\n");
        sleep(1.5);
        printf("正在退出~~~~~~~\n"); 
        sleep(1.1);
        printf("已经退出了查询某个学生信息系统,进入到了主界面\n\n");
        return;
    }
    printf("\n👺你已经进入到了查询某个学生信息系统\n");
    int input=1;
    while(input)
    {
        printf("\n输入你要查询的学生的id->:");
        int flag=0;
        char id[20];
        scanf("%s",id);
        getchar();  //吃掉'\n'
        for(int i=0;i<end;i++)
            {
                if(strcmp(id,arr_st[i].id)==0)
                {
                    flag=1;
                    printf("找到了--->学生的信息:\n");
                    printf("学号:%-4s  姓名:%-10s 性别:%-3s",arr_st[i].id,arr_st[i].name,arr_st[i].sex);
                    printf(" 学科成绩:数学:%-3d  语文:%-3d 英语:%-3d",arr_st[i].Math,arr_st[i].Language,arr_st[i].Einglish);
                    break;
                }
            }
        if(flag==0)
        {
            printf("未找到-->不在这个学生id:%s\n",id);
        }
         printf("\n是否要继续查询,0表示退出,非0表示继续->\n请输入数据input:->");
         scanf("%d",&input);
         getchar();  //吃掉'\n'
    }
    sleep(1.5);
    printf("正在退出~~\n");      
    sleep(1.4);
    printf("正在退出~~~~~\n");   
    sleep(1.2);
    printf("正在退出~~~~~~~\n"); 
    sleep(1.1);
    printf("已经退出了查询某个学生信息系统,进入到了主界面\n\n");
 }

🤔5.源码

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
//#include <Windows.h>
typedef struct student
{
   char id[20];  //学号
   char name[20]; //姓名
   char sex[4];  //性别
   //各科成绩
   int Math;      //数学
   int Language;  //语文
   int Einglish;  //英语

}St;

  
St  arr_st[1000];
int  end=0; //记录系统的总人数

//登录
void Register(int n)
{
char s[12];
   while(n)
    {
        printf("🔒请输入登录密码:->");
        gets(s);
        if(strcmp(s,"123456pcj")==0)
        {
            printf("密码正确!\n");
            sleep(1);
            printf("正在登录~~\n");
            sleep(1.5);
            printf("正在登录~~~~~\n");
            sleep(1.2);
            printf("正在登录~~~~~~~\n");
            sleep(1);
            printf("教务系统登录成功!🔓\n");
            return;
        }
        else
        {
             n--;
             if(n!=0)
             printf("密码错误,🙂傻屌你还有%d次机会\n",n);
        }
    }
     printf("密码错误,登录机会已经用完,请重启系统吧,骚年🧙‍♂️ !!!\n");
}

//录入
void Logging_Data()
{
    printf("\n***********************************************************************\n");
    printf("***********************************************************************\n");
    //判断系统是否人数已满
    if(end==1000)
    {
        printf("该学校人数已经招满!!!");
        sleep(1.5);
        printf("正在退出~~\n");      
        sleep(1.4);
        printf("正在退出~~~~~\n");   
        sleep(1.2);
        printf("正在退出~~~~~~~\n"); 
        sleep(1.1);
        printf("已经退出了录入系统,进入到了主界面\n\n");
        return;
    }

    printf("🧠你已经进入录入系统!\n");
    sleep(1);
    printf("请输入你需要录多少个学生的信息,目前该学校最多招1000个人,系统还剩%d个名额!\n-->请输入N:",1000-end);
    int N;
    while(1)
    {
       scanf("%d",&N);
       if(end+N<=1000)
       {
          break;
       } 
       else
       {
           printf("🙂沙雕人数超出了,请重新输入N:");
       }
    }
    sleep(0.5);
    int Curent_num=end;
    for(int i=end;i<Curent_num+N;i++,end++)
    {
         printf("\n请输入第%d个学生的信息\n",i+1);
         while(1)
         {
            int flag=0;
             printf("学号:");
             scanf("%s",&arr_st[i].id);
               for(int j=0;j<i;j++)
                {
                    if(strcmp(arr_st[i].id,arr_st[j].id)==0)
                    {
                        printf("🤔此学号已经存在,请重新输入新的学号!\n");
                        flag=1;
                        break;
                    }
                }
            if(flag==0) break;
         }
         printf("姓名:");
         scanf("%s",&arr_st[i].name);
         printf("性别:");
         scanf("%s",&arr_st[i].sex);
         while(1)
         {
           printf("数学 语文 英语 成绩[0,100]:");
          scanf("%d %d %d",&arr_st[i].Math,&arr_st[i].Language,&arr_st[i].Einglish);
           if((arr_st[i].Math>=0&&arr_st[i].Math<=100)&&
            (arr_st[i].Language>=0&&arr_st[i].Language<=100)&&
            (arr_st[i].Einglish>=0&&arr_st[i].Einglish<=100))
            {
                break;
            }
            else
            {
                printf("成绩输入不符合条件,🙂沙雕!!!\n");
                printf("请重新输入:\n");
                sleep(0.5);
            }
         }

    }
    printf("学生信息录入完毕!\n");
    sleep(1.5);
    printf("正在退出~~\n");      
    sleep(1.4);
    printf("正在退出~~~~~\n");   
    sleep(1.2);
    printf("正在退出~~~~~~~\n"); 
    sleep(1.1);
    printf("已经退出了录入系统,进入到了主界面\n\n");
    
}

//打印
void Print_stu_data()
{
    if(end==0)
    {
        printf("🎅系统暂时没有学生,请去录入学生信息!!\n");   
        sleep(0.8);
        printf("正在退出~~~~~~~\n"); 
        sleep(1.1);
        printf("已经退出了录入系统,进入到了主界面\n\n");
        return;
    }
    printf("\n🎅正在打印所有学生信息!\n");
    printf("--------------------------------------------------------------------------------------------------\n");
    printf("--------------------------------------------------------------------------------------------------\n");
    for(int i=0;i<end;i++)
    {
       printf("\n第%d个学生的信息\n",i+1);
       printf("学号:%-4s  姓名:%-10s 性别:%-3s",arr_st[i].id,arr_st[i].name,arr_st[i].sex);
       printf(" 学科成绩:数学:%-3d  语文:%-3d 英语:%-3d",arr_st[i].Math,arr_st[i].Language,arr_st[i].Einglish);
       printf("\n");
       sleep(1);
    }
    printf("--------------------------------------------------------------------------------------------------\n");
    printf("--------------------------------------------------------------------------------------------------\n");
    printf("\n所有学生信息打印完毕!\n");
    sleep(1.5);
    printf("正在退出~~\n");      
    sleep(1.4);
    printf("正在退出~~~~~\n");   
    sleep(1.2);
    printf("正在退出~~~~~~~\n"); 
    sleep(1.1);
    printf("已经退出了打印系统,进入到了主界面\n\n");
}

//删除
void Delete_Data()
{
    printf("\n***********************************************************************\n");
    printf("***********************************************************************\n");
    if(end==0)
    {
        printf("👻系统没有学生,无法进行删除!");
        sleep(1.5);
        printf("正在退出~~\n");      
        sleep(1.1);
        printf("已经退出了录入系统,进入到了主界面\n\n");
        return;
    }
    printf("👻你已经进入到了删除系统\n");
    int input=1;
    while(input)
    {
        printf("\n请输入你需要删除的学生的id->:");
        int flag=0;
        char id[20];
        scanf("%s",id);
        getchar(); //吃掉'\n'
        for(int i=0;i<end;i++)
        {
            if(strcmp(id,arr_st[i].id)==0)
            {
                for(int j=i;j<end-1;j++)
                {
                    arr_st[j]=arr_st[j+1];
                }
                flag=1;
                break;
            }
        }
        if(flag==1)
        {
            end--;
            printf("删除成功!\n");
            printf("这个学生id:%s已被删除\n",id);
            printf("系统还剩%d个学生\n",end);
        }
        if(flag==0)
        {
            printf("删除失败!\n");
            printf("不存在这个学生id:%s\n",id);
        }

        if(end==0)
        {//系统无学生了
           printf("系统已经没有学生了\n");
           break;
        }
       printf("是否要继续删除,0表示退出,非0表示继续->\n请输入数据input:->");
       scanf("%d",&input);
       getchar();  //吃掉'\n'
    }
    sleep(1.5);
    printf("正在退出~~\n");      
    sleep(1.4);
    printf("正在退出~~~~~\n");   
    sleep(1.2);
    printf("正在退出~~~~~~~\n"); 
    sleep(1.1);
    printf("已经退出了删除系统,进入到了主界面\n\n");
}

 //查询某个学生信息
 void Select_stu_Data()
 {
    printf("\n***********************************************************************\n");
    printf("***********************************************************************\n");
    if(end==0) 
    {
        printf("\n👺系统不存在学生-->退出\n");
        sleep(1.5);
        printf("正在退出~~~~~~~\n"); 
        sleep(1.1);
        printf("已经退出了查询某个学生信息系统,进入到了主界面\n\n");
        return;
    }
    printf("\n👺你已经进入到了查询某个学生信息系统\n");
    int input=1;
    while(input)
    {
        printf("\n输入你要查询的学生的id->:");
        int flag=0;
        char id[20];
        scanf("%s",id);
        getchar();  //吃掉'\n'
        for(int i=0;i<end;i++)
            {
                if(strcmp(id,arr_st[i].id)==0)
                {
                    flag=1;
                    printf("找到了--->学生的信息:\n");
                    printf("学号:%-4s  姓名:%-10s 性别:%-3s",arr_st[i].id,arr_st[i].name,arr_st[i].sex);
                    printf(" 学科成绩:数学:%-3d  语文:%-3d 英语:%-3d",arr_st[i].Math,arr_st[i].Language,arr_st[i].Einglish);
                    break;
                }
            }
        if(flag==0)
        {
            printf("未找到-->不在这个学生id:%s\n",id);
        }
         printf("\n是否要继续查询,0表示退出,非0表示继续->\n请输入数据input:->");
         scanf("%d",&input);
         getchar();  //吃掉'\n'
    }
    sleep(1.5);
    printf("正在退出~~\n");      
    sleep(1.4);
    printf("正在退出~~~~~\n");   
    sleep(1.2);
    printf("正在退出~~~~~~~\n"); 
    sleep(1.1);
    printf("已经退出了查询某个学生信息系统,进入到了主界面\n\n");
 }


int cmpare_math( const void *a , const void *b )   //数学比较
{ 
return (*(St*)a).Math > (*(St*)b).Math ? -1 : 1;  
} 

int cmpare_language( const void *a , const void *b )  //语文比较
{ 
return (*(St*)a).Language > (*(St*)b).Language ? -1 : 1;  
} 

int cmpare_einglish( const void *a , const void *b )  //英语比较
{ 
return (*(St*)a).Einglish > (*(St*)b).Einglish ? -1 : 1;  
} 

//打印某学科
void Print_subject(St*arr,int num)
{
    puts("--------------------------------------------------------");
    if(num==0)
    {
       puts("学号\t\t姓名\t\t性别\t\t数学");
       for(int i=0;i<end;i++)
        {
            printf("%s\t\t%s\t\t%s\t",arr[i].id,arr[i].name,arr[i].sex);
            printf("\t%d\n",arr[i].Math);
        }
    }
    if(num==1)
    {
         puts("学号\t\t姓名\t\t性别\t\t语文");
       for(int i=0;i<end;i++)
        {
            printf("%s\t\t%s\t\t%s\t",arr[i].id,arr[i].name,arr[i].sex);
            printf("\t%d\n",arr[i].Language);
        }
    }
    if(num==2)
    {
         puts("学号\t\t姓名\t\t性别\t\t英语");
       for(int i=0;i<end;i++)
        {
            printf("%s\t\t%s\t\t%s\t",arr[i].id,arr[i].name,arr[i].sex);
            printf("\t%d\n",arr[i].Einglish);
        }
    }
    
}

//查询某学科成绩表
void Select_stu_subject()
{
    
    printf("\n***********************************************************************\n");
    printf("***********************************************************************\n");
    if(end==0)
    {
        printf("\n📑系统不存在学生-->退出\n");
        sleep(1.5);
        printf("正在退出~~~~~~~\n"); 
        sleep(1.1);
        printf("已经退出了查询某个学生信息系统,进入到了主界面\n\n");
        return;
    }
     printf("\n📑你已经进入到了查询某学科成绩表系统\n");

    St*arr=(St*)malloc(sizeof(arr_st)*end);
        for(int i=0;i<end;i++)
        {//赋值
            arr[i]=arr_st[i];
        }
    while(1)
    {
        
       printf("查询某学科的成绩表(0-数学,1-语文,2-英语,-1-退出查询某学科成绩表系统)input:->");
      int input;
      scanf("%d",&input);
      switch(input)
      {
        case 0:qsort(arr,end,sizeof(arr[0]),cmpare_math);Print_subject(arr,0);break;
        case 1:qsort(arr,end,sizeof(arr[0]),cmpare_language);Print_subject(arr,1);break;
        case 2:qsort(arr,end,sizeof(arr[0]),cmpare_einglish);Print_subject(arr,2);break;
        default: printf("请输入正确的操作\n");break;
        case -1:free(arr);
                sleep(1.5);
                printf("正在退出~~\n");      
                sleep(1.4);
                printf("正在退出~~~~~\n");   
                sleep(1.2);
                printf("正在退出~~~~~~~\n"); 
                sleep(1.1);
                printf("已经退出了查询某个学科的成绩表系统,进入到了主界面\n\n");
                return;
      }
    }
}

int main()
{
    //登录密码:123456pcj 三次登录机会
    int input=0;
    Register(3);//登录
   
    while(1)
    {
            printf("***********************************************************************\n");
            printf("***************请输入你要进行的操作:0 1 2 3 4**************************\n");
            printf("**********▶ 0.退出教务系统         ▶ 1.录入学生个人信息****************\n");
            printf("**********▶ 2.删除学生个人信息     ▶ 3.查询某学科成绩表****************\n");
            printf("**********▶ 4.打印所有学生信息     ▶ 5.查询某个学生信息****************\n");
            printf("***********************************************************************\n\n\n\n");
            printf("请输入你要进行的操作(0-退出,1-录入,2-删,3-查询某成绩,4-打印,5-查询某信息)->:");
            scanf("%d",&input);
            switch(input)
            {
                case 1:  Logging_Data();break;  
                case 2:  Delete_Data(); break;
                case 3:  Select_stu_subject();break;
                case 4:  Print_stu_data();break;
                case 5:  Select_stu_Data();break;
                case 0:  printf("退出教务系统\n");
                         exit(0);  
               default:printf("请输入正确的操作,傻叼🙂!!!!\n");break;
            }
    }
    return 0;
}

🐖6.结语

小生不才,码文不易,感谢客官"食用",如能点个免费赞👍,小生在此万分感谢🙏🙏🙏
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

痴☞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值