电话存储系统链表c语言代码,通讯录管理软件代码(c语言链表实现)

#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");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值