1.(16分)模拟商场会员积分兑换:结构体类型定义如下: struct member{ char name[20] char num[20] int total struct member *next.}; 要求实现如下功能: (1)建立链表:自定义函数建立单链表来存放会员的信息,如果输入大写“Y’字符则继续创建结点存储会员信息,否则按任意键结束输入。 (2)积分兑换:自定义函数按照编号查找会员,并为这个会员兑换积分,5000分兑换10元,输入要兑换的积分数,输出兑换了多少元和剩余积分。如果没有找到,输出此会员不存在。(3)写自定义函数释放链表所占内存(在主函数依次调用各函数即可)输入输出如下: **创建节点提示:"请依次输入每个会员的编号、姓名、积分:\n”**输入节点数据格式:“%s %s %d" **是否继续创建提示,"是否继续输入,按Y键继续输入,其他键就结束。\n”**输入提示:"请输入要兑换积分的会员编号:(n”**输入格式:"%s" 如果没找到,输出"此会员不存在.n”找到了,完成兑换 **输入提示:"5000分兑换10元,你想兑换多少积分?\n**输入格式:"%d" **输出格式:"你兑换了%d元,剩余积分为:%d\n'
时间: 2024-02-23 11:00:58 浏览: 90
以下是完整代码实现及注释解释:
```c++
#include <iostream>
#include <cstring>
using namespace std;
// 定义会员结构体
struct member {
char name[20];
char num[20];
int total;
struct member *next;
};
// 自定义函数:建立单链表
member* create() {
// 定义头指针和尾指针,并初始化为空
member *head = NULL, *tail = NULL;
// 定义退出循环的标志
char flag;
do {
// 动态分配内存给新节点
member* p = new member();
// 输入会员的信息
cout << "请依次输入每个会员的编号、姓名、积分:\n";
cin >> p->num >> p->name >> p->total;
// 新节点插入链表尾部
if (head == NULL) {
head = p;
tail = p;
} else {
tail->next = p;
tail = p;
}
// 是否继续输入
cout << "是否继续输入,按Y键继续输入,其他键就结束。\n";
cin >> flag;
} while (flag == 'Y' || flag == 'y');
// 链表尾部指向NULL
tail->next = NULL;
// 返回链表头指针
return head;
}
// 自定义函数:按照编号查找会员,并为这个会员兑换积分
void exchange(member *head) {
// 定义查找标志和兑换的积分
char num[20];
int score;
// 输入要兑换积分的会员编号
cout << "请输入要兑换积分的会员编号:\n";
cin >> num;
// 定义是否找到会员的标志
bool flag = false;
// 从头节点开始遍历链表
while (head != NULL) {
// 如果找到了会员
if (strcmp(head->num, num) == 0) {
// 修改查找标志为true
flag = true;
// 输入要兑换的积分数
cout << "5000分兑换10元,你想兑换多少积分?\n";
cin >> score;
// 计算兑换金额和剩余积分
int money = score / 500;
int remain = head->total - score;
// 如果剩余积分小于0,则输出错误信息并退出函数
if (remain < 0) {
cout << "错误!兑换积分数不能超过当前积分数。\n";
return;
}
// 输出兑换金额和剩余积分
cout << "你兑换了" << money << "元,剩余积分为:" << remain << endl;
// 修改会员的积分
head->total = remain;
// 返回函数
return;
}
// 没有找到会员,则继续遍历下一个节点
head = head->next;
}
// 如果遍历完链表,仍然没有找到会员,则输出错误信息
if (!flag) {
cout << "此会员不存在。\n";
}
}
// 自定义函数:释放链表所占内存
void release(member *head) {
// 定义当前节点和删除节点
member *p = head, *q = head;
// 从头节点开始遍历链表
while (p != NULL) {
// 当前节点指向下一个节点
p = p->next;
// 删除当前节点
delete q;
// 删除节点指向下一个节点
q = p;
}
}
int main() {
// 建立单链表
member *head = create();
// 兑换积分
exchange(head);
// 释放链表所占内存
release(head);
return 0;
}
```
阅读全文
相关推荐



















