c++小项目——通讯录
实现功能总览:
1.添加联系人
实现功能
:向通讯录添加新人,信息包括(姓名,性别,年龄,电话,家庭住址)最多纪录100人
2.显示联系人
实现功能
:显示所有联系人信息
3.删除联系人
实现功能
:按指定名字删除联系人
4.查找联系人
实现功能
:按指定名字查找联系人
5.修改联系人
实现功能
:按指定名字修改联系人信息
6.清空联系人
实现功能
:清空通讯录
7.退出通讯录
实现功能
:退出当前使用通讯录
准备
我们将创建以下三个文件来实现模块化管理通讯录程序:
contacts.cpp
:主程序入口,包含main()
函数;func.cpp
:实现各类功能函数,如添加、删除、查找联系人等;func.h
:功能函数的声明和头文件引用。
1.菜单栏
void menue()
{
cout << "******************************" << endl;
cout << "**** 1、添加联系人 ****" << endl;
cout << "**** 2、显示联系人 ****" << endl;
cout << "**** 3、删除联系人 ****" << endl;
cout << "**** 4、查找联系人 ****" << endl;
cout << "**** 5、修改联系人 ****" << endl;
cout << "**** 6、清空通讯录 ****" << endl;
cout << "**** 0、退出通讯录 ****" << endl;
cout << "******************************" << endl;
}
2.通讯录结构体
typedef struct contacts
{
string name ;
int age;
string sex;
int number;
string addr;
}
contacts;
typedef struct contact_list {
contacts info[100];
int people_num;
} contact_list;
3.退出程序
在用户选择0的时候退出,首先我们需要搭建一个switch
框架
switch (num)
{
case 0://退出通讯录
cout<<"欢迎下次使用"<<endl;
return 0;
case 1://添加联系人
add(&arr_list);
break;
case 2://显示联系人
show_contact(&arr_list);
break;
case 3://删除联系人
delete_contact(&arr_list);
break;
case 4://查找联系人
find_contact(&arr_list);
break;
case 5://修改联系人
change_contact(&arr_list);
break;
case 6://清空通讯录
clear_contact(&arr_list);
break;
default:
cout << "无效的输入,请重新选择一个有效的选项!" << endl;
continue;
}
4.添加联系人
add函数实现方法
// 添加联系人
void add(contact_list *arr)
{
if(arr->people_num >= 100)
{
cout << "通讯录已满,无法添加联系人。" << endl;
return;
}
string s;
int num;
cout << "请输入姓名: ";
cin >> s;
arr->info[arr->people_num].name = s;
cout << "请输入年龄: ";
while (!(cin >> num)) {
cout << "请输入有效的年龄(数字): ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略当前输入缓冲区的错误内容
}
arr->info[arr->people_num].age = num;
cout << "请输入性别: ";
cin >> s;
arr->info[arr->people_num].sex = s;
cout << "请输入电话号码: ";
while (!(cin >> num)) {
cout << "请输入有效的电话号码(数字): ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
arr->info[arr->people_num].number = num;
cout << "请输入地址: ";
cin >> s;
arr->info[arr->people_num].addr = s;
arr->people_num += 1;
cout << "添加成功!" << endl;
cin.ignore();
cin.get();
system("clear"); // 如果你在 Windows 上运行,请修改为 system("cls");
}
5.显示联系人
// 显示联系人
void show_contact(contact_list *arr)
{
if (arr->people_num == 0) {
cout << "通讯录为空。" << endl;
}
for (int i = 0; i < arr->people_num; i++)
{
cout << "姓名: " << arr->info[i].name << endl;
cout << "年龄: " << arr->info[i].age << endl;
cout << "性别: " << arr->info[i].sex << endl;
cout << "电话号码: " << arr->info[i].number << endl;
cout << "住址: " << arr->info[i].addr << endl;
cout << "-----------------------" << endl;
}
cout << "请按任意键继续..." << endl;
cin.ignore();
cin.get();
system("clear");
}
6.删除联系人
如果你有想法只将people_num-1
,下一个覆盖?嗯…想法不错,但是只能删除最后一个联系人,倘若删除中间某个人这个方法就不太适合
// 删除联系人
void delete_contact(contact_list *arr)
{
string name;
int num = -1;
cout << "请输入你要删除的人的姓名: ";
cin >> name;
// 查找联系人
for (int i = 0; i < arr->people_num; i++)
{
if (arr->info[i].name == name)
{
num = i;
break;
}
}
// 如果找到了联系人,删除
if (num != -1)
{
for (int j = num; j < arr->people_num - 1; j++)
{
arr->info[j] = arr->info[j + 1];
}
arr->people_num -= 1;
cout << "删除成功!" << endl;
}
else
{
cout << "未找到该联系人。" << endl;
}
cout << "请按任意键继续..." << endl;
cin.ignore();
cin.get();
system("clear");
}
7.查找联系人
// 查找联系人
void find_contact(contact_list *arr)
{
string name;
int num = -1;
cout << "请输入要查找的联系人姓名: ";
cin >> name;
// 查找联系人
for (int i = 0; i < arr->people_num; i++)
{
if (arr->info[i].name == name)
{
cout << "姓名: " << arr->info[i].name << endl;
cout << "年龄: " << arr->info[i].age << endl;
cout << "性别: " << arr->info[i].sex << endl;
cout << "电话号码: " << arr->info[i].number << endl;
cout << "住址: " << arr->info[i].addr << endl;
num = i;
break;
}
}
if (num == -1)
{
cout << "该联系人不存在。" << endl;
}
cout << "请按任意键继续..." << endl;
cin.ignore();
cin.get();
system("clear");
}
8.修改联系人
// 修改联系人
void change_contact(contact_list *arr)
{
string name, s;
int num;
bool found = false;
cout << "请输入要修改的联系人姓名: ";
cin >> name;
for (int i = 0; i < arr->people_num; i++)
{
if (arr->info[i].name == name)
{
cout << "请输入新的姓名: ";
cin >> s;
arr->info[i].name = s;
cout << "请输入新的年龄: ";
while (!(cin >> num)) {
cout << "请输入有效的年龄(数字): ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
arr->info[i].age = num;
cout << "请输入新的性别: ";
cin >> s;
arr->info[i].sex = s;
cout << "请输入新的电话号码: ";
while (!(cin >> num)) {
cout << "请输入有效的电话号码(数字): ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
arr->info[i].number = num;
cout << "请输入新的地址: ";
cin >> s;
arr->info[i].addr = s;
cout << "修改成功!" << endl;
found = true;
break;
}
}
if (!found)
{
cout << "未找到该联系人。" << endl;
}
cout << "请按任意键继续..." << endl;
cin.ignore();
cin.get();
system("clear");
}
9.清除通讯录
// 清空通讯录
void clear_contact(contact_list *arr)
{
arr->people_num = 0;
cout << "通讯录已清空。" << endl;
cout << "请按任意键继续..." << endl;
cin.ignore();
cin.get();
system("clear");
}
总览
contacts.cpp
#include"func.h"
#include<string>
using namespace std;
int main()
{
int num=0;
contact_list arr_list;
arr_list.people_num=0;
while (true)
{
menue();
cin>>num;
switch (num)
{
case 0://退出通讯录
cout<<"欢迎下次使用"<<endl;
return 0;
case 1://添加联系人
add(&arr_list);
break;
case 2://显示联系人
show_contact(&arr_list);
break;
case 3://删除联系人
delete_contact(&arr_list);
break;
case 4://查找联系人
find_contact(&arr_list);
break;
case 5://修改联系人
change_contact(&arr_list);
break;
case 6://清空通讯录
clear_contact(&arr_list);
break;
default:
cout << "无效的输入,请重新选择一个有效的选项!" << endl;
continue;
}
}
return 0;
}
func.cpp
#include "func.h"
// 显示菜单
void menue()
{
cout << "******************************" << endl;
cout << "**** 1、添加联系人 ****" << endl;
cout << "**** 2、显示联系人 ****" << endl;
cout << "**** 3、删除联系人 ****" << endl;
cout << "**** 4、查找联系人 ****" << endl;
cout << "**** 5、修改联系人 ****" << endl;
cout << "**** 6、清空通讯录 ****" << endl;
cout << "**** 0、退出通讯录 ****" << endl;
cout << "******************************" << endl;
}
// 添加联系人
void add(contact_list *arr)
{
if(arr->people_num >= 100)
{
cout << "通讯录已满,无法添加联系人。" << endl;
return;
}
string s;
int num;
cout << "请输入姓名: ";
cin >> s;
arr->info[arr->people_num].name = s;
cout << "请输入年龄: ";
while (!(cin >> num)) {
cout << "请输入有效的年龄(数字): ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略当前输入缓冲区的错误内容
}
arr->info[arr->people_num].age = num;
cout << "请输入性别: ";
cin >> s;
arr->info[arr->people_num].sex = s;
cout << "请输入电话号码: ";
while (!(cin >> num)) {
cout << "请输入有效的电话号码(数字): ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
arr->info[arr->people_num].number = num;
cout << "请输入地址: ";
cin >> s;
arr->info[arr->people_num].addr = s;
arr->people_num += 1;
cout << "添加成功!" << endl;
cin.ignore();
cin.get();
system("clear"); // 如果你在 Windows 上运行,请修改为 system("cls");
}
// 显示联系人
void show_contact(contact_list *arr)
{
if (arr->people_num == 0) {
cout << "通讯录为空。" << endl;
}
for (int i = 0; i < arr->people_num; i++)
{
cout << "姓名: " << arr->info[i].name << endl;
cout << "年龄: " << arr->info[i].age << endl;
cout << "性别: " << arr->info[i].sex << endl;
cout << "电话号码: " << arr->info[i].number << endl;
cout << "住址: " << arr->info[i].addr << endl;
cout << "-----------------------" << endl;
}
cout << "请按任意键继续..." << endl;
cin.ignore();
cin.get();
system("clear");
}
// 删除联系人
void delete_contact(contact_list *arr)
{
string name;
int num = -1;
cout << "请输入你要删除的人的姓名: ";
cin >> name;
// 查找联系人
for (int i = 0; i < arr->people_num; i++)
{
if (arr->info[i].name == name)
{
num = i;
break;
}
}
// 如果找到了联系人,删除
if (num != -1)
{
for (int j = num; j < arr->people_num - 1; j++)
{
arr->info[j] = arr->info[j + 1];
}
arr->people_num -= 1;
cout << "删除成功!" << endl;
}
else
{
cout << "未找到该联系人。" << endl;
}
cout << "请按任意键继续..." << endl;
cin.ignore();
cin.get();
system("clear");
}
// 查找联系人
void find_contact(contact_list *arr)
{
string name;
int num = -1;
cout << "请输入要查找的联系人姓名: ";
cin >> name;
// 查找联系人
for (int i = 0; i < arr->people_num; i++)
{
if (arr->info[i].name == name)
{
cout << "姓名: " << arr->info[i].name << endl;
cout << "年龄: " << arr->info[i].age << endl;
cout << "性别: " << arr->info[i].sex << endl;
cout << "电话号码: " << arr->info[i].number << endl;
cout << "住址: " << arr->info[i].addr << endl;
num = i;
break;
}
}
if (num == -1)
{
cout << "该联系人不存在。" << endl;
}
cout << "请按任意键继续..." << endl;
cin.ignore();
cin.get();
system("clear");
}
// 修改联系人
void change_contact(contact_list *arr)
{
string name, s;
int num;
bool found = false;
cout << "请输入要修改的联系人姓名: ";
cin >> name;
for (int i = 0; i < arr->people_num; i++)
{
if (arr->info[i].name == name)
{
cout << "请输入新的姓名: ";
cin >> s;
arr->info[i].name = s;
cout << "请输入新的年龄: ";
while (!(cin >> num)) {
cout << "请输入有效的年龄(数字): ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
arr->info[i].age = num;
cout << "请输入新的性别: ";
cin >> s;
arr->info[i].sex = s;
cout << "请输入新的电话号码: ";
while (!(cin >> num)) {
cout << "请输入有效的电话号码(数字): ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
arr->info[i].number = num;
cout << "请输入新的地址: ";
cin >> s;
arr->info[i].addr = s;
cout << "修改成功!" << endl;
found = true;
break;
}
}
if (!found)
{
cout << "未找到该联系人。" << endl;
}
cout << "请按任意键继续..." << endl;
cin.ignore();
cin.get();
system("clear");
}
// 清空通讯录
void clear_contact(contact_list *arr)
{
arr->people_num = 0;
cout << "通讯录已清空。" << endl;
cout << "请按任意键继续..." << endl;
cin.ignore();
cin.get();
system("clear");
}
func.h
#ifndef FUNC_H
#define FUNC_H
#include<iostream>
#include <cstdlib>
#include<string>
#include <iomanip>
using namespace std;
typedef struct contacts
{
string name ;
int age;
string sex;
int number;
string addr;
}
contacts;
typedef struct contact_list {
contacts info[100];
int people_num;
} contact_list;
//菜单展示
void menue();
//添加联系人
void add(contact_list* arr);
//显示联系人
void show_contact(contact_list* arr);
//删除联系人
void delete_contact(contact_list*arr);
//查找联系人
void find_contact(contact_list*arr);
//修改联系人
void change_contact(contact_list*arr);
//清空通讯录
void clear_contact(contact_list*arr);
#endif
总结
本项目属于入门级别,是对结构体和指针的运用程度的考验,后续还会继续实现动态
以及文件io
的项目,项目还是有点小拙劣,还请海涵,我也会不断优化与进步的!(本项目是在Linux环境下编译的!windows部分代码需要修改)