Rzang 2019-10-15 15:27 采纳率: 75%
浏览 165

完全分不清楚二级指针哪里用加*哪里不用了 突发奇想写的登录现在改不懂 用的vc6.0写的也没分开。。 还有些别的错误循环创建文件什么的也是刚在网上看的用的不一定对

#include
#include
#include
#define Error -1
#define OK 1

typedef struct
{
int num;
char name[20];
}Elemtype;

typedef struct node
{
Elemtype data;
struct node *next;
}LNode,*Linklist;

int Creat_List(Linklist *PHead,Elemtype x,int i)
{
Linklist p;
p=(Linklist)malloc(sizeof(LNode));
p->next=NULL;
printf("请输入要创建的账户名:\n");
scanf("%s",&x.name);
printf("请设定密码:\n");
scanf("%s",&x.num);
p->data.num=x.num;
strcpy((p->data.name),x.name);
if(p==NULL)
return Error;
*(PHead+i)=p;
return OK;
}

int Show_People(Linklist PHead,int n)
{

int i;
for(i=1;i<=n;i++)
{
printf("姓名:%s 密码:%d",(
(PHead+i))->data.name,(*(PHead+i))->data.num); //->的优先级高于* 所以外面加上括号
//来源https://blog.csdn.net/ZongYinHu/article/details/45288845
}
return OK;
}

int Empty_List(Linklist Head)
{
if(Head->next==NULL)
printf("通讯录为空无法删除!\n");
return OK;
}

int Insert_Last(Linklist Head,Elemtype x)
{
Linklist p,q;
q=Head;
p=(Linklist)malloc(sizeof(LNode));
p->next=NULL;
if(p==NULL)
return Error;
else
{
p->data.num=x.num;
strcpy((p->data.name),x.name);
Head->next=p;

}
return OK;

}

int Delete_List(Linklist Head,char name)
{
Linklist p,q;
q=Head;
p=Head->next;
while(strcmp(p->data.name,name)!=0)
{
p=p->next;
q=q->next;
}
p->next=q->next;
free(p);
return OK;
}

int Revise_List(Linklist Head, char name)
{
Elemtype x;
Linklist p=Head;
printf("请输入修改后的姓名和电话:\n");
printf("姓名:\t");
scanf("%s ",&x.name);
printf("电话:\t");
scanf("% ",&x.num);
while(strcmp(p->data.name,name)!=0)
{
p=p->next;
}

p->data.num=x.name;
strcpy((p->data.name),x.name);
return OK;

}

int Write_List(Linklist Head,int i)
{

Linklist p;
int k;
FILE *fp;
p=Head;
for(k=0;k<i;k++)
{
    fp=sprintf(fp,"D:data%2d.txt",k);
    fprintf(fp,"%d",p->data);
    fclose(fp);
}
return OK;

}

int Show_Linklist(Linklist Head)
{

Linklist p;
p=Head;
while(p->next!=NULL);
{
    printf("%s/t %d/n",p->data.name,p->data.num);
    p=p->next;
}
return OK;

}
int Set_Null(Linklist *PHead)
{
int i=0;
for(i=0;i {
Linklist p,q;
q=PHead->head[i];
p=PHead->head[i]->next;
while(p!=NULL)
{
q=p;
p=p->next;
free(q);

}
PHead->head[i]->next=NULL;

}

}

Linklist Login_User(Linklist *PHead)
{

char name;
int num;
int i=0;
Linklist p;
p=(Linklist)malloc(sizeof(LNode));
p->data.num=0;
p->data.name=NoUser;
p->data.num=NULL;
printf("请输入账户名:\n");
scanf("%s",&name);
for(i=0;i<100;)
{   

    if(strcmp((*(PHead+i))->data.name,name==0))
    {   
        printf("请输入密码:\n");
        if(*(PHead+i)->data.num==num)
        {
            printf("登录成功!\n");
            p=(*(PHead+i));
            break;
        }

        else
        {
            printf("密码错误!\n");
            break;
        }

    }
    i++;
}
if(strcmp(Head[i]->data.name,name!=0));
{
    printf("该用户不存在请重新登录!\n");
}
return p;

}

int main()
{
int Creat_List(Linklist *PHead,Elemtype x,int i);
int Show_People(Linklist *PHead,int n);
int Empty_List(Linklist Head);
int Insert_Last(Linklist Head,Elemtype user);
int Delete_List(Linklist Head,char name);
int Revise_List(Linklist Head, char name);
int Show_Linklist(Linklist Head,int i);
int Write_List(Linklist Head);
Linklist Login_User(Linklist *PHead);

int s,t,j;
int i=0;
char name;
Elemtype x;
Linklist *PHead;
Linklist head[100];
Linklist Head
head[0]={0,userinformation};
PHead=(Linklist *)malloc(sizeof(LNode));
PHead=head;


do
{
printf("------------------------\n");
printf("1-查看用户信息。\n");
printf("2-建立新的通讯录。\n");
printf("3-登录已有通讯录。\n");
printf("4-退出。\n");
printf("------------------------\n");
scanf("%d",&s);

    switch(s)
    {
    case 1:
        Show_People(PHead,i);
        break;
    case 2:
        printf("创建账户名:\n");
        scanf("%s",&x.name);
        printf("创建密码:\n");
        scanf("%d",&x.num);
        Creat_List(PHead,x,i);
        i=i+1;
        break;
    case 3:
        Login_User(PHead);
        Head=Login_User(*PHead);
        do
        {   
            printf("------------------------\n");
            printf("1-插入信息。\n");
            printf("2-删除信息。\n");
            printf("3-修改信息。\n");
            printf("4-存入文件。\n");
            printf("5-返回上级。\n");
            printf("------------------------\n");
            scanf("%d",&t);
            switch(t)
            {
            case 1:
                printf("新建联系人::\n");
                scanf("%s",&x.name);
                printf("电话:\n");
                scanf("%d",&x.num);
                Insert_Last(Head,x);
                Show_Linklist(Head);
                break;
            case 2:
                if(Empty_List(Head)==1)
                    printf("通讯录为空无法删除!\n");
                else
                    printf("输入要删除的联系人姓名\n");
                    scanf("%s",name);
                    Delete_List(Head,name);
                    printf("成功!\n");
                    Show_Linklist(Head);
                    break;
            case 3:
                printf("输入要修改的联系人姓名\n");
                scanf("%s",name);
                Revise_List(Head,name);
                Show_Linklist(Head);
                break;
            case 4:
                printf("输入写入的文件编号,该文件编号和通讯录编号相同")
                scanf("%d",&j);
                Write_List(Linklist Head, j);
                printf("写入成功!\n");
                break;
            case 5:
                break;
            default:
                printf("编号错误请重新选择!\n");
                break;

        }while(t!=5)

    case 4:
        break;
    default:
        printf("编号错误请重新选择!\n");
        break;
}while(s!=4);

Set_Null(PHead);
free(PHead);
return OK;


}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 js调用html页面需要隐藏某个按钮
    • ¥15 ads仿真结果在圆图上是怎么读数的
    • ¥20 Cotex M3的调试和程序执行方式是什么样的?
    • ¥20 java项目连接sqlserver时报ssl相关错误
    • ¥15 一道python难题3
    • ¥15 牛顿斯科特系数表表示
    • ¥15 arduino 步进电机
    • ¥20 程序进入HardFault_Handler
    • ¥15 oracle集群安装出bug
    • ¥15 关于#python#的问题:自动化测试