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;
}