//数组的增删查改
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace 数组的增删查改_Person
{
public class Person {
public string name;
public int age;
public Person(string name, int age) {
this.name = name;
this.age = age;
}
}
/// <summary>
/// 单例: 整个项目中这个类只能有一个对象
/// 适用范围是管理类,不能存在多个对象的类
/// </summary>
public class PersonManager{
private static PersonManager instance;//PersonManager的唯一对象
public static PersonManager Instance{//静态属性,方便类名调用,因为外界不能进行new对象,不能通过对象进行访问
get {
if (instance == null) {//第一次Instance被使用时,instance为null ,需要new那个唯一的对象
instance = new PersonManager();
}
return instance; //返回给调用的地方,可以通过这个对象调用本类中的Public方法和字段、属性
}
}
private Person[] persons;//当前教室的座位
public int count; //当前教室的人数
private PersonManager() {//构造函数私有了,外界不能创建PersonManager对象
persons = new Person[5];//new 了一个数组,数组的元素都为null
}
/// <summary>
/// 增
/// 将同学添加到班级人员数组
/// </summary>
/// <param name="p"></param>
public void AddPerson(Person p) {
for (int i = 0; i < persons.Length; i++)
{
if (persons[i] == null) {
persons[i] = p;
count++;
return;//找到桌位了,就停止查找座位
}
}
Console.WriteLine("没有空位置了");
//没有空位置了,需要教室座椅不够了 拓展一倍
ExtendPerson(p);
}
/// <summary>
/// 拓展座位数量
/// </summary>
/// <param name="p"></param>
private void ExtendPerson(Person p) {
int num = persons.Length;//记录之前座位数
Person[] newPersons = new Person[num * 2];//生成一个新的数组 长度是之前的两倍
//把之前班级的人拷贝到新数组
for (int i = 0; i < persons.Length; i++)
{
newPersons[i] = persons[i];
}
persons = newPersons;//新数组引用给persons,就是对persons进行了长度扩展
AddPerson(p); //重新把最后加进来的人安排座位
}
/// <summary>
/// 删
/// </summary>
/// <param name="p"></param>
public void DeletePerson(Person p) {
for (int i = 0; i < persons.Length; i++)
{
//当查找到我们要删除的对象时
if (persons[i] == p) {
persons[i] = null;//将当前数组置为null;
count--; //只有到了这个地方才说明真的删除了一个对象,拥有的数量减一
//让被删除的元素后面的数据向前串一个位置
for (int j = i; j < persons.Length - 1; j++)// 5 index:2 删
{
persons[j] = persons[j+1 ];
//最后一个位置置为null
if (j + 1 == persons.Length- 1) {
persons[j + 1] = null;
}
}
}
}
}
/// <summary>
/// 查
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
public Person SearchPerson(Person p) {
for (int i = 0; i < persons.Length; i++)
{
if (persons[i] == p) {
return persons[i];
}
}
Console.WriteLine("没有找到"+p.name);
return null;
}
/// <summary>
/// 改
/// </summary>
/// <param name="p"></param>
public void ChangePerson(Person p) {
for (int i = 0; i < persons.Length; i++)
{
if (persons[i] == p) {
p.name = "英雄";
}
}
}
/// <summary>
/// TODO 将一个新人插入到数组中的一个固定位置
/// </summary>
/// <param name="p"></param>
/// <param name="index"></param>
public void InsertPerson(Person p,int index) {
}
/// <summary>
/// 点名
/// </summary>
public void CheckName() {
for (int i = 0; i < persons.Length; i++)
{
if (persons[i] != null) {
Console.WriteLine("{0},{1}岁了,到",persons[i].name,persons[i].age);
}
}
}
}
//对户口的增、删、查、改、插入
class Program
{
static void Main(string[] args)
{
Person p1 = new Person("张三", 17);
PersonManager.Instance.AddPerson(p1);
Person p2 = new Person("张三", 17);
PersonManager.Instance.AddPerson(p2);
Person p3 = new Person("张三", 17);
PersonManager.Instance.AddPerson(p3);
Person p4 = new Person("王五", 17);
PersonManager.Instance.AddPerson(p4);
Person p5 = new Person("赵六", 17);
PersonManager.Instance.AddPerson(p5);
Person p6 = new Person("李四", 17);
PersonManager.Instance.AddPerson(p6);
PersonManager.Instance.CheckName();
PersonManager.Instance.DeletePerson(p5);
Console.WriteLine("-----------------------count:"+PersonManager.Instance.count);
PersonManager.Instance.CheckName();
PersonManager.Instance.DeletePerson(p4);
Console.WriteLine("-----------------------count:" + PersonManager.Instance.count);
PersonManager.Instance.CheckName();
Person p = PersonManager.Instance.SearchPerson(p5);
if(p != null)
Console.WriteLine("name:"+p.name);
PersonManager.Instance.ChangePerson(p6);
Console.WriteLine("-----------------------count:" + PersonManager.Instance.count);
PersonManager.Instance.CheckName();
ArrayList al = new ArrayList();
Console.ReadKey(true);
}
}
}