用顺序存储实现会员积分管理系统。 要求:实现如下算法: 1) 使用结构体创建顺序表描述单个会员,包含会员编号,姓名和积分; 2) 使用结构体创建链表描述全体会员; 3) 功能包括创建全体会员链表,插入新会员,删除会员,总人数统计,按会员编号查找,按会员姓名查找,积分排序,积分修改,显示所有会员信息,退出等功能;
时间: 2023-12-07 19:02:53 浏览: 13
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int id; // 会员编号
char name[20]; // 姓名
int score; // 积分
} Member;
Member *members; // 全体会员数组
int count; // 全体会员数量
int capacity; // 动态数组容量
// 初始化会员数组
void initMembers() {
members = (Member *)malloc(sizeof(Member) * 10); // 初始化容量为10
capacity = 10;
count = 0;
}
// 释放会员数组内存
void freeMembers() {
free(members);
}
// 插入新会员
void insertMember(Member member) {
if (count == capacity) { // 如果已满,需要扩容
members = (Member *)realloc(members, sizeof(Member) * capacity * 2);
capacity *= 2;
}
members[count++] = member; // 添加新会员
}
// 删除会员
void deleteMember(int id) {
int index = -1; // 记录要删除的会员在数组中的位置
for (int i = 0; i < count; i++) {
if (members[i].id == id) {
index = i;
break;
}
}
if (index != -1) { // 如果找到了要删除的会员
for (int i = index; i < count - 1; i++) {
members[i] = members[i + 1]; // 后面的会员依次前移
}
count--; // 当前会员数量减一
}
}
// 统计总人数
int totalCount() {
return count;
}
// 按编号查找会员
Member *findById(int id) {
for (int i = 0; i < count; i++) {
if (members[i].id == id) {
return &members[i]; // 返回符合条件的会员的指针
}
}
return NULL;
}
// 按姓名查找会员
Member *findByName(char *name) {
for (int i = 0; i < count; i++) {
if (strcmp(members[i].name, name) == 0) {
return &members[i]; // 返回符合条件的会员的指针
}
}
return NULL;
}
// 积分排序
void sortMembers() {
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - 1 - i; j++) {
if (members[j].score < members[j + 1].score) {
Member temp = members[j];
members[j] = members[j + 1];
members[j + 1] = temp;
}
}
}
}
// 修改积分
void modifyScore(int id, int score) {
Member *member = findById(id);
if (member != NULL) { // 如果找到了要修改积分的会员
member->score = score; // 修改积分
}
}
// 显示所有会员信息
void showAllMembers() {
for (int i = 0; i < count; i++) {
printf("会员编号:%d,姓名:%s,积分:%d\n", members[i].id, members[i].name, members[i].score);
}
}
// 退出程序
void exitProgram() {
freeMembers(); // 释放内存
exit(0); // 退出程序
}
// 主函数
int main() {
initMembers(); // 初始化会员数组
while (1) {
printf("\n");
printf("1. 创建新会员\n");
printf("2. 删除会员\n");
printf("3. 统计总人数\n");
printf("4. 按会员编号查找\n");
printf("5. 按会员姓名查找\n");
printf("6. 积分排序\n");
printf("7. 修改积分\n");
printf("8. 显示所有会员信息\n");
printf("9. 退出程序\n");
printf("请选择操作:");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1: // 创建新会员
printf("\n");
printf("请输入会员编号:");
int id;
scanf("%d", &id);
printf("请输入会员姓名:");
char name[20];
scanf("%s", name);
printf("请输入会员积分:");
int score;
scanf("%d", &score);
Member member = {id, name, score};
insertMember(member);
printf("已成功创建会员,会员编号:%d,姓名:%s,积分:%d\n", id, name, score);
break;
case 2: // 删除会员
printf("\n");
printf("请输入要删除的会员编号:");
int deleteId;
scanf("%d", &deleteId);
deleteMember(deleteId);
printf("已成功删除会员,会员编号:%d\n", deleteId);
break;
case 3: // 统计总人数
printf("\n");
printf("会员总人数:%d\n", totalCount());
break;
case 4: // 按会员编号查找
printf("\n");
printf("请输入要查找的会员编号:");
int findId;
scanf("%d", &findId);
Member *findMemberById = findById(findId);
if (findMemberById != NULL) {
printf("已找到会员,会员编号:%d,姓名:%s,积分:%d\n", findMemberById->id, findMemberById->name, findMemberById->score);
} else {
printf("未找到会员,会员编号:%d\n", findId);
}
break;
case 5: // 按会员姓名查找
printf("\n");
printf("请输入要查找的会员姓名:");
char findName[20];
scanf("%s", findName);
Member *findMemberByName = findByName(findName);
if (findMemberByName != NULL) {
printf("已找到会员,会员编号:%d,姓名:%s,积分:%d\n", findMemberByName->id, findMemberByName->name, findMemberByName->score);
} else {
printf("未找到会员,会员姓名:%s\n", findName);
}
break;
case 6: // 积分排序
sortMembers();
printf("\n");
printf("已按积分排序,排名如下:\n");
showAllMembers();
break;
case 7: // 修改积分
printf("\n");
printf("请输入要修改积分的会员编号:");
int modifyId;
scanf("%d", &modifyId);
printf("请输入新的积分:");
int newScore;
scanf("%d", &newScore);
modifyScore(modifyId, newScore);
printf("已成功修改会员积分,会员编号:%d,新积分:%d\n", modifyId, newScore);
break;
case 8: // 显示所有会员信息
printf("\n");
showAllMembers();
break;
case 9: // 退出程序
exitProgram();
break;
default:
printf("\n");
printf("输入无效,请重新输入!\n");
break;
}
}
return 0;
}
```
相关推荐
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)