banner
[面包]MrTwoC

[面包]MrTwoC

你好,欢迎来到这个基于区块链的个人博客 名字:面包 / MrTwoc 爱好:跑步(5/10KM)、拿铁咖啡、游戏(Minecraft、Warframe、CS) 兴趣方向:Rust、区块链、图形学、游戏设计与开发
bilibili
steam
email
github

[1]Todo-rs

命令行版的 TodoList 工具#

项目地址:https://github.com/MrTwoc/todo-rs

image

用 rust 语言实现的一个基于控制台的 todolist,主要用于对事件的记录 & 打卡,目前实现了基础的增删改查功能。
后续计划用 [表格化输出 + emoji 符号] 来美化一下输出结果,比如:
✅🟢【已经完成】 🟡⏸️【待定】

逻辑处理#

添加=>
 command_add()=>接收用户输入,判断第一个参数是否为add,然后判断参数长度,参数<3 则提示参数不足,
然后调用Target::add()=>方法接收四个参数,包括<任务名称><截止日期>[描述][分组],[]为可选参数,
所以只需要输入任务名和日期就能添加任务,其他参数都会被设默认值
添加之前会先遍历文件中所有任务的id,然后 +1 给新的任务,随后写入json
                                           
删除=>
将json文件读取出来,定义个变量存储长度,调用.retain方法,作用=>
遍历tasks向量中的每个元素
对每个元素执行闭包|task| task.id != Some(id)
保留闭包返回true的元素,移除返回false的元素
然后比较删除前和删除后的长度,小于前长度就删除成功了。
                                           
查询=>
读取json然后遍历

编辑=>
接收用户输入,判断指令长度<3 或者 (指令长度 - 1) % 2 == 0 则会提示不匹配,因为第0、1是edit和任务ID,
2是字段名 2+1则为修改内容,所以能这样匹配,然后进入Target::edit()=>方法
判断id是否合法与存在,然后按id取出该任务,进入for循环,定义:字段和参数俩变量,进入match匹配字段,
符合后修改,然后写入json文件
// 获取可变任务引用
        let task = &mut tasks[task_index];

        // 解析并应用字段更新(从索引1开始,每两个参数为一组)
        for i in (2..args.len()).step_by(2) {
            let field = args[i];
            let value = args[i + 1];

            // 任务状态可用指令单独修改
            match field {
                "name" => task.target_name = value.to_string(),
                "deadline" => task.deadline = value.to_string(),
                "description" => task.description = Some(value.to_string()),
                "group" => task.group = Some(value.to_string()),

                _ => eprintln!("不支持的字段: {}", field),
            }
        }

项目 TODO#

  1. 添加任务的完成类型,例如 ——
    每年 | 月 | 周 | 日 | 累计 X 次 | 指定日期前完成
  2. 应用可以在桌面托盘中或者后台运行
  3. 多窗口,例如查看指定组的任务详情,就会在新窗口中显示
  4. 关键词查找,可以按关键词查找任务。
  5. 批量操作:输入一次指令,编辑多个任务,比如批量完成任务。
  6. 操作记录,完成记录:记录用户的每条成功执行的命令,以及用时间戳的形式记录任务完成时间,以及可以在应用内查看记录
  7. 性能优化:目前内存占用 12MB 左右觉得有些高,打算尽可能的降低资源占用。
  8. ⏸️任务日历:可以输出当月日历
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。