零基础开发C#待办事项应用:OOP与文件操作实战
一、引言
在软件开发的世界里,待办事项应用是一个经典且实用的项目,它不仅能帮助我们管理日常任务,还是学习编程基础和实践面向对象编程(OOP)以及文件操作的绝佳案例。本文将带领零基础的技术人员一步步使用 C# 开发一个简单的待办事项应用,深入理解 OOP 概念并掌握文件操作技巧。
二、项目准备
2.1 开发环境搭建
要开始这个项目,你需要安装 Visual Studio。它是一个功能强大的集成开发环境(IDE),能为 C# 开发提供丰富的工具和支持。以下是安装步骤:
- 访问 Visual Studio 官方下载页面。
- 根据你的操作系统选择合适的版本进行下载,这里建议选择 Visual Studio Community 版,它是免费的,适合初学者。
- 运行安装程序,在安装过程中选择“使用 .NET 的桌面开发”工作负载,确保包含 C# 开发所需的组件。
- 完成安装后,打开 Visual Studio。
2.2 创建新项目
在 Visual Studio 中创建一个新的控制台应用程序项目:
- 打开 Visual Studio,选择“创建新项目”。
- 在搜索框中输入“控制台应用”,选择“控制台应用 (.NET Core)”模板。
- 点击“下一步”,为项目命名(例如
TodoApp
),选择项目的保存位置,然后点击“创建”。
三、面向对象编程(OOP)基础
3.1 类的定义
在待办事项应用中,我们需要定义一个 TodoItem
类来表示每个待办事项。类是 OOP 的基本构建块,它封装了数据和行为。以下是 TodoItem
类的定义:
public class TodoItem
{
public int Id { get; set; }
public string Title { get; set; }
public bool IsCompleted { get; set; }
public TodoItem(int id, string title)
{
Id = id;
Title = title;
IsCompleted = false;
}
}
在这个类中,我们定义了三个属性:Id
用于唯一标识待办事项,Title
表示待办事项的标题,IsCompleted
表示该事项是否已完成。构造函数用于初始化 Id
和 Title
,并将 IsCompleted
初始化为 false
。
3.2 类的使用
在 Program.cs
文件的 Main
方法中,我们可以创建 TodoItem
类的实例:
class Program
{
static void Main()
{
TodoItem item = new TodoItem(1, "学习 C#");
Console.WriteLine($"待办事项 ID: {item.Id}, 标题: {item.Title}, 完成状态: {item.IsCompleted}");
}
}
3.3 封装和继承的简单理解
- 封装:
TodoItem
类将数据(属性)和操作(构造函数)封装在一起,外部代码只能通过公共属性和方法来访问和修改这些数据,提高了代码的安全性和可维护性。 - 继承:虽然在这个简单的待办事项应用中暂时不涉及继承,但继承是 OOP 的另一个重要特性,它允许一个类继承另一个类的属性和方法,从而实现代码的复用和扩展。
四、待办事项列表管理
4.1 创建待办事项列表类
我们需要一个类来管理待办事项列表,这里创建一个 TodoList
类:
using System.Collections.Generic;
public class TodoList
{
private List<TodoItem> items = new List<TodoItem>();
private int nextId = 1;
public void AddItem(string title)
{
TodoItem newItem = new TodoItem(nextId, title);
items.Add(newItem);
nextId++;
}
public void DisplayItems()
{
foreach (var item in items)
{
string status = item.IsCompleted ? "已完成" : "未完成";
Console.WriteLine($"ID: {item.Id}, 标题: {item.Title}, 状态: {status}");
}
}
}
在 TodoList
类中,我们使用 List<TodoItem>
来存储所有的待办事项。AddItem
方法用于添加新的待办事项,DisplayItems
方法用于显示所有待办事项的信息。
4.2 在 Main
方法中使用待办事项列表
class Program
{
static void Main()
{
TodoList todoList = new TodoList();
todoList.AddItem("学习 C#");
todoList.AddItem("完成作业");
todoList.DisplayItems();
}
}
运行程序,你将看到添加的待办事项信息被显示出来。
五、文件操作实现数据持久化
5.1 保存待办事项到文件
为了确保待办事项数据在程序关闭后不会丢失,我们需要将数据保存到文件中。以下是在 TodoList
类中添加保存数据到文件的方法:
using System.IO;
using System.Text.Json;
public class TodoList
{
// 之前的代码...
public void SaveToFile(string filePath)
{
string json = JsonSerializer.Serialize(items);
File.WriteAllText(filePath, json);
}
}
在这个方法中,我们使用 JsonSerializer
将 items
列表序列化为 JSON 字符串,然后使用 File.WriteAllText
方法将 JSON 字符串写入指定的文件。
5.2 从文件中加载待办事项
相应地,我们需要一个方法从文件中加载待办事项:
public class TodoList
{
// 之前的代码...
public void LoadFromFile(string filePath)
{
if (File.Exists(filePath))
{
string json = File.ReadAllText(filePath);
items = JsonSerializer.Deserialize<List<TodoItem>>(json);
if (items != null && items.Count > 0)
{
nextId = items[^1].Id + 1;
}
}
}
}
在 LoadFromFile
方法中,我们首先检查文件是否存在,如果存在则读取文件内容并使用 JsonSerializer
将 JSON 字符串反序列化为 List<TodoItem>
。同时,更新 nextId
为最后一个待办事项的 Id
加 1。
5.3 在 Main
方法中使用文件操作
class Program
{
static void Main()
{
string filePath = "todos.json";
TodoList todoList = new TodoList();
todoList.LoadFromFile(filePath);
todoList.AddItem("学习 C#");
todoList.AddItem("完成作业");
todoList.DisplayItems();
todoList.SaveToFile(filePath);
}
}
运行程序后,待办事项数据将被保存到 todos.json
文件中,下次启动程序时可以从该文件中加载数据。
六、项目扩展建议
6.1 添加更多功能
- 标记事项为已完成:在
TodoList
类中添加一个方法,根据待办事项的Id
将其IsCompleted
属性设置为true
。
public void MarkAsCompleted(int id)
{
foreach (var item in items)
{
if (item.Id == id)
{
item.IsCompleted = true;
break;
}
}
}
- 删除待办事项:添加一个方法,根据待办事项的
Id
从列表中删除该事项。
public void DeleteItem(int id)
{
items.RemoveAll(item => item.Id == id);
}
6.2 改进用户交互
- 使用循环和菜单系统,让用户可以选择添加、显示、标记完成、删除等操作,而不是在代码中硬编码操作。例如:
class Program
{
static void Main()
{
string filePath = "todos.json";
TodoList todoList = new TodoList();
todoList.LoadFromFile(filePath);
while (true)
{
Console.WriteLine("1. 添加待办事项");
Console.WriteLine("2. 显示待办事项");
Console.WriteLine("3. 标记事项为已完成");
Console.WriteLine("4. 删除待办事项");
Console.WriteLine("5. 退出");
Console.Write("请选择操作: ");
string choice = Console.ReadLine();
switch (choice)
{
case "1":
Console.Write("请输入待办事项标题: ");
string title = Console.ReadLine();
todoList.AddItem(title);
break;
case "2":
todoList.DisplayItems();
break;
case "3":
Console.Write("请输入要标记为已完成的事项 ID: ");
if (int.TryParse(Console.ReadLine(), out int completeId))
{
todoList.MarkAsCompleted(completeId);
}
break;
case "4":
Console.Write("请输入要删除的事项 ID: ");
if (int.TryParse(Console.ReadLine(), out int deleteId))
{
todoList.DeleteItem(deleteId);
}
break;
case "5":
todoList.SaveToFile(filePath);
return;
}
}
}
}
七、总结
通过这个待办事项应用的开发,我们学习了 C# 中的面向对象编程概念,包括类的定义、使用,以及封装和继承的简单理解。同时,掌握了文件操作的基本技巧,实现了数据的持久化。通过项目扩展建议,你可以进一步完善这个应用,提升自己的编程能力。希望这个实战项目能帮助你更好地理解和运用 C# 编程。