模拟商场会员卡,对会员姓名、编号、积分进行管理,利用结构体变量记录会员的姓名、编号和积分,建立单向链表来存储会员的信息。 要求实现如下功能: (1)写函数create()实现建立单链表来存放会员的信息,如果输入大写‘Y’字符则继续创建结点存储会员信息,否则按任意键结束输入。 (2)写自定义函数输出链表中会员的信息。 (3)写自定义函数按照编号寻找要更新会员的信息,如果找到则修改这个会员的信息,并输出所有的会员的信息,如果没有找到,输出找不到此联系人。 (4)写自定义函数释放链表所占内存。 (在主函数依次调用各函数即可) 结构体类型定义如下: struct member{ char name[20]; char num[20]; int total; struct member *next; };
时间: 2023-12-10 07:41:53 浏览: 66
商场会员卡管理系统
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义会员结构体
struct member{
char name[20];
char num[20];
int total;
struct member *next;
};
// 函数声明
void create(struct member **head); // 创建链表
void display(struct member *head); // 输出链表
void update(struct member *head); // 修改链表
void release(struct member *head); // 释放链表
int main(){
struct member *head = NULL; // 链表头指针初始化为NULL
char choice;
do {
printf("是否继续添加会员信息(Y/N):");
scanf(" %c", &choice);
if (choice == 'Y' || choice == 'y') {
create(&head); // 创建链表
}
} while (choice == 'Y' || choice == 'y');
display(head); // 输出链表
update(head); // 修改链表
display(head); // 输出链表
release(head); // 释放链表
return 0;
}
void create(struct member **head){
struct member *p = *head, *new_node;
// 创建新节点
new_node = (struct member *)malloc(sizeof(struct member));
printf("请输入会员姓名:");
scanf("%s", new_node->name);
printf("请输入会员编号:");
scanf("%s", new_node->num);
printf("请输入会员积分:");
scanf("%d", &new_node->total);
new_node->next = NULL;
// 插入新节点
if (*head == NULL) { // 如果链表为空,则新节点为头节点
*head = new_node;
} else {
while (p->next != NULL) { // 找到链表末尾
p = p->next;
}
p->next = new_node; // 插入新节点
}
}
void display(struct member *head){
struct member *p = head;
printf("会员信息如下:\n");
while (p != NULL) { // 遍历链表
printf("姓名:%s,编号:%s,积分:%d\n", p->name, p->num, p->total);
p = p->next;
}
}
void update(struct member *head){
char num[20];
struct member *p = head;
printf("请输入要修改的会员编号:");
scanf("%s", num);
while (p != NULL) { // 遍历链表
if (strcmp(p->num, num) == 0) { // 找到要修改的会员
printf("请输入修改后的会员姓名:");
scanf("%s", p->name);
printf("请输入修改后的会员积分:");
scanf("%d", &p->total);
printf("已成功修改会员信息!\n");
return;
}
p = p->next;
}
printf("找不到此会员!\n");
}
void release(struct member *head){
struct member *p = head, *q;
while (p != NULL) { // 遍历链表
q = p;
p = p->next;
free(q); // 释放节点内存
}
printf("已成功释放链表所占内存!\n");
}
```
阅读全文