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