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