前言

b站C++课程学习笔记整理。

b站视频: 黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难

72-83. 通讯录管理系统

  • 功能描述
    • 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多纪录1000人。
    • 显示联系人:显示通讯录中所有联系人信息。
    • 删除联系人:按照姓名进行删除指定联系人。
    • 查找联系人:按照姓名查看指定联系人信息。
    • 修改联系人:按照姓名重新修改指定联系人。
    • 清空联系人:清空通讯录中所有信息。
    • 退出通讯录:退出当前使用的通讯录。
  • 控制台暂停操作:system("pause")
  • 控制台清屏操作:system("cls")
  • 注意,c++里面使用switch...case时,case的条件不能是字符串。即 case "1" 这样是不对的。必须是整数或者枚举类型。
  • 程序的输入都有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin对象直接从输入缓冲区中取数据。正因为cin对象是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin对象会直接取得这些残留数据而不会请求键盘输入。
  • cin.good判断输入是否是正确的类型。cin.fail判断输入是否是错误的类型。
  • 注意清空cin的缓存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
#include<iostream>;
#define MAX 1000
using namespace std;

struct person {
string name;
string number;
};
struct contactBook {
person personArr[MAX];
int m_size=0;
};

// 菜单界面
void showMenu() {
cout << "欢迎来到通讯录管理系统!" << endl;
cout << "-------------------" << endl;
cout << "1、添加联系人" << endl;
cout << "2、显示联系人" << endl;
cout << "3、删除联系人" << endl;
cout << "4、查找联系人" << endl;
cout << "5、修改联系人" << endl;
cout << "6、清空联系人" << endl;
cout << "7、退出通讯录" << endl;
cout << "-------------------" << endl;
}

void addPerson(contactBook* p) {
if (p->m_size == MAX) {
cout << "该通讯录已满,无法添加。" << endl;
}
else {
string name;
string number;
cout << "请添加姓名" << endl;
cin >> name;
cout << "请添加手机号" << endl;
cin >> number;

person newOne = { name,number };
p->personArr[p->m_size] = newOne;
p->m_size++;
cout << "添加成功!" << endl;
system("pause");
system("cls");
}

}

void showContact(contactBook* p) {
if (p->m_size == 0) {
cout << "通讯录为空!" << endl;
system("pause");
system("cls");
return;
}
for (int i = 0; i < p->m_size; i++) {
cout <<"姓名:" << p->personArr[i].name <<"\t手机号:" << p->personArr[i].number << endl;
}
system("pause");
system("cls");
}

void deleteContact(contactBook* p,string name) {
bool flag = true;
for (int i = 0; i < p->m_size; i++) {
if (p->personArr[i].name == name) {
flag = false;
for (int j = i; j < p->m_size-1; j++) {
p->personArr[j] = p->personArr[j + 1];
}
p->m_size--;
i--;
}
}
if (flag) {
cout << "未找到此人" << endl;
system("pause");
system("cls");
return;
}
cout << "删除成功!" << endl;
system("pause");
system("cls");
}

void searchContact(contactBook* p, string name) {
bool flag = true;
for (int i = 0; i < p->m_size; i++) {
if (p->personArr[i].name == name) {
flag = false;
cout << "姓名是" << p->personArr[i].name << "\t电话号码是" << p->personArr[i].number<< endl;
}
}
if (flag) {
cout << "未找到此人" << endl;
system("pause");
system("cls");
return;
}
system("pause");
system("cls");
}

void modifyContact(contactBook* p, string name) {
bool flag = true;
string modifiedName;
string modifiedNum;
for (int i = 0; i < p->m_size; i++) {
if (p->personArr[i].name == name) {
flag = false;
cout << "姓名是" << p->personArr[i].name << "\t电话号码是" << p->personArr[i].number << endl;
cout << "请输入新的姓名" << endl;
cin >> modifiedName;
p->personArr[i].name = modifiedName;
cout << "请输入新的号码" << endl;
cin >> modifiedNum;
p->personArr[i].number = modifiedNum;
cout << "修改成功!" << endl;
}
}
if (flag) {
cout << "未找到此人" << endl;
system("pause");
system("cls");
return;
}


system("pause");
system("cls");
}

void clearContact(contactBook* p) {
p->m_size = 0;
cout << "清空完成!" << endl;
system("pause");
system("cls");
}

int main() {
int command = 0;
contactBook cb;

while (true) {
showMenu();
cin >> command;
switch (command) {
case 1:
cout << "开启添加联系人功能" << endl;
addPerson(&cb);
break;
case 2:
cout << "开启显示联系人功能" << endl;
showContact(&cb);
break;
case 3:
{
cout << "开启删除联系人功能" << endl;
string name;
cout << "请输入要删除的人的名字" << endl;
cin >> name;
deleteContact(&cb, name);
break;
}
case 4:
{
cout << "开启查找联系人功能" << endl;
string name;
cout << "请输入要查找的人的名字" << endl;
cin >> name;
searchContact(&cb, name);
break;
}

case 5:
{
cout << "开启修改联系人功能" << endl;
string name;
cout << "请输入要修改的人的名字" << endl;
cin >> name;
modifyContact(&cb, name);
break;
}

case 6:
cout << "开启清除联系人功能" << endl;
clearContact(&cb);
break;
case 7:
cout << "欢迎下次使用!" << endl;
system("pause");
return 0;
break;
default:
system("cls");
cout << "你输入的命令有误,请重新输入。" << endl;
cin.clear();
cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
break;
}


}

system("pause");
return 0;
}