请写一个代码管理会员信息,会员余位为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;
}
会员管理系统(C语言)
如有帮助,望采纳
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define L 50
#define G 10
char adminname[5]="admin";//管理员账号和密码,也可写入文件中
char adminpassword[10]="123";
typedef struct node{
int num;
char name[L];
char password[L];
long int money;
char grade[G];
struct node *next;
}node;
//全局的。
node *user_head;//用户头指针
node *user_end;//用户尾指针---方便插入
node *userGR;//登录时,指向用户
//文件函数
node* Rcreatelink();
void save();
//登陆函数
int search(char name[L],char password[L]);
int login();
void boundar();
//管理员函数
void looklook();
void increase();
void revise();
void adminmenu();
void admin();
//用户函数
void user();
void usermenu();
//通过金额自动生成会员等级
void zidongsc(node *q);
void zidongsc(node *q)
{
char grade[6][50]={"普通","白银","黄金","铂金","钻石","黑金"};
int num;
num=q->money/1000;
if(num<=3)
strcpy(q->grade,grade[0]);
else if(num<=6)
strcpy(q->grade,grade[1]);
else if(num<=9)
strcpy(q->grade,grade[2]);
else if(num<=12)
strcpy(q->grade,grade[3]);
else if(num<=15)
strcpy(q->grade,grade[4]);
else
strcpy(q->grade,grade[5]);
}
node* Rcreatelink()
{
int num,money;
char name[L],password[L],grade[G];
node *head =(node*)malloc(sizeof(node));
node *p;
FILE *fp = fopen("user.txt","W+");//不存在user.txt则自动创建user.txt文件
p = head;
//p=user_head;
if(fp==NULL)
{
printf("打开文件失败!");
}
else
{
while(fscanf(fp,"%d %s %s %d %s",&num,name,password,&money,grade)!=EOF)//读出 EOF就是文件结尾
{
node *q = (node*)malloc(sizeof(node));
q->num = num;
strcpy(q->name,name);
strcpy(q->password,password);
q->money=money;
strcpy(q->grade,grade);
p->next=q;
p=q;
}
p->next=NULL;
user_end = p;
}
fclose(fp);
return head;
}
void save()
{
node* temp = user_head->next;
FILE* fp = fopen("user.txt", "w");
//setbuf(fp,NULL);
while (temp)
{
fprintf(fp,"%d %s %s %d %s ",temp->num,temp->name,temp->password,temp->money,temp->grade);
//fflush(fp);
temp = temp->next;
}
fclose(fp);
}
int sreach(char name[],char password[])//通过文件查找是否存在该用户
{
node *p;
p=user_head->next;
if((strcmp(name,adminname)==0)&&(strcmp(password,adminpassword)==0))
return 1;
while(p)//
{
if(strcmp(name,p->name)==0&&strcmp(password,p->password)==0)
{
userGR = p;
return 2;
}
p=p->next;
}
return 0;
}
int login()
{
int flag;
char a[L],c[L];
printf("\t\t\t-----------------------\n");
printf("\t\t\t+---- 登 陆 页 面 ----+\n");
printf("\t\t\t-----------------------\n");
printf("\t\t\t+会员名 ");
scanf("%s",&a);
printf("\t\t\t+密码 ");
scanf("%s",&c);
printf("\t\t\t-----------------------\n");
flag = sreach(a,c);
return flag;
}
void boundar()
{
int FL;
FL=login();
while(FL==0)
{
system("cls");
printf("\t\t\t用户名或密码错误!\n");
printf("\t\t\t请重新输入!\n");
FL=login();
}
if(FL==1)
{
printf("\t\t\t登陆成功!\n");
system("cls");
admin();//管理员
}
else if(FL==2)
{
printf("\t\t\t登陆成功!\n");
system("cls");
user();//用户
}
}
void looklook()
{
int a,num;
node *p;
p = user_head->next;
printf("看全部会员信息(1),查看某特定会员(2)\n");
scanf("%d",&a);
if(a==1)
{
printf("********************************************************\n");
printf("| 编号 |会 员 名| 密 码 |消费金额| 会员等级 |\n");
while(p!=NULL)
{
printf("|%4d |%-8s| %-10s| %6d | %s |\n",p->num,p->name,p->password,p->money,p->grade);
p=p->next;
}
if(p==NULL)
{
printf("\t\t\t无会员信息!\n");
printf("\t\t\t请前往录入(添加)会员信息\n");
}
}
else
{
printf("查看会员编号:");
scanf("%d",&num);
while(p)
{
if(p->num==num)
{
printf("********************************************************\n");
printf("| 编号 |会 员 名| 密 码 |消费金额| 会员等级 |\n");
printf("|%4d |%-8s| %-10s| %6d | %s |\n",p->num,p->name,p->password,p->money,p->grade);
}
p=p->next;
}
}
}
void increase()
{
int i,n;
int num,money;
char name[L],password[L];
node *p = user_end ;
printf("想要添加几人信息:");
scanf("%d",&n);
printf("********************************************************\n");
printf("编号 会员名 密码 消费金额(根据金额生成会员等级)\n");
for(i=0;i<n;i++)
{
node *r = (node *)malloc(sizeof(node));
scanf("%d %s %s %d",&num,name,password,&money);
r->num=num;
strcpy(r->name,name);
strcpy(r->password,password);
r->money=money;
zidongsc(r);
p->next = r;
r->next=NULL;
p=r;
}
p->next=NULL;
user_end = p;
save();
}
void revise()
{
int c,d,e=-1;
int money;
char name[L],password[L];
node *p,*q;
p=user_head;
q=p->next;
printf("\t\t\t1.修改 2.删除\n");
printf("\t\t\t请输入想要进行操作:");
scanf("%d",&c);
if(c==1)
{
printf("\t\t\t请输入修改会员编号:");
scanf("%d",&d);
while(q)
{
if(q->num==d)
{
while(e!=0)
{
system("cls");
printf("\t\t\t请输入要修改信息:\n");
printf("1.会员名\n");
printf("2.会员密码\n");
printf("3.消费金额\n");
printf("0.退出\n");
scanf("%d",&e);
switch(e)
{
case 1:
printf("修改前会员名:%s\n",q->name);
printf("想要修改会员名:");
scanf("%s",name);
strcpy(q->name,name);
printf("\n修改成功");
break;
case 2:
printf("修改前会员密码:%s\n",q->password);
printf("想要修改密码:");
scanf("%s",password);
strcpy(q->password,password);
printf("\n修改成功");
break;
case 3:
printf("修改前消费金额:%d\n",q->money);
printf("想要修改金额:");
scanf("%d",&money);
q->money=money;
printf("\n修改成功!\n");
zidongsc(q);
break;
//会员等级就不需要修改了,通过函数自动生成。
case 0:
break;
}
}
}
q=q->next;
}
}
else
{
system("cls");
printf("请输入想要删除的编号:");
scanf("%d",&d);
while(p)
{
if(q->num==d)
{
p->next=q->next;
printf("删除成功!\n");
}
q=q->next;
p=p->next;
}
save();
}
}
void adminmenu()
{
int a=-1;
while(a!=0)
{
printf("\t\t\t 您具有以下功能:\n");
printf("\t\t\t*1.查看会员信息\n");
printf("\t\t\t*2.添加会员信息\n");
printf("\t\t\t*3.修改会员信息\n");
printf("\t\t\t*0.退出\n");
printf("\t\t\t*");
scanf("%d",&a);
switch(a)
{
case 1:
system("cls");
looklook();
break;
case 2:
system("cls");
increase();
save();
break;
case 3:
system("cls");
revise();
save();
break;
case 0:
break;
}
}
}
void admin()
{
printf("\t\t\t欢迎您,管理员\n");
adminmenu();
}
void usermenu()
{
int a;
char password[L]={0};
printf("您拥有查看个人信息和修改密码的权限!\n");
printf("您的个人信息如下\n:");
printf("---------------------------------------------------\n");
printf("| 编号 |会 员 名| 密 码 |消费金额| 会员等级 |\n");
printf("|%4d |%-8s| %-10s| %6d | %s |\n",userGR->num,userGR->name,userGR->password,userGR->money,userGR->grade);
printf("如果想要修改密码请输入(1)");
scanf("%d",&a);
if(a==1)
{
printf("您的原始密码为:%s",userGR->password);
printf("请输入修改的密码:");
scanf("%s",password);
strcpy(userGR->password,password);
printf("修改成功!\n");
}
save();
}
void user()
{
printf("欢迎您,%s会员\n",userGR->grade);
usermenu();
printf("再见!");
}
main()
{
node *head=Rcreatelink();
user_head = NULL;
user_head = head;
boundar();
printf("感谢您的使用!");
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!