用链表做英雄管理系统

#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");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值