请写一个代码管理会员信息,会员余位为2。录入会员信息并可选择功能查询。(注:malloc,calloc,realloc,free等函数希望可以用上;用户输入数字1~7,即转入相应的功能)具体案例如下:
时间紧急,付费请教!
请写一个代码管理会员信息,会员余位为2。录入会员信息并可选择功能查询。(注:malloc,calloc,realloc,free等函数希望可以用上;用户输入数字1~7,即转入相应的功能)具体案例如下:
代码如下,完全按照案例编写。
如有帮助,望采纳!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _member {
char first_name[20];
char last_name[20];
int number;
int joined;
int fee[5];
} Member;
typedef struct _node {
Member member;
struct _node *next;
} Node;
Node *create_head()
{
Node *head = (Node *)malloc(sizeof(Node));
if(head == NULL) {
return NULL;
}
head->next = NULL;
return head;
}
void free_head(Node *head)
{
if(head == NULL) {
return;
}
Node *p = head;
Node *q = p;
while(p) {
q = p->next;
free(p);
p = q;
}
}
void add(Node *head)
{
if(head == NULL) {
return;
}
int n = 0;
Node *node = (Node *)malloc(sizeof(Node));
node->next = NULL;
printf("Give the first and last name > ");
scanf("%s %s", node->member.first_name, node->member.last_name);
printf("Give member number > ");
scanf("%d", &node->member.number);
printf("Give year joined > ");
scanf("%d", &node->member.joined);
printf("Give fee for year 2017 > ");
scanf("%d", &node->member.fee[0]);
printf("Give fee for year 2018 > ");
scanf("%d", &node->member.fee[1]);
printf("Give fee for year 2019 > ");
scanf("%d", &node->member.fee[2]);
printf("Give fee for year 2020 > ");
scanf("%d", &node->member.fee[3]);
printf("Give fee for year 2021 > ");
scanf("%d", &node->member.fee[4]);
for(int i=0; i<5; i++) {
if(node->member.fee[i] == 0) {
n++;
}
}
printf("Free slots %d\n", n);
Node *p = head;
while(p) {
if(p->member.number == node->member.number) {
printf("\n");
printf("Add failed, member number is exist!\n");
printf("\n");
break;
}
if(p->next == NULL) {
p->next = node;
break;
}
p = p->next;
}
}
void remove(Node *head)
{
if(head == NULL) {
return;
}
int number;
printf("Give member number to remove > ");
scanf("%d", &number);
Node *pre = head;
Node *p = head->next;
while(p) {
if(p->member.number == number) {
pre->next = p->next;
free(p);
p = NULL;
break;
}
pre = p;
p = p->next;
}
}
void update(Node *head)
{
if(head == NULL) {
return;
}
int number, select;
printf("Give member number to update > ");
scanf("%d", &number);
Node *p = head->next;
while(p) {
if(p->member.number == number) {
break;
}
p = p->next;
}
if(p == NULL) {
return;
}
printf("\n");
printf("1 Change last name\n");
printf("2 Change member number\n");
printf("3 Change year joined\n");
printf("4 Change member fees\n");
printf("Select > ");
scanf("%d", &select);
if(select == 1) {
printf("Give new last name > ");
scanf("%s", p->member.last_name);
}
else if(select == 2) {
printf("Give new member number > ");
scanf("%d", &p->member.number);
}
else if(select == 3) {
printf("Give new year joined > ");
scanf("%d", &p->member.joined);
}
else if(select == 4) {
printf("Give new fee for year 2017 > ");
scanf("%d", &p->member.fee[0]);
printf("Give new fee for year 2018 > ");
scanf("%d", &p->member.fee[1]);
printf("Give new fee for year 2019 > ");
scanf("%d", &p->member.fee[2]);
printf("Give new fee for year 2020 > ");
scanf("%d", &p->member.fee[3]);
printf("Give new fee for year 2021 > ");
scanf("%d", &p->member.fee[4]);
int n = 0;
for(int i=0; i<5; i++) {
if(p->member.fee[i] == 0) {
n++;
}
}
printf("Free slots %d\n", n);
}
}
void print_member(Node *head)
{
if(head == NULL) {
return;
}
int number;
printf("Give member number > ");
scanf("%d", &number);
printf("\n");
printf("********************************\n\n");
Node *p = head->next;
while(p) {
if(p->member.number == number) {
break;
}
p = p->next;
}
if(p) {
printf("First name: %s\n", p->member.first_name);
printf("Last name: %s\n", p->member.last_name);
printf("Member num: %d\n", p->member.number);
printf("Joined: %d\n", p->member.joined);
printf("\n");
}
else {
printf("Not found, cannot print data!\n");
printf("\n");
}
printf("********************************\n");
}
void print_register(Node *head)
{
if(head == NULL) {
return;
}
printf("********************************\n\n");
Node *p = head->next;
while(p) {
printf("First name: %s\n", p->member.first_name);
printf("Last name: %s\n", p->member.last_name);
printf("Member num: %d\n", p->member.number);
printf("Joined: %d\n", p->member.joined);
printf("\n");
p = p->next;
}
printf("********************************\n");
}
void search(Node *head)
{
if(head == NULL) {
return;
}
int select;
printf("1 Search first name\n");
printf("2 Search last name\n");
printf("3 Search member number\n");
printf("4 Search year joined\n");
printf("Select > ");
scanf("%d", &select);
printf("\n");
if(select == 1) {
char name[20];
printf("Give first name > ");
scanf("%s", name);
Node *p = head->next;
while(p) {
if(strcmp(p->member.first_name, name) == 0) {
printf("\n");
printf("First name: %s\n", p->member.first_name);
printf("Last name: %s\n", p->member.last_name);
printf("Member num: %d\n", p->member.number);
printf("Joined: %d\n", p->member.joined);
printf("\n");
}
p = p->next;
}
}
else if(select == 2) {
char name[20];
printf("Give last name > ");
scanf("%s", name);
Node *p = head->next;
while(p) {
if(strcmp(p->member.last_name, name) == 0) {
printf("\n");
printf("First name: %s\n", p->member.first_name);
printf("Last name: %s\n", p->member.last_name);
printf("Member num: %d\n", p->member.number);
printf("Joined: %d\n", p->member.joined);
printf("\n");
}
p = p->next;
}
}
else if(select == 3) {
int number;
printf("Give member number > ");
scanf("%d", &number);
Node *p = head->next;
while(p) {
if(p->member.number == number) {
printf("\n");
printf("First name: %s\n", p->member.first_name);
printf("Last name: %s\n", p->member.last_name);
printf("Member num: %d\n", p->member.number);
printf("Joined: %d\n", p->member.joined);
printf("\n");
}
p = p->next;
}
}
else if(select == 4) {
int joined;
printf("Give year joined > ");
scanf("%d", &joined);
Node *p = head->next;
while(p) {
if(p->member.joined == joined) {
printf("\n");
printf("First name: %s\n", p->member.first_name);
printf("Last name: %s\n", p->member.last_name);
printf("Member num: %d\n", p->member.number);
printf("Joined: %d\n", p->member.joined);
}
printf("\n");
p = p->next;
}
}
}
void menu()
{
int select, running = 1;
Node *head = create_head();
while(running == 1) {
printf("1 Add new member\n");
printf("2 Remove a member\n");
printf("3 Updata member\n");
printf("4 Print member\n");
printf("5 Print register\n");
printf("6 Search\n");
printf("7 End\n");
printf("Select > ");
scanf("%d", &select);
printf("\n");
switch (select) {
case 1:
add(head);
break;
case 2:
remove(head);
break;
case 3:
update(head);
break;
case 4:
print_member(head);
break;
case 5:
print_register(head);
break;
case 6:
search(head);
break;
case 7:
running = 0;
break;
default:
break;
}
printf("\n");
}
free_head(head);
}
int main()
{
menu();
return 0;
}