通讯录管理系统大一

发布于:2022-12-25 ⋅ 阅读:(269) ⋅ 点赞:(0)


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

typedef struct people {//定义联系人结构体
    char name[20];
    char address[100];
    char QQ[20];
    char EMAIL[20];
    char tel[20];
    char relation[20];
}P;
P num[100];//定义结构体数组,100个人
int i = 0;//联系人的序号

//调用函数声明
void menu();
void add();
void del();
void find();
void edit();
void print();

int main() {
    system("title 通讯录管理系统");
    int in;//输入选择按键
    while (1) {
        menu();//菜单
        scanf("%d", &in);
        switch (in) {
        case 0:return 0;        //退出系统
        case 1:add(); break;    //添加联系人
        case 2:del(); break;    //删除联系人
        case 3:find(); break;    //查找联系人
        case 4:edit(); break;    //编辑联系人
        case 5:print(); break;    //打印通讯录
        default:printf("输入错误,请重新输入:\n"); break;
        }
    }
    return 0;
}
//菜单
void menu() {
    printf("================================\n");
    printf("\t通讯录管理系统\n");
    printf("\t 0.退出通讯录\n");
    printf("\t 1.添加联系人\n");
    printf("\t 2.删除联系人\n");
    printf("\t 3.查找联系人\n");
    printf("\t 4.修改联系人\n");
    printf("\t 5.查看通讯录\n");
    printf("================================\n");
    printf("请选择:");
}

//判断字符串是否相等,用于查询、删除、编辑等操作
int my_strcmp(char name[], int j) {    //接收输入的名字与该结构体数组下标
    char* p1 = name;                //strcmp参数是指针,所以将他们用指针表示
    char* p2 = (char*)&num[j];
    if (strcmp(p1, p2) == 0) {        //strcmp相等就返回0
        return 0;
    }
    return 1;
}
//打印单个人的信息方便显示
void print2(int j) {
    printf("序号\t姓名\t\t电话\tQQ\tEMAIL\tAddress\tRelation\n");
    printf("%2d\t%s\t\t%s\t%s\t%s\t%s\t%s\n", (j + 1), num[j].name, num[j].tel,num[j].QQ, num[j].EMAIL, num[j].address, num[j].relation);
}
//1.增加联系人
void add() {
    if (i > 100) {                            
        printf("该通讯录已经装满了!\n");                        
        return;
    }
    char chose;                                //用于判断是否要继续添加Y/N
    while (1) {
        printf("请输入联系人的姓名:\n");
        scanf("%s", &num[i].name);
        getchar();    //清除缓存区!!!!
        printf("请输入联系人的住址:\n");
        scanf("%s", &num[i].address);
        getchar();    
        printf("请输入联系人的qq:\n");
        scanf("%s", &num[i].QQ);
        getchar();    
        printf("请输入联系人的email:\n");
        scanf("%s", &num[i].EMAIL);
        getchar();    
        printf("请输入联系人的电话:\n");                        
        scanf("%s", &num[i].tel);
        getchar();
        printf("请输入联系人的关系:\n");
        scanf("%s", &num[i].relation);
        getchar();
        i++;                                //联系人加一
        printf("添加成功!是否继续添加 Y/N:\n");                        //提示用户是否继续添加
        scanf("%c", &chose);
        if (chose == 'y' || chose == 'Y') {    //选择y或Y就继续添加,其他值退出
            continue;                        //结束本次循环,回到判断条件处
        }
        return;
    }
}
//删除联系人实际操作将后一个人信息替换钱一个人信息
void del2(int j) {
    for (j; j < i; j++) {
        num[j] = num[j + 1];
    }
}
//2.删除联系人
void del() {
    if (i == 0) {                            //判断当前是否有联系人
        printf("当前没有联系人!\n");
        return;
    }
    char name[20];                            //用来接收输入的要删除的联系人姓名
    int chose = 0;                            //用作判断
    printf("请输入要删除的联系人姓名:\n");                            
    scanf("%s", name);
    for (int j = 0; j < i; j++) {
        if (my_strcmp(name, j) == 0) {        //在数组里查找与输入名相同的元素
            printf("确认删除以下信息?\n");                
            print2(j);                        //显示当前的联系人信息
            printf("1.确认 2.返回\n");                    //提示是否确认删除
            scanf("%d", &chose);
            if (chose == 1) {
                del2(j);                    //进行删除操作
                printf("删除成功!\n");                //提示删除成功
                i--;                        //联系人的个数减一
                return;
            }
        }
    }
    printf("没有找到该联系人!\n");                            //如果没有找到目标,显示没有此人
    return;
}
//3.查找
void find() {
    if (i == 0) {                            //判断当前是否有联系人
        printf("当前没有联系人!\n");
        return;
    }
    printf("请输入要查找的联系人姓名:\n");                            //提示输入查找姓名
    char name[20];                            //接收姓名
    scanf("%s", name);
    for (int j = 0; j < i; j++) {
        if (my_strcmp(name, j) == 0) {        //查找与输入姓名相同的元素
            printf("查找成功!\n");                    //提示找到了目标联系人
            print2(j);                        //显示该联系人的信息
            return;
        }
    }
    printf("经查无此人!\n");                            //提示没有找到联系人
}
//4.修改
void edit() {
    if (i == 0) {                            //判断当前是否有联系人
        printf("当前没有联系人!\n");
        return;
    }
    printf("请输入编辑人姓名");                    //输入编辑姓名
    char name[20];                            //接收姓名
    char chose;                                //用于选择
    scanf("%s", name);
    getchar();                                //清除缓存区
    for (int j = 0; j < i; j++) {
        if (my_strcmp(name, j) == 0) {        //查找与输入姓名相同的元素
            printf("找到此联系人");                //提示找到此人
            print2(j);                        //输入此人信息
            printf("是否继续编译");                //提示是否确认编辑
            scanf("%c", &chose);            //输入选择
            if (chose == 'y' || chose == 'Y') {
                printf("请输入新联系人的姓名:\n");
                scanf("%s", &num[j].name);
                printf("请输入新联系人的住址:\n");
                scanf("%s", &num[j].address);
                printf("请输入新联系人的qq:\n");
                scanf("%s", &num[j].QQ);
                printf("请输入新联系人的email:\n");
                scanf("%s", &num[j].EMAIL);
                printf("请输入新联系人的电话:\n");
                scanf("%s", &num[j].tel);
                printf("请输入新联系人的联系:\n");
                scanf("%s", &num[j].relation);
                printf("修改成功");                
                print2(j);                    //显示新联系人信息
                return;
            }
        }
    }
    printf("没有此联系人");                            //提示没有此人
}
//显示通讯录
void print() {
    if (i == 0) {                            //判断当前是否有联系人
        printf("当前没有联系人!\n");
        return;
    }
    int j = 0;                                //从第一个元素开始输出联系人
    printf("序号\t姓名\t\t电话\tQQ\tEMAIL\tAddress\tRelation\n");
    printf("----\t----\t\t----\n");
    for (j = 0; j < i; j++) {
        printf("%2d\t%s\t\t%s\t%s\t%s\t%s\t%s\n", (j + 1), num[j].name, num[j].tel, num[j].QQ, num[j].EMAIL, num[j].address, num[j].relation);
    }
}
 


网站公告

今日签到

点亮在社区的每一天
去签到