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