欢迎访问宙启技术站
智能推送

C++实现通讯录系统项目实战

发布时间:2023-05-15 01:50:24

本文旨在介绍一个基于C语言实现的通讯录系统项目。通讯录系统可以帮助用户记录联系人信息,方便用户查看和发起联系。通过这个实战项目,读者可以学习到C语言的基本实现技巧和数据结构知识,同时也能够了解一个实用的系统实现过程。

一、需求分析

在开始实现通讯录系统之前,我们需要先分析具体的需求。在这个项目中,我们的基本需求是实现如下功能:

- 定义联系人结构体,包括姓名、性别、年龄、电话和住址等信息;

- 实现添加联系人、显示所有联系人、查找联系人、删除联系人、修改联系人信息等基本功能;

- 可以将联系人信息写入文件和从文件中读取联系人信息,方便数据的备份和恢复。

二、设计实现

根据需求分析,我们可以罗列出如下的程序模块:

- 联系人结构体定义

- 联系人数据的添加、查找、删除和修改功能实现

- 显示所有联系人数据

- 联系人数据的读取和写入文件

下面分别介绍这些模块的具体实现。

1、联系人结构体定义

在C语言中,我们可以用结构体来定义一个联系人的信息。结构体中包括联系人的姓名、性别、年龄、电话和住址等信息。结构体定义如下:

struct Contact  
{  
    char name[20];  
    char sex[10];  
    int age;  
    char phone[15];  
    char address[30];  
};  

2、联系人数据的添加、查找、删除和修改功能实现

添加联系人:用户输入联系人的各项信息,然后将联系人信息添加到通讯录中。

void AddContact(struct Contact* pc, int* pcount)  
{  
    printf("请输入联系人姓名:");  
    scanf("%s", pc[*pcount].name);  
    printf("请输入联系人性别:");  
    scanf("%s", pc[*pcount].sex);  
    printf("请输入联系人年龄:");  
    scanf("%d", &pc[*pcount].age);  
    printf("请输入联系人电话:");  
    scanf("%s", pc[*pcount].phone);  
    printf("请输入联系人地址:");  
    scanf("%s", pc[*pcount].address);  

    (*pcount)++;  
    printf("添加成功!
");  
}  

查找联系人:用户输入联系人的姓名,然后通过遍历通讯录中的联系人数据进行查找。

void FindContact(struct Contact* pc, int count)  
{  
    char name[20];  
    int i;  
    printf("请输入联系人姓名:");  
    scanf("%s", name);  
    for (i = 0; i < count; i++)  
    {  
        if (strcmp(name, pc[i].name) == 0)  
        {  
            printf("姓名:%s
", pc[i].name);  
            printf("性别:%s
", pc[i].sex);  
            printf("年龄:%d
", pc[i].age);  
            printf("电话:%s
", pc[i].phone);  
            printf("地址:%s
", pc[i].address);  
            return;  
        }  
    }  
    printf("未找到该联系人!
");  
}  

删除联系人:用户输入联系人的姓名,然后通过遍历通讯录中的联系人数据进行查找,并将找到的联系人数据删除。

void DeleteContact(struct Contact* pc, int* pcount)  
{  
    char name[20];  
    int i;  
    printf("请输入联系人姓名:");  
    scanf("%s", name);  
    for (i = 0; i < *pcount; i++)  
    {  
        if (strcmp(name, pc[i].name) == 0)  
        {  
            int j;  
            for (j = i; j < *pcount - 1; j++)  
            {  
                pc[j] = pc[j + 1];  
            }  
            (*pcount)--;  
            printf("删除成功!
");  
            return;  
        }  
    }  
    printf("未找到该联系人!
");  
}  

修改联系人:用户输入联系人的姓名,然后通过遍历通讯录中的联系人数据进行查找,并进行修改操作。

void ModifyContact(struct Contact* pc, int count)  
{  
    char name[20];  
    int i;  
    printf("请输入联系人姓名:");  
    scanf("%s", name);  
    for (i = 0; i < count; i++)  
    {  
        if (strcmp(name, pc[i].name) == 0)  
        {  
            printf("请输入联系人姓名:");  
            scanf("%s", pc[i].name);  
            printf("请输入联系人性别:");  
            scanf("%s", pc[i].sex);  
            printf("请输入联系人年龄:");  
            scanf("%d", &pc[i].age);  
            printf("请输入联系人电话:");  
            scanf("%s", pc[i].phone);  
            printf("请输入联系人地址:");  
            scanf("%s", pc[i].address);  
            printf("修改成功!
");  
            return;  
        }  
    }  
    printf("未找到该联系人!
");  
}  

3、显示所有联系人数据

通过遍历通讯录中的联系人数据,将每一个联系人的信息打印出来。

void ShowContact(struct Contact* pc, int count)  
{  
    int i;  
    for (i = 0; i < count; i++)  
    {  
        printf("姓名:%s
", pc[i].name);  
        printf("性别:%s
", pc[i].sex);  
        printf("年龄:%d
", pc[i].age);  
        printf("电话:%s
", pc[i].phone);  
        printf("地址:%s
", pc[i].address);  
        printf("
");  
    }  
}  

4、联系人数据的读取和写入文件

为了方便数据的备份和恢复,我们可以将通讯录中的联系人数据写入文件中保存,需要时从文件中读取恢复数据。文件中每一行代表一个联系人的详细信息,每个数据之间用逗号分隔。

void WriteToFile(struct Contact* pc, int count)  
{  
    FILE* fp = fopen("contacts.txt", "w");  
    if (fp == NULL)  
    {  
        printf("文件打开失败!
");  
        return;  
    }  
    int i;  
    for (i = 0; i < count; i++)  
    {  
        fprintf(fp, "%s,%s,%d,%s,%s
", pc[i].name, pc[i].sex, pc[i].age, pc[i].phone, pc[i].address);  
    }  
    fclose(fp);  
    printf("数据写入文件成功!
");  
}  

void ReadFromFile(struct Contact* pc, int* pcount)  
{  
    FILE* fp = fopen("contacts.txt", "r");  
    if (fp == NULL)  
    {  
        printf("文件打开失败!
");  
        return;  
    }  
    while (fscanf(fp, "%[^,],%[^,],%d,%[^,],%[^
]
", pc[*pcount].name, pc[*pcount].sex, &pc[*pcount].age, pc[*pcount].phone, pc[*pcount].address) != EOF)  
    {  
        (*pcount)++;  
    }  
    fclose(fp);  
    printf("数据读取文件成功!
");  
} 

三、总结

通过这个实战项目的实现,我们基本掌握了如何用C语言来实现一个通讯录系统的基本功能。在实现过程中,我们不仅学习到了如何定义一个结构体,并使用结构体来保存复杂的数据结构,并且实现了如何进行读写文件等相关操作技