}
/*建立通信录函数*/
struct per *jianli() /*创建链表,并返回表头指针*/ {
struct per *head; /*表头*/ struct per *p1; /*新建节点*/ struct per *p2; /*表尾节点*/ long int num1; char name1[20]; char tel1[12]; char mail1[30]; char add1[50]; long int mnum1; char id1[18];
head=NULL; /*无任何节点,表头指向空*/
printf(\请输入联系人编号、姓名、电话、身份证号、邮箱、地址及邮编(用空格分隔,
用0结束)\\n\
scanf(\
while(num1!=0) /*假设num=0表示输入结束*/ {
scanf(\读入
第一个联系人的信息*/
p1=(struct per *)malloc(sizeof(struct per)); /*新建一个节点*/ p1->num=num1; /*存入联系人的信息*/ strcpy(p1->name,name1); strcpy(p1->tel,tel1); strcpy(p1->id,id1); strcpy(p1->mail,mail1); strcpy(p1->add,add1); p1->mnum=mnum1;
p1->next=NULL; /*将next域置为空,表示尾节点*/
- 8 -
}
}
if(head==NULL)
head=p1; /*第一个新建节点是表头*/
else
p2->next=p1; /*原表尾的下一个节点是新节点*/
p2=p1; /*新建节点成为表尾*/ scanf(\
return head; /*返回表头指针*/
/*输出通信录函数*/
void shuchu(struct per *head) {
struct per *p;
int n=0; /*统计节点数,即联系人数*/
printf(\通*******信*******录*******************\\n\printf(\编号\姓名\电话号码\身份
证号\邮箱\地址\邮编\ */
printf(\
{
if(head!=NULL) {
for(p=head;p!=NULL;p=p->next) /*如果到达尾节点退出循环,否则继续
ail,p->add,p->mnum);
} else
- 9 -
}
n++;
printf(\联系人总数:%d\\n\\n\
}
printf(\对不起,该通信录中没有任何联系人!\\n\\n\
/*添加联系人函数*/
struct per*tianjia(struct per*head) {
struct per*p; struct per*p1; struct per*p2; p2=head;
p=(struct per*)malloc(sizeof(struct per)); /*新建节点p*/ printf(\请输入要添加的联系人的编号、姓名、电话、身份证号、邮箱、地址、邮编:\\n\scanf(\
>mnum);
printf(\成功添加联系人%s !\\n\if(head==NULL) { } else {
while((p->num>p2->num)&&(p2->next!=NULL)) /*查找添加位置*/ { }
if(p->num<=p2->num) /*从小到大排列,添加至表内*/ {
if(p2==head) {
- 10 -
head=p; p->next=NULL;
p1=p2; p2=p2->next;
}
}
}
}
head=p; p->next=p2;
else { }
p1->next=p; p->next=p2;
else /*添加至表尾*/ { }
p2->next=p; p->next=NULL;
return(head);
/*删除联系人函数*/
struct per * shanchu(struct person*head) {
struct per *p2; struct per *p1; int num1,n;
printf(\请输入要删除的联系人编号:\根据输入信息查找联系人*/ scanf(\if(head==NULL) { }
- 11 -
printf(\通讯录为空\\n\\n\return(head);
p2=head;
while(num1 != p2-> num && p2->next !=NULL) { }
if(num1==p2->num) {
printf(\成功查询到该联系人!\\n\
printf(\编号\姓名\电话号码\p1=p2; p2=p2->next;
身份证号\邮箱\地址\邮编\
printf(\
->mail,p2->add,p2->mnum); }
- 12 -
}
printf(\确定删除? 1确定 0取消 \scanf(\switch(n) { case 1: {if(p2==head)
head=p2->next;
else
p1->next=p2->next;
free(p2);
printf(\成功删除编号为%ld的联系人!\\n\\n\case 0: }
printf(\您取消了删除任务,联系人未被删除!\\n\break;
else
printf(\对不起,该通信录中没有任何联系人!\\n\\n\
return(head);