您的位置:首页 > 其它

通讯录包含保存文本数据和读取文本数据功能

2017-12-07 15:38 441 查看
使用链表实现增加(在增加人员的过程中有一个自动排序功能,比如按姓名排序)、删除、修改、查找(比如:工号查找、电话查找)的功能;

(1)添加用户信息(号码长度   号码是否重复)

(2)列出好友信息(按姓名排序)

(3)查找好友信息(按姓名查找)

(4)删除好友

(5)退出

头文件
#ifndef _ADDRESSBOOK_H_
#define _ADDRESSBOOK_H_

struct Addressbook
{
char name[10];
char id[20];
char address[20];
char tele[20];
char mobile[20];
struct Addressbook *next;
};

typedef struct Addressbook addressbook;
typedef addressbook *LinkList;

#endif
//接口函数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"addressbook.h"

void ListInit(LinkList *l)
{
(*l) = (LinkList)malloc(sizeof(addressbook));
(*l)->next = NULL;
}

int InsertInfo(LinkList *l)
{
LinkList p = *l;
LinkList s;

printf("请输入好友信息:\n");

s = (LinkList)malloc(sizeof(addressbook));
scanf("%s%s%s%s%s",s->name,s->id,s->mobile,s->tele,s->address);

if(strlen(s->mobile) != 11)
{
printf("无效手机号码!\n");
return 0;
}
if(strlen(s->tele) != 8)
{
printf("无效家庭电话号码!\n");
return 0;
}
while(p->next)
{
if(strcmp((p->next)->mobile,s->mobile) == 0)
{
printf("已存在相同手机号码!\n");
return 0;
}
p = p->next;
}

p=*l;
if(p->next ==NULL)
{
s->next = p->next;
p->next = s;
}
else
{
while(p->next)
{
if(strcmp((p->next)->name,s->name)>0)
{
s->next = p->next;
p->next = s;
break;
}
p = p->next;
}
if(p->next ==NULL)
{
s->next = p->next;
p->next = s;
}
}
}

int ShowInfo(LinkList l)
{
if(l->next == NULL)
{
printf("通讯录为空!\n");
}
else
{
LinkList p = l->next;

while(p)
{
printf("Name: %s Id: %s Mobile: %s Tele: %s Address: %s\n",p->name,p->id,p->mobile,p->tele,p->address);
p=p->next;
}
}
}

int SearchInfo(LinkList l)
{
LinkList p = l->next;
char n[10];
printf("请输入您想要查找的好友名字:\n");
scanf("%s",n);

while(p)
{
if(strcmp(p->name,n) == 0)
{
printf("ID: %s Tele: %s Mobile: %s Address: %s\n",p->id,p->tele,p->mobile,p->address);
break;
}
else
{
p =p->next;
}

}
if(p == NULL)
{
printf("查无此人!\n");
}
}

int DeleteInfo(LinkList l)
{
LinkList p = l;
LinkList tmp;
char n[10];
printf("请输入你想删除的好友名字:\n");
scanf("%s",n);

while(p->next)
{
if(strcmp((p->next)->name,n) == 0)
{
tmp = p->next;
p->next = tmp->next;
free(tmp);
printf("删除好友信息成功!\n");
break;
}
else
{
p = p->next;
}
}
}

int ChangeInfo(LinkList *l)
{
LinkList p = (*l)->next;
LinkList t = *l;
LinkList s ;
char n[10];
printf("请输入您想修改的好友姓名:\n");
scanf("%s",n);

while(p)
{
s = (LinkList)malloc(sizeof(addressbook));
if(strcmp(p->name,n) == 0)
{
printf("请输入您要修改的信息:姓名 编号 电话 家庭电话 住址\n");
scanf("%s%s%s%s%s",s->name,s->id,s->mobile,s->tele,s->address);

if(strlen(s->mobile) != 11)
{
printf("无效手机号码!\n");
return 0;
}
if(strlen(s->tele) != 8)
{
printf("无效家庭电话号码!\n");
return 0;
}
while(t->next)
{
if(strcmp((t->next)->mobile,s->mobile) == 0)
{
printf("已存在相同手机号码!\n");
return 0;
}
t = t->next;
}
strcpy(p->name , s->name);
strcpy(p->id , s->id);
strcpy(p->mobile , s->mobile);
strcpy(p->tele , s->tele);
strcpy(p->address , s->address);
free(s);

printf("修改成功!\n");
break;
}
else
{
p = p->next;
}
}
if(p == NULL)
{
printf("查无此人!\n");
}
}

int outlink(LinkList l)
{
FILE *fp;
fp=fopen("output.txt","w");
if(NULL==fp)
{
perror("fopen");
exit(1);
}
LinkList temp=l->next;
while(temp)
{
fwrite(temp,sizeof(addressbook),1,fp);
temp=temp->next;
}
printf("保存中\n");
sleep(2);
fclose(fp);
}

void readlink(LinkList l)
{
LinkList p,r;
FILE *fp;
l->next=NULL;
r=l;
if((fp=fopen("output.txt","r"))==NULL)
{
perror("can not open\n");
exit(1);
}
printf("reading\n");
while(!feof(fp))
{
p=(LinkList)malloc(sizeof(addressbook));
if(!p)
{
printf("malloc failure\n");
return;
}
if(fread(p,sizeof(addressbook),1,fp)!=1)
{
break;
}
else
{
p->next=NULL;
r->next=p;
r=p;

}
}
sleep(2);
fclose(fp);
}

主函数

#include<stdio.h>
#include<stdlib.h>
#include"addressbook.h"

void PrintInfo()
{
printf("********************************************\n");
printf("***1.添加用户信息 2.列出好友信息***********\n");
printf("***3.查找好友信息 4.删除好友***************\n");
printf("***5.修改好友信息 6.保存文本 ***********\n");
printf("***7.退出 **********************\n\n");
printf("***********请输入你的选择***********\n");
}

int main()
{
LinkList addbook;
int choice;

ListInit(&addbook);
readlink(addbook);
while(1)
{
PrintInfo();
scanf("%d",&choice);

switch(choice)
{
case 1:
InsertInfo(&addbook);
break;
case 2:
ShowInfo(addbook);
break;
case 3:
SearchInfo(addbook);
break;
case 4:
DeleteInfo(addbook);
break;
case 5:
ChangeInfo(&addbook);
break;
case 6:
outlink(addbook);
break;
case 7:
exit(1);
break;
default:
printf("无效操作!\n");
}

}
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐