我们一起做的通讯录在上一篇的文章中已经可以动态添加联系人了,但是还不能根据动态添加的联系人进行查询、修改和删除。
今天我们就一起把剩下的功能全部都实现了,因为有了之前写添加的经验,我们接下来写查询、修改和删除联系人时就会很容易了,因为基本上都是使用for循环语句配合if判断语句来实现的,所以你在写添加的时候只要理解了,学习这一篇文章就会很轻松。
先来看一下最终效果,源码在文章最后。
查询联系人功能
首先我们还是把实现查询的功能放在一个方法中,这里我给它起了一个叫:SelectPerson的名字。
/// /// 查询联系人 /// static void SelectPerson() { Console.WriteLine("请输入你要查找的联系人的姓名"); string name = Console.ReadLine();//接收用户输入信息 ContactPerson person;//声明一个联系人对象,用于存储找到的联系人信息 //我们根据输入的姓名使用for循环语句来从数组中,一个一个的找 for (int i = 0; i < peoples.Length; i++) { if (peoples[i] != null)//判断当前索引下ContactPerson对象是否已经有数据,如果不判断会报错 { /*如果发现数组中联系人的名字跟输入的人名一致 * 程序就会执行if里面的语句并把找到的人显示出来 */ if (peoples[i].Name == name) { Console.WriteLine(""); /*因为我们的peoples是ContactPerson这个类的对象数组 * 所以里面存储的都是ContactPerson的对象。 * 因此我们使用循环找到 */ person = peoples[i]; Console.WriteLine("联系人:{0},性别:{1},电话:{2},地址:{3}", person.Name, person.Sex, person.PhoneNumber, person.Address); } } } Console.WriteLine("");//为了显示好看间隔一行 }
然后我们在程序入口主函数中调用这个查询方法就可以了,是不是很简单~!
注意:ContactPerson person;并没有使用new关键字进行创建对象,这里只是声明了一下,那么对象是什么时候有的呢?是在下面从数组中找到后把数组里的对象付给了person = peoples[i];后就创建对象了。
static void Main(string[] args) { bool Running = true;//用于记录当前系统运行状态,默认启动后自动保持运行。 string input;//声明用于接收用户输入信息的变量 string[,] contacts = new string[10, 10]; do { Menu(); input = Console.ReadLine();//接收用户输入信息 switch (input) { case "1": AddPerson(); //添加联系人 ShowPerson();//显示联系人 break; case "2": SelectPerson();//查询添加的联系人 break; case "3": //后续介绍如何修改 Console.WriteLine("你学的很快,但是不要着急,我们下一篇一起完成修改功能"); break; case "4": //后续介绍如何删除 Console.WriteLine("你学的很快,但是不要着急,我们下一篇一起完成删除功能"); break; case "exit": Running = false; //编程false后退出系统 break; default: Console.WriteLine("请按照提示进行输入"); break; } } while (Running); //Running=true时就一直循环 }
这样查询联系的功能就完成了。
修改联系人信息功能
修改联系人信息的功能其实是把查询和添加这两个功能综合一下,要修改某个联系信息就必须先找到这个联系,然后才能修改。
所以第一步就是先查找要修改的联系人,第二步再把新的联系人信息替换掉老的信息就可以了,在替换前要先提示用户把的联系人信息录入到程序里,这就是我们的添加过程。
我们还是同样的把修改联系人的功能放在一个方法中,给它起个名字叫:UpdatePerson
static void UpdatePerson() { /*第一步先根据输入找到要修改的联系人信息*/ Console.WriteLine("请输入你要修改的联系人的姓名"); string name = Console.ReadLine();//接收用户输入信息 ContactPerson person=new ContactPerson();//创建一个联系人对象,用于存储新的联系人信息 //我们根据输入的姓名使用for循环语句来从数组中,一个一个的找 for (int i = 0; i < peoples.Length; i++) { if (peoples[i] != null)//判断当前索引下ContactPerson对象是否已经有数据,如果不判断会报错 { /*如果发现数组中联系人的名字跟输入的人名一致 * 程序就会执行if里面的语句,添加联系人新信息的代码 */ if (peoples[i].Name == name) { /*开始接收我们输入的联系人新信息*/ Console.WriteLine("请输入新的联系人的姓名"); person.Name = Console.ReadLine();//将用户输入的信息存储到person的Name属性中 Console.WriteLine("请输入新的联系人的性别"); person.Sex = Console.ReadLine(); Console.WriteLine("请输入新的联系人的电话"); person.PhoneNumber = Console.ReadLine(); Console.WriteLine("请输入新的联系人的地址"); person.Address = Console.ReadLine(); peoples[i] = person;//这样就把原有联系人的信息给替换掉了,这样我们就修改成功了 } } } Console.WriteLine("");//为了显示好看间隔一行 }
然后我们把UpdatePerson放到我们的程序启动主函数中。
删除现有联系人信息功能
想要删除现有联系人信息,思路也是先要从数组中找到要删除联系人的信息,然后把它清除掉就可以了。
我们编写删除时还是要把删除联系人这个功能的代码放在一起,然后给它起一个名字叫:DeletePerson
/// /// 删除已有联系人 /// static void DeletePerson() { //首先我们要先找到要删除的联系人信息 Console.WriteLine("请输入你要删除的联系人的姓名"); string name = Console.ReadLine();//接收用户输入信息 //我们根据输入的姓名使用for循环语句来从数组中,一个一个的找 for (int i = 0; i < peoples.Length; i++) { if (peoples[i] != null)//判断当前索引下ContactPerson对象是否已经有数据,如果不判断会报错 { /*如果发现数组中联系人的名字跟输入的人名一致 * 程序就会执行if里面的语句,添加联系人新信息的代码 */ if (peoples[i].Name == name) { peoples[i] = null;//我们把改数组索引下的元素清楚掉,这样就把联系人信息给删除了 } } } Console.WriteLine("");//为了显示好看间隔一行 }
完整功能实现
联系人类
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MailList{ public class ContactPerson { /// /// 联系人姓名 /// public string Name{ set; get; } /// /// 联系人性别 /// public string Sex { set; get; } /// /// 电话号码 /// public string PhoneNumber { set; get; } /// /// 联系地址 /// public string Address { set; get; } }}
主程序代码
/* using是应用命名空间的关键字, * using后面跟的就是被引用进来的命名空间*/using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;/* namespace是命名空间关键字, * MailList是我们创建时起的项目名称*/namespace MailList{ class Program //Program指的是类的名字 { //创建一个用于存储联系人信息的数组,最多只能存储100个联系人 static ContactPerson[] peoples = new ContactPerson[100]; static void Main(string[] args) { bool Running = true;//用于记录当前系统运行状态,默认启动后自动保持运行。 string input;//声明用于接收用户输入信息的变量 string[,] contacts = new string[10, 10]; do { Menu(); input = Console.ReadLine();//接收用户输入信息 switch (input) { case "0": ShowPerson();//显示联系人 break; case "1": AddPerson(); //添加联系人 ShowPerson();//显示联系人 break; case "2": SelectPerson(); break; case "3": UpdatePerson();//修改现有联系人信息 break; case "4": DeletePerson();//删除现有联系人信息 break; case "exit": Running = false; //编程false后退出系统 break; default: Console.WriteLine("请按照提示进行输入"); break; } } while (Running); //Running=true时就一直循环 } /// /// 用于显示在界面上的菜单选项 /// static void Menu() { Console.WriteLine("=========功能菜单========="); Console.WriteLine("按0显示联系人"); Console.WriteLine("按1添加联系人"); Console.WriteLine("按2查找联系人"); Console.WriteLine("按3修改联系人"); Console.WriteLine("按4删除联系人"); Console.WriteLine("输入exit退出程序"); } /// /// 显示现有联系人 /// static void ShowPerson() { for (int i = 0; i < peoples.Length; i++) { ContactPerson contact = peoples[i]; /*由于我们是创建的数组长度是100个,不知道当前数组中实际存放了几个联系人 * 所以需要在这里进行判断一下,只把已经存进去的联系人显示出来。 */ if (contact != null) { Console.WriteLine(""); Console.WriteLine("联系人:{0},性别:{1},电话:{2},地址:{3}", contact.Name, contact.Sex, contact.PhoneNumber, contact.Address); } } Console.WriteLine(""); } /// /// 添加联系人 /// static void AddPerson() { ContactPerson person = new ContactPerson();//使用new关键字创建一个联系人对象 Console.WriteLine("请输入你要添加的联系人的姓名"); person.Name = Console.ReadLine();//将用户输入的信息存储到person的Name属性中 Console.WriteLine("请输入你要添加的联系人的性别"); person.Sex = Console.ReadLine(); Console.WriteLine("请输入你要添加的联系人的电话"); person.PhoneNumber = Console.ReadLine(); Console.WriteLine("请输入你要添加的联系人的地址"); person.Address = Console.ReadLine(); for (int i = 0; i < peoples.Length; i++) { ContactPerson contact = peoples[i]; /*由于我们是创建的数组长度是100个,而我们每次只能同时输入一个联系人 * 我们为了每次都把新入的联系人依次存放到数组里,而不覆盖其他的信息 * 所以要在这里使用if进行判断当前索引下的数组元素有没有值,因为我们用的是 * 自定义的类对象,所以需要判断一下对象是不是为null(空),如果是就证明当前 * 索引中没有存任何数据,就把用户输入的信息存到里面 */ if (contact == null) { peoples[i] = person; Console.WriteLine("联系人已添加,当前有" + (i + 1) + "联系人"); break; } } } /// /// 查询联系人 /// static void SelectPerson() { Console.WriteLine("请输入你要查找的联系人的姓名"); string name = Console.ReadLine();//接收用户输入信息 ContactPerson person;//声明一个联系人对象,用于存储找到的联系人信息 //我们根据输入的姓名使用for循环语句来从数组中,一个一个的找 for (int i = 0; i < peoples.Length; i++) { if (peoples[i] != null)//判断当前索引下ContactPerson对象是否已经有数据,如果不判断会报错 { /*如果发现数组中联系人的名字跟输入的人名一致 * 程序就会执行if里面的语句并把找到的人显示出来 */ if (peoples[i].Name == name) { Console.WriteLine(""); /*因为我们的peoples是ContactPerson这个类的对象数组 * 所以里面存储的都是ContactPerson的对象。 * 因此我们使用循环找到 */ person = peoples[i]; Console.WriteLine("联系人:{0},性别:{1},电话:{2},地址:{3}", person.Name, person.Sex, person.PhoneNumber, person.Address); } } } Console.WriteLine("");//为了显示好看间隔一行 } /// /// 修改联系人 /// static void UpdatePerson() { /*第一步先根据输入找到要修改的联系人信息*/ Console.WriteLine("请输入你要修改的联系人的姓名"); string name = Console.ReadLine();//接收用户输入信息 ContactPerson person=new ContactPerson();//创建一个联系人对象,用于存储找到的联系人信息 //我们根据输入的姓名使用for循环语句来从数组中,一个一个的找 for (int i = 0; i < peoples.Length; i++) { if (peoples[i] != null)//判断当前索引下ContactPerson对象是否已经有数据,如果不判断会报错 { /*如果发现数组中联系人的名字跟输入的人名一致 * 程序就会执行if里面的语句,添加联系人新信息的代码 */ if (peoples[i].Name == name) { /*开始接收我们输入的联系人新信息*/ Console.WriteLine("请输入新的联系人的姓名"); person.Name = Console.ReadLine();//将用户输入的信息存储到person的Name属性中 Console.WriteLine("请输入新的联系人的性别"); person.Sex = Console.ReadLine(); Console.WriteLine("请输入新的联系人的电话"); person.PhoneNumber = Console.ReadLine(); Console.WriteLine("请输入新的联系人的地址"); person.Address = Console.ReadLine(); peoples[i] = person;//这样就把原有联系人的信息给替换掉了,这样我们就修改成功了 } } } Console.WriteLine("");//为了显示好看间隔一行 } /// /// 删除已有联系人 /// static void DeletePerson() { //首先我们要先找到要删除的联系人信息 Console.WriteLine("请输入你要删除的联系人的姓名"); string name = Console.ReadLine();//接收用户输入信息 //我们根据输入的姓名使用for循环语句来从数组中,一个一个的找 for (int i = 0; i < peoples.Length; i++) { if (peoples[i] != null)//判断当前索引下ContactPerson对象是否已经有数据,如果不判断会报错 { /*如果发现数组中联系人的名字跟输入的人名一致 * 程序就会执行if里面的语句,添加联系人新信息的代码 */ if (peoples[i].Name == name) { peoples[i] = null;//我们把改数组索引下的元素清楚掉,这样就把联系人信息给删除了 } } } Console.WriteLine("");//为了显示好看间隔一行 } }}