简单的通讯录管理系统(linux C)

本文档详细介绍了如何实现一个简单的通讯录管理系统,包括添加、查看、搜索、删除和修改用户信息等功能。系统使用C语言编写,通过结构体存储用户数据,实现了按姓名排序和多种查找方式。此外,还提供了Makefile进行代码管理。

目录

一、用户需求

二、功能实现

2.1 添加用户

2.2 查看用户

2.2.1 按照姓名排序 

2.2.2 输出所有用户信息

2.3 搜索用户(通过id或者用户名)

2.4 删除用户

2.5 修改用户信息

三、头文件定义

四、主函数

五、函数代码

六、Makefile


一、用户需求

1.通过makefile管理代码

2.各个子功能:

        a:添加用户

        b:查看用户(按照姓名排序)

        c:搜索用户(两种方式:id,用户名)

        d:删除用户信息

        e:修改用户信息

二、功能实现

2.1 添加用户

void Add()
{
    //判断通讯录是否为满
    if(ct_count >= MAX_PERSON)
    {
        printf("添加失败,通讯录已满!\n");
        return;
    }
    else
    {   
        Person *pt = NULL; 
        pt = (Person *)malloc(sizeof(Person));
        ct[ct_count] = pt;

        pt->id = id_init;
        printf("请输入联系人姓名:");
        scanf("%s",pt->name);
        printf("请输入联系人地址:");
        scanf("%s",pt->ads); 
        IntNum(pt->num);    //定义函数实现电话号码的格式检查及输入
        printf("添加联系人成功!\n");   
        pt = NULL;
        ct_count++;
        id_init++;
        return;
    }
}

2.2 查看用户

2.2.1 按照姓名排序

void Seq()
{
    int i,j;
    Person *tem = NULL;
    for ( i = 0; i < ct_count-1; i++)
    {
        for( j = 0;j <= ct_count -i - 1; j++)
        {
            if(strcmp(ct[j]->name,ct[j+1]->name) > 0)
            {
                tem = ct[j];
                ct[j] = ct[j+1];
                ct[j+1] = tem;

                tem = NULL;
                break;
            }
        }
    }
}

2.2.2 输出所有用户信息

void See()
{
    int i;
    printf("---------------------------------------------------------------------\n");
    printf("id\t姓名\t\t家庭住址\t\t电话\n");
    printf("---------------------------------------------------------------------\n");
    for(i = 0; i < ct_count;i++)
    {
        printf("  %d\t%s\t\t%s\t\t\t%s\n",ct[i]->id, ct[i]->name, ct[i]->ads,ct[i]->num);
    }
    printf("共%d位联系人",ct_count);
}

2.3 搜索用户(通过id或者用户名)

//查找联系人
void Search()
{
    printf("请选择查找方式:1.通过id查找联系人\t2.通过联系人姓名查找联系人 ");
    int d,x;
    int i,flags = 0;
    char name[32] = {0};
    scanf("%d",&d);
    switch (d)
    {
    case 1:
        printf("请输入联系人id:\n");
        scanf("%d",&x);
        for(i = 0;i < ct_count;i++)
        { 
            if (x == ct[i]->id)
            {
                printf("---------------------------------------------------------------------\n");
                printf("id\t姓名\t\t家庭住址\t\t电话\n");
                printf("---------------------------------------------------------------------\n");
                printf("  %d\t%s\t\t%s\t\t\t%s",ct[i]->id, ct[i]->name, ct[i]->ads,ct[i]->num);
                flags = 1;
                break;
            }

        } 
        if(flags == 0)
        {
                printf("无此id,请重新输入:");
                return;
        }
        break;
    case 2:
        printf("请输入联系人姓名:\n");
        scanf("%s",name);
        for ( i = 0; i < ct_count; i++)
        {
            if(strcmp(name,ct[i]->name) == 0)
            {
                printf("---------------------------------------------------------------------\n");
                printf("id\t姓名\t\t家庭住址\t\t电话\n");
                printf("---------------------------------------------------------------------\n");
                printf("  %d\t%s\t\t%s\t\t\t%s",ct[i]->id, ct[i]->name, ct[i]->ads,ct[i]->num);
                flags = 1;
                break;
            }       
        }
        if(flags == 0)
        { 
            printf("无此id,请重新输入:");
            return;
        }
        break;
    default:
        break;
    }
}

2.4 删除用户

void Del()
{
    int i,j;
    char name[32];
    printf("请输入联系人姓名:");
    scanf("%s",name);
    for ( i = 0; i < ct_count; i++)
    {
        if (strcmp(name,ct[i]->name) == 0)
        {
            j = i;
            printf("删除成功!");
            break;             
        }
        else
        {
            printf("无此联系人,删除失败!\n");
            break;
        }                                             
    }
    Person *tmp = ct[j];
    for ( i = j; i < ct_count - 1; i++)
    {
        ct[i] = ct[i+1];
    }
    free(tmp);
    tmp = NULL;
    ct_count--;
    ct[ct_count] = NULL;
}

2.5 修改用户信息

void Alter()
{
    int i,flags = 0;
    char name[32] = {0};
    printf("请输入联系人姓名:\n");
    scanf("%s",name);
    for ( i = 0; i < ct_count; i++)
    {
        if (strcmp(name,ct[i]->name) == 0)
        {
            printf("请输入要修改的地址: ");
            scanf("%s",ct[i]->ads);
            printf("请输入要修改的电话: ");
            scanf("%s",ct[i]->num);
            printf("修改成功!\n");
            flags = 1;
            break;
        }
    }
    if (flags == 0)
    {
        printf("输入错误,无此联系人!\n");
        return;
    }
    
}

三、头文件定义

#ifndef _TONGXUNLU_H_
#define _TONGXUNLU_H_
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
#include <unistd.h>
#define MAX_PERSON 1000
typedef char DataType;
typedef struct tongxunlu
{    
    int id;
    DataType name[32];
    DataType ads[32];
    DataType num[12];
}Person;
void Welcome();
void Menu();
void IntNum(char *num);
void Add();
void Seq();
void See();
void Search();
void Del();
void Alter();

#endif

四、主函数

#include "tongxunlu.h"

Person *ct[MAX_PERSON] = {0};
int ct_count = 0;

int main()
{
    Welcome();
    int choice;
    while (1)
    {
        Menu();
        scanf("%d",&choice);
        switch (choice)
        {
        case 1:
            Add();
            break;
        case 2:
            Seq();
            See();
            break;
        case 3:
            Search();
            break;
        case 4:
            Del();
            break;
        case 5:
            Alter();
            break;
        case 6:
            exit(0);
            break;
        default:
            printf("输入错误,请重新输入!");
            break;
        }        
    }
    

    Add();
    return 0;
}

五、函数代码

#include "tongxunlu.h"

extern Person *ct[MAX_PERSON];
extern int ct_count;
int id_init = 1;
//欢迎界面
void Welcome()
{
    printf("---------------------------------------------------------------------\n");
    printf("\n\t\t             欢迎使用通讯录\n\n");
    printf("---------------------------------------------------------------------\n");
}
//菜单栏
void Menu()
{
    printf("---------------------------------------------------------------------\n");
    printf("\n\t\t1.添加信息                  2.查看信息\n\n");
    printf("\t\t3.搜索信息                  4.删除信息\n\n");
    printf("\t\t5.修改信息                  6.退出系统\n\n");
    printf("---------------------------------------------------------------------\n");
}
//新增联系人
void Add()
{
    if(ct_count >= MAX_PERSON)
    {
        printf("添加失败,通讯录已满!\n");
        return;
    }
    else
    {   
        Person *pt = NULL; 
        pt = (Person *)malloc(sizeof(Person));
        ct[ct_count] = pt;

        pt->id = id_init;
        printf("请输入联系人姓名:");
        scanf("%s",pt->name);
        printf("请输入联系人地址:");
        scanf("%s",pt->ads); 
        IntNum(pt->num);
        printf("添加联系人成功!\n");   
        pt = NULL;
        ct_count++;
        id_init++;
        return;
    }
}
//输入练习人电话并查重查格式错误
void IntNum(char *num)
{
    int i;
    printf("请输入联系人电话:");
    while (1)
    {
        scanf("%s",num);
        if(strlen(num) != 11)
        {
            printf("号码长度错误,请重新输入:");
            continue;
        }
        else
        {
            return;
        }
    }
}
//以联系人首字母排序
void Seq()
{
    int i,j;
    Person *tem = NULL;
    for ( i = 0; i < ct_count-1; i++)
    {
        for( j = 0;j <= ct_count -i - 1; j++)
        {
            if(strcmp(ct[j]->name,ct[j+1]->name) > 0)
            {
                tem = ct[j];
                ct[j] = ct[j+1];
                ct[j+1] = tem;

                tem = NULL;
            }
        }
    }
}
//查看所有联系人
void See()
{
    int i;
    printf("---------------------------------------------------------------------\n");
    printf("id\t姓名\t\t家庭住址\t\t电话\n");
    printf("---------------------------------------------------------------------\n");
    for(i = 0; i < ct_count;i++)
    {
        printf("  %d\t%s\t\t%s\t\t\t%s\n",ct[i]->id, ct[i]->name, ct[i]->ads,ct[i]->num);
        //print(ct[i]);
    }
    printf("共%d位联系人",ct_count);
}
//查找联系人
void Search()
{
    printf("请选择查找方式:1.通过id查找联系人\t2.通过联系人姓名查找联系人 ");
    int d,x;
    int i;
    char name[32] = {0};
    scanf("%d",&d);
    switch (d)
    {
    case 1:
        printf("请输入联系人id:\n");
        scanf("%d",&x);
        for(i = 0;i < ct_count;i++)
        { 
            if (x == ct[i]->id)
            {
                printf("---------------------------------------------------------------------\n");
                printf("id\t姓名\t\t家庭住址\t\t电话\n");
                printf("---------------------------------------------------------------------\n");
                printf("  %d\t%s\t\t%s\t\t\t%s",ct[i]->id, ct[i]->name, ct[i]->ads,ct[i]->num);
            }
            else
            {
                printf("无此id,请重新输入:");
                break;
            }
        }
        break;
    case 2:
        printf("请输入联系人姓名:\n");
        scanf("%s",name);
        for ( i = 0; i < ct_count; i++)
        {
            if(strcmp(name,ct[i]->name) == 0)
            {
                printf("---------------------------------------------------------------------\n");
                printf("id\t姓名\t\t家庭住址\t\t电话\n");
                printf("---------------------------------------------------------------------\n");
                printf("  %d\t%s\t\t%s\t\t\t%s",ct[i]->id, ct[i]->name, ct[i]->ads,ct[i]->num);
            }
            else
            {
                printf("无此联系人,请重新输入:");
                break;
            }          
        }
        break;
    default:
        break;
    }
}
//删除联系人
void Del()
{
    int i,j;
    char name[32];
    printf("请输入联系人姓名:");
    scanf("%s",name);
    for ( i = 0; i < ct_count; i++)
    {
        if (strcmp(name,ct[i]->name) == 0)
        {
            j = i;
            printf("删除成功!");
            break;             
        }
        else
        {
            printf("无此联系人,删除失败!\n");
            break;
        }                                             
    }
    Person *tmp = ct[j];
    for ( i = j; i < ct_count - 1; i++)
    {
        ct[i] = ct[i+1];
    }
    free(tmp);
    tmp = NULL;
    ct_count--;
    ct[ct_count] = NULL;
}
//修改联系人信息
void Alter()
{
    int i;
    char name[32] = {0};
     printf("请输入联系人姓名:\n");
    scanf("%s",name);
    for ( i = 0; i <= ct_count; i++)
    {
        if (strcmp(name,ct[i]->name) == 0)
        {
            printf("请输入要修改的地址: ");
            scanf("%s",ct[i]->ads);
            printf("请输入要修改的电话: ");
            scanf("%s",ct[i]->num);
            printf("修改成功!\n");
            break;
        }
        else
        {
            printf("输入错误,无此联系人!");
            break;
        }
    }
    return;
}

六、Makefile

tar := tongxunlu
obj := main.o tongxunlu.o
cc := gcc
cflags := -c -o
cflagss := -o
$(tar):$(obj)
	$(cc) $(obj) $(cflagss) $(tar)
%.o:%.c 
	$(cc) $< $(cflags) $@ 
clean:
	rm -rf $(obj)
	rm -rf $(tar)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值