溫馨提示×

集合C#案例分析咋做

c#
小樊
82
2024-10-18 17:32:46
欄目: 編程語言

集合(Collection)是C#中非常核心且重要的概念,它們用于存儲和管理多個相同類型的對象。當你需要處理一組對象,并且這些對象有共同的屬性和方法時,集合就是一個非常有用的工具。下面是一個關于集合的C#案例分析,包括需求分析、設計、實現(xiàn)和測試四個部分。

需求分析

假設你正在開發(fā)一個學生管理系統(tǒng),需要存儲和管理學生的信息。每個學生有姓名、年齡、性別和成績等屬性。你需要實現(xiàn)以下功能:

  1. 添加學生信息。
  2. 刪除學生信息。
  3. 查詢學生信息。
  4. 修改學生信息。

設計

根據(jù)需求分析,我們可以選擇合適的集合類型來存儲學生信息。在C#中,常用的集合類型有:

  • List:有序集合,可以包含重復元素。
  • HashSet:無序集合,不包含重復元素。
  • Dictionary<TKey, TValue>:鍵值對集合,其中鍵是唯一的。

在這個案例中,我們可以使用List來存儲學生信息,因為我們需要按照學生的姓名或者學號進行查詢,而List提供了方便的索引器(Indexer)來實現(xiàn)這一點。

首先,定義一個Student類來表示學生信息:

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }
    public double Score { get; set; }
}

然后,我們可以創(chuàng)建一個StudentManager類來管理學生信息:

public class StudentManager
{
    private List<Student> students;

    public StudentManager()
    {
        students = new List<Student>();
    }

    // 添加學生信息
    public void AddStudent(Student student)
    {
        students.Add(student);
    }

    // 刪除學生信息
    public void RemoveStudent(string name)
    {
        students.Remove(student => student.Name == name);
    }

    // 查詢學生信息
    public Student GetStudentByName(string name)
    {
        return students.FirstOrDefault(student => student.Name == name);
    }

    // 修改學生信息
    public void UpdateStudent(Student student)
    {
        var existingStudent = students.FirstOrDefault(s => s.Name == student.Name);
        if (existingStudent != null)
        {
            existingStudent.Age = student.Age;
            existingStudent.Gender = student.Gender;
            existingStudent.Score = student.Score;
        }
    }
}

實現(xiàn)

現(xiàn)在我們已經(jīng)完成了Student類和StudentManager類的設計,接下來我們可以編寫一個簡單的控制臺應用程序來實現(xiàn)這些功能:

class Program
{
    static void Main(string[] args)
    {
        StudentManager studentManager = new StudentManager();

        // 添加學生信息
        studentManager.AddStudent(new Student { Name = "張三", Age = 20, Gender = "男", Score = 90 });
        studentManager.AddStudent(new Student { Name = "李四", Age = 21, Gender = "女", Score = 85 });
        studentManager.AddStudent(new Student { Name = "王五", Age = 19, Gender = "男", Score = 88 });

        // 查詢學生信息
        Console.WriteLine("查詢張三的信息:");
        Student zhangSan = studentManager.GetStudentByName("張三");
        Console.WriteLine($"姓名:{zhangSan.Name},年齡:{zhangSan.Age},性別:{zhangSan.Gender},成績:{zhangSan.Score}");

        // 修改學生信息
        zhangSan.Score = 95;
        studentManager.UpdateStudent(zhangSan);
        Console.WriteLine("更新后的張三信息:");
        Console.WriteLine($"姓名:{zhangSan.Name},年齡:{zhangSan.Age},性別:{zhangSan.Gender},成績:{zhangSan.Score}");

        // 刪除學生信息
        studentManager.RemoveStudent("李四");
        Console.WriteLine("刪除后的學生列表:");
        foreach (var student in studentManager.students)
        {
            Console.WriteLine($"姓名:{student.Name},年齡:{student.Age},性別:{student.Gender},成績:{student.Score}");
        }
    }
}

測試

在上面的控制臺應用程序中,我們已經(jīng)實現(xiàn)了一些基本的集合操作功能。為了確保這些功能的正確性,我們可以編寫一些單元測試來驗證它們的行為是否符合預期。

使用NUnit或xUnit等測試框架,我們可以編寫如下測試用例:

[TestFixture]
public class StudentManagerTests
{
    [Test]
    public void AddStudent_ShouldAddStudentToTheList()
    {
        var studentManager = new StudentManager();
        var student = new Student { Name = "趙六", Age = 22, Gender = "女", Score = 92 };
        studentManager.AddStudent(student);

        Assert.Contains(student, studentManager.students);
    }

    [Test]
    public void RemoveStudent_ShouldRemoveStudentByName()
    {
        var studentManager = new StudentManager();
        studentManager.AddStudent(new Student { Name = "趙六", Age = 22, Gender = "女", Score = 92 });
        studentManager.AddStudent(new Student { Name = "張三", Age = 20, Gender = "男", Score = 90 });

        studentManager.RemoveStudent("張三");

        Assert.DoesNotContain(studentManager.students, s => s.Name == "張三");
    }

    [Test]
    public void GetStudentByName_ShouldReturnNullIfStudentNotFound()
    {
        var studentManager = new StudentManager();
        Assert.IsNull(studentManager.GetStudentByName("不存在"));
    }

    [Test]
    public void UpdateStudent_ShouldUpdateStudentInfo()
    {
        var studentManager = new StudentManager();
        studentManager.AddStudent(new Student { Name = "趙六", Age = 22, Gender = "女", Score = 92 });

        var updatedStudent = new Student { Name = "趙六", Age = 23, Gender = "女", Score = 95 };
        studentManager.UpdateStudent(updatedStudent);

        Assert.AreEqual(updatedStudent.Score, studentManager.GetStudentByName("趙六")?.Score);
    }
}

通過編寫這些測試用例,我們可以確保StudentManager類的集合操作功能是正確的。當然,這只是一個簡單的例子,實際項目中可能需要編寫更多的測試用例來覆蓋更多的邊界情況和異常情況。

0