通讯录的实现

前提:必须先了解顺序表的增删查改功能 见:写文章-CSDN创作中心
学习目的:在顺序表的基础上实现通讯录就功能

//暂时把源码放出来因为小编也刚学 只能简单的写出代码,解释以后会补的请见谅。或则可以联系小编进行讨论。

test1.c

#define _CRT_SECURE_NO_WARNINGS 1

#define _CRT_SECURE_NO_WARNINGS 1

#include"SeqList1.h"

#include"Contact.h"

void menu() {

	printf("************************\n");

	printf("** 1.添加用户 2.删除用户**\n");

	printf("** 3.查找用户 4.修改用户**\n");

	printf("** 0.退出 **************\n");

	printf("***********************\n");

}

int main() {

	//创建对象

	Contact con;

	ConInit(&con);

	int input;

	do {

		printf("请选择你要实现的功能>\n");

		menu();

		scanf("%d", &input);

		switch (input) {

		case 1:

			AddContact(&con);

			ShowContact(&con);

			break;

		case 2:

			DelContact(&con);

			ShowContact(&con);

			break;

		case 3:

			FindContact(&con);

			break;

		case 4:

			ModifyContact(&con);

			ShowContact(&con);

			break;

		case 0:

			printf("已退出\n");

			break;

		default:

			printf("选择错误请重新选择\n");

			break;

		}



	} while (input);

	

	DestroyContact(&con);

	return 0;

}



SeqList.c



#define _CRT_SECURE_NO_WARNINGS 1

#include"SeqList1.h"

//初始化

void SeqInit(SL* ps) {

	ps->arr = NULL;

	ps->size = ps->capacity = 0;

}

//申请空间

void CheckCapcity(SL* ps) {

	if (ps->capacity == ps->size) {

		int NewCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;

		PersonInfo* tem = (PersonInfo*)realloc(ps->arr, NewCapacity * sizeof(PersonInfo));

		ps->arr = tem;

		ps->capacity = NewCapacity;

	}

}

//尾插

void SeqPushBack(SL* ps,SLDataType x) {

	assert(ps);

	CheckCapcity(ps);

	ps->arr[ps->size] = x;

	ps->size++;

}

//在指定位置删除数据

void SeqDelBack(SL* ps,int pos) {

	assert(ps);

	for (int i = pos; i < ps->size; i++) {

		ps->arr[i] = ps->arr[i + 1];

	}

	ps->size--;

}

//销毁

void SeqDestory(SL* ps) {

	if (ps->arr) {

		free(ps->arr);

	}

	ps->arr = NULL;

	ps->capacity = ps->size = 0;

}



SeqList1,h



#pragma once

#include<stdio.h>

#include<stdlib.h>

#include<assert.h>

#include"Contact.h"

//顺序表定义

typedef struct PersonInfo SLDataType;

typedef struct SeqList {

	SLDataType* arr;

	int size;

	int capacity;

}SL;

//初始化

void SeqInit(SL* ps);

//尾插

void SeqPushBack(SL* ps, SLDataType x);

//在指定位置删除数据

void SeqDelBack(SL* ps, char* name);



Contact.c



 #define _CRT_SECURE_NO_WARNINGS 1

#include"Contact.h"

#include"SeqList1.h"

//初始化

void ConInit(Contact* con) {

	SeqInit(con);

}

//插入数据

void AddContact(Contact* con) {

	PersonInfo info;

	//输入姓名,性别,电话,地址

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

	scanf("%s", info.name);

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

	scanf("%s", info.sex);

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

	scanf("%s", info.TEl);

	printf("请输入地址:\n");

	scanf("%s", info.ADD);

	SeqPushBack(con,info);

}

//删除数据

int CheckBuyName(Contact* con, char name[]) {

	

	for (int i = 0; i < con->size; i++) {

		if (!strcmp(con->arr[i].name, name)) {

			return i;

		}

	}

	return -1;

}

void DelContact(Contact* con) {

	char name[10] = { 0 };

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

	scanf("%s", name);

	int pos=CheckBuyName(con, name);

	if (pos < 0) {

		printf("删除姓名不存在\n");

		return;

	}

	SeqDelBack(con, pos);

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

}

//查找数据

void FindContact(Contact* con) {

	printf("请输入要查找的名字:\n");

	char name[10];

	scanf("%s", name);

	int pos=CheckBuyName(con, name);

	if (pos < 0) {

		printf("没有该信息");

		return;

	}

	printf("找到了,该用户位于第%d列\n", pos);

	printf("该用户信息为:\n");

	printf("%s %s %s %s", con->arr[pos].name, con->arr[pos].sex,

		con->arr[pos].TEl, con->arr[pos].ADD);

	printf("\n");

}

//修该数据

void ModifyContact(Contact* con) {

	printf("请输入你要修该用户的名字:\n");

	char name[10];

	scanf("%s", name);

	int pos = CheckBuyName(con, name);

	if (pos < 0) {

		printf("没有该用户信息");

		return;

	}

	printf("请输入你要修改用户的性别:\n");

	scanf("%s", con->arr[pos].sex);

}

//展示通讯录数据



void ShowContact(Contact* con) {

	assert(con);

	for (int i = 0; i < con->size; i++) {

		printf("%s %s %s %s", con->arr[i].name, con->arr[i].sex,

			con->arr[i].TEl, con->arr[i].ADD);

		printf("\n");

	}

}

//销毁

void DestroyContact(Contact* con) {

	SeqDestory(con);

}





Contact.h



#pragma once

#define NAME_MAX 100



#define SEX_MAX 8



#define TEL_MAX 11



#define ADDR_MAX 100

typedef struct PersonInfo {

	char name[NAME_MAX];

	char sex[SEX_MAX];

	char TEl[TEL_MAX];

	char ADD[ADDR_MAX];

}PersonInfo;

//初始化

//SL改名字,前置声明

typedef struct SeqList Contact;

//初始化通讯录



void ConInit(Contact* con);



//添加通讯录数据



void AddContact(Contact* con);



//删除通讯录数据



void DelContact(Contact* con);





//查找通讯录数据



void FindContact(Contact* con);



//修改通讯录数据



void ModifyContact(Contact* con);



//销毁通讯录数据



void DestroyContact(Contact* con);



//展示通讯录数据



void ShowContact(Contact* con);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值