fjvuidk
天雪碧海
采纳率100%
2021-03-05 15:01

C语言个人通迅信息管理,求大佬帮忙把学号排序部分修改一下,谢谢

已采纳


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

//定义一个商品结构体
typedef struct gr
{
    char xh[12];     //学号
    char name[40];   //姓名
    int tell;    //电话
    struct gr *next; //指向下一节点的指针
} gr;

//函数声明放在这里
void ListCreate(gr *L, int n); 
void LIstSearch(gr *L);        //查找个人通迅信息
void ListModify(gr *L);        //修改个人通迅信息
void ListInsert(gr *L);        //插入个人通迅信息
void ListDelete(gr *L);        //删除个人通迅信息
void Input(gr *p, int i);      //输入个人通迅信息
void Sort(gr *L);              //对每类商品的库存量进行排名
void Menu();                   //菜单

//个人通迅信息理系统的主函数入口
int main()
{
    int item, n;                  //item用于接收输入的命令,n用于接收输入的商品人数
    gr *L = NULL;                 //初始化一个头节点
    L = (gr *)malloc(sizeof(gr)); //为头节点开辟内存空间
    L->next = NULL;               //将头节点的指针域置空
    do
    {
        Menu(); //菜单
        printf("请输入相应的数字,进行相应的操作:\n");
        scanf("%d", &item);
        system("cls");
        switch (item)
        {
        case 1:
            printf("请输入您要录入的学生个人通迅数目:");
            scanf("%d", &n);
            ListCreate(L, n); 
            getchar();
            printf("\n请按任意键返回主菜单\n");
            getchar();
            system("cls");
            break;
        case 2:
            LIstSearch(L); //查找个人通迅信息
            getchar();
            printf("\n请按任意键返回主菜单\n");
            getchar();
            system("cls");
            break;
        case 3:
            ListModify(L); //修改个人通迅信息
            getchar();
            printf("\n请按任意键返回主菜单\n");
            getchar();
            system("cls");
            break;
        case 4:
            ListDelete(L); //删除个人通迅信息
            getchar();
            printf("\n请按任意键返回主菜单\n");
            getchar();
            system("cls");
            break;
        case 5:
            ListInsert(L); //插入个人通迅信息
            getchar();
            printf("\n请按任意键返回主菜单\n");
            getchar();
            system("cls");
            break;
       
        case 6:
            Sort(L);
            getchar();
            printf("\n请按任意键返回主菜单\n");
            getchar();
            system("cls");
            break;
        case 0: //退出个人通迅信息管理系统
            printf("即将退出个人通迅信息管理系统.....");
            exit(0);
        default:
            printf("您输入的指令不正确,请重新输入");
        }
        printf("\n\n");
    } while (item);
    return 0;
}


void ListCreate(gr *L, int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        gr *p;
       
        p = NULL;
        p = (gr *)malloc(sizeof(gr));
        Input(p, i);
        p->next = L->next;
        L->next = p;
    }
    printf("录入成功!");
}

//查找个人通迅信息
void LIstSearch(gr *L)
{
    char n[40];
    gr *p = L->next;
    if (p == NULL)
        printf("数据为空,无法查找!");
    else
    {
        printf("请输入您要查找的学生姓名:");
        scanf("%s", n);
        while (strcmp(p->name, n) != 0)
        {
            p = p->next;
            if (p == NULL)
            {
                printf("没有找到相关信息\n");
                return;
            }
        }
        printf("%s的电话为%d\n",p->name,p->tell);
    }
}

//修改个人通迅信息
void ListModify(gr *L)
{
    int a;
    char nam[40];
    gr *p = L->next;
    if (p == NULL)
        printf("数据为空,无法修改!");
    else
    {
        printf("请输入您修改的学生姓名:");
        scanf("%s",nam);
        while(strcmp(p->name, nam) != 0)
        {
            p = p->next;
            if (p == NULL)
            {
                printf("没有找到相关信息\n");
                return;
            }
        }
        printf("请输入您修改后的电话:");
        scanf("%d",&p->tell);
        printf("修改成功");
    }
}

//删除个人通迅信息
void ListDelete(gr *L)
{
    char n[40];
    gr *p = L->next, *pre = L; //定义p指针指向头节点的指向,定义pre指向头节点,pre始终指向p的前驱节点
    if (p == NULL)
        printf("数据为空,无法删除!");
    else
    {
        printf("请输入您要删除的学生姓名:");
        scanf("%s", n);
        while (strcmp(p->name, n) != 0)
        {
            pre = p;
            p = pre->next;
            if (p == NULL)
            {
                printf("没有找到相关信息,无法删除\n");
                return;
            }
        }
        pre->next = p->next;
        free(p);
        printf("删除成功");
    }
}

//插入个人通迅信息
void ListInsert(gr *L)
{
    gr *s = NULL; //生成一个新节点s
    s = (gr *)malloc(sizeof(gr));
    printf("请输入学生的学号:");
    scanf("%s", s->xh);
    printf("请输入学生的姓名:");
    scanf("%s", s->name);
    printf("请输入学生的电话:");
    scanf("%d", &s->tell);
    s->next = L->next;
    L->next = s;
    printf("插入成功!");
}

//对学生学号进行排名
void Sort(gr *L)
{
    gr *p,*q,*tail,*l;
    tail=NULL;
    while((L->next->next) != tail)
    {
        p = L;
        q = L->next;
        while(q->next != tail)
        {
            if((q->xh) > (q->next->xh))
            {
                p->next = q->next;
                q->next = q->next->next;
                p->next->next = q;
                q = p->next;
            }
            q = q->next;
            p = p->next;
        }
        tail = q;
    }
    printf("学号从小到大结果如下:\n");
    l=L->next;
    while(l!=NULL)
    {
        if(l->next!=NULL)
            {
                printf("%s(%d)->",l->name,l->xh);
                l=l->next;
            }
        else
        {
            printf("%s(%d)",l->name,l->xh);
            l=l->next;
        }
    }
}

//输入个人通迅信息
void Input(gr *p, int i)
{
    printf("请输入第%d个学生的学号:", i + 1);
    scanf("%s", p->xh);
    printf("请输入第%d个学生的姓名:", i + 1);
    scanf("%s", p->name);
    printf("请输入第%d个学生的电话:", i + 1);
    scanf("%d", &p->tell);
}

//个人通迅信息管理系统的菜单
void Menu()
{
    printf("\n\n");
    printf("\t\t\t===================个人通迅信息管理系统======================\n");
    printf("\t\t\t* 作者 王路锋  班级:2020071  学号:2020027132                 \n");
    printf("\t\t\t*                                                            \n");
    printf("\t\t\t*          1>. 录入学生个人通迅信息                          \n");
    printf("\t\t\t*          2>. 查找某个学生的电话                            \n");
    printf("\t\t\t*          3>. 修改某个学生的电话                            \n");
    printf("\t\t\t*          4>. 删除某个学生的个人通迅信息                    \n");
    printf("\t\t\t*          5>. 插入某个学生的个人通迅信息                    \n");
    printf("\t\t\t*          6>. 对每个学生的学号排序                          \n");
    printf("\t\t\t*          0>. 退出管理系统                                  \n");
    printf("\t\t\t*              欢迎使用本系统!                               \n");
    printf("\t\t\t=============================================================\n");
    printf("\t\t\t输入选项,按回车进入选项:                                    \n");
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • qq_43414873 小白小白你好菜 1月前

    首先,我加了一个头文件algorithm和命名空间using namespace std;

    然后加了一个函数cmp,用来作为排序的规则

    然后对你的Sort函数进行了修改,其中第一个循环体删了,第二个循环体中,学号的输出格式应该为%s,而不是%d,%d输出的是地址

    我只对你的排序一项进行了实验

    点赞 评论 复制链接分享
  • qq_43414873 小白小白你好菜 1月前

    点赞 评论 复制链接分享
  • qq_43414873 小白小白你好菜 1月前

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    //定义一个商品结构体
    typedef struct gr
    {
        char xh[12];     //学号
        char name[40];   //姓名
        int tell;    //电话
        struct gr *next; //指向下一节点的指针
    } gr;

    //函数声明放在这里
    void ListCreate(gr *L, int n); 
    void LIstSearch(gr *L);        //查找个人通迅信息
    void ListModify(gr *L);        //修改个人通迅信息
    void ListInsert(gr *L);        //插入个人通迅信息
    void ListDelete(gr *L);        //删除个人通迅信息
    void Input(gr *p, int i);      //输入个人通迅信息
    void Sort(gr *L);              //对每类商品的库存量进行排名
    void Menu();                   //菜单

    //个人通迅信息理系统的主函数入口
    int main()
    {
        int item, n;                  //item用于接收输入的命令,n用于接收输入的商品人数
        gr *L = NULL;                 //初始化一个头节点
        L = (gr *)malloc(sizeof(gr)); //为头节点开辟内存空间
        L->next = NULL;               //将头节点的指针域置空
        do
        {
            Menu(); //菜单
            printf("请输入相应的数字,进行相应的操作:\n");
            scanf("%d", &item);
            system("cls");
            switch (item)
            {
            case 1:
                printf("请输入您要录入的学生个人通迅数目:");
                scanf("%d", &n);
                ListCreate(L, n); 
                getchar();
                printf("\n请按任意键返回主菜单\n");
                getchar();
                system("cls");
                break;
            case 2:
                LIstSearch(L); //查找个人通迅信息
                getchar();
                printf("\n请按任意键返回主菜单\n");
                getchar();
                system("cls");
                break;
            case 3:
                ListModify(L); //修改个人通迅信息
                getchar();
                printf("\n请按任意键返回主菜单\n");
                getchar();
                system("cls");
                break;
            case 4:
                ListDelete(L); //删除个人通迅信息
                getchar();
                printf("\n请按任意键返回主菜单\n");
                getchar();
                system("cls");
                break;
            case 5:
                ListInsert(L); //插入个人通迅信息
                getchar();
                printf("\n请按任意键返回主菜单\n");
                getchar();
                system("cls");
                break;
           
            case 6:
                Sort(L);
                getchar();
                printf("\n请按任意键返回主菜单\n");
                getchar();
                system("cls");
                break;
            case 0: //退出个人通迅信息管理系统
                printf("即将退出个人通迅信息管理系统.....");
                exit(0);
            default:
                printf("您输入的指令不正确,请重新输入");
            }
            printf("\n\n");
        } while (item);
        return 0;
    }


    void ListCreate(gr *L, int n)
    {
        int i;
        for (i = 0; i < n; i++)
        {
            gr *p;
           
            p = NULL;
            p = (gr *)malloc(sizeof(gr));
            Input(p, i);
            p->next = L->next;
            L->next = p;
        }
        printf("录入成功!");
    }

    //查找个人通迅信息
    void LIstSearch(gr *L)
    {
        char n[40];
        gr *p = L->next;
        if (p == NULL)
            printf("数据为空,无法查找!");
        else
        {
            printf("请输入您要查找的学生姓名:");
            scanf("%s", n);
            while (strcmp(p->name, n) != 0)
            {
                p = p->next;
                if (p == NULL)
                {
                    printf("没有找到相关信息\n");
                    return;
                }
            }
            printf("%s的电话为%d\n",p->name,p->tell);
        }
    }

    //修改个人通迅信息
    void ListModify(gr *L)
    {
        int a;
        char nam[40];
        gr *p = L->next;
        if (p == NULL)
            printf("数据为空,无法修改!");
        else
        {
            printf("请输入您修改的学生姓名:");
            scanf("%s",nam);
            while(strcmp(p->name, nam) != 0)
            {
                p = p->next;
                if (p == NULL)
                {
                    printf("没有找到相关信息\n");
                    return;
                }
            }
            printf("请输入您修改后的电话:");
            scanf("%d",&p->tell);
            printf("修改成功");
        }
    }

    //删除个人通迅信息
    void ListDelete(gr *L)
    {
        char n[40];
        gr *p = L->next, *pre = L; //定义p指针指向头节点的指向,定义pre指向头节点,pre始终指向p的前驱节点
        if (p == NULL)
            printf("数据为空,无法删除!");
        else
        {
            printf("请输入您要删除的学生姓名:");
            scanf("%s", n);
            while (strcmp(p->name, n) != 0)
            {
                pre = p;
                p = pre->next;
                if (p == NULL)
                {
                    printf("没有找到相关信息,无法删除\n");
                    return;
                }
            }
            pre->next = p->next;
            free(p);
            printf("删除成功");
        }
    }

    //插入个人通迅信息
    void ListInsert(gr *L)
    {
        gr *s = NULL; //生成一个新节点s
        s = (gr *)malloc(sizeof(gr));
        printf("请输入学生的学号:");
        scanf("%s", s->xh);
        printf("请输入学生的姓名:");
        scanf("%s", s->name);
        printf("请输入学生的电话:");
        scanf("%d", &s->tell);
        s->next = L->next;
        L->next = s;
        printf("插入成功!");
    }

    bool cmp(gr a, gr b){
        return a.xh < b.xh;
    }

    //对学生学号进行排名
    void Sort(gr *L)
    {
        gr *l, *g;
        int num=0;
        g=l=L->next;
        while(l!=NULL){
            num++;
            l=l->next;
        }
        sort(g, g+num, cmp);
        printf("学号从小到大结果如下:\n");
        l=L->next;
        while(l!=NULL)
        {
            if(l->next!=NULL)
                {
                    printf("%s(%s)->",l->name,l->xh);
                    l=l->next;
                }
            else
            {
                printf("%s(%s)",l->name,l->xh);
                l=l->next;
            }
        }
    }

    //输入个人通迅信息
    void Input(gr *p, int i)
    {
        printf("请输入第%d个学生的学号:", i + 1);
        scanf("%s", p->xh);
        printf("请输入第%d个学生的姓名:", i + 1);
        scanf("%s", p->name);
        printf("请输入第%d个学生的电话:", i + 1);
        scanf("%d", &p->tell);
    }

    //个人通迅信息管理系统的菜单
    void Menu()
    {
        printf("\n\n");
        printf("\t\t\t===================个人通迅信息管理系统======================\n");
        printf("\t\t\t* 作者 王路锋  班级:2020071  学号:2020027132                 \n");
        printf("\t\t\t*                                                            \n");
        printf("\t\t\t*          1>. 录入学生个人通迅信息                          \n");
        printf("\t\t\t*          2>. 查找某个学生的电话                            \n");
        printf("\t\t\t*          3>. 修改某个学生的电话                            \n");
        printf("\t\t\t*          4>. 删除某个学生的个人通迅信息                    \n");
        printf("\t\t\t*          5>. 插入某个学生的个人通迅信息                    \n");
        printf("\t\t\t*          6>. 对每个学生的学号排序                          \n");
        printf("\t\t\t*          0>. 退出管理系统                                  \n");
        printf("\t\t\t*              欢迎使用本系统!                               \n");
        printf("\t\t\t=============================================================\n");
        printf("\t\t\t输入选项,按回车进入选项:                                    \n");
    }

    点赞 评论 复制链接分享