编辑代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int sum;
//创建一个学生的信息结构体
typedef struct student{
    long id;
    char name[64];
    float grade;
}s;
//定义顺序表
typedef struct {
    s* student;
    int length;
}SqList;
//构造空顺序表
int CreatStudent(SqList*L){
    L->student=(s*)malloc(sizeof(s));
    if (L->student==NULL)
        return 0;
    else
    {
        L->length=0;
        return 1;
    }
}
//录入基础学生信息和需要插入的学生信息
void GetStudent(SqList*L,int i){
    printf("请输入学生的学号:");
    scanf("%ld",&L->student[i].id);
    printf("请输入学生的姓名:");
    scanf("%s",L->student[i].name);
    printf("请输入学生的成绩:");
    scanf("%f",&L->student[i].grade);
    L->length++;
}
void jiaohuan(SqList*L,int i);
//打印学生信息
void PrintStudent(SqList*L,int i)
{
    printf("%ld\n%s\n%.3f\n\n",L->student[i].id,L->student[i].name,L->student[i].grade);
}
//查找指定的学生信息
void FindStudent (SqList*L)
{
    int n;
    printf("请输入查找方式:\n0=学号查找\n1=存储位置查找");//查找方式的选择
    scanf("%d",&n);
    printf("请输入需要查找学生的信息:");
    switch (n) {
        case 0:
        {
            long number;//输入需要查找的学生学号
            scanf("%ld",&number);
            for (int i=0;i<=L->length;i++)
            {
                if (number==L->student[i].id)
                    PrintStudent(L,i);//打印出查找到的学神信息
            }
            break;
        }
        case 1:
        {
            int number;
            scanf("%d",&number);//输入需要查找的学生位置
            PrintStudent(L,number-1);
            break;
        }
        default:
            printf("您输入的查找方式有误请确认后再操作");
            break;
    }
    
}
//删除指定的学生信息
void DeletStudent (SqList*L,int i)
{
    if(i<0||i>sum)
        printf("输入信息有误");
    else
    {
        for (int m=i-1;m<sum;m++)
        {
            L->student[m]=L->student[m+1];
        }
        //删除
        sum--;
        L->length--;
    }
}
//更新表中的学生信息
void ReGetStudent (SqList*L)
{
    int p;
    printf("请输入需要更新的位置:");
    scanf("%d",&p);
    GetStudent(L, p-1);
}
void charu(SqList* L)
{
    printf("请输入需要插入的位置:");
    int p;
    scanf("%d",&p);
    GetStudent(L, sum);
    sum++;
    for (int i=sum-1;i>p-1;i--)
        jiaohuan(L,i);
    
    
}
void jiaohuan(SqList*L,int i)
{
    long a;
    a=L->student[i-1].id;
    L->student[i-1].id=L->student[i].id;
    L->student[i].id=a;
    char b[64];
    strcpy(b, L->student[i-1].name);
    strcpy(L->student[i-1].name,L->student[i].name);
    strcpy(L->student[i].name, b);
    float c;
    c=L->student[i-1].grade;
    L->student[i-1].grade=L->student[i].grade;
    L->student[i].grade=c;
    
}
void paixu (SqList*L)
{
    printf("请输入排序的要求:0代表学号;1代表成绩");
    int m;
    scanf("%d",&m);
    switch (m) {
        case 0:
            while (1)
            {
                int f=0,q=0;
                f=q;
                for (int i=0;i<sum-1;i++)
                    if (L->student[i].id>L->student[i+1].id)
                    {
                        jiaohuan(L, i+1);
                        f=1;
                    }
                    else f=0;
                if (f==0)
                    break;
                
            }
            break;
            
        case 1:
            while (1)
            {
                int f=0,q=0;
                f=q;
                for (int i=0;i<sum-1;i++)
                    if (L->student[i].grade>L->student[i+1].grade)
                    {
                        jiaohuan(L, i+1);
                        f++;
                    }
                if (f==q)
                    break;
            }
            break;
    }
}

void qingkong (SqList*L)
{
    L->length=0;sum=0;

    printf("所有数据已经清空");
}

int main()
{
    SqList *text=(SqList*)malloc(sizeof(SqList)*10000);
    //为text划分存储空间
    CreatStudent(text);
    printf("共有多少名学生:");
    //录入基础有多少学生
    scanf("%d",&sum);
    text->length=0;
    for (int i=0;i<sum;i++)
        GetStudent(text,i);
    //获得基础学生信息
    int c;
    printf("(1)显示:显示当前所有学生信息记录;\n");
    printf("(2)录入:从键盘输入一条学生信息记录,插入到表中指定的位置;\n");
    printf(" (3)查找:根据学号或者记录的位置查找学生的各项信息;\n");
    printf("(4)删除:删除指定位置的学生信息记录;\n");
    printf("(5)更新:更新指定位置的学生信息记录;\n");
    printf("(6)统计:统计表中学生人数。\n");
    printf(" (7) 排序:按照学号或者绩点进行排序\n");
    printf("(8)清空:清空表中所有记录\n");
    int p=1;
    while (p==1)
    {
        printf("请输入你的操作指令:\n");
        scanf("%d",&c);
        switch (c) {
            case 1:
                for (int i=0;i<sum;i++)
                    PrintStudent(text,i);
                break;
            case 2:
                charu(text);
                break;
            case 3:
                FindStudent(text);
                break;
            case 4:
            {
                int m;
                printf("请输入需要删除学生的位置:");
                scanf("%d",&m);
                DeletStudent(text, m);
            }
                break;
            case 5:
                ReGetStudent(text);
                break;
            case 6:
                printf("学生的总数是:%d",sum);
                break;
            case 7:
                paixu(text);
                break;
            case 8:
                qingkong(text);
                break;
            case 0:
                p=0;
                break;
            default:
                printf("输入指令不对,请重新输入如果退出请输入0;");
                break;
        }
    }
}