ToDo List App是一种应用程序,通常用于维护我们的日常任务或列出我们必须做的所有事情,其中最重要的任务在列表的顶部,最不重要的任务在底部的列表。这对计划我们的日常时间表很有帮助。我们可以随时添加更多任务,并删除已完成的任务。
特点:
在此版本的ToDo列表中,用户将获得四个选项:
- 在“待办事项列表”应用中创建(添加)新任务或添加新的待办事项。
- 查看所有任务或查看添加到应用程序中的所有待办事项。
- 从待办事项列表中删除任何待办事项。
- 从应用程序退出。
方法:
该程序涉及一些基本概念,例如变量,数据类型,结构,字符串,循环,在任意位置的链表中插入节点,在任意位置的链表中删除节点,遍历链表等。构造ToDo应用程序如下:
- 初始屏幕将显示应用程序和开发人员的名称:使用printf()函数(用于打印(“字符,字符串,浮点数,整数,八进制和十六进制值”的预定义函数)内部的一些语句来完成此操作。和一些预定义的功能。
- 第二个屏幕将向用户显示四个选项的列表,即“添加”,“删除”,“查看”和“退出”:这是使用Switch-cases实现的。
- 根据用户选择,将显示相应的函数屏幕:创建每个任务的功能。由于C语言是基于函数或过程的语言,因此我们应该为特定作业创建函数。
- 所有待办事项都将写入链接列表节点的数据部分内。链表应该全局声明,这样,如果函数执行结束,数据(我们的待办事项)将不会丢失。通过全局声明,所有函数都可以使用链表中的相同数据。
以下是上述程序的功能:
- 启动画面:由应用程序和开发人员的名称组成。该代码编写在名为interface()的函数内:
- interface()函数包含一些printf语句和一个称为system()的预定义函数。
- system()函数是C / C++标准库的一部分。它用于传递可以在命令处理器或操作系统终端中执行的命令,并在命令完成后最终返回该命令。
- 系统(“颜色4F”)将更改控制台的颜色,即背景(4)和控制台上的文本,即前景(F)。
- 系统(“ pause”)将暂停屏幕,因此用户将收到一条消息:按任意键继续。 。 。
- main()函数:使用简单 在无限的while循环内切换大小写,以便用户每次都能做出选择,并在printf()函数的帮助下以及使用scanf()函数获取用户输入的情况下提供选择。根据输入,将执行特定情况并调用所需的函数。
- 链表:名为Todo的链表是使用C的结构概念制成的,并且使用typedef将其重命名为Todo。此链接列表包括三个部分–
- 数据部分制成字符数组,即char buffer [101] 。 ToDos可能很大,因此将数组的大小声明为101。
- 节点部分包含下一个节点的地址,即* next。
- 一个整数类型的变量(整数),该变量将考虑节点的数量,并有助于在进一步定义的函数中对ToDos进行编号。
- 就像在单链列表中一样,开始指针(在这种情况下为todo * start)用于获取第一个节点的地址,该指针被声明并在其中保留NULL(最初指向NULL)。
- seetodo()函数:此函数编码四个概念。这些如下:
- 系统(“ cls”):清除屏幕或控制台。如果有人想查看用户以前完成的所有操作或输入,则可以避免这种情况。
- 创建结构变量的对象,即* temp,以访问链表结构。此临时变量将指向初始启动。如果开始等于NULL,我们可以输出Empty ToDo。这意味着我们的列表为空。
- 使用简单的链表遍历概念,即逐个节点打印数据部分,直到最后一个节点,我们可以打印所有ToDos 。 while循环将执行,直到最后一个节点,printf()的内部,将打印待办事项的编号,并提出()函数将打印这是在字符的字符串的形式的数据。 fflush()是预定义的函数,其目的是清除(或刷新)输出缓冲区并将缓冲的数据移至控制台。
- 最后,使用系统(“暂停”)暂停屏幕,直到用户按下任意键。
- createtodo()函数:它包含一个切换案例,询问用户是否要添加ToDo或不使用字符变量(字符c;)。使用printf()询问用户有关另一个输入的信息,并使用scanf()输入用户的选择。
现在,使用在链表的末尾添加节点的概念来添加节点。在这里两种情况是可能的–- 如果不存在任何节点,则在这种情况下,起始点将指向NULL。
- 如果存在某些节点,在这种情况下,起点将指向第一个节点,并使用指向节点的指针(* add)遍历直到最后一个节点(指针部分中包含NULL)。在这里,动态内存分配(使用calloc() ,这是用于动态分配内存的预定义函数)在运行时分配内存。
在插入过程中,创建了一个新节点,使用gets() (用于输入字符的预定义函数)从用户那里获取数据,在最后添加时,指针部分为NULL,而新创建的节点为通过使用上面解释的遍历概念,可以使链接列表中存在的前一个节点指向。
- Adjustcount()函数:此函数将考虑链表中节点的编号。使用遍历概念和启动指针的帮助,它将在每次调用时更新每个节点的计数值。
- deletetodo()函数:使用删除节点的概念,我们要删除ToDos。我们正在询问用户他/她想要删除的节点(通过询问节点的编号)。如果开始为NULL,那么我们将无法删除任何内容,因此可以打印:今天没有TODO。
下面是上述方法的程序:
C
// C program for the above approach
#include
#include
// Renaming structure to avoid the
// repetitive use of struct keyword
typedef struct ToDo todo;
// Declaration of structure
struct ToDo {
// char array as data part
char buffer[101];
// Pointer part to access addresses
todo* next;
// Count variable for counting
// the number of nodes
int count;
};
// Declare start pointer as null in
// the begining
todo* start = NULL;
// Driver Code
int main()
{
int choice;
interface();
while (1) {
// Change console color and
// text color
system("Color 3F");
// Clear the console
system("cls");
printf("1. To see your ToDo list\n");
printf("2. To create new ToDo\n");
printf("3. To delete your ToDo\n");
printf("4. Exit");
printf("\n\n\nEnter your choice\t:\t");
// Choice from the user
scanf("%d", &choice);
switch (choice) {
// Calling functions defined
// below as per the user input
case 1:
seetodo();
break;
case 2:
createtodo();
break;
case 3:
deletetodo();
break;
case 4:
exit(1);
break;
default:
printf("\nInvalid Choice :-(\n");
system("pause");
}
}
return 0;
}
// Code for Splash screen
void interface()
{
system("color 4F");
printf("\n\n\n\n");
printf("\t~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~\n");
printf("\t~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~\n\n");
printf("\t} : } : } : } : } : } "
": } : } : } : "
"WELCOME TO the TODO APP "
" : { : { : { : { : { "
": { : { : { : {\n\n");
printf("\t~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~\n");
printf("\t~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~~~~~~~~~~~~~~~"
"~~~~~~~~~~\n");
printf("\n\n\n\t\t\t\t\t\t\t\"
"t\t\t\t "
"@Sushant_Gaurav\n\n\n\n"
"\n\n\n\t");
// Pausing screen until user
// presses any key
system("pause");
}
// To view all the todos
void seetodo()
{
// Clearing the console
system("cls");
// Pointer to the node for traversal
todo* temp;
// temp is made to point the
// start of linked list
temp = start;
// Condition for empty linked list
if (start == NULL)
printf("\n\nEmpty ToDo \n\n");
// Traverse until last node
while (temp != NULL) {
// Print number of the node
printf("%d.)", temp->count);
// Print data of the node
puts(temp->buffer);
// Clear output console
fflush(stdin);
// Going to next node
temp = temp->next;
}
printf("\n\n\n");
system("pause");
}
// Function to insert a node todo
void createtodo()
{
// Choose choice from user
char c;
// Pointers to node
todo *add, *temp;
system("cls");
// Infinite loop which will
// break if "n" is pressed
while (1) {
printf("\nWant to add new ToDo ??"
+ " Press 'y' for Yes and 'n' "
+ " for No :-)\n\t\t");
fflush(stdin);
// Input from user
scanf("%c", &c);
if (c == 'n')
break;
else {
// If start node is NULL
if (start == NULL) {
// Dynamically allocating
// memory to the newly
// created node
add = (todo*)calloc(1, sizeof(todo));
// Using add pointer to
// create linked list
start = add;
printf("\nType it.....\n");
// Input from user
fflush(stdin);
gets(add->buffer);
// As first input so
// count is 1
add->count = 1;
// As first node so
// start's next is NULL
start->next = NULL;
}
else {
temp = (todo*)calloc(1, sizeof(todo));
printf("\nType it.....\n");
fflush(stdin);
gets(temp->buffer);
// Insertion is at last
// so pointer part is NULL
temp->next = NULL;
// add is now pointing
// newly created node
add->next = temp;
add = add->next;
}
// Using the concept of
// insertion at the end,
// adding a todo
// Calling function to adjust
// the count variable
adjustcount();
}
}
}
// Function to delete the todo
void deletetodo()
{
system("cls");
// To get the numbering of the
// todo to be deleted
int x;
todo *del, *temp;
printf("\nEnter the ToDo's number"
+ " that you want to remove.\n\t\t");
// Checking empty condition
if (start == NULL)
printf("\n\nThere is no ToDo"
+ " for today :-)\n\n\n");
else {
scanf("%d", &x);
// del will point to start
del = start;
// temp will point to start's
// next so that traversal and
// deletion is achieved easily
temp = start->next;
// Running infinite loop so
// that user can delete and
// asked again for choice
while (1) {
// When the values matches,
// delete the node
if (del->count == x) {
// When the node to be
// deleted is first node
start = start->next;
// Deallocating the memory
// of the deleted node
free(del);
// Adjusting the count when
// node is deleted
adjustcount();
break;
}
if (temp->count == x) {
del->next = temp->next;
free(temp);
adjustcount();
break;
}
else {
del = temp;
temp = temp->next;
}
}
}
system("pause");
}
// Function to adjust the numbering
// of the nodes
void adjustcount()
{
// For traversal, using
// a node pointer
todo* temp;
int i = 1;
temp = start;
// Running loop until last node
// and numbering it one by one
while (temp != NULL) {
temp->count = i;
i++;
temp = temp->next;
}
}
输出:
- 开机画面:
- 可用功能列表
- 用户按2
- 用户按1
- 显示待办事项
- 删除待办事项
- 删除待办事项后显示待办事项
- 用户按下4
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。