简单通讯录

项目名称:通讯录

简单介绍:通讯录是手机里很常见的功能,今天我将用C语言结合数据结构中的顺序表来实现它的一些基本功能。

主要内容:

头文件:

contact.h(定义通讯录及相关操作函数声明

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include"perinfo.h"
typedef int data;
typedef struct contact
{
    per* p;
    data size;
    data capcity;
}con;
void coninit(con* pf);
void condestory(con* pf);
void concheck(con* pf);
void conadd(con* pf);
void condel(con* pf);
void conshow(con* pf);
void conmodify(con* pf);
data confindbyname(con* pf,char *name);

perinfo.h(联系人数据定义

#define NAME_MAX 20
#define GENDER_MAX 10
#define TEL_MAX 20
#define ADDRESS_MAX 20
typedef struct perinfo
{
    char name[NAME_MAX];
    char gender[GENDER_MAX];
    int age;
    char tel[TEL_MAX];
    char address[ADDRESS_MAX];
}per;

源码:

#define _CRT_SECURE_NO_WARNINGS
#include"perinfo.h"
#include"contact.h"
void coninit(con* pf)//       通讯录初始化
{
    pf->p = NULL;
    pf->size = pf->capcity = 0;
}
void condestory(con* pf)//    通讯录销毁
{
    if (pf->p)
    {
        free(pf->p);
        pf->p = NULL;
    }
}
void concheck(con* pf)//    检查空间是否够用
{
    if (pf->size == pf->capcity)
    {
        data newsize = pf->size == 0 ? 4 : 2 * pf->size;

        per*a = (per*)realloc(pf->p, 2 * newsize * sizeof(per));
        if (a != NULL)
            pf = a;
        pf->size = newsize;
    }
}
void conadd(con* pf)//     添加联系人信息
{
    assert(pf);
    concheck(pf);
    per z;
    printf("请输入要添加的数据:\n");
    printf("请输入姓名:\n");
    scanf("%s", z.name);
    printf("请输入性别:\n");
    scanf("%s", z.gender);
    printf("请输入年龄:\n");
    scanf("%d", &(z.age));
    printf("请输入电话号码:\n");
    scanf("%s", z.tel);
    printf("请输入住址:\n");
    scanf("%s", z.address);
    strcpy((pf->p)[pf->size].name ,z.name);
    strcpy((pf->p)[pf->size].gender, z.gender);
    (pf->p)[pf->size].age = z.age;
    strcpy((pf->p)[pf->size].tel, z.tel);
    strcpy((pf->p)[pf->size].address, z.address);
    pf->size++;
}
void condel(con* pf)//     删除联系人信息
{
    assert(pf);
    assert(pf->size);
    char name[NAME_MAX];
    data find = confindbyname(pf, name);
    printf("请输入要删除的联系人姓名:\n");
    scanf("%s", name);
    if (find < 0)
        printf("要删除的联系人不存在!");
    pf->size--;
}
void conshow(con* pf)//   展示联系人信息
{
    assert(pf);
    int i = 0;
    printf(" 姓名  性别  年龄  电话  住址\n");
    while (i < pf->size)
    {
        printf("%s %s %d %s %s",
            (pf->p)[i].name,
            (pf->p)[i].gender,
            (pf->p)[i].age,
            (pf->p)[i].tel,
            (pf->p)[i].address
        );
        i++;
    }
}
void conmodify(con* pf)//   修改联系人信息
{
    assert(pf);
    char name[NAME_MAX];
    data find= confindbyname(pf, name);
    printf("请输入你要修改的联系人姓名:\n");
    scanf("%s", name);
    if (find < 0)
        printf("没找到该联系人");

}
data confindbyname(con* pf, char* name)//   根据联系人姓名查找联系人
{
    int i = 0;
    while (i < pf->size)
    {
        if (strcmp((pf->p)[i].name, name) == 0)
            return i;
        i++;
    }
    return -1;
}

主函数:

#define  _CRT_SECURE_NO_WARNINGS 
#include"contact.h"
#include"perinfo.h" 
void menu()//菜单
{
	printf("*********通讯录*********\n");
	printf("****1.添加****2.删除****\n");
	printf("****3.修改****4.展示****\n");
	printf("****5.查找****0.退出****\n");
	printf("************************\n");
}
int main()
{
	char name[NAME_MAX];
	int op = -1;
	con pf;
	coninit(&pf);
	do
	{
		menu();
		printf("请选择您的操作\n");
		scanf_s("%d", &op);
		switch (op)
		{
		case 1:
			conadd(&pf);
			break;
		case 2:
			condel(&pf);
			break;
		case 3:
			conmodify(&pf);
			break;
		case 4:
			conshow(&pf);
			break;
		case 5:
			printf("请输入要删除的用户姓名:\n");
			scanf_s("%s", name);
			confindbyname(&pf,name);
			break;
		case 0:
			printf("操作结束\n");
			break;
		default:
			printf("输入有误,请重新输入");
			break;
		}
	} while (op != 0);
	condestory(&pf);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值