集合(Collection)是C#中非常核心且重要的概念,它們用于存儲和管理多個相同類型的對象。當你需要處理一組對象,并且這些對象有共同的屬性和方法時,集合就是一個非常有用的工具。下面是一個關于集合的C#案例分析,包括需求分析、設計、實現和測試四個部分。
假設你正在開發一個學生管理系統,需要存儲和管理學生的信息。每個學生有姓名、年齡、性別和成績等屬性。你需要實現以下功能:
根據需求分析,我們可以選擇合適的集合類型來存儲學生信息。在C#中,常用的集合類型有:
在這個案例中,我們可以使用List
首先,定義一個Student類來表示學生信息:
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public string Gender { get; set; }
public double Score { get; set; }
}
然后,我們可以創建一個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;
}
}
}
現在我們已經完成了Student類和StudentManager類的設計,接下來我們可以編寫一個簡單的控制臺應用程序來實現這些功能:
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}");
}
}
}
在上面的控制臺應用程序中,我們已經實現了一些基本的集合操作功能。為了確保這些功能的正確性,我們可以編寫一些單元測試來驗證它們的行為是否符合預期。
使用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類的集合操作功能是正確的。當然,這只是一個簡單的例子,實際項目中可能需要編寫更多的測試用例來覆蓋更多的邊界情況和異常情況。