c语言实现同步通讯录,C语言实现通讯录

#include"contact.h"

void meun()

{

printf(" ********通讯录********\n");

printf("********1、添加联系人 2、删除指定联系人*********\n");

printf("********3、查找指定联系人 4、修改指定联系人*********\n");

printf("********5、显示所有联系人 6、清空所有联系人*********\n");

printf("********7、按名字排序联系人 8、保存联系人并退出*******\n");

printf("********0、退出程序 *******\n");

printf("请选择:>");

}

void init_conatct(Pcon pcon)

{

pcon->size = 0;

pcon = (Pcon)malloc(START * sizeof(pcon->peo) + sizeof(Pcon)); //为通讯录分配动态内存

}

void add_mem(Pcon pcon)

{

if (pcon->size == 1000)

{

printf("通讯录已满!\n");

return;

}

int num = pcon->size / 10 + 1;

pcon = (Pcon)malloc(num * START * sizeof(pcon->peo) + sizeof(Pcon));

}

void load_contact(Pcon pcon)

{

char ch = ' ';

init_conatct(pcon);

char p[5] = { 0 };

FILE *fread = fopen("contact.txt", "r");

if (fopen == NULL)

{

printf("打开文件失败!\n");

exit(0);

}

ch = fgetc(fread);

while (ch!=EOF)

{

fseek(fread, -1, SEEK_CUR);

add_mem(pcon);

fscanf(fread, "%s%s%d%s%s", pcon->peo[pcon->size].name, pcon->peo[pcon->size].sex, &pcon->peo[pcon->size].age,\

pcon->peo[pcon->size].tel, pcon->peo[pcon->size].addre);//注意结构体指针变量对成员的饮用方法

//从文件里以格式化的方式读取数据到内存的函数

pcon->size++;

ch = fgetc(fread); //因为fscanf是读到上一行的'\n'截止,所以得先把'\n'读了,使fread指向下一行

ch = fgetc(fread); //判断现在fread所指向的这一行是不是空行(EOF)

}

fclose(fread);

}

void save_contact(Pcon pcon)

{

int i = 0;

FILE *fwriter = fopen("contact.txt", "w");

if (fopen == NULL)

{

printf("打开文件失败!\n");

exit(0);

}

//fprintf(fwriter, "%-4s %-4s %-4s %-8s %-8s\n", "姓名", "性别", "年龄", "电话", "住址");

while (i < pcon->size)

{

fprintf(fwriter, "%-4s %-4s %-4d %-8s %s\n", pcon->peo[i].name, pcon->peo[i].sex, pcon->peo[i].age,\

pcon->peo[i].tel, pcon->peo[i].addre);

//从内存里以格式化的方式输出数据到文件的函数

i++;

}

fclose(fwriter);

printf("联系人信息保存成功!\n");

exit(0);

}

void swap(Peo *peo1, Peo *peo2) //排序时交换两个人的信息

{

Peo temp = *peo1;

*peo1 = *peo2;

*peo2 = temp;

}

void add_conatct(Pcon pcon)

{

add_mem(pcon);

printf("请输入要插入的联系人的信息:\n");

printf("姓名:");

scanf("%s", pcon->peo[pcon->size].name);

printf("性别:");

scanf("%s", pcon->peo[pcon->size].sex);

printf("年龄:");

scanf("%d", &pcon->peo[pcon->size].age);

printf("电话:");

scanf("%s", pcon->peo[pcon->size].tel);

printf("住址:");

scanf("%s", pcon->peo[pcon->size].addre);

pcon->size++;

printf("插入成功!\n");

system("cls");

}

void dele_conatct(Pcon pcon)

{

int i = 0;

char p[10] = "";

printf("请输入要删除的联系人的姓名:\n");

scanf("%s", p);

for (i = 0; i < pcon->size; i++)

{

if (!strcmp(p, pcon->peo[i].name))

{

break;

}

}

if (i == pcon->size)

{

printf("通讯录不存在该联系人,无法删除!\n");

return;

}

while (i < (pcon->size - 1))

{

pcon->peo[i] = pcon->peo[i + 1];

i++;

}

pcon->size--;

printf("删除成功!\n");

system("cls");

}

void find_conatct(Pcon pcon)

{

int i = 0;

char p[10] = "";

printf("请输入要查找的联系人的姓名:\n");

scanf("%s", p);

for (i = 0; i < pcon->size;)

{

if (!strcmp(pcon->peo[i].name, p))

{

printf("%-6s%-6s%-6s%-16s%s\n", "姓名", "性别", "年龄", "电话", "住址");

printf("%-6s%-6s%-6d%-16s%s\n", pcon->peo[i].name, pcon->peo[i].sex, pcon->peo[i].age, \

pcon->peo[i].tel, pcon->peo[i].addre);

return;

}

i++; //因为上面循环里的判断用到i了,要是把i++写在循环条件里,那么会出错

}

printf("通讯录内不存在该联系人!\n");

return;

}

void alter_conatct(Pcon pcon)

{

int i = 0;

char p[10] = "";

printf("请输入要修改的联系人的姓名:\n");

scanf("%s", p);

for (i = 0; i < pcon->size; )

{

if (!strcmp(pcon->peo[i].name, p))

{

printf("请输入修改后的联系人的信息:\n");

printf("姓名:");

scanf("%s", pcon->peo[i].name);

printf("性别:");

scanf("%s", pcon->peo[i].sex);

printf("年龄:");

scanf("%d", &pcon->peo[i].age);

printf("电话:");

scanf("%s", pcon->peo[i].tel);

printf("住址:");

scanf("%s", pcon->peo[i].addre);

printf("修改成功!\n");

system("cls");

return;

}

i++; //因为上面循环里的判断用到i了,要是把i++写在循环条件里,那么会出错

}

printf("通讯录内不存在该联系人!\n");

system("cls");

}

void show_conatct(Pcon pcon)

{

int i = 0;

if (pcon->size == 0)

{

printf("通讯录内没有任何信息!\n");

system("cls");

return;

}

printf("%-6s%-6s%-6s%-16s%s\n", "姓名", "性别", "年龄", "电话", "住址");

for (i = 0; i < pcon->size; i++)

{

printf("%-6s%-6s%-6d%-16s%s\n", pcon->peo[i].name, pcon->peo[i].sex, pcon->peo[i].age,\

pcon->peo[i].tel, pcon->peo[i].addre);

}

}

void clear_conatct(Pcon pcon)

{

pcon->size = 0;

printf("联系人已被清空!\n");

system("cls");

}

void sort_conatct(Pcon pcon)

{

int i = 0;

int j = 0;

for (i = 0; i < pcon->size - 1; i++)

{

for (j = 0; j < pcon->size - i - 1; j++)

{

if (strcmp(pcon->peo[j].name, pcon->peo[j+1].name) > 0) //这个必须指明结果是大于0还是小于0,因为

//不指明的话,不管大于0还是小于0都会进到if

//判断语句里去

{

swap(&pcon->peo[j], &pcon->peo[j + 1]);

}

}

}

printf("排序成功!\n");

system("cls");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值