c语言通讯录浏览,C语言--通讯录

C语言--通讯录

C语言--通讯录

在Linux环境下用C语言实现通讯录,可增删查改,通过文件保存数据。

大致框架

1.头文件child.h

c25a7dd2233fcd62027f3d6a0b3d2775.png

2.子函数child.c

39b6b82f9669509fdbd7a02dc02daf88.png

3.主函数

a587d07fa27c323f6ea428361908e211.png

程序代码:

child.h

#ifndef CHILD_H

#define CHILD_H

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#define NAME 20

#define PHONE 12

#define SEX 5

#define ADDR 20

#define MAX 100

enum{

ext,

look,

add,

del,

alter,

find

};

struct data{

char name[NAME];

char sex[SEX];

char phone[PHONE];

char addr[ADDR];

};

struct ps{

struct data *dat;

int count;

int sz;

};

void menu();

void Init(struct ps *p);

void Look(const struct ps *p);

void Add(struct ps *p);

void Find(const struct ps *p);

void Del(struct ps *p);

void Alter(struct ps *p);

void Save(struct ps *p);

#endif

child.c

#include"child.h"

//查找功能函数

static int Find_fun(const struct ps *p, char buf[])

{

int i;

for(i=0; i < p->sz; i++)

{

if(!strcmp(p->dat[i].name, buf))

{

return i;

}

}

if(i == p->sz)

{

return -1;

}

}

//扩容函数

int kuoron(struct ps *p)

{

struct data *p2;

if(p->sz >= p->count)

{

p2 = (struct data *)realloc(p->dat, (p->count + 2) * sizeof(struct data));

if(p2 == NULL)

{

perror("kuoron");

return -1;

}

p->dat = p2;

p->count += 2;

printf("kuoron success\n");

}

return 0;

}

//用户信息保存

void Save(struct ps *p)

{

int i = 0;

struct data tmp;

FILE *fp = fopen("sujuku.txt", "w");

if(fp == NULL)

{

perror("open");

return;

}

while(i < p->sz)

{

tmp = p->dat[i++];

fwrite(&tmp, sizeof(struct data), 1, fp);

memset(&tmp, 0, sizeof(tmp));

}

fclose(fp);

fp = NULL;

}

//用户信息写入

void pepinfo(struct ps *p)

{

struct data tmp;

FILE *fp = fopen ("sujuku.txt", "r");

if(fp == NULL)

{

perror("open");

return ;

}

while(fread(&tmp, sizeof(struct data), 1, fp))

{

kuoron(p);

p->dat[p->sz] = tmp;

p->sz++;

}

fclose(fp);

fp = NULL;

}

//菜单

void menu()

{

printf(" 菜单 \n");

printf(" 1.查看 2.增加 \n");

printf(" 3.删除 4.修改 \n");

printf(" 5.查找 0.退出 \n");

}

//初始化

void Init(struct ps *p)

{

//memset(p->dat, 0, sizeof(p->dat));

int i = 0;

p->dat = (struct data *)malloc(2 * sizeof(struct data));

p->sz = 0;

p->count = 2;

pepinfo(p);

}

//查看

void Look(const struct ps *p)

{

printf("%-20s\t%-5s\t%-12s\t%-20s\n", "姓名", "性别", "电话号码", "地址");

for (int i = 0; i < p->sz; i++)

{

printf("%-20s\t%-5s\t%-12s\t%-20s\n",p->dat[i].name,

p->dat[i].sex,

p->dat[i].phone,

p->dat[i].addr);

}

}

//添加

void Add(struct ps *p)

{

int ret = kuoron(p);

if(!ret)

{

printf("请输入姓名:");

scanf("%s", p->dat[p->sz].name);

printf("请输入性别:");

scanf("%s", p->dat[p->sz].sex);

printf("请输入电话:");

scanf("%s", p->dat[p->sz].phone);

printf("请输入住址:");

scanf("%s", p->dat[p->sz].addr);

printf("添加成功\n");

p->sz++;

}

}

//查找

void Find(const struct ps *p)

{

char buff[NAME] = {0};

int ret;

printf("请输入要查找的姓名:");

scanf("%s", buff);

ret = Find_fun(p, buff);

if(ret >= 0)

{

printf("%-20s\t%-5s\t%-12s\t%-20s\n", "姓名", "性别", "电话号码", "地址");

printf("%-20s\t%-5s\t%-12s\t%-20s\n",p->dat[ret].name,

p->dat[ret].sex,

p->dat[ret].phone,

p->dat[ret].addr);

}

else

printf("没有这个人的信息\n");

}

//删除

void Del(struct ps *p)

{

char buff[NAME] = {0};

printf("请输入要删除的姓名:");

scanf("%s", buff);

int ret = Find_fun(p, buff);

if(ret >= 0)

{

printf("正在删除%s...\n",p->dat[ret].name);

strcpy(p->dat[ret].name, p->dat[p->sz-1].name);

strcpy(p->dat[ret].sex, p->dat[p->sz-1].sex);

strcpy(p->dat[ret].phone, p->dat[p->sz-1].phone);

strcpy(p->dat[ret].addr, p->dat[p->sz-1].addr);

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

p->sz--;

}

else

printf("没有这个人的信息\n");

}

//修改

void Alter(struct ps *p)

{

char buff[NAME] = {0};

printf("请输入要修改的姓名:");

scanf("%s", buff);

int ret = Find_fun(p, buff);

if(ret >= 0)

{

printf("请重新输入姓名:");

scanf("%s", p->dat[ret].name);

printf("\n");

printf("请重新输入性别:");

scanf("%s", p->dat[ret].sex);

printf("\n");

printf("请重新输入电话:");

scanf("%s", p->dat[ret].phone);

printf("\n");

printf("请重新输入住址:");

scanf("%s", p->dat[ret].addr);

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

}

}

tonxunlu.c

#include "child.h"

int main()

{

int input;

struct ps *p;

system("clear");

Init(p);

do{

menu();

printf("请选择 ->");

scanf("%d", &input);

switch(input)

{

case ext:

Save(p);

printf("退出\n");

break;

case look:

Look(p);

break;

case add:

Add(p);

break;

case del:

Del(p);

break;

case alter:

Alter(p);

break;

case find:

Find(p);

break;

default:

printf("输入错误,请重新输\n");

break;

}

}while(input);

return 0;

}

makefile文件(用于编译)

d6191ec75f899019d220b97402b83f82.png

结果

ec665db8a10acb30c12d992849bb36e8.png

C语言--通讯录相关教程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值