「已注销」 2021-03-05 15:01 采纳率: 100%
浏览 47
已结题

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条回答 默认 最新

  • 小白小白你好菜 2021-03-05 19:35
    关注

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

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月4日

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程