零基础开发C#待办事项应用:OOP与文件操作实战

零基础开发C#待办事项应用:OOP与文件操作实战

一、引言

在软件开发的世界里,待办事项应用是一个经典且实用的项目,它不仅能帮助我们管理日常任务,还是学习编程基础和实践面向对象编程(OOP)以及文件操作的绝佳案例。本文将带领零基础的技术人员一步步使用 C# 开发一个简单的待办事项应用,深入理解 OOP 概念并掌握文件操作技巧。

二、项目准备

2.1 开发环境搭建

要开始这个项目,你需要安装 Visual Studio。它是一个功能强大的集成开发环境(IDE),能为 C# 开发提供丰富的工具和支持。以下是安装步骤:

  1. 访问 Visual Studio 官方下载页面
  2. 根据你的操作系统选择合适的版本进行下载,这里建议选择 Visual Studio Community 版,它是免费的,适合初学者。
  3. 运行安装程序,在安装过程中选择“使用 .NET 的桌面开发”工作负载,确保包含 C# 开发所需的组件。
  4. 完成安装后,打开 Visual Studio。

2.2 创建新项目

在 Visual Studio 中创建一个新的控制台应用程序项目:

  1. 打开 Visual Studio,选择“创建新项目”。
  2. 在搜索框中输入“控制台应用”,选择“控制台应用 (.NET Core)”模板。
  3. 点击“下一步”,为项目命名(例如 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 表示该事项是否已完成。构造函数用于初始化 IdTitle,并将 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);
    }
}

在这个方法中,我们使用 JsonSerializeritems 列表序列化为 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# 编程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值