我们在前面讲解了数组的概念和使用方法,今天我们就用数组来吧我们之前的程序重新给优化一下,让它更像我们平时使用的软件,这次优化我们会用到创建类和类中的属性这两个知识。
关于类和属性的知识我在《面向对象编程从小白到王者系列-认识对象》中已经初步讲过,这里就不在进行过多的阐述了,不理解或是忘记的小伙伴可以再看看(海燕呐~你可长点心吧)
首先我对之前的代码进行了第一次的提取和封装,把功能相同或是关联性较强的代码放在了一个方法中(说白了就是日常生活中发现屋里乱,就给整理了一下,把垃圾扔了,把书放在该放地方,把水杯放在该放的地方),这样做的目的就是使我们的代码(屋子)看起来一目了然,整整齐齐赏析悦目,当然也方便我们后续修改和他人阅读和理解。
文章最后有源码,可以下载后使用vs2019打开,可以在代码上设置一个断点,进行调试运行,按F11进行逐步句代码运行来看代码运行的方式。
第一步:我们先创建联系人的类,用于后面创建联系人对象和数组使用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MailList
{
public class ContactPerson
{
/// <summary>
/// 联系人姓名
/// </summary>
public string Name{ set; get; }
/// <summary>
/// 联系人性别
/// </summary>
public string Sex { set; get; }
/// <summary>
/// 电话号码
/// </summary>
public string PhoneNumber { set; get; }
/// <summary>
/// 联系地址
/// </summary>
public string Address { set; get; }
}
}
第二步:我把用于显示功能提示用户如何操作的代码放在了一起并起了个方法名叫:Menu
/// <summary>
/// 用于显示在界面上的菜单选项
/// </summary>
static void Menu()
{
Console.WriteLine("=========功能菜单=========");
Console.WriteLine("按1添加联系人");
Console.WriteLine("按2查找联系人");
Console.WriteLine("按3修改联系人");
Console.WriteLine("按4删除联系人");
Console.WriteLine("输入exit退出程序");
}
第三步:我把用于我们添加联系人的相关操作也放在了一起,同样起了个名字叫:AddPerson
/// <summary>
/// 添加联系人
/// </summary>
static void AddPerson()
{
//创建一个对象,用于接收用户输入的对应信息
ContactPerson person = new ContactPerson();
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;
}
}
}
第四步:我把用于显示我们联系人信息的代码也放在了一起,起了一个名字叫:ShowPerson
/// <summary>
/// 显示现有联系人
/// </summary>
static void ShowPerson()
{
for (int i = 0; i < peoples.Length; i++)
{
ContactPerson contact = peoples[i];
/*由于我们是创建的数组长度是100个,不知道当前数组中实际存放了几个联系人
* 所以需要在这里进行判断一下,只把已经存进去的联系人显示出来。
*/
if (contact != null)
{
Console.WriteLine("");//为了显示好看,空了一行
//{数字}这种方式是一种占位显示方式,{0}对应的是contact.Name,{1}对应的是contact.Sex,依次类推。
Console.WriteLine("联系人:{0},性别:{1},电话:{2},地址:{3}", contact.Name, contact.Sex, contact.PhoneNumber, contact.Address);
}
}
Console.WriteLine("");//为了显示好看,空了一行
}
最后我们来一起看看全部代码:
/* 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 name ;//声明用于接收用户输入信息的变量
string[,] contacts =new string[10,10];
do
{
Menu();
name = Console.ReadLine();//接收用户输入信息
switch (name)
{
case "1":
AddPerson(); //添加联系人
ShowPerson();//显示联系人
break;
case "2":
//下一篇介绍如何查找
Console.WriteLine("你学的很快,但是不要着急,我们下一篇一起完成查找功能");
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时就一直循环
}
/// <summary>
/// 用于显示在界面上的菜单选项
/// </summary>
static void Menu()
{
Console.WriteLine("=========功能菜单=========");
Console.WriteLine("按1添加联系人");
Console.WriteLine("按2查找联系人");
Console.WriteLine("按3修改联系人");
Console.WriteLine("按4删除联系人");
Console.WriteLine("输入exit退出程序");
}
/// <summary>
/// 显示现有联系人
/// </summary>
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("");
}
/// <summary>
/// 添加联系人
/// </summary>
static void AddPerson()
{
ContactPerson person = new ContactPerson();
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;
}
}
}
}
}
我们对比之前使用很多输出语句来模拟我们现在的功能时是不是这种方式更容易理解,使代码更容易读懂。
现在我们来一起看看最后的实现效果: