
功能描述:显示简单的菜单,供用户选择操作
实现步骤:直接cout输出
功能描述:根据用户不同的操作代码选择,进入不同的功能,我们使用switch分支结构进行搭建
实现步骤:用while(ture)循环包涵switch, case 0:时用return 0 ,退出循环,即退出通讯录。
功能描述:实现添加联系人功能,联系人上限为1000人,联系信息包括(姓名、性别、年龄、联系电话、家庭住址)
实现步骤:
功能描述:显示通信录中所有人员信息
实现步骤:判断通讯录中联系人是否为0,不为0则显示联系人所有信息
功能描述:按照姓名删除指定联系人
实现步骤:封装检测联系人是否存在函数,封装删除联系人函数
功能描述:按照姓名查找联系人
实现步骤:判断是否存在此人,存在则输出信息
功能描述:按照姓名重新修改联系人信息
实现步骤:判断是否存在此人,存在则进行修改操作
功能描述:清空通讯录中所有信息
实现步骤:将通信录中联系人数量标志位置为0,做逻辑清空。
1 #include <iostream>
2 #include <string>
3 #define Max 1000
4 using namespace std;
5
6 //通讯录菜单界面
7 void ShowMenu(){
8 cout << "**************************" << endl;
9 cout << "通讯录操作编号" << endl << endl;
10 cout << " 1 : " << "添加联系人" << endl;
11 cout << " 2 : " << "显示联系人" << endl;
12 cout << " 3 : " << "删除联系人" << endl;
13 cout << " 4 : " << "查找联系人" << endl;
14 cout << " 5 : " << "修改联系人" << endl;
15 cout << " 6 : " << "清空联系人" << endl;
16 cout << " 0 : " << "退出通讯录" << endl;
17 cout << "**************************" << endl;
18
19 }
20
21 //设计联系人结构体
22 struct Person{
23 //姓名
24 string m_Name;
25 //性别
26 int m_Sex;
27 //年龄
28 int m_Age;
29 //电话
30 string m_Phone;
31 //住址
32 string m_Addr;
33 };
34
35 //设计通讯录结构体
36 struct Addressbooks{
37 //保存联系人的数组
38 struct Person personArray[Max];
39 //已保存联系人个数
40 int m_Size;
41 };
42
43 //添加联系人函数
44 void addPerson(Addressbooks *abc){
45 if(abc->m_Size > 1000){
46 cout << "通讯录已满,无法再添加!" << endl;
47 }else{
48 //姓名
49 string name;
50 cout << "请输入姓名" << endl;
51 cin >> name;
52 abc->personArray[abc->m_Size].m_Name = name;
53
54 //性别
55 cout << "请输入性别:";
56 cout << " 1--男" << " ";
57 cout << "2--女" << endl;
58 int sex = 0;
59 while(true){
60 cin >> sex;
61 if (sex == 1 || sex == 2)
62 {
63 abc->personArray[abc->m_Size].m_Sex = sex;
64 break;
65 }else{
66 cout << "输入有误,请重新输入:" << endl;
67 }
68 }
69
70 //年龄
71 cout << "请输入年龄:" << endl;
72 int age;
73 cin >> age;
74 abc->personArray[abc->m_Size].m_Age = age;
75
76 //联系电话
77 cout << "请输入联系电话:" << endl;
78 string phone;
79 cin >> phone;
80 abc->personArray[abc->m_Size].m_Phone = phone;
81
82 //家庭住址
83 cout << "请输入家庭住址:" << endl;
84 string address;
85 cin >> address;
86 abc->personArray[abc->m_Size].m_Addr = address;
87
88 //更新通讯录人数
89 abc->m_Size++;
90
91 cout << "添加成功!" << endl;
92
93 //mac系统下无法使用
94 system("pause");//按任意键继续
95 system("cls");//清屏工作
96
97 }
98 }
99
100 //显示联系人函数
101 void showPerson(Addressbooks *abc){
102 if(abc->m_Size == 0){
103 cout << "通讯录中无联系人!" << endl;
104 }else{
105 for(int i = 0;i < abc->m_Size;i++){
106 cout << i+1 << ". ";//显示联系人编号
107 cout << "姓名:" << abc->personArray[i].m_Name << "\t";
108 cout << "性别:" << (abc->personArray[i].m_Sex == 1 ? "男":"女")<< "\t";
109 cout << "年龄:" << abc->personArray[i].m_Age << "\t";
110 cout << "电话:" << abc->personArray[i].m_Phone << "\t ";
111 cout << "家庭住址:" << abc->personArray[i].m_Addr << "\t" << endl;
112
113 }
114 }
115
116 system("pause");//按任意键继续
117 system("cls");//清屏工作
118 }
119
120 //检测联系人是存在函数
121 int isExist(Addressbooks *abc,string name){
122 for(int i = 0;i<abc->m_Size;i++){
123 if(abc->personArray[i].m_Name == name){
124 return i;//找到了返回数组下标
125 }else{
126
127 }
128 }
129 return -1;//未找到
130 }
131
132 //删除指定联系人函数
133 void deletePerson(Addressbooks *abc){
134 cout << "请输入您要删除的联系人" << endl;
135 string name;
136 cin >> name;
137 int ret = isExist(abc,name);//调用检测联系人是否存在函数
138 if(ret != -1){
139 //查到此人,进行删除
140 for(int i = ret;i<abc->m_Size;i++){
141 //数据前移覆盖
142 abc->personArray[i] = abc->personArray[i+1];
143 }
144 abc->m_Size--;
145 cout << "删除成功!" << endl;
146 }else{
147 cout << "查无此人!" << endl;
148 }
149 //清屏
150 system("pause");
151 system("cls");
152 }
153
154 //查找指定联系人信息
155 void findPerson(Addressbooks *abc){
156 cout << "请输入您要查找的联系人姓名:" << endl;
157 string name;
158 cin >> name;
159 //判断联系人是否存在通讯录中
160 int ret = isExist(abc,name);
161 if(ret != -1){
162 cout << "姓名:" << abc->personArray[ret].m_Name << "\t";
163 cout << "性别:" << (abc->personArray[ret].m_Sex == 1 ? "男":"女") << "\t\t";
164 cout << "年龄:" << abc->personArray[ret].m_Age << "\t";
165 cout << "电话:" << abc->personArray[ret].m_Phone << "\t ";
166 cout << "家庭住址:" << abc->personArray[ret].m_Addr << "\t" << endl;
167 }else{
168 cout << "查无此人!" << endl;
169 }
170
171 //清屏
172 system("pause");
173 system("cls");
174 }
175
176 //修改指定联系人信息
177 void modifyPerson(Addressbooks *abc){
178 cout << "请输入您要修改的联系人姓名:" << endl;
179 string name;
180 cin >> name;
181 int ret = isExist(abc,name);
182 if(ret != -1){//修改信息
183 //姓名
184 string name;
185 cout << "请输入姓名" << endl;
186 cin >> name;
187 abc->personArray[ret].m_Name = name;
188
189 //性别
190 cout << "请输入性别:";
191 cout << " 1--男" << " ";
192 cout << "2--女" << endl;
193 int sex = 0;
194 while(true){
195 cin >> sex;
196 if (sex == 1 || sex == 2)
197 {
198 abc->personArray[ret].m_Sex = sex;
199 break;
200 }else{
201 cout << "输入有误,请重新输入:" << endl;
202 }
203 }
204
205 //年龄
206 cout << "请输入年龄:" << endl;
207 int age;
208 cin >> age;
209 abc->personArray[ret].m_Age = age;
210
211 //联系电话
212 cout << "请输入联系电话:" << endl;
213 string phone;
214 cin >> phone;
215 abc->personArray[ret].m_Phone = phone;
216
217 //家庭住址
218 cout << "请输入家庭住址:" << endl;
219 string address;
220 cin >> address;
221 abc->personArray[ret].m_Addr = address;
222 }else{
223 cout << "查无此人!" << endl;
224 }
225 cout << "您修改成功!" << endl;
226 //清屏
227 system("pause");
228 system("cls");
229 }
230
231 //清空所有联系人
232 void clearPerson(Addressbooks *abc){
233 cout << "您确定要清空所有联系人吗?" << endl;
234 cout << "1--确定 " << "2--取消" << endl;
235 int a;
236 while (true){
237 cin >> a;
238 if(a == 1){
239 abc->m_Size = 0;
240 cout << "通讯录已清空!" << endl;
241 system("pause");
242 system("cls");
243 break;
244 }else if(a == 2){
245 cout << "已取消清空通讯录!" << endl;
246 break;
247 }else{
248 cout << "您的输入有误!" << "请选择 1 or 2 输入" << endl;
249 }
250 }
251
252 }
253
254
255
256 int main(){
257
258 //创建通讯录结构体变量
259 Addressbooks abc;
260
261 //初始化通讯录当前人员个数
262 abc.m_Size = 0;
263
264 //用于保存用户输入
265 int select = 0;
266
267 while(true){
268 //菜单调用
269 ShowMenu();
270
271 //用户选择
272 cin >> select;//用户输入
273 switch (select)
274 {
275 case 1://添加联系人
276 addPerson(&abc);//调用添加联系人函数
277 break;
278 case 2://显示联系人
279 showPerson(&abc);
280 break;
281 case 3://删除联系人
282 deletePerson(&abc);
283 break;
284 case 4://查找联系人
285 findPerson(&abc);
286 break;
287 case 5://修改联系人
288 modifyPerson(&abc);
289 break;
290 case 6://清空联系人
291 clearPerson(&abc);
292 break;
293 case 0://退出通讯录
294 cout << "欢迎下次使用。" << endl;
295 return 0;
296 break;
297 default:
298 break;
299 }
300
301 }
302 //清屏
303 system("pause");
304 return 0;
305 }
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我安装了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
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
前言作为一名程序员,自己的本质工作就是做程序开发,那么程序开发的时候最直接的体现就是代码,检验一个程序员技术水平的一个核心环节就是开发时候的代码能力。众所周知,程序开发的水平提升是一个循序渐进的过程,每一位程序员都是从“菜鸟”变成“大神”的,所以程序员在程序开发过程中的代码能力也是根据平时开发中的业务实践来积累和提升的。提高代码能力核心要素程序员要想提高自身代码能力,尤其是新晋程序员的代码能力有很大的提升空间的时候,需要针对性的去提高自己的代码能力。提高代码能力其实有几个比较关键的点,只要把握住这些方面,就能很好的、快速的提高自己的一部分代码能力。1、多去阅读开源项目,如有机会可以亲自参与开源