模拟商场会员卡,对会员姓名、编号、积分进行管理

 C语言作业:

一、题目描述: 

模拟商场会员卡,对会员姓名、编号、积分进行管理,利用结构体变量记录会员的姓名、编号和积分,建立单向链表来存储会员的信息。
要求实现如下功能:
(1)写函数create()实现建立单链表来存放会员的信息,如果输入大写‘Y’字符则继续创建结点存储会员信息,否则按任意键结束输入。
(2)写自定义函数输出链表中会员的信息。
(3)写自定义函数按照编号寻找要更新会员的信息,如果找到则修改这个会员的信息,并输出所有的会员的信息,如果没有找到,输出找不到此联系人。
(4)写自定义函数释放链表所占内存。
(在主函数依次调用各函数即可)
  结构体类型定义如下:
 struct member{
    char name[20];
    char num[20];
    int total;
    struct member *next;
   };

程序运行示例1:
请依次输入每个会员的编号、姓名、积分: 
01 zhang 1111
是否继续输入,按Y键继续输入,其他键就结束.
Y
请依次输入每个会员的编号、姓名、积分: 
02 wang 2222
是否继续输入,按Y键继续输入,其他键就结束.
Y
请依次输入每个会员的编号、姓名、积分: 
03 zhao 3333
是否继续输入,按Y键继续输入,其他键就结束.
n
请输入要修改的会员编号:
03
请输入要修改的编号:03
请输入要修改的姓名:zhaoli
请输入要修改的积分:5555
请依次输出每个会员的编号、姓名、积分: 
01 zhang 1111
02 wang 2222
03 zhaoli 5555

程序运行示例2:
请依次输入每个会员的编号、姓名、积分: 
01 zhang 1111
是否继续输入,按Y键继续输入,其他键就结束.
Y
请依次输入每个会员的编号、姓名、积分: 
02 wang 2222
是否继续输入,按Y键继续输入,其他键就结束.
Y
请依次输入每个会员的编号、姓名、积分: 
03 zhao 3333
是否继续输入,按Y键继续输入,其他键就结束.
n
请输入要修改的会员编号:
04
修改失败.
不存在此联系人.

输入提示:"请依次输入每个会员的编号、姓名、积分: \n"
输入格式:"%s %s %d"
输入提示:"是否继续输入,按Y键继续输入,其他键就结束.\n"
输入提示:"请输入要修改的会员编号:\n"
输入格式:%s
如果找到了要修改的人则有如下提示:
输入提示:"请输入要修改的编号:"
输入格式:%s
输入提示:"请输入要修改的姓名:"
输入格式:%s
输入提示:"请输入要修改的积分:"
输入格式:%d
没有找到则提示:"修改失败.\n不存在此联系人.\n"
输出提示:"请依次输出每个会员的编号、姓名、积分: \n"
输出格式:"%s %s %d\n"

 二、代码复现:

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

struct member {
    char name[20];
    char num[20];
    int total;
    struct member* next;
};

typedef struct member Member;

// 创建会员信息链表
Member* create() {
    Member* head = NULL;
    Member* tail = NULL;
    char choice;

    do {
        Member* newMember = (Member*)malloc(sizeof(Member));

        printf("请依次输入每个会员的编号、姓名、积分: \n");
        scanf("%s %s %d", newMember->num, newMember->name, &(newMember->total));

        newMember->next = NULL;

        if (head == NULL) {
            head = newMember;
            tail = newMember;
        }
        else {
            tail->next = newMember;
            tail = newMember;
        }

        printf("是否继续输入,按Y键继续输入,其他键就结束.\n");
        getchar(); // 消耗换行符
        choice = getchar();
    } while (choice == 'Y' || choice == 'y');

    return head;
}

// 输出会员信息链表
void print(Member* head) {
    printf("请依次输出每个会员的编号、姓名、积分: \n");

    Member* current = head;
    while (current != NULL) {
        printf("%s %s %d\n", current->num, current->name, current->total);
        current = current->next;
    }
}

// 更新会员信息
void update(Member* head, char* num) {
    Member* current = head;
    int found = 0;

    while (current != NULL) {
        if (strcmp(current->num, num) == 0) {
            printf("请输入要修改的编号:");
            scanf("%s", current->num);

            printf("请输入要修改的姓名:");
            scanf("%s", current->name);

            printf("请输入要修改的积分:");
            scanf("%d", &(current->total));

            found = 1;
            break;
        }

        current = current->next;
    }

    if (found) {
        print(head);
    }
    else {
        printf("修改失败.\n不存在此联系人.\n");
    }
}

// 释放链表内存
void freeList(Member* head) {
    Member* current = head;
    while (current != NULL) {
        Member* temp = current;
        current = current->next;
        free(temp);
    }
}

int main() {
    Member* head = create();

    char num[20];
    printf("请输入要修改的会员编号:\n");
    scanf("%s", num);

    update(head, num);

    freeList(head);

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兵不厭詐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值