c语言链表实现通讯录
来源:互联网 发布:中学生网络交友新闻 编辑:程序博客网 时间:2024/05/16 14:19
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 50
typedef struct PersonalInfo
{
char name[50];
char address[30];
char tel[30];
char postcode[30];
struct PersonalInfo *next; //节点指针
}INFO;
typedef struct{
char name[50];
char address[30];
char tel[30];
char postcode[30];
}str;
INFO *head;
void Initiate();
void write_file(INFO *head,int len);
void Menu();
void Create(); //功能:创建新通讯录
void Add(); // 通讯录末尾写入新信息并返选单
void Find(); //查找记录
void Alter(); //修改记录未找要修改则提示通讯录没信息并返选单
void Delete(); //删除某信息未找要删提示通讯录没信息并返选单
void List(); //功能:显示通讯录所记录
//初始化
void Initiate()
{
if((head=(INFO *)malloc(sizeof(INFO)))==NULL) exit(1); //exit(1)表示异常退出
head->next=NULL;
}
//显示菜单
void Menu()
{
printf ("\n");
printf ("\n");
printf ("\n");
printf("**************欢迎使用通讯录系统**************");
printf("\n");
printf("\n");
printf("*********** 1.创建好友 ***********\n");
printf("*********** 2.添加好友 ***********\n");
printf("*********** 3.查询好友 ***********\n");
printf("*********** 4.修改好友 ***********\n");
printf("*********** 5.删除好友 ***********\n");
printf("*********** 6.显示所有好友 ***********\n");
printf("*********** 0.退通讯录 ***********\n\n\n");
}
//创建通讯录
void Create()
{
void clear();
INFO *p1[100],*p2;
int m,i;
printf("请输入创建数:");
scanf("%d",&m);
for(i=1;i<=m;i++)
{
p1[i]=(INFO *)malloc(sizeof(INFO));
printf("请输入第%d条信息!\n",i);
printf("姓名:\n");
scanf("%s",&p1[i]->name);
printf("地址:\n");
scanf("%s",&p1[i]->address);
printf("电话:\n");
scanf("%s",&p1[i]->tel);
printf("邮编:\n");
scanf("%s",&p1[i]->postcode);
p1[i]->next=NULL;
if(head->next==NULL) //如果找到的最小节点就是第一个节点
{
head->next=p1[i];
}
else
{
for(p2=head;p2->next!=NULL;p2=p2->next); //找结点尾
p2->next=p1[i];
}
}
printf("信息已添加\n");
return; //保存链表
}
//添加通讯录好友
void Add()
{
INFO *p,*q;
if((q=(INFO *)malloc(sizeof(INFO)))==NULL) exit(1);
printf("请输入要添加信息!\n");
printf("姓名:\n"); //添加信息
scanf("%s",&q->name);
printf("地址:\n");
scanf("%s",q->address);
printf("电话:\n");
scanf("%s",q->tel);
printf("邮编:\n");
scanf("%s",q->postcode);
for(p=head;p->next!=NULL;p=p->next) ;
p->next=q;
q->next=NULL;
printf("信息已添加!\n");
return;
}
//查找通讯录信息
void Find()
{
INFO *p;
char name[50];
if(head->next==NULL) // 如果是一个空链表;
{
printf("通讯录空!\n");
return;
}
printf("请输入要查找姓名:\n");
scanf("%s",&name);
for(p=head->next;p!=NULL;p=p->next) //循环遍历链表中的节点,找出此时最小的节点
{
if(strcmp(p->name,name)==0) //比较输入的姓名
{
printf("姓名\t地址\t邮编\t电话\n");
printf("%s\t%s\t%s\t%s\n",p->name,p->address,p->postcode,p->tel);
}
else if(p->next==NULL)
printf("已显示您要查找的信息!\n");
}
}
//修改通讯录信息
void Alter()
{
char name[50]; //先查找 删除
INFO *p, *p1;
if (head->next == NULL)
{
printf("通讯录空!\n");
return;
}
printf("请输入要修改姓名:\n");
scanf("%s",name);
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,name)==0)
{
break;
}
else if(p->next==NULL)
{
printf("信息!\n");
return;
}
}
p1=(INFO *)malloc(sizeof(INFO));
printf("新的姓名:\n"); //添加信息
scanf("%s",p1->name);
strcpy(p->name,p1->name);
printf("新的地址:\n");
scanf("%s",p1->address);
strcpy(p->address,p1->address);
printf("新的电话:\n");
scanf("%s",p1->tel);
strcpy(p->tel,p1->tel);
printf("新的邮编:\n");
scanf("%s",p1->postcode);
strcpy(p->postcode,p1->postcode);
printf("信息已修改\n");
//显示修改信息
printf("姓名\t地址\t邮编\t电话\n");
printf("%s\t%s\t%s\t%s\n",p->name,p->address,p->postcode,p->tel);
free(p1);
}
//删除通讯录信息
void Delete()
{
char name[50]; //先查找 删除
INFO *p = head->next, *p1 =head->next,*p2;
if (head->next == NULL)
{
printf("通讯录空\n");
return;
}
printf("请输入要删除姓名:\n");
scanf(" %s",name);
while ((strcmp(p->name,name)!=0 )&& p->next != NULL)
{
p1=p;
p =p->next;
}
if (strcmp(name, p->name)==0) //输删除信息
{
if (p == head->next&&p->next!=NULL)
{
head->next = p->next;
}
else if(p==head->next&&p->next==NULL)
{
head->next=p->next;
printf("好友已全部删除!\n");
return;
}
else
p1->next = p->next;
}
else
{
printf("不存在该好友!\n");
return;
}
printf("信息已删除!\n");
printf("您还有以下好友!\n");
printf("姓名\t地址\t邮编\t电话\n");
for(p2=head->next;p2!=NULL;p2=p2->next)
printf("%s\t%s\t%s\t%s\n",p2->name,p2->address,p2->postcode,p2->tel);
}
//显示所记录
void List()
{
INFO *p;
if(head->next==NULL)
{
printf("通讯录记录!\n");
return;
}
printf("姓名\t地址\t邮编\t电话\n");
for(p=head->next;p!=NULL;p=p->next)
printf("%s\t%s\t%s\t%s\n",p->name,p->address,p->postcode,p->tel);
}
void write_file(INFO *head,int len)
{
int i;
str string[100];
FILE *fp = fopen("aaa","w");
if(NULL==fp)
{
printf("open error!\n");
exit(1);
}
while(head->next!=NULL)
{
for(i=0;i<len;i++)
{
strcpy(string[i].name,head->next->name);
strcpy(string[i].address,head->next->address);
strcpy(string[i].tel,head->next->tel);
strcpy(string[i].postcode,head->next->postcode);
fwrite(&string[i],sizeof(str),1,fp);
head = head->next;
}
}
fclose(fp);
}
int main()
{
int choice;
char yes_no;
Initiate();
do
{
Menu();
printf("请输入指令0-6:\n");
scanf("%d",&choice);
printf("\n");
switch(choice)
{
case 1:Create();
break;
case 2:Add();
break;
case 3:Find();
break;
case 4:Alter();
break;
case 5:Delete();
break;
case 6:List();
break;
case 0:write_file(INFO *head,int len);
printf("************谢您使用************\n");
exit(0); //正常退出
break;
default:
printf("输入误!请重新输入\n");
break;
}
printf("是否继续 Y or N? \n");
do
{
scanf("%c",&yes_no);
}
while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}
while(yes_no=='Y'||yes_no=='y');
}
#include <stdlib.h>
#include <string.h>
#define N 50
typedef struct PersonalInfo
{
char name[50];
char address[30];
char tel[30];
char postcode[30];
struct PersonalInfo *next; //节点指针
}INFO;
typedef struct{
char name[50];
char address[30];
char tel[30];
char postcode[30];
}str;
INFO *head;
void Initiate();
void write_file(INFO *head,int len);
void Menu();
void Create(); //功能:创建新通讯录
void Add(); // 通讯录末尾写入新信息并返选单
void Find(); //查找记录
void Alter(); //修改记录未找要修改则提示通讯录没信息并返选单
void Delete(); //删除某信息未找要删提示通讯录没信息并返选单
void List(); //功能:显示通讯录所记录
//初始化
void Initiate()
{
if((head=(INFO *)malloc(sizeof(INFO)))==NULL) exit(1); //exit(1)表示异常退出
head->next=NULL;
}
//显示菜单
void Menu()
{
printf ("\n");
printf ("\n");
printf ("\n");
printf("**************欢迎使用通讯录系统**************");
printf("\n");
printf("\n");
printf("*********** 1.创建好友 ***********\n");
printf("*********** 2.添加好友 ***********\n");
printf("*********** 3.查询好友 ***********\n");
printf("*********** 4.修改好友 ***********\n");
printf("*********** 5.删除好友 ***********\n");
printf("*********** 6.显示所有好友 ***********\n");
printf("*********** 0.退通讯录 ***********\n\n\n");
}
//创建通讯录
void Create()
{
void clear();
INFO *p1[100],*p2;
int m,i;
printf("请输入创建数:");
scanf("%d",&m);
for(i=1;i<=m;i++)
{
p1[i]=(INFO *)malloc(sizeof(INFO));
printf("请输入第%d条信息!\n",i);
printf("姓名:\n");
scanf("%s",&p1[i]->name);
printf("地址:\n");
scanf("%s",&p1[i]->address);
printf("电话:\n");
scanf("%s",&p1[i]->tel);
printf("邮编:\n");
scanf("%s",&p1[i]->postcode);
p1[i]->next=NULL;
if(head->next==NULL) //如果找到的最小节点就是第一个节点
{
head->next=p1[i];
}
else
{
for(p2=head;p2->next!=NULL;p2=p2->next); //找结点尾
p2->next=p1[i];
}
}
printf("信息已添加\n");
return; //保存链表
}
//添加通讯录好友
void Add()
{
INFO *p,*q;
if((q=(INFO *)malloc(sizeof(INFO)))==NULL) exit(1);
printf("请输入要添加信息!\n");
printf("姓名:\n"); //添加信息
scanf("%s",&q->name);
printf("地址:\n");
scanf("%s",q->address);
printf("电话:\n");
scanf("%s",q->tel);
printf("邮编:\n");
scanf("%s",q->postcode);
for(p=head;p->next!=NULL;p=p->next) ;
p->next=q;
q->next=NULL;
printf("信息已添加!\n");
return;
}
//查找通讯录信息
void Find()
{
INFO *p;
char name[50];
if(head->next==NULL) // 如果是一个空链表;
{
printf("通讯录空!\n");
return;
}
printf("请输入要查找姓名:\n");
scanf("%s",&name);
for(p=head->next;p!=NULL;p=p->next) //循环遍历链表中的节点,找出此时最小的节点
{
if(strcmp(p->name,name)==0) //比较输入的姓名
{
printf("姓名\t地址\t邮编\t电话\n");
printf("%s\t%s\t%s\t%s\n",p->name,p->address,p->postcode,p->tel);
}
else if(p->next==NULL)
printf("已显示您要查找的信息!\n");
}
}
//修改通讯录信息
void Alter()
{
char name[50]; //先查找 删除
INFO *p, *p1;
if (head->next == NULL)
{
printf("通讯录空!\n");
return;
}
printf("请输入要修改姓名:\n");
scanf("%s",name);
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,name)==0)
{
break;
}
else if(p->next==NULL)
{
printf("信息!\n");
return;
}
}
p1=(INFO *)malloc(sizeof(INFO));
printf("新的姓名:\n"); //添加信息
scanf("%s",p1->name);
strcpy(p->name,p1->name);
printf("新的地址:\n");
scanf("%s",p1->address);
strcpy(p->address,p1->address);
printf("新的电话:\n");
scanf("%s",p1->tel);
strcpy(p->tel,p1->tel);
printf("新的邮编:\n");
scanf("%s",p1->postcode);
strcpy(p->postcode,p1->postcode);
printf("信息已修改\n");
//显示修改信息
printf("姓名\t地址\t邮编\t电话\n");
printf("%s\t%s\t%s\t%s\n",p->name,p->address,p->postcode,p->tel);
free(p1);
}
//删除通讯录信息
void Delete()
{
char name[50]; //先查找 删除
INFO *p = head->next, *p1 =head->next,*p2;
if (head->next == NULL)
{
printf("通讯录空\n");
return;
}
printf("请输入要删除姓名:\n");
scanf(" %s",name);
while ((strcmp(p->name,name)!=0 )&& p->next != NULL)
{
p1=p;
p =p->next;
}
if (strcmp(name, p->name)==0) //输删除信息
{
if (p == head->next&&p->next!=NULL)
{
head->next = p->next;
}
else if(p==head->next&&p->next==NULL)
{
head->next=p->next;
printf("好友已全部删除!\n");
return;
}
else
p1->next = p->next;
}
else
{
printf("不存在该好友!\n");
return;
}
printf("信息已删除!\n");
printf("您还有以下好友!\n");
printf("姓名\t地址\t邮编\t电话\n");
for(p2=head->next;p2!=NULL;p2=p2->next)
printf("%s\t%s\t%s\t%s\n",p2->name,p2->address,p2->postcode,p2->tel);
}
//显示所记录
void List()
{
INFO *p;
if(head->next==NULL)
{
printf("通讯录记录!\n");
return;
}
printf("姓名\t地址\t邮编\t电话\n");
for(p=head->next;p!=NULL;p=p->next)
printf("%s\t%s\t%s\t%s\n",p->name,p->address,p->postcode,p->tel);
}
void write_file(INFO *head,int len)
{
int i;
str string[100];
FILE *fp = fopen("aaa","w");
if(NULL==fp)
{
printf("open error!\n");
exit(1);
}
while(head->next!=NULL)
{
for(i=0;i<len;i++)
{
strcpy(string[i].name,head->next->name);
strcpy(string[i].address,head->next->address);
strcpy(string[i].tel,head->next->tel);
strcpy(string[i].postcode,head->next->postcode);
fwrite(&string[i],sizeof(str),1,fp);
head = head->next;
}
}
fclose(fp);
}
int main()
{
int choice;
char yes_no;
Initiate();
do
{
Menu();
printf("请输入指令0-6:\n");
scanf("%d",&choice);
printf("\n");
switch(choice)
{
case 1:Create();
break;
case 2:Add();
break;
case 3:Find();
break;
case 4:Alter();
break;
case 5:Delete();
break;
case 6:List();
break;
case 0:write_file(INFO *head,int len);
printf("************谢您使用************\n");
exit(0); //正常退出
break;
default:
printf("输入误!请重新输入\n");
break;
}
printf("是否继续 Y or N? \n");
do
{
scanf("%c",&yes_no);
}
while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}
while(yes_no=='Y'||yes_no=='y');
}
阅读全文
0 0
- C语言课程设计通讯录链表实现
- 用c语言链表实现通讯录
- c语言链表实现通讯录
- c语言实现----通讯录
- C语言实现通讯录
- C语言实现通讯录
- c语言实现通讯录
- C语言实现通讯录
- C语言通讯录(利用链表实现)
- 【c语言】实现一个通讯录
- c语言实现通讯录系统
- C语言实现简单通讯录
- 用C语言实现通讯录
- C语言实现简易通讯录
- c语言实现简单通讯录
- 【简易通讯录】-----C语言实现
- C语言实现简易通讯录
- C语言实现通讯录项目
- CRC校验算法
- MarkDown语法详细
- 宏
- Swift中的as as? as!
- Vim 常用功能键
- c语言链表实现通讯录
- 磁盘操作系统 cmd命令
- 聚类算法--K-Medoids(基于R的应用示例)
- CRC校验
- Python正则表达式
- Android多点触控生成控件,并且移动
- iOS日常Debug之Crash日志文件分析
- linux之rpm
- 传智播客Python就业班