通信系统/通信录

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

#pragma warning(disable:4996)
#pragma warning(disable:6031)

typedef struct Person
{
    char name[20];
    char sex;
    char phone[20];
} Person;

/* 全局变量 */
Person g_persons[100];
int g_cnt = 0;

void menu()
{
    printf("1.新建联系人\n");
    printf("2.删除联系人\n");
    printf("3.修改联系人\n");
    printf("4.查找联系人\n");
    printf("5.列出联系人\n");
}

/* 保存联系人到文件 */
void saveContactsToFile()
{
    FILE* file = fopen("contacts.txt", "w");
    if (file == NULL) {
        printf("无法打开文件以保存联系人数据\n");
        return;
    }

    for (int i = 0; i < g_cnt; i++) {
        fprintf(file, "%s %c %s\n", g_persons[i].name, g_persons[i].sex, g_persons[i].phone);
    }

    fclose(file);
}

/* 加载联系人从文件 */
void loadContactsFromFile()
{
    FILE* file = fopen("contacts.txt", "r");
    if (file == NULL) {
        printf("无法打开文件以加载联系人数据\n");
        return;
    }

    while (fscanf(file, "%s %c %s", g_persons[g_cnt].name, &g_persons[g_cnt].sex, g_persons[g_cnt].phone) != EOF) {
        g_cnt++;
    }

    fclose(file);
}

/* 新建联系人 */
void addPerson()
{
    char name[20];
    printf("请输入联系人姓名:");
    scanf("%s", name);

    char sex;
    printf("请输入联系人性别:");
    scanf(" %c", &sex);

    char phone[20];
    printf("请输入联系人号码:");
    scanf("%s", phone);

    strcpy(g_persons[g_cnt].name, name);
    g_persons[g_cnt].sex = sex;
    strcpy(g_persons[g_cnt].phone, phone);
    // 检查联系人是否已经存在
    // 检查联系人是否已经存在
    int exist = 0;
    for (int i = 0; i < g_cnt; i++)
    {
        if (strcmp(g_persons[i].name, g_persons[g_cnt].name) == 0)
        {
            exist = 1;
            break;

        }
    }

    if (!exist)

    {
        g_cnt++;
        printf("联系人添加成功!n");
    }
    else
    {
        printf("联系人已存在,无法添加!\n");
    }
}
/* 删除联系人 */
void deletePerson()
{
    printf("请输入要删除的联系人姓名:");
    char name[20];
    scanf("%s", name);

    for (int idx = 0; idx < g_cnt; idx++)
    {
        if (strcmp(g_persons[idx].name, name) == 0)
        {
            for (int j = idx; j < g_cnt - 1; j++)
            {
                g_persons[j] = g_persons[j + 1];
            }
            g_cnt--;
            printf("联系人删除成功\n");
            return;
        }
    }
    printf("未找到该联系人\n");
}

/* 修改联系人 */
void modifyPerson()
{
    printf("请输入要修改的联系人姓名:");
    char name[20];
    scanf("%s", name);

    for (int idx = 0; idx < g_cnt; idx++)
    {
        if (strcmp(g_persons[idx].name, name) == 0)
        {
            printf("请输入新的姓名:");
            scanf("%s", g_persons[idx].name);

            printf("请输入新的性别(M/F):");
            scanf(" %c", &g_persons[idx].sex);

            printf("请输入新的电话号码:");
            scanf("%s", g_persons[idx].phone);

            printf("联系人修改成功\n");
            return;
        }
    }
    printf("未找到该联系人\n");
}

/* 查找联系人 */
void searchPerson()
{
    printf("请输入要查找的联系人姓名:");
    char name[20];
    scanf("%s", name);

    for (int idx = 0; idx < g_cnt; idx++)
    {
        if (strcmp(g_persons[idx].name, name) == 0)
        {
            printf("name = %s,\tsex = %c,\tphone = %s\n", g_persons[idx].name, g_persons[idx].sex, g_persons[idx].phone);
            return;
        }
    }
    printf("未找到该联系人\n");
}

/* 列出联系人 */
void listPerson()
{
    for (int idx = 0; idx < g_cnt; idx++)
    {
        printf("name=%s,\tsex=%c,\tphone=%s\n", g_persons[idx].name, g_persons[idx].sex, g_persons[idx].phone);
    }
    printf("列出联系人成功\n");
}

int main()
{
    loadContactsFromFile();

    int choice;
    do {
        menu();

        printf("请输入你的选项:");
        scanf("%d", &choice);
        getchar(); 

        switch (choice)
        {
        case 1:
            addPerson();
            break;
        case 2:
            deletePerson();
            break;
        case 3:
            modifyPerson();
            break;
        case 4:
            searchPerson();
            break;
        case 5:
            listPerson();
            break;
        default:
            break;
        }

        saveContactsToFile();

        printf("是否继续操作?(1-是,0-否):");
        scanf("%d", &choice);
    } while (choice != 0);

    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值