#include
#include
#include
#include
typedef struct address
{
char
name[18];
char
tel[20];
struct address
*next;
} ADDR;
typedef ADDR *add;
add p,q,r;
add header1=NULL,header2=NULL;
ADDR* add_record(add head1)
{
char n[18];
char
t[20];
printf("\n请输入姓名:");
scanf("%s",n);
printf("\n请输入电话号码:");
scanf("%s",t);
p=(ADDR*)malloc(sizeof(ADDR));
p->next=NULL;
strcpy(p->name,n);
strcpy(p->tel,t);
if(head1==NULL)
{
head1=p;
}
else
{
r=head1;
while(r->next!=NULL)
r=r->next;
r->next=p;
}
return head1;
}
ADDR* delete_record(add head2)
{
add q;
char n[18];
int i;
if(head2==NULL)
{
printf("\n错误!该链表为空\n");
}
else
{
printf("\n请输入要删除学生的姓名:");
scanf("%s",n);
p=head2;
while(p!=NULL)
{
i=strcmp(p->name,n);
if(i==0)
{
q=p->next;
strcpy(p->name,q->name);
strcpy(p->tel,q->tel);
p->next=q->next;
break;
}
else
p=p->next;
}
}
return head2;
}
void find_record(add head3)
{
char n[18];
int i;
if(head3==NULL)
{
printf("\n错误!该链表为空\n");
}
else
{
printf("\n请输入要查找学生的姓名:");
scanf("%s",n);
p=head3;
while(p!=NULL)
{
i=strcmp(p->name,n);
if(i==0)
{
printf("\n%s\n%s",p->name,p->tel);
break;
}
else
p=p->next;
}
if(p==NULL)
printf("未找到该记录!");
}
}
void display(add head4)
{
p=head4;
while(p!=NULL)
{
printf("\n姓名:%-18s
",p->name);
printf("电话:%-20s\n",p->tel);
p=p->next;
}
}
ADDR* sort (add head4)
{
char na[18];
char te[20];
printf("按姓名进行排序\n");
for(p=head4;p!=NULL;p=p->next)
{
for(q=p;q!=NULL;q=q->next)
{
if(strcmp(p->name,q->name)>0)
{
strcpy(na,p->name);
strcpy(te,p->tel);
strcpy(p->name,q->name);
strcpy(p->tel,q->tel);
strcpy(q->name,na);
strcpy(q->tel,te);
}
}
}
return head4;
}
ADDR* load(add head5)
{
char *n[3],*t[3];
add a,b,c;
a=(ADDR*)malloc(sizeof(ADDR));//原来文件中包含三个结构体数据a,b,c;
c=(ADDR*)malloc(sizeof(ADDR));
b=(ADDR*)malloc(sizeof(ADDR));
n[0]="alen";
strcpy(a->name,n[0]);
t[0]="15219465";
strcpy(a->tel,t[0]);
a->next=b;
//数据a
n[1]="bill";
strcpy(b->name,n[1]);
t[1]="279434055";
strcpy(b->tel,t[1]);
b->next=c;
//数据b
n[2]="tina";
strcpy(c->name,n[2]);
t[2]="798357463";
strcpy(c->tel,t[2]);
c->next=NULL;
//数据c
return a;
}
void save(add head6,char *ad)
{
FILE *fp;
fp=fopen(ad,"w");
printf("文件已创建!");
for(p=head6;p!=NULL;p=p->next)
{
fwrite(p,sizeof(ADDR),1,fp);
}
fclose(fp);
printf("\n文件已保存!\n");
}
ADDR* change(add head7)
{
char n[18];
int i;
if(head7==NULL)
{
printf("\n错误!该链表为空\n");
}
else
{
printf("\n请输入要修改学生的姓名:");
scanf("%s",n);
p=head7;
while(p!=NULL)
{
i=strcmp(p->name,n);
if(i==0)
{
printf("\n%s\n%s",p->name,p->tel);
printf("请输入改动后的姓名和电话,以空格键隔开:");
scanf("%s",p->name);
scanf("%s",p->tel);
printf("\n改动后为:");
printf("\n%s\n%s",p->name,p->tel);
break;
}
else
p=p->next;
}
if(p==NULL)
printf("未找到该记录!");
}
return head7;
}
int menu_selectt()
{
int i,j;
printf("\n■■■■■■■■■■请选择: ■■■■■■■■■■\n");
printf("■■■■■■■■■■1.新建通讯录 ■■■■■■■■\n");
printf("■■■■■■■■■■2.打开已有通讯录 ■■■■■■\n");
printf("■■■■■■■■■■3.退出系统 ■■■■■■■■■\n");
scanf("%d",&i);
if(i==1)
{
printf("请选择:\n");
printf("①★★★★★ 增加记录1 ★★★★\n");
printf("②★★★★★ 查询记录★★★★★\n");
printf("③★★★★★ 修改记录★★★★★\n");
printf("④★★★★★ 删除记录★★★★★\n");
printf("⑤★★★★★ 对记录进行排序★★\n");
printf("⑥★★★★★ 保存文件1 ★★★★\n");
printf("⑦★★★★★ 返回上一级菜单★★\n");
scanf("%d",&j);
switch(j)
{
case 1:return 11;
case 2:return 21;
case 3:return 31;
case 4:return 41;
case 5:return 51;
case 6:return 61;
case 7:return 7;
default:
printf("错误!请按回车键回到上一级菜单!\n");
return 7;
}
}
else
if(i==2)
{
printf("请选择:\n");
printf("①★★★★★ 增加记录2 ★★★★\n");
printf("②★★★★★ 查询记录★★★★★\n");
printf("③★★★★★ 修改记录★★★★★\n");
printf("④★★★★★ 删除记录★★★★★\n");
printf("⑤★★★★★ 对记录进行排序★★\n");
printf("⑥★★★★★ 保存文件2 ★★★★\n");
printf("⑦★★★★★ 返回上一级菜单★★\n");
scanf("%d",&j);
switch(j)
{
case 1:return 12;
case 2:return 22;
case 3:return 32;
case 4:return 42;
case 5:return 52;
case 6:return 62;
case 7:return 7;
default:
printf("错误!请按回车键回到上一级菜单!");
system("pause");
return 7;
}
}
else
if(i==3)
return
8;
else
printf("错误!请按回车键回到上一级菜单!");
system("pause");
return 7;
}
void main()
{
char ads[256];
printf(" 欢迎使用学生通讯录管理系统!\n");
printf(" ╭︿︿︿╮ \n");
printf("作者:{/ o o /} 纯属娱乐! \n");
printf(" ( (oo) ) \n");
printf(" ︶︶︶\n");
int s;
while((s=menu_selectt())!=8)
{
switch(s)
{
case 11:
header1=add_record(header1);
printf("现在通讯录中已有记录:");
display(header1);
break;
case 12:
header2=load(header2);
printf("现在通讯录中已有记录:");
display(header2);
header2=add_record(header2);
break;
case 21:
find_record(header1);
break;
case 22:
find_record(header2);
break;
case 31:
header1=change(header1);
printf("现在通讯录中已有记录:");
display(header1);
break;
case 32:
header2=change(header2);
printf("现在通讯录中已有记录:");
display(header2);
break;
case 41:
header1=delete_record(header1);
printf("现在通讯录中已有记录:");
display(header1);
break;
case 42:
header2=delete_record(header2);
printf("现在通讯录中已有记录:");
display(header2);
break;
case 51:
header1=sort (header1);
printf("排序后通讯录中记录:");
display(header1);
break;
case 52:
header2=sort (header2);
printf("排序后通讯录中记录:");
display(header2);
break;
case 61:
printf("请输入保存文件时所用的路径及文件名");
scanf("%s",ads);
save(header1,ads);
break;
case 62:
printf("请输入保存文件时所用的路径及文件名:");
scanf("%s",ads);
save(header2,ads);
break;
case 7:
break;
case 8:
goto loop;
}
}
loop:
printf(" ★ ★\n");
printf(" ☆☆ ☆☆ ☆☆
☆☆\n");
printf(" ★★ ★ ★★\n");
printf(" ☆☆ 谢谢使用!
☆☆\n");
printf(" ★★ ★★\n");
printf(" ☆☆ 再见! ☆☆\n");
printf(" ★★
★★\n");
printf(" ☆☆ ☆☆\n");
printf(" ★★
★★\n");
printf(" ☆☆\n");
printf(" ★\n");
}