Skip to content

待办事项数据模型

中等约 30 分钟

你将构建什么

一个待办事项数据模型:用对象表示单个待办(包含标题、完成状态、创建时间),用数组存储所有待办,实现添加、标记完成、删除和列出全部待办的功能。

学习目标

  • 用对象结构化地表示一条待办事项
  • 用数组管理多条待办事项
  • 实现增、删、改、查四种基本操作
  • 理解数据与展示分离的设计思路

前置要求

  • 了解对象(键值对)和数组的概念
  • 了解函数和循环
  • 已完成前三个编程基础项目或具备同等基础

步骤

  1. 1

    设计待办对象结构

    一条待办事项需要哪些字段?至少包含:id(唯一标识)、title(标题)、completed(是否完成,布尔值)、createdAt(创建时间)。用伪代码定义这个对象结构。

    代码
    // 单条待办事项的数据结构
    todo = {
        id: 1,
        title: "学习编程基础",
        completed: false,
        createdAt: "2026-09-19"
    }

    预期结果

    定义了一个包含四个字段的待办对象。

  2. 2

    用数组存储待办列表

    声明一个空数组 todos = [] 来存放所有待办。编写 addTodo(title) 函数:创建一个新的待办对象,自动生成递增的 id,设置 completed 为 false,追加到数组末尾。

    代码
    todos = []
    nextId = 1
    
    function addTodo(title):
        todo = {
            id: nextId,
            title: title,
            completed: false,
            createdAt: today()
        }
        todos.push(todo)
        nextId = nextId + 1
        print("已添加:" + title)

    预期结果

    调用 addTodo(“买菜”) 后,todos 数组中多了一条待办。

  3. 3

    实现标记完成和删除

    编写 toggleTodo(id) 函数:找到对应 id 的待办,把 completed 取反。编写 deleteTodo(id) 函数:从数组中移除对应 id 的待办。两个函数都要先检查 id 是否存在。

    代码
    function toggleTodo(id):
        for todo in todos:
            if todo.id == id:
                todo.completed = not todo.completed
                return
        print("找不到 id 为 " + id + " 的待办")
    
    function deleteTodo(id):
        for i in range(length(todos)):
            if todos[i].id == id:
                todos.remove(i)
                print("已删除待办 " + id)
                return
        print("找不到 id 为 " + id + " 的待办")

    预期结果

    toggleTodo(1) 把第一条待办标记为完成;deleteTodo(1) 移除第一条待办。

  4. 4

    实现列出全部待办

    编写 listTodos() 函数:遍历数组,打印每条待办的 id、状态标记([x] 表示完成,[ ] 表示未完成)和标题。最后统计并显示总数和已完成数。

    代码
    function listTodos():
        if length(todos) == 0:
            print("暂无待办事项")
            return
        completedCount = 0
        for todo in todos:
            mark = "[ ]"
            if todo.completed:
                mark = "[x]"
                completedCount = completedCount + 1
            print(todo.id + ". " + mark + " " + todo.title)
        print("共 " + length(todos) + " 条,已完成 " + completedCount + " 条")

    预期结果

    打印所有待办及完成状态,末尾显示统计信息。

  5. 5

    测试完整流程

    依次调用:添加三条待办、列出全部、标记第二条完成、列出全部、删除第一条、列出全部。确认每一步输出都符合预期。

    代码
    addTodo("学习编程基础")
    addTodo("完成 Phase 7 项目")
    addTodo("复习 Git 命令")
    listTodos()
    toggleTodo(2)
    listTodos()
    deleteTodo(1)
    listTodos()

    预期结果

    每次 listTodos 都正确反映当前状态,增删改查全部正常工作。

自己动手试试

你学到了什么

你掌握了用对象建模现实实体、用数组管理集合数据,并实现了增删改查(CRUD)——这是几乎所有应用的数据操作基础。数据与展示分离的思路也为后续 Web 开发打下基础。

相关资源

相关课程

  • 对象

    用键值对结构化地表示数据。

  • 数组

    用数组管理一组数据。

相关练习

相关工具

相关参考文档

相关错误

相关术语

相关术语

新手友好的术语表用大白话解释编程术语——变量、函数、DOM、Promise 等等。

相关错误

用大白话解释常见错误——什么意思、为什么发生、如何修复。

← 返回主题