草庐IT

C++实例1--通讯录管理系统

LYH-win 2023-03-28 原文

C++实例1--通讯录管理系统

  1 #include<iostream>
  2 #include<string>
  3 
  4 using namespace std;
  5 
  6 #define MAX 1000  // 最大人数
  7 
  8 // 通讯录管理系统
  9 
 10 // 主菜单
 11 void showMenu() {
 12 
 13     cout << "************************************" << endl;
 14     cout << "**********  1、添加联系人  *********" << endl;
 15     cout << "**********  2、显示联系人  *********" << endl;
 16     cout << "**********  3、删除联系人  *********" << endl;
 17     cout << "**********  4、查找联系人  *********" << endl;
 18     cout << "**********  5、修改联系人  *********" << endl;
 19     cout << "**********  6、清空联系人  *********" << endl;
 20     cout << "**********  0、退出通讯录  *********" << endl;
 21     cout << "************************************" << endl;
 22 }
 23 
 24 // 联系人结构体
 25 struct Person {
 26     string m_Name;        // 姓名
 27     int m_Sex;            // 性别:1男,2女
 28     int m_Age;            // 年龄
 29     string m_Phone;        // 手机
 30     string m_Addr;        // 住址
 31 };
 32 
 33 // 通讯录结构体
 34 struct Addressbooks {
 35     struct Person personArray[MAX];  // 通讯录中保存的联系人数组
 36     int  m_Size;  // 通讯录中人员个数
 37 };
 38 
 39 // 添加联系人
 40 void addPerson(Addressbooks* abs) {
 41     // 判断通讯录是否已满,如果满了就不再添加
 42     if (abs->m_Size == MAX) {
 43         cout << "通讯录已满,无法添加!" << endl;
 44         return;
 45     }
 46     else {
 47         // 添加具体联系人
 48 
 49         // 姓名
 50         string name;
 51         cout << "请输入姓名:" << endl;
 52         cin >> name;
 53         abs->personArray[abs->m_Size].m_Name = name;
 54 
 55         // 性别
 56         int sex = 0;
 57         cout << "请输入性别:" << endl;
 58         cout << "1 --- 男     2 --- 女" << endl;
 59         while (true)
 60         {
 61             // 如果输入的是1或2可以退出循环,因为输入的是正确值
 62             // 如果输入有误,重新输入
 63             cin >> sex;
 64             if (sex == 1 || sex == 2) {
 65                 abs->personArray[abs->m_Size].m_Sex = sex;
 66                 break;
 67             }
 68             cout << "输入有误,请重新输入!" << endl;
 69         }
 70 
 71         // 年龄
 72         cout << "请输入年龄:" << endl;
 73         int age = 0;
 74         cin >> age;
 75         abs->personArray[abs->m_Size].m_Age = age;
 76 
 77         // 手机号
 78         cout << "请输入电话:" << endl;
 79         string phone;
 80         cin >> phone;
 81         abs->personArray[abs->m_Size].m_Phone = phone;
 82 
 83         // 地址
 84         cout << "请输入住址:" << endl;
 85         string addr;
 86         cin >> addr;
 87         abs->personArray[abs->m_Size].m_Addr = addr;
 88 
 89         // 更新通讯录人数
 90         abs->m_Size++;
 91 
 92         cout << "添加成功!" << endl;
 93 
 94         system("pause");
 95         system("cls");
 96 
 97     }
 98 }
 99 
100 // 显示联系人
101 void showPerson(Addressbooks* abs) {
102     // 判断通讯录中人数是否为0,如果为0,提示记录为空
103     // 如果不为0,显示记录的联系人信息
104     if (abs->m_Size == 0) {
105         cout << "当前记录为空" << endl;
106     }
107     else
108     {
109         for (int i = 0; i < abs->m_Size; i++) {
110             cout << "姓名:" << abs->personArray[i].m_Name << "\t";
111             cout << "性别:" << (abs->personArray[i].m_Sex == 1 ? "" : "") << "\t";
112             cout << "年龄:" << abs->personArray[i].m_Age << "\t";
113             cout << "电话:" << abs->personArray[i].m_Phone << "\t";
114             cout << "住址:" << abs->personArray[i].m_Addr << endl;
115         }
116     }
117 
118     system("pause");
119     system("cls");
120 }
121 
122 // 删除联系人
123 // 1.检测联系人是否存在
124 // 存在,返回联系人在数组中的位置,不存在返回-1
125 int isExit(Addressbooks* abs, string name) {
126     // 参数解释:参数1:通讯录; 参数2:对比姓名
127     for (int i = 0; i < abs->m_Size; i++) {
128         // 寻找用户输入的姓名
129         if (abs->personArray[i].m_Name == name) {
130             return i;  // 找到了,返回该联系人在数组中的下标编号
131         }
132     }
133     return -1;  // 遍历完,没找到,返回-1;
134 }
135 
136 // 2.删除指定联系人信息
137 void deletePerson(Addressbooks* abs) {
138     cout << "请输入要删除的联系人姓名:" << endl;
139     string name;
140     cin >> name;
141 
142     // ret == -1 未查到; ret != -1 查到了
143     int ret = isExit(abs, name);
144 
145     if (ret != -1) {
146         // 查到了,进行删除
147         for (int i = ret; i < abs->m_Size; i++) {
148             // 数据前移,实现删除
149             abs->personArray[i] = abs->personArray[i + 1];
150         }
151         abs->m_Size--;  // 更新通讯录的人数
152         cout << "删除成功!" << endl;
153     }
154     else
155     {
156         cout << "查无此人!" << endl;
157     }
158     system("pause");
159     system("cls");
160 }
161 
162 // 查找联系人
163 void findPerson(Addressbooks* abs) {
164     cout << "请输入查找的联系人姓名:" << endl;
165     string name;
166     cin >> name;
167 
168     // 判断指定的联系人是否在通讯录中
169     int ret = isExit(abs, name);
170     if (ret != -1) {  // 找到联系人
171         cout << "姓名:" << abs->personArray[ret].m_Name << "\t";
172         cout << "性别:" << (abs->personArray[ret].m_Sex == 1 ? "" : "") << "\t";
173         cout << "年龄:" << abs->personArray[ret].m_Age << "\t";
174         cout << "电话:" << abs->personArray[ret].m_Phone << "\t";
175         cout << "住址:" << abs->personArray[ret].m_Addr << endl;
176     }
177     else  // 找不到联系人
178     {
179         cout << "查无此人!" << endl;;
180     }
181 
182     system("pause");
183     system("cls");
184 
185 }
186 
187 // 修改联系人
188 void modifyPerson(Addressbooks* abs) {
189     cout << "请输入要修改的联系人姓名:" << endl;
190     string name;
191     cin >> name;
192 
193     // 查找要修改的联系人是否存在
194     int ret = isExit(abs, name);
195 
196     if (ret != -1) {  // 找到了联系人
197         // 姓名
198         string name;
199         cout << "请输入姓名:" << endl;
200         cin >> name;
201         abs->personArray[ret].m_Name = name;
202 
203         // 性别
204         int sex = 0;
205         cout << "请输入性别:" << endl;
206         cout << "1 --- 男     2 --- 女" << endl;
207         while (true)
208         {
209             // 如果输入的是1或2可以退出循环,因为输入的是正确值
210             // 如果输入有误,重新输入
211             cin >> sex;
212             if (sex == 1 || sex == 2) {
213                 abs->personArray[ret].m_Sex = sex;
214                 break;
215             }
216             cout << "输入有误,请重新输入!" << endl;
217         }
218 
219         // 年龄
220         cout << "请输入年龄:" << endl;
221         int age = 0;
222         cin >> age;
223         abs->personArray[ret].m_Age = age;
224 
225         // 手机号
226         cout << "请输入电话:" << endl;
227         string phone;
228         cin >> phone;
229         abs->personArray[ret].m_Phone = phone;
230 
231         // 地址
232         cout << "请输入住址:" << endl;
233         string addr;
234         cin >> addr;
235         abs->personArray[ret].m_Addr = addr;
236 
237         cout << "修改成功!" << endl;
238     }
239     else {  // 未找到联系人
240         cout << "查无此人!" << endl;
241     }
242     system("pause");
243     system("cls");
244 }
245 
246 // 清空联系人
247 void cleanPerson(Addressbooks* abs) {
248     abs->m_Size = 0;
249     cout << "通讯录已清空" << endl;
250     system("pause");
251     system("cls");
252 }
253 
254 int main() {
255 
256     // 创建通讯录结构体变量
257     Addressbooks abs;
258 
259     // 初始化通讯录中当前人员个数
260     abs.m_Size = 0;
261 
262     // 创建用户选择变量
263     int select = 0;
264 
265     while (true)
266     {
267         // 主菜单调用
268         showMenu();
269 
270         // 功能选择
271         cin >> select;
272 
273         switch (select)
274         {
275         case 1:  // 1、添加联系人
276             addPerson(&abs);  // ;利用地址传递,可以修饰实参
277             break;
278         case 2:  // 2、显示联系人
279             showPerson(&abs);
280             break;
281         case 3:  // 3、删除联系人
282             deletePerson(&abs);
283             break;
284         case 4:  // 4、查找联系人
285             findPerson(&abs);
286             break;
287         case 5:  // 5、修改联系人
288             modifyPerson(&abs);
289             break;
290         case 6:  // 6、清空联系人
291             cleanPerson(&abs);
292             break;
293         case 0:  // 0、退出通讯录
294             cout << "欢迎下次使用!" << endl;
295             system("pause");
296             return 0;
297             break;
298         default:
299             break;
300         }
301     }
302     
303     system("pause");
304 
305     return 0;
306 
307 }

 

参考《黑马程序员》C++教程

有关C++实例1--通讯录管理系统的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  3. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  4. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

  5. ruby-on-rails - RSpec:避免使用允许接收的任何实例 - 2

    我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_

  6. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  7. ruby-on-rails - 使用 ruby​​ 将多个实例变量转换为散列的更好方法? - 2

    我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。

  8. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  9. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  10. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

随机推荐