原神人物的管理系统

#include<stdio.h>//仅制作 ||账号拥有者||的人物登记
#include<string.h>
#include<stdlib.h>
#include<math.h>//原神的角色身高,星级有两种,
//,所属元素固定有七种,所属地域有五种,
//角色昵称固定,角色共有78个;不计算旅行者
//好感度等级,命之座等级初始值1,0;
//打表记录这是84人的high,star,,所属元素:冰,水,

// 草,雷,火,风,土
typedef struct ll {
    int zl;//根据昵称固定,我们会记录他的xl判断它所属人物;
    int grade;//命之座
    int lucky;//好感度
    struct ll* next;//指针

}xl;
typedef struct zz{
    xl* head;
    xl* tail;
    int size;

}dl;
typedef struct zl {
    
    int star;
    int element;//风火雷土水冰草
    unsigned char name[16];
    int where;
    
}mimi;//蒙德19人,诺拉1人,璃月20人,至冬一人,
//稻妻15人,须弥13人,枫丹9人
mimi people[84] = { 5,1,"琴",1,4,2,"安柏",1,4,3,"丽莎",1
,4,6,"凯亚",1,4,5,"芭芭拉",1,5,2,"迪卢克",1,4,3,"雷泽",1
,5,1,"温迪",1,5,2,"可莉",1,4,2,"班尼特",1,4,4,"诺艾尔",1,
 4,3,"菲谢尔",1,4,1,"砂糖",1,5,5,"莫娜",1,
    4,6,"迪奥娜",2,//风火雷土水冰草
5,4,"阿贝多",3,4,6,"罗莎莉亚",3,5,6,"优菈",3,
4,6,"米卡",3,5,6,"埃诺伊",3,
5,1,"魈",3,4,3,"北斗",3,4,4,"凝光",3,4,2,"香菱",3
,//风火雷土水冰草

4,5,"行秋",3,4,6,"重云",3,5,3,"刻晴",3,
5,6,"七七",3,5,4,"钟离",3,4,2,"辛炎",3,
5,6,"甘雨",3,5,2,"胡桃",3,4,2,"烟绯",3,5,6
,"申鹤",3,
4,4,"云堇",3,5,5,"夜兰",3,4,7,"瑶瑶",3,5,7,
"白术",3,
5,1,"闲云",3,4,2,"嘉明",3,
5,2,"达达利亚",4,5,6,"神里绫华",5,5,1,
"枫园万叶",5,5,2,
"宵宫",5,4,1,"早柚",5,5,3,"雷电将军",5,
4,3,"九条裟罗",5,
5,5,"珊瑚宫心海",5,4,2,"托马",5,5,4,"荒泷一斗",5,
4,4,"五郎",5
,5,3,"八重神子",5,5,5,"神里绫人",5,4,3,"久岐忍",5,

4,1,"鹿野院平藏",5,4,7,"绮良良",5,5,7,
"提纳里",6,4,7,"柯莱",6,
4,3,"多莉",6,5,3,"赛诺",6,4,5,"坎蒂斯",6,
5,5,"妮露",6,
5,7,"纳西妲",6,4,6,"莱依拉",6,5,1,
"流浪者",6,4,1,"珐露珊",6,
5,7,"艾尔海森",6,5,2,"迪西雅",6,4,7,
"卡维",6,5,2,"林尼",7,
4,1,"琳妮特",7,4,6,"费米尼",7,
,5,5,"那维莱特",7,5,6,"莱欧斯利",7,
4,6,"夏洛蒂",7,5,5,"芙宁娜",7
,5,4,"娜维娅",7,4,2,"夏沃雷",7 };
void increase(dl*pl){//尾插
    xl* p = (xl*)malloc(sizeof(xl));
    int i,ps,tg=0,tl=1;
    char a[16] = {'\0'}; 
    xl* p = (xl*)malloc(sizeof(xl));
    if (!p) { 
        printf("产生空指针");
        return; }
    else for(i=0;i<15;i++)
    {
        
        scanf_s("%c", &a[i], 1);
        if(a[i]=='\n'){a[i]='\0';break;}
        //需要判断其是否的标志//根据此添加人物
        }   a[15]='\0';
        if (ps <= 78) {

            while (tg <0 && tl < 1&&tl>10&&tg>7)
            {
                scanf_s("%d %d", &tg, &tl);
                if (tg < 0 && tl < 1 && tl>10 && tg>7)
                {p->grade = tg; p->lucky = tl;
                }
                else { printf("数值错误,请重新输入\n"); }

            }
        }
}//添加数据

void exchange(dl* pl) {
    //菜单选择更改角色数据,grade//lucky//
    // 可根据人物昵称选择对象或这第几个

    int flag = 1;

    printf("您想:1.通过昵称寻找    2.通过序号修改 ");
    do {
        int n;
        scanf_s("%d", &n);
        if (n == 2 || n == 1)flag = 0;
        xl* k = pl->head;
        int i, z;
        if (n == 1) {//根据昵称
            for (i = 0; i < pl->size; i++)
            {
                unsigned char b[16];
                k = k->next;
                gets_s(b, 16);
                z = strcmp(b, people[k->zl].name);
                if (!z)break;
            }
            if (i == pl->size)printf("无此人物");
            else {
                int p;
                printf("-1.修改命之座等级    0.修改好感度等级");
                scanf_s("%d", &p);
                if (p == -1) {

                    scanf_s("%d", &p);
                    if (p > 5 || p < 0) {
                        printf("输入错误数据");
                        flag = 1;
                    }
                    else k->grade = p;
                }
                else if (p == -2) {
                    scanf_s("%d", &p);
                    if (p > 10 || p < 0) {
                        printf("输入错误数据");
                        flag = 1;
                    }
                    else k->lucky = p;


                }
            }


        }
        else if (n == 2) {
            int z;
            scanf_s("%d", &z);
            if (z <= pl->size && z > 0)
            {
                for (i = 0; i < z; i++)

                    k = k->next;
                int p;
                printf("-1.修改命之座等级    0.修改好感度等级");
                scanf_s("%d", &p);
                if (p == -1) {

                    scanf_s("%d", &p);
                    if (p > 5 || p < 0) {
                        printf("输入错误\n"); flag = 1;
                    }
                    else k->grade = p;
                }
                else if (p == -2) {
                    scanf_s("%d", &p);
                    if (p > 10 || p < 0) {
                        printf("输入错误\n");
                        flag = 1;
                    }
                    else k->lucky = p;

                }

            }
        }
            if (flag) {
                printf("请重新输入;或选择输入任意结束修改");
                char b = getch();
                if (b != '\n')flag = 0;
            }
    } while (flag);

    
}//更改角色数据
void delete(dl*pl){

    int flag = 1;

    printf("您想:1.通过昵称删除    2.通过序号删除 ");
    do {
        int n;
        scanf_s("%d", &n);
        if (n == 2 || n == 1)flag = 0;
        xl* k = pl->head;
        xl* c;
        int i, z;
        if (n == 1) {//根据昵称
            for (i = 0; i < pl->size; i++)
            {
                unsigned char b[16];
                c = k;
                k = k->next;
                gets_s(b, 16);
                z = strcmp(b, people[k->zl].name);
                if (!z)break;
            }
            if (i == pl->size) {


                flag = 1;
                printf("无此人物");
            }
            else { c->next = k->next; pl->size--; free(k); }
            


        }
        else if (n == 2) {
            int z;
            scanf_s("%d", &z);
            if (z <= pl->size && z > 0)
            {
                for (i = 0; i < z; i++)
                    c = k;
                k = k->next;
                c->next = k->next;
                free(k);
                pl->size--;
            }
            else flag = 1;
        }
        if (flag) {
            printf("请重新输入;或选择输入任意结束删除");
            char b = getch();
            if (b != '\n')flag = 0;
        }
    } while (flag);


}//删除可以依据//删除那个人可根据昵称和
void code(){
     unsigned char a[15];//不允许中文,并且字符必须出现四种形式
    unsigned char b[4] = {0};
    int flag = 1,i=0;
    while (flag||(i<8&&i>14)) {
        b[1] = 0;
        b[2] = 0;
        b[3] = 0;
        b[0] = 0;
        flag = 1;
        if (i < 8&& i == 15)
            printf("密码长度在8-14间,请重新输入\n");
        for (i = 0; i < 15; i++)
        {
            char c;

            c= getch();
            if(c!='\n')printf("*");
            a[i] = c;
            if (a[i] == '\n') { a[i] = '\0'; break; }
            if (a[i] < 48 && a[i]>126)
            {
                printf("账号密码不允许出现字符"); break;
            }
            else {
            
                if (a[i] >= 65 && a[i] <= 90)b[0] = 1;
                else if (a[i] >= 97 && a[i] <= 122)b[1] = 1;
                else if (a[i] >= 48 && a[i] <= 57)b[2] = 1;
                else b[3] = 1;
                if (b[0] && b[1] && b[2] && b[3])flag = 0;
            }
        }
    }
    //记录密码;

}
void regesitor(){}//要看文件;
void sort(){}//升序反过来输出就是降序//
//选择根据grade or lucky or name ,并且稳定
//可以对所有角色和自身拥有角色分别进行;
void cz(dl*pl,int n,int z) {
    xl* p=pl->head;
    int i,count=0; //蒙德19人,诺拉1人, 璃月20人,至冬一人,
        //稻妻15人,须弥13人,枫丹9人
    char a[7][5] = {"风","火","雷","岩","水","冰","草"};
    char b[7][10] = { "蒙德",
        "诺拉","琉璃","至冬","稻妻","须弥","枫丹" };
    printf("人物昵称    元素属性    星级    所属国度");
    for (i = 0; i < pl->size; i++)

        p = p->next;
        if (n==1)
        {if(people [p->zl].element==z)
            printf("%s        %s",people[p->zl].name,a[n-1]);
            printf("    %d    %d", people[p->zl].star,
                b[people[p->zl].where-1]);
            
        }
else if(n == 2) {
    if (people[p->zl].where == z)
        printf("%s        %s", people[p->zl].name,
                a[people[p->zl].element-1]);
            printf("    %d    %s", people[p->zl].star,
                b[z-1]);
        
        }
    }

void inqury(dl*pl){
    
 printf("请选择根据:1.元素属性 2.人物所属地区");
 int n;
    scanf_s("%d", &n);
     xl * p = pl->head;
     if (n == 1) {
         int p;
printf("元素:1.风 2.火 3.雷 4.岩 5.水 6.冰 7.草");
         scanf_s("%d", &p);
         if (p < 8 && p>0)cz(pl, 1, p);
         else printf("输入数值无效");
}
     else if (n == 2) {
         int p;
printf("地区 1.蒙德 2.诺拉 3.璃月 4.至冬 5.稻妻 6.须弥 7.枫丹");
         scanf_s("%d", &p);
         if (p < 8 && p>0)cz(pl, 2, p);
         else printf("输入数值无效");
     }
     else printf("输入数值无效");
    

         
         
         
     
     
     
     
     
     
     }
//可对角色元素属性or星级or 地区进行查询,
//顺序依照蒙德,诺拉,璃月,至冬,稻妻,须弥,枫丹


int main(){
    dl pl;
    xl* p = (xl*)malloc(sizeof(xl));
    pl.head = pl.tail = p;
    pl.size = 0;
    p->next = NULL;
    if (!p)return 1;
    


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值