排序不出结果,没有完成信息修改的功能,对编程一窍不通

信息排序不出结果,没有实现信息修改功能,这个程序是我在社区里面复制粘贴别人,但我忘了是复制粘贴谁的了,自己改了改,所以相似度较高,原主看见就在此赔个不是。对编程真的是一窍不通啊。目标是做个图片里面的样子

img

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 2
#define N 4

typedef struct stu
{
     char id[20];//学号
     char name [10];//姓名
     char sex[20];//性别
     char tel[20];//手机号码
     int cla;//班级
     char stu_lesson[N][50];//学生选课
}STU;

typedef struct list
{
      STU data;
      struct list *next;
}LIST;//创建链表结构体
LIST *Creat_List(STU s[]);//链表的创建
int  Stu_Entry(STU stu[]);//学生信息的录入
void infor_show(LIST*head);//利用链表对学生信息进行输出
void S_sort(STU s[],int flag);//利用结构体进行排序
LIST *Delet_infor(char*st,LIST *ht,int flag);//学生记录的删除
void Show_infor(char *S_s,LIST*h,int flag);//学生信息的查询
int Elect_les(STU lesson[]);//学生选课
LIST* Insert_infor(LIST *in_infor );//学生信息的添加

int main ()
{
         printf("\t\t\t欢迎进入学生信息管理系统 用户名:admin,密码:123456 \n");
         system("color 9");
         int choice;//输入你的选择
         char user[23];//输入用户名
         char  key[20];//输入密码
         STU stu[M];//结构体数组 
         LIST *head;//链表的头结点
         head=Creat_List(stu);
          printf("请输入用户名:\n");
          scanf("%s",user);
           printf("请输入密码:\n");
            scanf("%s",key);
             printf("********************************\n");
             printf("*     1---信息录入             *\n");
             printf("*     2---信息排序             *\n");
             printf("*     3---信息修改             *\n");
             printf("*     4---信息删除             *\n");
             printf("*     5---信息查询             *\n");
             printf("*     6---信息输出             *\n");
             printf("*     7---学生选课             *\n");
             printf("*     0---退出程序             *\n");
             printf("********************************\n");

     if(strcmp(user,"admin")==0&&strcmp(key,"123456")==0)
     {
          printf("请输入你的选择:\n");
         while(scanf("%d",&choice)!=EOF)
         {
              system("cls");
             printf("********************************\n");
             printf("*     1---信息录入             *\n");
             printf("*     2---信息排序             *\n");
             printf("*     3---信息修改             *\n");
             printf("*     4---信息删除             *\n");
             printf("*     5---信息查询             *\n");
             printf("*     6---信息输出             *\n");
             printf("*     7---学生选课             *\n");
             printf("*     0---退出程序             *\n");
             printf("********************************\n");
             switch(choice)
             {

             case 1:{
                       printf("请录入学生的信息:\n");
                       if(Stu_Entry(stu))
                           {
                               system("cls");
                           printf("信息录入完成\n");
                           printf("********************************\n");
             printf("*     1---信息录入             *\n");
             printf("*     2---信息排序             *\n");
             printf("*     3---信息添加             *\n");
             printf("*     4---信息删除             *\n");
             printf("*     5---信息查询             *\n");
             printf("*     6---信息输出             *\n");
             printf("*     7---学生选课             *\n");
             printf("*     0---退出程序             *\n");
             printf("********************************\n");
             getchar();
                    }
                        else
                           printf("信息录入失败\n");

                         system("pause");break;
                    }
                     case 2:{  


                                  int choice;
                                  printf("请输入排序的方式(1-学号排序 2-电话号码排序)\n");
                                      scanf("%d",&choice);
                                printf("信息排序的结果为:\n");
                                
                                S_sort(stu,choice);
                                  system("pause");break;
                                  
                                system("pause");break;
                        case 4:{         
                                    printf("学生信息的删除:\n");
                                    LIST *q;
                                    char id[20];
                                    char name[20];
                                     int choice;
                                     printf("请输入查询方式(1-学号查询 2-姓名查询):\n"); 
                                      scanf("%d",&choice);
                                      switch(choice)
                                     {
                                       case 1: 
                                        { 
                                               printf("请输入要删除信息学生的学号:\n");
                                               scanf("%s",id);
                                               q=Delet_infor(id,Creat_List(stu),1);
                                               if(q==NULL)
                                                   printf("信息删除失败\n");
                                               else
                                               { 
                                                    printf("信息删除后的结果为:\n");
                                                     infor_show(q);
                                               }
                                              break;
                                       }
                                            
                                   case 2:{
                                              printf("请输入要删除信息学生的姓名:\n");
                                              scanf("%s",name);
                                               printf("信息删除后的结果为:\n");
                                               if(q==NULL)
                                                   printf("信息删除失败!\n");
                                                else
                                                { 
                                                    printf("信息删除后的结果为:\n");
                                                    q=Delet_infor(name,Creat_List(stu),2);
                                                }
                                              
                                               infor_show(q);
                                              break;
                                          
                                          } 
                                   }
                              
                             
                              
                               
                             system("pause");break;

                         }
                          case 5:{
                                     char id[20];
                                     char name[20];
                                      int choice;
                                   printf("请输入查询方式(1-学号查询 2-姓名查询):\n"); 
                                      scanf("%d",&choice);
                                   switch(choice)
                                   {
                                     case 1: 
                                        {  printf("请输入要查询学生的学号:\n");
                                             scanf("%s",id);
                                           Show_infor(id,Creat_List(stu),choice);
                                           break;
                                        }
                                            
                                    case 2:{
                                              printf("请输入要查询学生的姓名:\n");
                                              scanf("%s",name);
                                              Show_infor(id,Creat_List(stu),choice);
                                              break;
                                          
                                           } 
                                   }
                                    system("pause");break;

                            }
                case 6: {
                               printf("学生信息的输出结果为:\n");
                                    infor_show(Creat_List(stu));
                               system("pause");break;

                          }
                case 7:{       system("cls");
                                printf("请输入选修课程中的四门课程:\n");

                                 if( Elect_les(stu))
                                 {
                                     system("cls");
                                     printf("学生选课成功!\n");
                                     
             printf("********************************\n");
             printf("*     1---信息录入             *\n");
             printf("*     2---信息排序             *\n");
             printf("*     3---信息修改             *\n");
             printf("*     4---信息删除             *\n");
             printf("*     5---信息查询             *\n");
             printf("*     6---信息输出             *\n");
             printf("*     7---学生选课             *\n");
             printf("*     0---退出程序             *\n");
             printf("********************************\n");
             getchar();
                                  }
                                   else
                                       printf("学生选课失败!\n");

                                break;

                       }


                case 0:  {
                                    printf("系统已经安全退出!!!");
                                    exit(0);
                                    system("pause");
                                    break;
                            }



                default:{
                                printf("输入的选择有误,请重新输入你的选择:\n");
                                  system("pause");break;
                           }


             }
             printf("可以选择继续录入也可以按ctrl+z退出\n");
         }
     }
     }else
     {
          system("cls");
         printf("输入用户名或者密码错误,请退出后重新输入!\n");
        
     }
}

LIST *Creat_List(STU *s)//PS:链表的建立
{
      //尾插法进行建立链表 
    LIST *h,*p;
    LIST *tail; 
    int i;
    h=(LIST*)(malloc)(sizeof(LIST));
    if(h==NULL)
        return h;
    else
        tail=h;
        
    for(i=0;i<M;i++)
    {
        p=(LIST*)malloc(sizeof(LIST));
          if(p==NULL)
          return NULL;
          else
          {
             p->data=s[i];
             tail->next=p;
             tail=p;
             tail->next=NULL;
           }
    }
        return h;
}

int Stu_Entry(STU stu[M])//PS:学生信息录入函数的封装
{
     int i;

    for(i=0;i<M;i++)
       {

              printf("输入第%d个学生学号 姓名 性别  手机号码  班级: \n", i + 1);
              scanf("%s %s %s %s %d", stu[i].id, stu[i].name, stu[i].sex,
              &stu[i].tel, &stu[i].cla);
        }

                 if(i==M)
                   return 1;
                 else
                     return 0;
}
void S_sort(STU s[],int flag)//PS:信息的排序函数的封装 利用结构体 
{
    int i,j;
      int k;
      STU t;
    if(flag==1)
   {
     for(i=0;i<M-1;i++)//选择排序
     {     k=i;
        for(j=i;j<M;j++)
            if(s[k].id<s[j].id)
                       k=j;
           if(k!=i)
           {
               t=s[k];
               s[k]=s[i];
               s[i]=t;
            }
       }
   }
   if(flag==2)
   {
       for(i=0;i<M-1;i++)//选择排序
     {     k=i;
        for(j=i;j<M;j++)
            if(s[k].tel<s[j].tel)
                       k=j;
           if(k!=i)
           {
               t=s[k];
               s[k]=s[i];
               s[i]=t;
            }
       }
       }
}
LIST* Delet_infor(char *st,LIST *ht,int flag)//PS:学生信息删除函数的封装
{
     LIST*p;
     LIST*tem;
     p=ht->next;
     if(p==NULL)
        {
            printf("链表错误!\n");
             return NULL;
        }
      else
      {
         while(p!=NULL)
         {
               if(strcmp(p->data.id,st)==0&&flag==1)
                  {
                      tem=p;
                       break;
                  }
               if(strcmp(p->data.name,st)==0&&flag==2)
                  {
                      tem=p;
                       break;
                  }
                  
                 p=p->next;

           }
    while(strcmp(p->data.id,st)!=0&& p->next!=NULL)//PS:循环查找要删除的节点
    {
        tem=p;
        p=p->next;
    }
    if( strcmp(p->data.id,st)==0)//找到了一个节点的num和num相等
    {
        if(p == ht->next)//找到的节点是头节点后面的一个节点
        {
            ht->next= p->next;
        }
        else
        {
            tem->next=p->next;
        }
        return ht;

      }
    else
        return ht=NULL;
     }

}
void infor_show(LIST*h)//PS:学生信息全部输出函数的封装
{
    LIST *p;
    int i;
    p=h->next;
    if(p==NULL)
        printf("链表发生错误!!!\n");
     else
     {
         while(p!=NULL)
         {    printf("学号%s的学生信息:\n",p->data.id);
             printf("姓名:%s 性别:%s 手机号码:%s 班级:%d\n",p->data.name,p->data.sex,p->data.tel,p->data.cla);
                printf("该学生的选择的选修课为:\n");
                 for(i=0;i<N;i++)
                   printf("%s\t",p->data.stu_lesson[i]);
                 p=p->next;
                 printf("\n");
         }
            
     }
}
void Show_infor(char *S_s,LIST*h,int flag)//PS:信息查询输出函数的封装
{
    LIST*p;
    p=h->next;
    int i;
    if(p==NULL)
        printf("链表出现错误!!!\n");
    else
    {
        while(p!=NULL)
        {
            if(strcmp(p->data.id,S_s)==0&&flag==1)
                    break;
            if(strcmp(p->data.id,S_s)==0&&flag==2)
                    break;
                  p=p->next;

        }
          printf("学生的姓名 性别 手机号码 班级\n");
          printf("%s %s %s %d\n",p->data.name,p->data.sex,p->data.tel,p->data.cla);
          printf("该学生的选择的选修课为:\n");
                      for(i=0;i<N;i++)
                          printf("%s\t",p->data.stu_lesson[i]);
    }
}
int Elect_les(STU lesson[])//PS:选修课的录入
{
            int i,j;
             printf("*******************************\n");
             printf("*     1---语言文学             *\n");
             printf("*     2---人文地理             *\n");
             printf("*     3---思想政治             *\n");
             printf("*     4---口才艺术             *\n");
             printf("*     5---经济管理             *\n");
             printf("*     6---国际贸易             *\n");
             printf("*     7---职场礼仪             *\n");
             printf("*******************************\n");
             for(i=0;i<M;i++)
             {
                printf("请输入第%d位学生的选修的课程:\n",i+1);
               for(j=0;j<N;j++)
                 {
                   scanf("%s",lesson[i].stu_lesson[j]);
                   
                 }
             }
             
             if(i==M)
                     return 1;
                 else
                     return 0;
                     
            

                 

}
LIST* Insert_infor(LIST *in_infor)//PS:学生信息添加函数的封装 
{
    LIST *p;
    LIST *st;
    LIST *q;
     int s=0;
    double ave=0;
    st=in_infor->next;
    p=(LIST*)malloc(sizeof (LIST));
    printf("请输入要填加的学生的学号 姓名 性别 手机号码 班级:\n");
      scanf("%s %s %s %s %d", p->data.id, p->data.name, p->data.sex,
              p->data.tel,&p->data.cla);
              if(st==NULL)
        {
             printf("链表发生错误!\n");
             return NULL;
        }
         else
         {
              q=in_infor;
                while(q->next!=st)
                    q=q->next;
                   q->next=p;
                   p->next=st;
                   return in_infor;

         }
}