好的,以下是一个简单的会员管理系统的C语言链表实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义会员结构体
typedef struct member {
char account[20]; // 账号
char name[20]; // 姓名
char phone[20]; // 电话号码
float balance; // 余额
int lost; // 是否挂失,0表示未挂失,1表示已挂失
struct member *next; // 指向下一个会员的指针
} Member;
// 创建一个新的会员
Member *create_member(char *account, char *name, char *phone, float balance, int lost) {
Member *new_member = (Member *)malloc(sizeof(Member));
strcpy(new_member->account, account);
strcpy(new_member->name, name);
strcpy(new_member->phone, phone);
new_member->balance = balance;
new_member->lost = lost;
new_member->next = NULL;
return new_member;
}
// 添加一个会员到链表中
void add_member(Member **head, Member *new_member) {
if (*head == NULL) {
*head = new_member;
} else {
Member *current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = new_member;
}
}
// 根据账号查找会员
Member *find_member_by_account(Member *head, char *account) {
Member *current = head;
while (current != NULL) {
if (strcmp(current->account, account) == 0) {
return current;
}
current = current->next;
}
return NULL;
}
// 根据姓名查找会员
Member *find_member_by_name(Member *head, char *name) {
Member *current = head;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
return current;
}
current = current->next;
}
return NULL;
}
// 根据电话号码查找会员
Member *find_member_by_phone(Member *head, char *phone) {
Member *current = head;
while (current != NULL) {
if (strcmp(current->phone, phone) == 0) {
return current;
}
current = current->next;
}
return NULL;
}
// 根据账号删除会员
void delete_member(Member **head, char *account) {
Member *current = *head;
Member *previous = NULL;
while (current != NULL) {
if (strcmp(current->account, account) == 0) {
if (previous == NULL) {
*head = current->next;
} else {
previous->next = current->next;
}
free(current);
return;
}
previous = current;
current = current->next;
}
}
// 修改会员信息
void modify_member(Member *member, char *name, char *phone, float balance, int lost) {
strcpy(member->name, name);
strcpy(member->phone, phone);
member->balance = balance;
member->lost = lost;
}
// 根据余额排序会员列表
void sort_members_by_balance(Member **head) {
if (*head == NULL || (*head)->next == NULL) {
return;
}
Member *current = *head;
Member *previous = NULL;
while (current != NULL) {
if (previous != NULL && current->balance < previous->balance) {
previous->next = current->next;
current->next = previous;
if (previous == *head) {
*head = current;
} else {
Member *temp = *head;
while (temp->next != previous) {
temp = temp->next;
}
temp->next = current;
}
current = previous;
}
previous = current;
current = current->next;
}
}
// 显示会员列表
void display_members(Member *head) {
printf("账号\t姓名\t电话号码\t余额\t是否挂失\n");
Member *current = head;
while (current != NULL) {
printf("%s\t%s\t%s\t%.2f\t%s\n", current->account, current->name, current->phone, current->balance, current->lost ? "是" : "否");
current = current->next;
}
}
int main() {
Member *head = NULL;
add_member(&head, create_member("1001", "张三", "13812345678", 100.0, 0));
add_member(&head, create_member("1002", "李四", "13987654321", 200.0, 0));
add_member(&head, create_member("1003", "王五", "13611112222", 50.0, 1));
display_members(head);
printf("\n");
Member *member = find_member_by_account(head, "1002");
if (member != NULL) {
modify_member(member, "赵六", "13799998888", 300.0, 0);
}
display_members(head);
printf("\n");
delete_member(&head, "1003");
display_members(head);
printf("\n");
sort_members_by_balance(&head);
display_members(head);
printf("\n");
Member *found_member = find_member_by_name(head, "张三");
if (found_member != NULL) {
printf("账号:%s,电话号码:%s,余额:%.2f,是否挂失:%s\n", found_member->account, found_member->phone, found_member->balance, found_member->lost ? "是" : "否");
}
return 0;
}
```
这个会员管理系统使用链表来存储会员信息,可以添加、删除、修改会员信息,根据账号、姓名、电话号码查询会员信息,根据余额排序会员列表。