如何解决学号重复的问题和怎么使总成绩排序

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

void sd()
{
printf("\t 目录\n");
printf("1. 成绩录入\n");
printf("2. 成绩打印\n");
printf("3. 成绩删除\n");
printf("4. 成绩查询\n");
printf("5. 修改\n");
printf("6. 排序\n");
printf("7. 存入文件信息\n");
printf("8. 读取文件信息\n");
printf("9. 安全退出系统\n");
}
void interface()
{
while(1)
{
char ch;
int hd;
printf("输入用户名:");
scanf("%s",&ch);
printf("输入密码:"); //密码为十二
scanf("%d",&hd);
if(hd==12)
{
printf("密码正确\n欢迎使用学生管理系统!\n");
break;
}

else
{
printf("密码不正确请重新输入!");
system("pause");
system("cls");

}
}
}
struct student{
char name[20] ;
int number ;
int math;
int english;
int c;

};
struct Node
{
struct student data;
struct Node next;
};
struct Node createlist() //创建链表
{
struct Node
headNode=(struct Node
)malloc(sizeof(struct Node));
headNode->next =NULL;
return headNode;
}
struct Node createNode(struct student data) //创建节点
{
struct Node newNode=(struct Node)malloc(sizeof(struct Node));
newNode->data =data;
newNode->next =NULL;
return newNode;
}
void inserNode(struct Node
headNode,struct student data) //插入节点
{
struct Node *newNode=createNode(data);
newNode->next =headNode->next ;
headNode->next =newNode;

}
void deletes(struct Node *headNode,int a) //删除
{

struct Node *p=headNode->next ;
struct Node *q=headNode ;
if(p==NULL)
{
printf("无法删除");
return;
}
while(p->data.number !=a)
{
q=p;
p=q->next ;
if(p==NULL)
{
printf("未找到指定位置无法删除");
return;
}
}
q->next =p->next ;
free(p);
}
struct Node *find(struct Node *headNode,int a ) //查找
{
struct Node *pMove=headNode->next ;
if(pMove==NULL)
return NULL;
while(pMove->data.number!=a)
{
pMove=pMove->next ;
}

return pMove;

}
void change( struct Node *headNode,int a) //改
{
struct Node *p=headNode->next ;
while(1)
{
if(p->data.number==a)
{
int q,b,c;

    printf("请输入修改的数学成绩\n");    
    scanf("%d",&q );    
    p->data.math=q;
    printf("请输入修改的英语\n");
    scanf("%d",&b);
    p->data.english=b;
    printf("请输入修改的C语言");    
    scanf("%d",&c);
    p->data.c =c;
    break; }
}
p=p->next ;

}

void printlist(struct Node *headNode) //打印
{
struct Node *pMove=headNode->next ;
printf("姓名\t学号\t数学\t英语\t C语言\n");

while(pMove!=NULL)
{
    printf("%s\t%d\t%d\t%d\t%d\t\n",pMove->data.name,pMove->data.number,pMove->data.math,pMove->data.english,pMove->data.c );
    pMove=pMove->next ; 
}
printf("\n");

}
struct Node *list=createlist();
void gongneng()
{
int a;
struct student data;
printf("请输入你想使用的功能");
scanf("%d",&a);
switch(a)
{

    case 1:printf("-------------【录入】------------------\n");
    
    printf("请输入学生\n"); 
    printf("名字,学号,数学成绩,英语成绩,C语言成绩\n"); 
    fflush(stdin);
    scanf("%s%d%d%d%d",data.name ,&data.number,&data.math,&data.english,&data.c );
    inserNode(list,data);
    
    break;
    case 2:printf("--------------【打印】------------------\n");
    printlist(list); 
    break;
    case 3:printf("---------------【删除】------------------\n") ;
    printf("请输入删除学生的学号");         
    scanf("%d",&data.number ) ;
    deletes(list, data.number );
    break;
    case 4:printf("----------------【查询】----------------\n") ;
    printf("请输入查找学生的学号"); 
    scanf("%d",&data.number ) ;
    if(find(list,data.number)==NULL) 
    {
        printf("未找到相关信息"); 
    }
    else
    {
        printf("姓名\t学号\t数学\t英语\t C语言\n");
        printf("%s\t%d\t%d\t%d\t%d\n",find(list,data.number  )->data.name ,find(list,data.number  )->data.number,find(list,data.number  )->data.math,find(list,data.number  )->data.english,find(list,data.number  )->data.c);
    }
    find(list,data.number);
    break; 
    case 5:printf("------------------【修改】--------------\n");
    printf("请输入想要修改的学生的学号");
    scanf("%d",&data.number ) ;
    change( list,data.number );
    break;
    /*case 6:printf("---------------------【排序】------------\n"); 
    sort(list); 
    break;//排序
    case7:depositstudent();
    break;//存入信息
    case 8:readstudent(); 
    break;//读取信息 */
//    case9:end;
    break;//退出系统 
 } 

}
int main()
{
interface();
while(1)
{
sd();

gongneng();
system("pause");
system("cls");

}

}

scanf("%s",&ch);
ch是个字符,用%c输入

学号重复的问题:可以在录入功能的时候,当输入学号以后,先遍历当前链表中是否已经存在该学号,如果存在,就提示用户重新输入。
根据成绩排序:可以用冒泡、选择等排序算法来实现,参考如下文章: