职工信息管理查询,显示出所有一样的

职工信息管理查询,显示出所有一样的

//职工信息
typedef struct work
{
    int id;            //工号
    char name[8];      //姓名
    int wages;         //工资
    int bonus;         //奖金
    int deduction;     //扣款
    int money;         //实发工资
    struct work* next; //链表
}workers; //别名

//表头
workers* Listhead()
{
    workers* head = (workers*)malloc(sizeof(workers));//动态内存申请 指针变成变量
    if (head != NULL)//消除vs警告
    {
        head->next = NULL;//初始化
        return head;      //返回头指针
    }
    return 0;
}

//查询
void query(workers* head)
{
    workers* p = head;
    int a = determine(p);
    if (a == 1)
        return;
    printf("1————工号查询\n2————姓名查询\n");
    int select;
    scanf_s("%d", &select);
    if (select == 1)
    {
        printf("工号:");
        int id;
        scanf_s("%d", &id);
        while (p->next != NULL)
        {
            p = p->next;
            if (id == p->id)
            {
                format;
                printf("%-8d\t%-8s\t%-8d\t%-8d\t%-8d\n",
                    p->id, p->name, p->wages, p->bonus, p->deduction);
                system("pause");
                system("cls");
                return;
            }
        }
        printf("未有此人\n");
        system("pause");
        system("cls");
        return;
    }
    else if (select == 2)
    {
        printf("姓名:");
        char name[8]="\0";
        scanf_s("%s", name, 8);
        while (p->next != NULL)
        {
            p = p->next;
            if (strcmp(name, p->name) == 0)
            {
                format;
                printf("%-8d\t%-8s\t%-8d\t%-8d\t%-8d\n",
                    p->id, p->name, p->wages, p->bonus, p->deduction);
                system("pause");
                system("cls");
                return;
            }
        }
        printf("未有此人\n");
        system("pause");
        system("cls");
    }
}

想在这里加个功能,就是输出所有一样姓名的

    else if (select == 2)
    {
        printf("姓名:");
        char name[8]="\0";
        scanf_s("%s", name, 8);
        while (p->next != NULL)
        {
            p = p->next;
            if (strcmp(name, p->name) == 0)
            {
                format;
                printf("%-8d\t%-8s\t%-8d\t%-8d\t%-8d\n",
                    p->id, p->name, p->wages, p->bonus, p->deduction);
                system("pause");
                system("cls");
                return;
            }
        }
        printf("未有此人\n");
        system("pause");
        system("cls");
    }
}

邦邦!

修改如下,改动处注释,供参考:

//职工信息
typedef struct work
{
    int id;            //工号
    char name[8];      //姓名
    int wages;         //工资
    int bonus;         //奖金
    int deduction;     //扣款
    int money;         //实发工资
    struct work* next; //链表
}workers; //别名

//表头
workers* Listhead()
{
    workers* head = (workers*)malloc(sizeof(workers));//动态内存申请 指针变成变量
    if (head != NULL)//消除vs警告
    {
        head->next = NULL;//初始化
        return head;      //返回头指针
    }
    return 0;
}

//查询
void query(workers* head)
{
    workers* p = head;
    int a = determine(p);
    if (a == 1)
        return;
    printf("1————工号查询\n2————姓名查询\n");
    int select, flg = 0;                              // 修改 增加一个变量  flg
    scanf_s("%d", &select);
    if (select == 1)
    {
        printf("工号:");
        int id;
        scanf_s("%d", &id);
        while (p->next != NULL)
        {
            p = p->next;
            if (id == p->id)
            {
                format;
                printf("%-8d\t%-8s\t%-8d\t%-8d\t%-8d\n",
                    p->id, p->name, p->wages, p->bonus, p->deduction);
                system("pause");
                system("cls");
                return;
            }
        }
        printf("未有此人\n");
        system("pause");
        system("cls");
        return;
    }
    else if (select == 2)
    {
        printf("姓名:");
        char name[8]="\0";
        scanf_s("%s", name, 8);
        while (p->next != NULL)
        {
            p = p->next;
            if (strcmp(name, p->name) == 0)
            {
                format;
                printf("%-8d\t%-8s\t%-8d\t%-8d\t%-8d\n",
                    p->id, p->name, p->wages, p->bonus, p->deduction);
                flg = 1;           // 修改
                //system("pause"); 修改
                //system("cls");   修改
                //return;          修改
            }
        }
        if (!flg) // 修改
            printf("未有此人\n");
        system("pause");
        system("cls");
    }
}

你的循环里有一个 return;
所以一旦找到一条符合要求的,就退出了,应该删除这一行

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7675210
  • 这篇博客你也可以参考下:假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点(不设队头指针),试编写相应的置空队列、入队列、出队列的算法。
  • 除此之外, 这篇博客: 三子棋游戏思路中的 下面的代码每次打印一个数据,打印一个竖线 一行打印完之后换行打印横线。就是除了数据元素,再就是打印棋盘的结构,让我们的棋盘能显现出来。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    void DisplayBoard(char borad[ROW][COL], int row, int col)
    {
        int i = 0;
        for (i = 0; i < row; i++)
        {
            int j = 0;
            for (j = 0; j < col; j++)
            {
                printf(" %c ", borad[i][j]);
                if (j < col - 1)
                {
                    printf("|");
                }
            }
            printf("\n");
            if (i < row - 1)
            {
                for (j = 0; j < col; j++)
                {
                    printf("---");
                    if (j < col - 1)
                        printf("|");
                }
                printf("\n");
            }


        }
    }

  • 您还可以看一下 刘伶华老师的软件测试经典面试题剖析课程中的 给你一个行李箱,你怎么测试?小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    对不起,作为AI语言模型,我无法提供具体的需求和问题,并且不具备代码编写的能力。如果您有具体的问题和需求,请提供更详细的信息,我将尽力为您提供最佳的答复。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^