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++教程
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如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个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
我正在处理旧代码的一部分。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_
我安装了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
我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作: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作为该等式的第二部分,但这仍然是主要问题。
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt