C语言--简单通讯录(Clion版)

初学者C语言开发–通讯录(Clion版)

声明:学习过程

总体结果预览

在这里插入图片描述

在这里插入图片描述

一:总体思维

  1. 菜单显示,选项卡设置
  2. 功能大体规划:添加,显示,删除,查找,修改,清空,退出
  3. 添加:输入联系人资料并且加入通讯录
  4. 显示:运行显示通讯录所有联系人资料
  5. 删除:删除某一联系人
  6. 查找:查找联系人并且将信息显示
  7. 清空:清空通讯录所有联系人
  8. 退出:退出程序

二:代码分析实现

结构体

两个结构体,一个联系人,一个通讯录

通讯录里面存储有联系人

联系人有属性,姓名,性别,年龄,电话,地址

struct Person{
    char m_name[10];
    int m_sex;
    int m_age;
    char m_phone[20];
    char m_addr[20];
};
struct Addressbooks{
    //联系人数组
    struct Person personArray[MAX];
    //当前联系人个数
    int size;
};

主函数

创建结构体变量,初始化通讯录人数为0

循环显示主菜单界面

switch根据输入选择调用函数(具体实现通讯录功能)

调用函数通过地址传参可以通过形参修改实参

int main(){
    //创建一个通讯录结构体变量
    struct Addressbooks abs;
    abs.size=0;


    int select=0;

    while(1){
        showMenu();
        char name[10];
        scanf("%d",&select);

        switch (select) {
            case 1:
                addPerson(&abs);//利用地址传递可以修改实参
                break;
            case 2:
                showPerson(&abs);
                break;
            case 3:
                deletePerson(&abs);
                break;
            case 4:
                findPerson(&abs);
                break;
            case 5:
                modifyPerson(&abs);
                break;
            case 6:
                clearPerson(&abs);
                break;
            case 0:
                printf("欢迎下次使用\n");
                return 0;
            default:
                break;
        }
    }
}

菜单显示界面

void showMenu(){
    printf("***********\n");
    printf("1、添加联系人\n");
    printf("2、显示联系人\n");
    printf("3、删除联系人\n");
    printf("4、查找联系人\n");
    printf("5、修改联系人\n");
    printf("6、清空联系人\n");
    printf("0、退出通讯录\n");
    printf("***********\n");
}

添加联系人

参数为指针,通讯录

所有信息添加到通讯录的联系人数组中,size表示大小

c语言的字符串赋值:strcpy(被赋值,原值)

void addPerson(struct Addressbooks * abs){
    //判断通讯录是否满
    if(abs->size==MAX){
        printf("通讯录已满,无法添加\n");
        return;
    }
    else{
        //添加具体

        //姓名
        char name[10];
        printf("请输入姓名:");
        scanf("%s",name);
        strcpy(abs->personArray[abs->size].m_name, name);

        //性别
        printf("请输入性别(1为男,2为女):");
        int sex=0;
        while(1){
            scanf("%d",&sex);
            if(sex==1||sex==2){
                abs->personArray[abs->size].m_sex=sex;
                break;
            }
            printf("输入不服规范,请重新输入:");
        }

        //年龄
        printf("请输入年龄:");
        int age;
        scanf("%d",&age);
        abs->personArray[abs->size].m_age=age;

        //电话
        printf("请输入电话:");
        char phone[20];
        scanf("%s",phone);
        strcpy(abs->personArray[abs->size].m_phone,phone);

        //地址
        printf("请输入地址:");
        char addr[20];
        scanf("%s",addr);
        strcpy(abs->personArray[abs->size].m_addr,addr);

        //通讯录人数
        abs->size++;

        printf("添加成功!\n");
//        system("pause");
//        system("cls");
    }
}

显示联系人

注意性别显示,如果等于1就显示男,不等于1就显示女

void showPerson(struct Addressbooks * abs){
    //判断通讯录人数
    if(abs->size==0){
        printf("通讯录人数为空\n");
    }
    else {
        for(int i=0;i<abs->size;i++){
            printf("姓名:%s\t",abs->personArray[i].m_name);
            printf("性别:%s\t",abs->personArray[i].m_sex==1?"男":"女");
            printf("年龄:%d\t",abs->personArray[i].m_age);
            printf("电话:%s\t",abs->personArray[i].m_phone);
            printf("住址:%s\n",abs->personArray[i].m_addr);
        }
    }

//    system("cls");
//    system("pause");
}

判断联系人是否存在(后续需要用到)

遍历数组,如果查找到则返回下标,未查找到则返回-1

C语言的判断字符串:strcmp(字符串1,字符串2)如果相同则返回0

(不能用=,这是赋值)

int isExist(struct Addressbooks * abs,char name[10]){
    for(int i=0;i<abs->size;i++){
        if(strcmp(abs->personArray[i].m_name,name)==0){
            return i;
        }
    }
    return -1;
}

删除联系人

判断联系人是否在通讯录内

删除逻辑:将其后所有内容都向前走一格(下标加1),最后再size-1

void deletePerson(struct Addressbooks * abs){
    printf("请输入你要删除的联系人:");
    char name[10];
    scanf("%s",name);

    int ret=isExist(abs,name);
//    printf("%d",ret);
    if(ret!=-1){
        for(int i=ret;i<abs->size;i++){
            abs->personArray[i]=abs->personArray[i+1];
        }
        abs->size--;
        printf("删除成功!\n");
    }
    else {
        printf("查无此人!\n");
    }

}

查找联系人

判断是否存在

通过判断的返回值(该返回值为下标),输出下标(ret)对应的联系人

void findPerson(struct Addressbooks * abs){
    printf("请输入您要查找的联系人:");
    char name[10];
    scanf("%s",name);
    int ret= isExist(abs,name);
    if(ret!=-1){
        printf("姓名:%s\t",abs->personArray[ret].m_name);
        printf("性别:%s\t",abs->personArray[ret].m_sex==1?"男":"女");
        printf("年龄:%d\t",abs->personArray[ret].m_age);
        printf("电话:%s\t",abs->personArray[ret].m_phone);
        printf("住址:%s\n",abs->personArray[ret].m_addr);

    }
    else {
        printf("查无此人\n");
    }
}


修改联系人

判断是否存在

对其所有内容进行修改

void modifyPerson(struct Addressbooks * abs){
    printf("请输入你要修改的联系人:");
    char name[10];
    scanf("%s",name);
    int ret= isExist(abs,name);
    if(ret!=-1){
        printf("请输入姓名:");
        char modifyname[10];
        scanf("%s",modifyname);
        strcpy(abs->personArray[ret].m_name,modifyname);

        printf("请输入性别(1为男,2为女):");
        int modifysex=0;
        while(1){
            scanf("%d",&modifysex);
            if(modifysex==1||modifysex==2){
                abs->personArray[ret].m_sex=modifysex;
                break;
            }
            printf("输入有误,请重新输入\n");
        }

        printf("请输入年龄:");
        int modifyage;
        scanf("%d",&modifyage);
        abs->personArray[ret].m_age=modifyage;

        printf("请输入电话:");
        char phone[20];
        scanf("%s",phone);
        strcpy(abs->personArray[ret].m_phone,phone);

        printf("请输入地址:");
        char addr[20];
        scanf("%s",addr);
        strcpy(abs->personArray[ret].m_addr,addr);

    }
    else{
        printf("查无此人!\n");
    }
}

清空通讯录

简单逻辑,下表直接归0

void clearPerson(struct Addressbooks * abs){
    abs->size=0;
    printf("通讯录人已清空!\n");
}

三:下面是完整代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX 20

struct Person{
    char m_name[10];
    int m_sex;
    int m_age;
    char m_phone[20];
    char m_addr[20];
};
struct Addressbooks{
    //联系人数组
    struct Person personArray[MAX];
    //当前联系人个数
    int size;
};

void addPerson(struct Addressbooks * abs){
    //判断通讯录是否满
    if(abs->size==MAX){
        printf("通讯录已满,无法添加\n");
        return;
    }
    else{
        //添加具体

        //姓名
        char name[10];
        printf("请输入姓名:");
        scanf("%s",name);
        strcpy(abs->personArray[abs->size].m_name, name);

        //性别
        printf("请输入性别(1为男,2为女):");
        int sex=0;
        while(1){
            scanf("%d",&sex);
            if(sex==1||sex==2){
                abs->personArray[abs->size].m_sex=sex;
                break;
            }
            printf("输入不服规范,请重新输入:");
        }

        //年龄
        printf("请输入年龄:");
        int age;
        scanf("%d",&age);
        abs->personArray[abs->size].m_age=age;

        //电话
        printf("请输入电话:");
        char phone[20];
        scanf("%s",phone);
        strcpy(abs->personArray[abs->size].m_phone,phone);

        //地址
        printf("请输入地址:");
        char addr[20];
        scanf("%s",addr);
        strcpy(abs->personArray[abs->size].m_addr,addr);

        //通讯录人数
        abs->size++;

        printf("添加成功!\n");
//        system("pause");
//        system("cls");
    }
}

void showPerson(struct Addressbooks * abs){
    //判断通讯录人数
    if(abs->size==0){
        printf("通讯录人数为空\n");
    }
    else {
        for(int i=0;i<abs->size;i++){
            printf("姓名:%s\t",abs->personArray[i].m_name);
            printf("性别:%s\t",abs->personArray[i].m_sex==1?"男":"女");
            printf("年龄:%d\t",abs->personArray[i].m_age);
            printf("电话:%s\t",abs->personArray[i].m_phone);
            printf("住址:%s\n",abs->personArray[i].m_addr);
        }
    }

//    system("cls");
//    system("pause");
}

int isExist(struct Addressbooks * abs,char name[10]){
    for(int i=0;i<abs->size;i++){
        if(strcmp(abs->personArray[i].m_name,name)==0){
            return i;
        }
    }
    return -1;
}

void deletePerson(struct Addressbooks * abs){
    printf("请输入你要删除的联系人:");
    char name[10];
    scanf("%s",name);

    int ret=isExist(abs,name);
//    printf("%d",ret);
    if(ret!=-1){
        for(int i=ret;i<abs->size;i++){
            abs->personArray[i]=abs->personArray[i+1];
        }
        abs->size--;
        printf("删除成功!\n");
    }
    else {
        printf("查无此人!\n");
    }

}

void findPerson(struct Addressbooks * abs){
    printf("请输入您要查找的联系人:");
    char name[10];
    scanf("%s",name);
    int ret= isExist(abs,name);
    if(ret!=-1){
        printf("姓名:%s\t",abs->personArray[ret].m_name);
        printf("性别:%s\t",abs->personArray[ret].m_sex==1?"男":"女");
        printf("年龄:%d\t",abs->personArray[ret].m_age);
        printf("电话:%s\t",abs->personArray[ret].m_phone);
        printf("住址:%s\n",abs->personArray[ret].m_addr);

    }
    else {
        printf("查无此人\n");
    }
}

void modifyPerson(struct Addressbooks * abs){
    printf("请输入你要修改的联系人:");
    char name[10];
    scanf("%s",name);
    int ret= isExist(abs,name);
    if(ret!=-1){
        printf("请输入姓名:");
        char modifyname[10];
        scanf("%s",modifyname);
        strcpy(abs->personArray[ret].m_name,modifyname);

        printf("请输入性别(1为男,2为女):");
        int modifysex=0;
        while(1){
            scanf("%d",&modifysex);
            if(modifysex==1||modifysex==2){
                abs->personArray[ret].m_sex=modifysex;
                break;
            }
            printf("输入有误,请重新输入\n");
        }

        printf("请输入年龄:");
        int modifyage;
        scanf("%d",&modifyage);
        abs->personArray[ret].m_age=modifyage;

        printf("请输入电话:");
        char phone[20];
        scanf("%s",phone);
        strcpy(abs->personArray[ret].m_phone,phone);

        printf("请输入地址:");
        char addr[20];
        scanf("%s",addr);
        strcpy(abs->personArray[ret].m_addr,addr);

    }
    else{
        printf("查无此人!\n");
    }
}

void clearPerson(struct Addressbooks * abs){
    abs->size=0;
    printf("通讯录人已清空!\n");
}

void showMenu(){
    printf("***********\n");
    printf("1、添加联系人\n");
    printf("2、显示联系人\n");
    printf("3、删除联系人\n");
    printf("4、查找联系人\n");
    printf("5、修改联系人\n");
    printf("6、清空联系人\n");
    printf("0、退出通讯录\n");
    printf("***********\n");
}

int main(){
    //创建一个通讯录结构体变量
    struct Addressbooks abs;
    abs.size=0;


    int select=0;

    while(1){
        showMenu();
        char name[10];
        scanf("%d",&select);

        switch (select) {
            case 1:
                addPerson(&abs);//利用地址传递可以修改实参
                break;
            case 2:
                showPerson(&abs);
                break;
            case 3:
                deletePerson(&abs);
                break;
            case 4:
                findPerson(&abs);
                break;
            case 5:
                modifyPerson(&abs);
                break;
            case 6:
                clearPerson(&abs);
                break;
            case 0:
                printf("欢迎下次使用\n");
                return 0;
            default:
                break;
        }
    }
}
//
// Created by 30358 on 2024/7/31.
//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值