一、 具体功能
- 增加联系人信息
- 删除联系人信息
- 查询联系人信息
- 修改联系人信息
- 显示联系人信息
- 按照ASKII码规律排序
- 一键清空通讯录
- 退出
代码如下
address_list.h
#ifndef _ADDRESS_LIST_H
#define _ADDRESS_LIST_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define FILE_PATH "address_list.txt"
#define NAME_MAX 20
#define TEL_MAX 20
#define ADDR_MAX 40
typedef struct data
{
char name[NAME_MAX];//名字
char number[TEL_MAX];//电话号码
char adress[ADDR_MAX];//家庭住址
} message;
typedef struct address
{
struct address *prev; //前节点
message data;
struct address *next; //后节点
} address;
address buf;
address *head; //头节点
FILE *fp; //文件指针
address *initList(void);
void display();
void insertTail(address *new);
address *find_data(char name[],char number[]);
address *find_data1(char name[]);
address *remove_address(char name[], char number[]);
int del_address(char name[], char number[]);
void print_txt();
address *Adding_Contacts();
address *change(char name[], char number[]);
void sort(address *head);
void Empty();
FILE *fopen_file();
void Initstar();
#endif
address_list.c
#include <stdio.h>
#include "address_list.h"
//结构体指针函数 生成新的一个节点
address *initList(void)
{
//在堆空间开辟内存
address *new = calloc(1,sizeof(address));
if (new == NULL)
{
printf("malloc fail\n");
return NULL;
}
//开辟的空间数据初始化为0
bzero(new->data.name, sizeof(new->data.name));
bzero(new->data.number, sizeof(new->data.number));
bzero(new->data.adress, sizeof(new->data.adress));
//双向循环链表,单个节点也是循环链表
new->next = new;
new->prev = new;
return new;
}
void display() //遍历链表,打印信息
{
//address *p = NULL;
printf("\033[1;34m" "昵称\t\t电话号码\t住宅\n");
for (address *p = head->next; p != head; p = p->next)
{
printf("%-8s %-11s %-15s\n" , p->data.name, p->data.number, p->data.adress);
}
printf("\n");
}
// 将新节点new,插入到链表的尾部
void insertTail(address *new)
{
new->prev = head->prev;
new->next = head;
head->prev-&