首页 > 编程语言 >【C++】案例01_通讯录管理系统

【C++】案例01_通讯录管理系统

时间:2023-02-02 11:36:04浏览次数:49  
标签:index 01 cout C++ name abs 通讯录 personArray Size

1. 菜单展示
    system("pause");    输入任意键继续
    system("cls");        清屏操作
    
2. 人、通讯录结构体创建
    通讯录结构体中,m_Size; // 存储当前通讯录结构体中,记录的人员数量。对应前多少个位置存储着信息
    (abs->personArray[i].m_Sex == 1? "男": "女")   ,性别,1男2女,通过三目运算符进行输除对应的中文字符

3. 【增】添加联系人,向通讯录中
    新加人员信息,要利用地址传递


4. 打印联系人,从通讯录中
    首先要判空,没有信息时,拒绝操作。

5. 【查】按名称,查找联系人,从通讯录中
    首先要判空,没有信息时,拒绝操作。

6. 【删】按名称,删除联系人,从通讯录中,之后的信息依次向前覆盖
    首先要判空,没有信息时,拒绝操作。

 

  1 #include<iostream>
  2 using namespace std;
  3 #include<string>
  4 # define MAX 1000 // 通讯录结构体中,最大存储的数量
  5 
  6 struct Person
  7 {
  8     string m_Name;
  9     int m_Sex; // 1 男,2 女  ; 三目运算符实现输出
 10     int m_Age;
 11     string m_Phone;
 12     string m_Addr;
 13 };
 14 
 15 struct Addressbooks
 16 {
 17     struct Person personArray[MAX];
 18     int m_Size; // 存储当前通讯录结构体中,记录的人员数量。对应前多少个位置存储着信息
 19 };
 20 
 21 int panKong(int len, string str)
 22 {
 23     if (len == 0)
 24     {
 25         cout << "\t通讯录为空,无法进行 " << str << " 操作,请先添加人员信息。" << endl;
 26         return -1;
 27     }
 28     return 0;
 29 }
 30 
 31 
 32 // 1. 添加联系人
 33 void addPerson(struct Addressbooks * abs)
 34 {
 35     // 判断是否达到最大人员个数
 36     if (abs->m_Size == MAX) 
 37     {
 38         cout << "通讯录已满,无法继续添加" << endl;
 39         return;
 40     }
 41     else 
 42     {
 43         // 添加具体联系人
 44         // 姓名
 45         string name;
 46         cout << "请输入姓名:" << endl;
 47         cin >> name;
 48         abs->personArray[abs->m_Size].m_Name = name;
 49 
 50         // 性别
 51         int sex;
 52         cout << "请输入性别:" << endl;
 53         cout << "1 --- 男 " << endl;
 54         cout << "2 --- 女 " << endl;
 55         // 要预防输入不在指定范围内
 56         while (true)
 57         {
 58             cin >> sex;
 59             if (sex == 1 || sex == 2)
 60             {
 61                 abs->personArray[abs->m_Size].m_Sex = sex;
 62                 break;
 63             }
 64             cout << "输入有误,请重新输入" << endl;
 65         }
 66         
 67         // 年龄
 68         int age = 0;
 69         cout << "请输入年龄:" << endl;
 70         cin >> age;
 71         abs->personArray[abs->m_Size].m_Age = age;
 72 
 73         // 电话
 74         string phone;
 75         cout << "请输入电话: " << endl;
 76         cin >> phone;
 77         abs->personArray[abs->m_Size].m_Phone = phone;
 78 
 79         // 家庭住址
 80         string addr;
 81         cout << "请输入家庭住址:" << endl;
 82         cin >> addr;
 83         abs->personArray[abs->m_Size].m_Addr = addr;
 84 
 85         abs->m_Size++;
 86     }
 87 }
 88 
 89 // 2. 显示联系人
 90 void printPerson(struct Addressbooks * abs)
 91 {
 92     if (abs->m_Size == 0)
 93     {
 94         cout << "\t通讯录为空,暂未记录信息" << endl;
 95     }
 96     for (int i = 0; i < abs->m_Size; i++) 
 97     {
 98         cout << "姓名:" << abs->personArray[i].m_Name << "\t"
 99             << "性别:" << (abs->personArray[i].m_Sex == 1 ? "男" : "女") << "\t"
100             << "年龄:" << abs->personArray[i].m_Age << "\t"
101             << "电话:" << abs->personArray[i].m_Phone << "\t"
102             << "家庭住址:" << abs->personArray[i].m_Addr << "\t" << endl;
103     }
104 
105 }
106 void printPerson_index(struct Addressbooks * abs,int index)
107 {
108     cout << "姓名:" << abs->personArray[index].m_Name << "\t"
109         << "性别:" << (abs->personArray[index].m_Sex == 1 ? "男" : "女") << "\t"
110         << "年龄:" << abs->personArray[index].m_Age << "\t"
111         << "电话:" << abs->personArray[index].m_Phone << "\t"
112         << "家庭住址:" << abs->personArray[index].m_Addr << "\t" << endl;
113 
114 }
115 
116 // 4. 按名称查找联系人
117 int findPerson(struct Addressbooks* abs, string name) 
118 {
119     for (int i = 0; i < abs->m_Size; i++) 
120     {
121         if (abs->personArray[i].m_Name == name)
122         {
123             return i;
124         }
125     }
126     return -1;//没有找到
127 }
128 
129 // 3. 删除联系人
130 void delPerson(struct Addressbooks * abs, string name) 
131 {
132     // 从已有记录中查找指定人的姓名
133     int index = findPerson(abs, name);
134     if (index == -1)
135     {
136         cout << "\t没有查到名称为 " << name << " 的人员信息,无法删除。" << endl;
137         return;
138     }
139 
140     cout << "所要删除的人的索引: " << index << endl;
141     // 指定索引开始,后一个人的信息依次向前覆盖
142     for (int i = index; i < abs->m_Size; i++) 
143     {
144         abs->personArray[i] = abs->personArray[i+1];
145     }
146     // 通信录中,元素个数减一
147     abs->m_Size--;
148 }
149 
150 // 5. 修改联系人
151 void changePerson_index(struct Addressbooks* abs, int index)
152 {
153     cout << "原信息:" << "姓名:" << abs->personArray[index].m_Name << "\t"
154         << "性别:" << (abs->personArray[index].m_Sex == 1 ? "男" : "女") << "\t"
155         << "年龄:" << abs->personArray[index].m_Age << "\t"
156         << "电话:" << abs->personArray[index].m_Phone << "\t"
157         << "家庭住址:" << abs->personArray[index].m_Addr << "\t" << endl;
158 
159     // 姓名
160     string name;
161     cout << "请输入姓名:" << endl;
162     cin >> name;
163     abs->personArray[index].m_Name = name;
164 
165     // 性别
166     int sex;
167     cout << "请输入性别:" << endl;
168     cout << "1 --- 男 " << endl;
169     cout << "2 --- 女 " << endl;
170     // 要预防输入不在指定范围内
171     while (true)
172     {
173         cin >> sex;
174         if (sex == 1 || sex == 2)
175         {
176             abs->personArray[index].m_Sex = sex;
177             break;
178         }
179         cout << "输入有误,请重新输入" << endl;
180     }
181 
182     // 年龄
183     int age = 0;
184     cout << "请输入年龄:" << endl;
185     cin >> age;
186     abs->personArray[index].m_Age = age;
187 
188     // 电话
189     string phone;
190     cout << "请输入电话: " << endl;
191     cin >> phone;
192     abs->personArray[index].m_Phone = phone;
193 
194     // 家庭住址
195     string addr;
196     cout << "请输入家庭住址:" << endl;
197     cin >> addr;
198     abs->personArray[index].m_Addr = addr;
199 }
200 
201 void showMenu()
202 {
203     cout << "***************************" << endl;
204     cout << "*****  1. 添加联系人  *****" << endl;
205     cout << "*****  2. 显示联系人  *****" << endl;
206     cout << "*****  3. 删除联系人  *****" << endl;
207     cout << "*****  4. 查找联系人  *****" << endl;
208     cout << "*****  5. 修改联系人  *****" << endl;
209     cout << "*****  6. 清空联系人  *****" << endl;
210     cout << "*****  0. 退出通讯录  *****" << endl;
211     cout << "***************************" << endl;
212 };
213 
214 int main() {
215     // 1. 菜单展示
216     // 2. 人、通讯录结构体创建
217     // 3. 【增】添加联系人,向通讯录中
218     // 4. 打印联系人,从通讯录中
219     // 5. 【查】按名称,查找联系人,从通讯录中
220     // 6. 【删】按名称,删除联系人,从通讯录中,之后的信息依次向前覆盖
221 
222     // 创建通讯录结构体变量
223     Addressbooks abs;
224     // 初始化通讯录中,当前的人员数量
225     abs.m_Size = 0;
226 
227     // 创建 用户选择的选项。
228     int select = 0;
229     while (true)
230     {
231         showMenu();
232         cin >> select;
233         //cout << "您输入的选项为:" << select << endl;
234 
235         switch (select)
236         {
237             case 1:
238             {
239                 cout << "1. 添加联系人" << endl;
240                 // 使用地址传递,才能够修改通讯录结构体中的内容
241                 addPerson(&abs); 
242                 break;
243             }
244             case 2:
245             {
246                 if (panKong(abs.m_Size, " 显示 ") == -1)
247                 {
248                     break;
249                 }
250                 cout << "2. 显示联系人" << endl;
251                 printPerson(&abs);
252                 break;
253             }
254             case 3:
255             {
256                 if (panKong(abs.m_Size, " 删除 ") == -1)
257                 {
258                     break;
259                 }
260                 cout << "3. 删除联系人" << endl;
261                 cout << "请输入所要删除的联系人的姓名:";
262                 string name;
263                 cin >> name;
264                 // 删除操作
265                 delPerson(&abs, name);
266                 break;
267             }
268             case 4:
269             {
270                 if (panKong(abs.m_Size, " 查找 ") == -1)
271                 {
272                     break;
273                 }
274                 cout << "4. 查找联系人" << endl;
275                 cout << "请输入所查人员姓名:";
276                 string name;
277                 cin >> name;
278                 int index = findPerson(&abs, name);
279                 if (index == -1)
280                 {
281                     cout << "没有找到姓名为 " << name << " 的人员信息。" << endl;
282                     break;
283                 }
284                 printPerson_index(&abs, index);
285                 break;
286             }
287             case 5:
288             {
289                 if (panKong(abs.m_Size, " 修改 ") == -1)
290                 {
291                     break;
292                 }
293                 cout << "5. 修改联系人" << endl;
294                 cout << "请输入所要修改的联系人的姓名:" << endl;
295                 string name;
296                 cin >> name;
297                 int index = findPerson(&abs, name);
298                 changePerson_index(&abs, index);
299                 break;
300             }
301             case 6:
302             {
303                 abs.m_Size = 0;
304                 cout << "\t通讯录已清空" << endl;
305                 break;
306             }
307             case 0:
308             {
309                 cout << "系统已退出,欢迎下次使用。" << endl;
310                 system("pause");
311                 return 0;
312             }
313             default:
314                 break;
315             };
316             system("pause");
317             system("cls");
318     };
319 
320     system("pause");
321     return 0;
322 }

 

标签:index,01,cout,C++,name,abs,通讯录,personArray,Size
From: https://www.cnblogs.com/lyj0123/p/17085474.html

相关文章

  • 2009-01-从学校毕业步入社会
     在一间坐满学生的教室中,台上同学正在对自己毕业答辩项目进行介绍,台下第一排坐着打分的老师,这群人正在进行计算机专业的毕业答辩,台下人群中一个叫刘文轩的同学紧张又期盼......
  • 20230201
    Vue组件通信10种方式父组件通过props向子组件传递数据子组件通过$emit向父组件传递数据$emit绑定一个自定义事件,当这个事件被执行的时候就会将参数传递给父组件,而父组......
  • 2018-08-31知识小结
    安装一个本地包pacman-U/path/to/package/package_name-version.pkg.tar.xz对于网络安全来讲,似乎构造数据包是一种必要的技术手段相对于nmap来说,zenmap更适合......
  • 2018-08-29知识小结
    CIDR一个ISP准备把一些C类网络分配给各个用户群,目前已经分配了三个C类网段给用户,如果没有实施CIDR技术。ISP的路由器的路由表中会有三条下连网段的路由条目,并且会把它通告......
  • P4253 [SCOI2015]小凸玩密室
    首先分析题意:给定一棵完全二叉树及其点权与边权现在从某个节点出发,之后遍历整棵二叉树,要求遍历的节点必须联通遍历另一棵子树前先遍历完当前子树访问x之后马上访问......
  • 言简意赅的 Kahn 和 DFS 拓扑排序 (C++实现)
    I邻接表(AdjacentList)实现有向图在类内定义结构体Vertex(顶点).Vertex包含三个成员:data表示某顶点内所存放的内容,类型由模板决定(默认char)indegree表......
  • [C/C++] 简单实现trim函数:删除字符串头尾空格
    记录一下stringtrim(conststring&s){intstart=0,end=s.size()-1;while(start<s.size()&&s[start]==''){start++;}wh......
  • 代码随想录算法训练营Day01| 数组理论基础, 704.二分查找 27.移除元素
    数组理论基础数组下标都是从0开始的。数组内存空间的地址是连续的。(正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素......
  • 【基础知识笔记】014 函数文件的定义和调用
    1.函数文件的基本结构1.1定义函数function输出形参表=函数名(输入形参表)注释说明部分函数体语句end当输出形参多于一个时,应该用方括号括起来,构成一个输出矩阵......
  • AXI4_LITE总线vivado2019.1源码(verilog实现)
    1.AXI_SLAVE源码`timescale1ns/1ps modulemyip_v1_0_S00_AXI# ( //Userstoaddparametershere //Userparametersends //Donotmodifythepa......