通讯录实现(其一)

在C语言的学习过程中,接触到通讯录的简单实现,从简单的开始,先用数组实现此任务。
思路如下:

  • 首先需要一个结构体PeoInfo来存储联系人的信息,之后需要将它定义为数组,方便存储更多的联系人。
  • 定义整形变量size,记录联系人的数目。
  • 为方便操作,封装以上两个变量,操作时,可能需要改变size的值(如果不封装,每次传参需要传两个),封装到一个新的结构体Contact中,Contact的成员分为:
    PeoInfo类型的数组data
    int类型的变量size
    数组data用来存储信息,size用来记录个数。
  • 接下来就需要对通讯录进行操作,而这些操作实际上是对结构体Contact进行操作,通过Contact定义的变量Contact就可以实现这个功能,也就是对data数组的操作。
    - 增加:判断数组是否仍能继续存储,若能,则给size所在的位置赋值,并将size++;若不能,则提示空间已满并返回。
    - 查找:输入想要查找的联系人的Name,若匹配成功,则输出联系人信息;若匹配失败,提示查找失败并返回。
    - 删除:输入想要删除的联系人的Name,先进行查找,若查找成功,则将后一个联系人的信息向前挪动,并将size--;若查找失败,提示删除失败并返回。
    - 修改:输入想要修改的联系人的Name,先进行查找,若查找成功,则修改联系人信息;若查找失败,提示修改失败并返回。
    - 显示:输出所有联系人的有效信息。
    - 排序:对有效的联系人信息进行排序。
    - 清空:数组初始化,给size赋值为0。
    - 退出:退出程序。
    注:在查找联系人时,可以按照任一变量进行查找,但本程序是按照Name查找的,若想用其他变量查找,只需要添加一定的操作即可。
    数组的大小是固定的,预编译定义的大小为1000。增加信息和删除信息,除了将联系人的信息存储进数组以外,还需要改变size的值。

有了上面的介绍以后,就可以创建结构体了。

 #define NAME_MAX 20
     #define SEX_MAX 10
     #define TELE_MAX 20
     #define ADDRE_MAX 20
     #define CAPACITY_MAX 1000
        
    typedef struct PeoInfo {         //联系人信息
    	char name[NAME_MAX];
    	int age;
    	char sex[SEX_MAX];
    	char tele[TELE_MAX];
    	char addre[ADDRE_MAX];
    }PeoInfo;
    
    typedef struct Contact {         //通讯录信息
    	PeoInfo data[CAPACITY_MAX];
    	int size;
    }Contact,*pContact;

函数部分就是正常的增删查改、排序、输出、清空。只需要想清楚操作的是data数组,而数组中有效信息的个数为size即可,下面附上函数部分在头文件中的声明:

    void menu();   
    void InitContact(pContact pCon);     
    void ChooseOption(pContact pCon);
    void Add(pContact pCon);
    void Delete(pContact pCon);
    void Search(const pContact pCon);
    void Modify(pContact pCon);
    void Show(const pContact pCon);
    void Sort(pContact pCon);
    void Empty(pContact pCon);
    void Destroy(pContact pCon);

下面是全部代码:

Contact.h

 #pragma once
    #ifndef __CONTACT_H__
    #define __CONTACT_H__
    
    
    #include<stdio.h>
    #include<assert.h>
    #include<string.h>
    
    
    #define NAME_MAX 20
    #define SEX_MAX 10
    #define TELE_MAX 20
    #define ADDRE_MAX 20
    #define CAPACITY_MAX 1000
    
    typedef struct PeoInfo {         //联系人信息
    	char name[NAME_MAX];
    	int age;
    	char sex[SEX_MAX];
    	char tele[TELE_MAX];
    	char addre[ADDRE_MAX];
    }PeoInfo;
    
    typedef struct Contact {         //通讯录信息
    	PeoInfo data[CAPACITY_MAX];
    	int size;
    }Contact,*pContact;
    
    
    void menu();   
    void InitContact(pContact pCon);     
    void ChooseOption(pContact pCon);
    void Add(pContact pCon);
    void Delete(pContact pCon);
    void Search(const pContact pCon);
    void Modify(pContact pCon);
    void Show(const pContact pCon);
    void Sort(pContact pCon);
    void Empty(pContact pCon);
    void Destroy(pContact pCon);
    
    #endif //__CONTACT_H__

Contact.c

    #define _CRT_SECURE_NO_WARNINGS
    #include"Contact.h"
    
    enum Option
    {
    	EXIT,
    	ADD,
    	DELETE,
    	SEARCH,
    	MODIFY,
    	SHOW,
    	SORT,
    	EMPTY
    };
    
    void ChooseOption(pContact pCon)
    {
    	int input = 0;
    	do{
    		menu();
    		scanf("%d", &input);
    		switch (input)
    		{
    		case ADD:
    			Add(pCon);
    			break;
    		case DELETE:
    			Delete(pCon);
    			break;
    		case SEARCH:
    			Search(pCon);
    			break;
    		case MODIFY:
    			Modify(pCon);
    			break;
    		case SHOW:
    			Show(pCon);
    			break;
    		case SORT:
    			Sort(pCon);
    			break;
    		case EMPTY:
    			Empty(pCon);
    			break;
    		case EXIT:
    			Destroy(pCon);
    			printf("Exit success!\n");
    			break;
    		default:
    			printf("Input Error!\n");
    			break;
    		}
    	} while (input);
    }
    
    void menu()
    {
    	printf("******************************\n");
    	printf("*** 1.add        2.delete  ***\n");
    	printf("*** 3.search     4.modify  ***\n");
    	printf("*** 5.show       6.sort    ***\n");
    	printf("*** 7.empty      0.exit    ***\n");
    	printf("******************************\n");
    	printf("Please input:");
    }
    
    void InitContact(pContact pCon)
    {
    	memset(pCon->data, 0, CAPACITY_MAX * sizeof(PeoInfo));
    	pCon->size = 0;
    }
    
    void Add(pContact pCon)
    {
    	assert(pCon);
    	if (pCon->size == CAPACITY_MAX)
    	{
    		printf("Contact is full!\n");
    		return;
    	}
    	printf("Please input name:\n");
    	scanf("%s", pCon->data[pCon->size].name);
    	printf("Please input age:\n");
    	scanf("%d", &pCon->data[pCon->size].age);
    	printf("Please input sex:\n");
    	scanf("%s", pCon->data[pCon->size].sex);
    	printf("Please input tele:\n");
    	scanf("%s", pCon->data[pCon->size].tele);
    	printf("Please input addre:\n");
    	scanf("%s", pCon->data[pCon->size].addre);
    	pCon->size++;
    }
    
    static int Find(const pContact pCon)
    {
    	int i = 0;
    	char name[NAME_MAX] = { 0 };
    	assert(pCon);
    	printf("Please input name:\n");
    	scanf("%s", name);
    	for (i = 0; i < pCon->size; i++)
    	{
    		if (strcmp(name, pCon->data[i].name) == 0)
    			return i;
    	}
    	return -1;
    }
    
    void Delete(pContact pCon)
    {
    	int i = 0;
    	int ret = 0;
    	assert(pCon);
    	ret = Find(pCon);
    	if (ret == -1)
    	{
    		printf("Delete is not exist!\n");
    		return;
    	}
    	else
    	{
    		for (i = ret; i < pCon->size; i++)
    		{
    			pCon->data[i] = pCon->data[i + 1];
    		}
    		pCon->size--;
    		printf("Successfully deleted!\n");
    	}
    }
    
    void Search(const pContact pCon)
    {
    	int ret = 0;
    	assert(pCon);
    	ret = Find(pCon);
    	if (ret == -1)
    	{
    		printf("Search failure!\n");
    		return;
    	}
    	else
    	{
    		printf("Search Success!\n");
    		printf("%10s %5s %10s %15s %10s\n", "Name", "Age", "Sex", "Tele", "Addre");
    		printf("%10s %5d %10s %15s %10s\n", pCon->data[ret].name, 
    			pCon->data[ret].age, pCon->data[ret].sex, pCon->data[ret].tele, pCon->data[ret].addre);
    	}
    }
    
    void Modify(pContact pCon)
    {
    	int i = 0;
    	int ret = 0;
    	assert(pCon);
    	ret = Find(pCon);
    	if (ret == -1)
    	{
    		printf("Find failure!\n");
    		return;
    	}
    	else
    	{
    		printf("Please input name:\n");
    		scanf("%s", pCon->data[ret].name);
    		printf("Please input age:\n");
    		scanf("%d", &pCon->data[ret].age);
    		printf("Please input sex:\n");
    		scanf("%s", pCon->data[ret].sex);
    		printf("Please input tele:\n");
    		scanf("%s", pCon->data[ret].tele);
    		printf("Please input addre:\n");
    		scanf("%s", pCon->data[ret].addre);
    		printf("Modify Success!\n");
    	}
    }
    
    void Show(const pContact pCon)
    {
    	int i = 0;
    	assert(pCon);
    	if (pCon->size == 0)
    	{
    		printf("Contact is empty!\n");
    	}
    	printf("%10s %5s %10s %15s %10s\n", "Name", "Age", "Sex", "Tele", "Addre");
    	for (i = 0; i < pCon->size; i++)
    	{
    		printf("%10s %5d %10s %15s %10s\n", pCon->data[i].name,
    			pCon->data[i].age, pCon->data[i].sex, pCon->data[i].tele, pCon->data[i].addre);
    	}
    }
    
    void Sort(pContact pCon)
    {
    	int i = 0;
    	int j = 0;
    	int flag = 0;
    	assert(pCon);
    	for (i = 0; i < pCon->size - 1; i++)
    	{
    		for (j = 0; pCon->size - 1 - i; j++)
    		{
    			if (strcmp(pCon->data[j].name, pCon->data[j + 1].name) > 0)
    			{
    				PeoInfo tmp = pCon->data[j];
    				pCon->data[j] = pCon->data[j + 1];
    				pCon->data[j + 1] = tmp;
    				flag = 1;
    			}
    		}
    		if (flag == 0)
    			break;
    	}
    	printf("Sort success!\n");
    }
    
    void Empty(pContact pCon)
    {
    	assert(pCon);
    	memset(pCon->data, 0, CAPACITY_MAX * sizeof(PeoInfo));
    	pCon->size = 0;
    	printf("Empty success!\n");
    }
    
    void Destroy(pContact pCon)
    {
    	pCon->size = 0;
    }

test.c

#include"Contact.h"
    
    void Test()
    {
    	Contact Con;
    	InitContact(&Con);
    	ChooseOption(&Con);
    }
    
    int main()
    {
    	Test();
    	return 0;
    }

程序运行结果如下:
在这里插入图片描述

  • 添加
    在这里插入图片描述

  • 删除
    在这里插入图片描述

  • 查找
    在这里插入图片描述

  • 修改>
    在这里插入图片描述

  • 展示
    在这里插入图片描述

  • 清空
    在这里插入图片描述

  • 退出
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Hb_key/article/details/83213597
今日推荐