草庐IT

NO.1 通讯录管理系统+源代码(C++)

Chen Yuansong 2023-04-15 原文

 

一、菜单

  功能描述:显示简单的菜单,供用户选择操作

  实现步骤:直接cout输出

二、退出功能

  功能描述:根据用户不同的操作代码选择,进入不同的功能,我们使用switch分支结构进行搭建

  实现步骤:用while(ture)循环包涵switch, case 0:时用return 0 ,退出循环,即退出通讯录。

三、添加联系人

  功能描述:实现添加联系人功能,联系人上限为1000人,联系信息包括(姓名、性别、年龄、联系电话、家庭住址)

  实现步骤:

    • 设计联系人结构体
    • 设计通讯录结构体
    • main函数中创建通讯录
    • 封装添加联系人函数

四、显示联系人

  功能描述:显示通信录中所有人员信息

  实现步骤:判断通讯录中联系人是否为0,不为0则显示联系人所有信息

五、删除联系人

  功能描述:按照姓名删除指定联系人

  实现步骤:封装检测联系人是否存在函数,封装删除联系人函数

六、查找联系人

  功能描述:按照姓名查找联系人

  实现步骤:判断是否存在此人,存在则输出信息

七、修改联系人

  功能描述:按照姓名重新修改联系人信息

  实现步骤:判断是否存在此人,存在则进行修改操作

八、清空联系人

  功能描述:清空通讯录中所有信息

  实现步骤:将通信录中联系人数量标志位置为0,做逻辑清空。

 

九、完整代码:(vs coed 编写)

  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 }

 

有关NO.1 通讯录管理系统+源代码(C++)的更多相关文章

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

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

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在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

  4. ruby-on-rails - 浏览 Ruby 源代码 - 2

    我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru

  5. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  6. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  7. 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

  8. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码: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

  9. 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

  10. 程序员如何提高代码能力? - 2

    前言作为一名程序员,自己的本质工作就是做程序开发,那么程序开发的时候最直接的体现就是代码,检验一个程序员技术水平的一个核心环节就是开发时候的代码能力。众所周知,程序开发的水平提升是一个循序渐进的过程,每一位程序员都是从“菜鸟”变成“大神”的,所以程序员在程序开发过程中的代码能力也是根据平时开发中的业务实践来积累和提升的。提高代码能力核心要素程序员要想提高自身代码能力,尤其是新晋程序员的代码能力有很大的提升空间的时候,需要针对性的去提高自己的代码能力。提高代码能力其实有几个比较关键的点,只要把握住这些方面,就能很好的、快速的提高自己的一部分代码能力。1、多去阅读开源项目,如有机会可以亲自参与开源

随机推荐