#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<conio.h>
struct Hero
{
char heroname[20];
float heroATK;
float heroDFS;
char herotype[10];
int herorank;
struct Hero *next;
};
struct Hero *head;
void menu()
{
system("cls");
printf("\n");
printf("\n");
printf(" ==============菜单==============\n");
printf(" ==添加角色请按1 删除角色请按2==\n");
printf(" ==查找角色请按3 遍历角色请按4==\n");
printf(" =======修改英雄信息请按5========\n");
printf(" ==========插入英雄请按6=========\n");
printf(" ============退出请按0===========\n");
printf("\n");
printf("\n");
printf(" =========请输入功能序号=========\n");
}
void insertnode()
{
printf(" 请输入插入序号 \n");
struct Hero *p,*pn,*pnode;
int want,i=1;
scanf("%d",&want);
pnode=calloc(1,sizeof(struct Hero));
printf("====请依次输入英雄的名字 攻击力 防御力 类型 等级====\n");
scanf("%s %f %f %s %d",pnode->heroname,&pnode->heroATK,&pnode->heroDFS,pnode->herotype,&pnode->herorank);
p=head;
if(want==1)
{
pnode->next=p;
head=pnode;
printf(" 插入成功 \n");
Sleep(500);
return ;
}
else if(want==2)
{
pnode->next=p->next;
p->next=pnode;
printf(" 插入成功\n");
Sleep(500);
return;
}
while(p->next!=NULL)
{
p=p->next;
i++;
if(i>=want-1)
break;
}
pnode->next=p->next;
p->next=pnode;
printf(" 插入成功\n");
Sleep(500);
return ;
}
void addnode()
{
struct Hero *p,*pn;
if(head==NULL)
{
head=calloc(1,sizeof(struct Hero));
printf("====请依次输入英雄的名字 攻击力 防御力 类型 等级====\n");
scanf("%s %f %f %s %d",head->heroname,&head->heroATK,&head->heroDFS,head->herotype,&head->herorank);
printf(" 添加成功\n");
Sleep(500);
return;
}
pn=calloc(1,sizeof(struct Hero));
printf("====请依次输入英雄的名字 攻击力 防御力 类型 等级====\n");
scanf("%s %f %f %s %d",pn->heroname,&pn->heroATK,&pn->heroDFS,pn->herotype,&pn->herorank);
p=head;
while(p->next!=NULL)
{
p=p->next;
}
p->next=pn;
printf(" 添加成功\n");
Sleep(500);
}
void addnode1()
{
struct Hero *p,*pn;
p=head;
pn=calloc(1,sizeof(struct Hero));
printf("====请依次输入英雄的名字 攻击力 防御力 类型 等级====\n");
scanf("%s %f %f %s %d",pn->heroname,&pn->heroATK,&pn->heroDFS,pn->herotype,&pn->herorank);
pn->next=p;
head=pn;
printf(" 添加成功\n");
Sleep(500);
}
void delnode()
{
struct Hero *p,*pnode;
char name[20];
int a=0;
printf("=========请输入需要删除的英雄角色名字=========\n");
scanf("%s",name);
if(head==NULL)
{
printf("==================无保存角色==================\n");
Sleep(500);
return ;
}
if(strcmp(head->heroname,name)==0)
{
head=head->next;
return ;
}
p=head;
pnode=p->next;
while(pnode!=NULL)
{
if(strcmp(pnode->heroname,name)==0)
{
p->next=pnode->next;
free(pnode);
a=1;
}
else
{
p=p->next;
pnode=pnode->next;
}
}
if(a==1)
{
printf("===============!删除成功!===============\n");
Sleep(500);
}
else
{
printf("=============!该角色不存在!=============\n");
Sleep(500);
}
}
void alterdata()
{
struct Hero *p;
char name[20];
int want;
char altername[20],altertype[20];
int alterATK,alterDFS,alterrank;
printf("=======请输入需要修改的英雄的名字=======\n");
scanf("%s",name);
p=head;
while(p!=NULL)
{
if(strcmp(p->heroname,name)==0)
{
printf("==========以下为原数据==========\n");
printf("名字 攻击力 防御力 类型 等级\n");
printf("%s %2.1f %2.1f %2s %2d\n",p->heroname,p->heroATK,p->heroDFS,p->herotype,p->herorank);
printf("==========请输入需要修改的内容===========\n1名字, 2攻击力,3防御力, 4类型, 5等级\n");
scanf("%d",&want);
if(want==1)
{
printf("=========请输入修改后的名字=========\n");
scanf("%s",altername);
strcpy(p->heroname,altername);
printf("==============修改成功==============\n");
Sleep(500);
return ;
}
else if(want==2)
{
printf("=========请输入修改后的攻击力========\n");
scanf("%d",&alterATK);
p->heroATK=alterATK;
printf("==============修改成功================\n");
Sleep(500);
return ;
}
else if(want==3)
{
printf("==========请输入修改后的防御力=========\n");
scanf("%d",&alterDFS);
p->heroDFS=alterDFS;
printf("==============修改成功=================\n");
Sleep(500);
return ;
}
else if(want==4)
{
printf("===========请输入修改后的类型===========\n");
scanf("%s",altertype);
strcpy(p->herotype,altertype);
printf("===============修改成功==================\n");
Sleep(500);
return ;
}
else if(want==5)
{
printf("===========请输入修改后的等级=========\n");
scanf("%d",&alterrank);
p->herorank=alterrank;
printf("================修改成功==================\n");
Sleep(500);
return ;
}
else
{
printf("输入错误\n");
Sleep(500);
return ;
}
}
else
p=p->next;
}
if(p==NULL)
{
printf("============该英雄不存在=============\n");
Sleep(500);
return;
}
}
void output()
{
struct Hero *p;
p=head;
printf(" 遍历如下\n");
printf("名字 攻击力 防御力 类型 等级\n");
while(p!=NULL)
{
printf("%s %2.1f %2.1f %2s %2d\n",p->heroname,p->heroATK,p->heroDFS,p->herotype,p->herorank);
p=p->next;
}
printf("---回车结束---\n");
getchar();
getchar();
}
void findcode()
{
struct Hero *p,*pn;
char name[20];
printf("==========请输入需要查找英雄的名字==========\n");
scanf("%s",name);
p=head;
while(p!=NULL)
{
if(strcmp(p->heroname,name)==0)
{
printf("名字 攻击力 防御力 类型 等级\n");
printf("%s %2.1f %2.1f %2s %2d\n",p->heroname,p->heroATK,p->heroDFS,p->herotype,p->herorank);
Sleep(500);
break;
}
p=p->next;
}
if(p==NULL)
printf("============该英雄不存在=============\n");
Sleep(500);
}
void main()
{
struct Hero *p;
char want,want2;
while(1)
{
menu();
want=getch();
if(want==49)
{
printf("====请选择添加位置放在首位输入0、末尾输入1====\n");
want2=getch();
if(want2==49)
addnode();
else if(want2==48)
addnode1();
}
else if(want==50)
delnode();
else if(want==51)
findcode();
else if(want==52)
output();
else if(want==53)
alterdata();
else if(want==54)
insertnode();
else if(want ==48)
break;
else
printf("输入错误\n");
}
}