1.问题分析
本实验旨在设计一个小型待办事项的管理系统,以便有效管理用户代办事务的信息,从而安排事项的完成。待办事项主要分为两种状态,0代表未完成、1代表已完成。系统需要存储这些待办事项的信息,并提供打印、修改、删除、新增等功能。
具体需求包括:
- 添加:允许用户添加新的待办事项到列表中;
- 删除:允许用户删除指定位置的待办事项:
- 查找:允许用户查找指定内容的待办事项并返回位置信息;
- 更新: 允许用户更新指定位置的待办事项内容或完成状态;
- 显示:显示待办事项列表与状态;
- 系统退出:结束程序运行。
2.算法流程图
通过对问题描述的分析研究,可以得到各待办事务的内容和状态。封装不同的函数,使用switch与while不断获取用户的操作,从而对待办事务进行添加、删除、修改、更新、遍历与退出系统。系统算法流程如图1所示:
3.具体实现
待办事项系统中使用add_item函数进行对事务的新增核心代码:
void add_item(ToDoList *list, const char *content) {
ToDoItem *new_item = create_item(content, 0);
if (list->head == NULL) {
list->head = new_item;
} else {
ToDoItem *temp = list->head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = new_item;
}
}
通过使用delete_item函数进行对事务进行删除核心代码:
void delete_item(ToDoList *list, int position) {
if (list->head == NULL) {
printf("List is empty.\n");
return;
}
ToDoItem *temp = list->head;
if (position == 1) {
list->head = temp->next;
free(temp);
return;
}
for (int i = 1; temp != NULL && i < position - 1; i++) {
temp = temp->next;
}
if (temp == NULL || temp->next == NULL) {
printf("Position not found.\n");
return;
}
ToDoItem *next = temp->next->next;
free(temp->next);
temp->next = next;
}
通过使用update_item函数更新待办事项列表中指定位置的待办事项项的内容和状态核心代码:
void update_item(ToDoList *list, int position, const char *new_content, int new_status) {
ToDoItem *temp = list->head;
for (int i = 1; temp != NULL && i < position; i++) {
temp = temp->next;
}
if (temp == NULL) {
printf("Position not found.\n");
return;
}
strncpy(temp->content, new_content, MAX_CONTENT_LENGTH);
temp->is_completed = new_status;
}
4.算法测试:
测试数据
- 新增加3个待办事项,遍历查看该事项。
- 查找“背单词”待办事项;
- 删除“背单词”该待办事项,并遍历查看;
- 更新其他两个待办事项的其中一个状态为已完成,遍历查看;
测试结果
增加事项:录入三个待办事项,分别为“背单词”、“学习高数”、“编程”,并遍历查看
查找事项:查找“背单词”待办事项,位置为1
删除“背单词”待办事项,并遍历,可见背单词已经被删除
更新其他两个待办事项的其中一个“编程”状态为已完成,遍历查看,可见在“编程”事务上已经被画上已完成的标签
5.算法分析
系统实现了一个简单的待办事项列表(ToDoList)的功能,包括初始化列表、创建待办事项项、添加、删除、查找、更新和显示待办事项等操作。其中封装的不同作用的函数,便于操作:
-
- initialize_list: 用于初始化待办事项列表,将头指针置为空。
- create_item: 创建一个待办事项项,包括内容和完成状态,并返回该项的指针。
- add_item: 将新创建的待办事项项添加到列表的末尾。
- delete_item: 删除列表中指定位置的待办事项项。
- find_item: 在列表中查找指定内容的待办事项项,并返回其指针。
- update_item: 更新列表中指定位置的待办事项项的内容和状态。
- display_list: 显示整个待办事项列表的内容和状态。