C语言 :利用指针数组结构体编写简易通讯录

这是一个简单的通讯录管理系统,包括添加、查看、查找、删除和修改用户信息的功能。使用冒泡排序对用户信息按姓名首字母排序,并提供按姓名和ID查找用户的方法。系统通过菜单驱动的交互界面操作,具有友好的用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对编写的通信录进行总结,有问题的地方还希望不吝赐教

主模块 main.c

#include "addressbook.h"
Person *g_inf[MAX]={0};
int g_Count=0;

int main()
    {
        Welcome();//欢迎界面
        int choice1;
        int choice2;
        while(1)
            {
                menu();
                scanf("%d",&choice1);
                switch(choice1)//进入选择界面
                    {
                        case 1:
                            AddInf();//增加用户信息
                            sleep(2);//延时显示2秒
                            break;
                        case 2:
                           LookPerson();//查看用户信息并且按照姓名首字母使用冒泡排序
                            sleep(4);//延时显示4秒
                            break;
                        case 3:
                            FindPerson();//查找用户信息包括通过姓名和ID进行查找
                            sleep(3);//延时显示秒
                            break;
                        case 4:
                            DelPerson();//删除用户信息
                            sleep(2);//延时显示2秒
                            break;
                        case 5:
                            ChangePerson();//修改用户信息
                            sleep(2);//延时显示2秒
                            break;
                        case 6:
                            exit(0);退出系统
                            break;
                        default:
                            break;
                    }
            }
            return 0;
    }

头文件 addressbook.h

#ifndef   _addressbook_H_


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define MAX 1024

typedef struct addressbook{
    char id[20];
    char name[32];
    int age[20];
    char tel[32];
}Person;
                              
void Welcome();
void menu();
int AddInf();
void LookPerson();
void FindPerson();
int FindPersonName();
int FindPersonId();
void DelPerson();
void ChangePerson();

#define  _addressbook_H_
#endif

功能模块 addressbook.c

#include "addressbook.h"
extern Person*g_inf[MAX];
extern int g_Count;

void Welcome()
    {
        system("clear");
        printf("----------------------------------------------------------------\n\n");
        printf("\t\t欢迎使用本通讯录\n\n");
        printf("----------------------------------------------------------------\n\n");
    }

void menu()
    {
        system("clear");
        printf("----------------------------------------------------------------\n\n");
        printf("\t\t1. 添加用户信息                 2. 显示用户信息\n\n");
        printf("\t\t3. 查找用户信息                 4. 删除用户信息\n\n");
        printf("\t\t5. 修改用户信息                 6. 退出系统\n\n");
        printf("----------------------------------------------------------------\n\n");
    }
    
//添加信息
int  AddInf()
    {
        g_inf[g_Count]=(Person *)malloc(sizeof(Person)*1);
        if(NULL == g_inf)
            {
                printf("申请失败!\n");
                exit(1);
            }
        int flag=1;
        while(flag)
            {
                printf ("请输入ID,姓名,年龄,电话:\n");
                scanf("%s%s%d%s",g_inf[g_Count]->id,g_inf[g_Count]->name,&g_inf[g_Count]->age,g_inf[g_Count]->tel);
                
                if(strlen(g_inf[g_Count]->tel )!=11)
                    {
                        printf("电话号码格式错误,重新输入\n");
                        flag=1;
                        continue;
                    }
                int i;
                for(i=0;i<g_Count;i++)
                    {
                        if(strcmp(g_inf[i]->tel,g_inf[g_Count]->tel) == 0)
                            {
                                printf("输入的电话号码重复,请重新输入\n");
                                break;
                            }
                    }
                    g_Count++;
                free(g_inf[g_Count]);
                break;
            }
            return 0;
    }


//显示用户(冒泡排序)
void LookPerson()
{
    if(g_Count== 0)
    {
        printf("空通讯录!\n");
        return;
    }
    for(int m=0;m<g_Count;m++)
    {
        for(int j=0;j<g_Count-1-m;j++)
        {
            int ret=strcmp(g_inf[j]->name,g_inf[j+1]->name);
            if( ret> 0)
            {
                Person *tmp;
              tmp = g_inf[j];
             g_inf[j] =g_inf[j+1];
             g_inf[j+1]=tmp;
            }
        }
    }
     for(int n=0;n<g_Count;n++)
    {
        printf("--------------------------------------------------------------------\n");
        printf("\t\t第%d位联系人 \n",n+1);
        printf("ID: %s  姓名:%s  年龄:%d  电话: %s \n",g_inf[n]->id,g_inf[n]->name, g_inf[n]->age,g_inf[n]->tel);
        printf("--------------------------------------------------------------------\n");
    }
}

//查找用户
void FindPerson()
{
    printf("请选择搜索方式:1.姓名搜索  2.id搜索\n");
    int a;
    scanf("%d\n",&a);
    switch (a)
    {
        case 1:   
         printf("请输入姓名\n");
        FindPersonName();
        break;
        case 2:
         printf("请输入id\n");
        FindPersonId();
        break;
        default:
        break;
    }
    return;
}
//按姓名查找用户
int FindPersonName()
{
	char name[32] = {0};
	int count = 0;
	scanf("%s", name);
	for (int i = 0; i < g_Count; i++)
	{
		if (strcmp(name, g_inf[i]->name) == 0)
		{
			printf("查找成功:\n");
			printf("id:%d 姓名:%s 年龄:%s  电话:%s\n", 
				g_inf[i]->id,
                g_inf[i]->name,
				g_inf[i]->age,
				g_inf[i]->tel);
			count++;
		}
	}
	if (count == 0)
	{
		printf("此用户不存在!\n");
    }
}
//按id查找用户
int FindPersonId()
{
	int id[32] = {0};
	int count = 0;
	scanf("%s", &id);
	for (int i = 0; i < g_Count; i++)
	{
		if (strcmp(g_inf[i]->id,id) == 0)
		{
			printf("查找成功:\n");
			printf("id:%d 姓名:%s 年龄:%d  电话:%s\n", 
				g_inf[i]->id,
                g_inf[i]->name,
				g_inf[i]->age,
				g_inf[i]->tel);
			count++;
		}
	}
	if (count == 0)
	{
		printf("此用户不存在!\n");
    }
}

//删除用户
void DelPerson()
{
    int i;
    char ch[20];
    printf("请输入要删除的人的姓名:\n");
    scanf("%s", ch);
    for(i = 0; i <g_Count; i++)
    {
        if(strcmp(g_inf[i]->name,ch)==0)
        {
            int j;
          for(int j=i;j<g_Count;j++)
            {
                printf("%s", g_inf[i]->name);
		        g_inf[j] = g_inf[j+1];
       
            }
                    g_Count--;    
        }
    }
            printf("删除用户信息成功!\n");
            
} 

//修改用户
void ChangePerson()
{
	int n = 0;
    char name[32];
	printf("请输入要修改人的姓名:\n");
	scanf("%s", name);

    for (n = 0;n<g_Count; n++)
		if (strcmp(name,g_inf[n]->name ) == 0)
		{
			 printf("请输入修改的: ID, 姓名, 年龄, 电话\n\n");
             scanf("%s%s%d%s",g_inf[n]->id,g_inf[n]->name, &g_inf[n]->age,g_inf[n]->tel);
             break;
		}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值