设计背景
生活当中,我们每天需要处理各种各样的事务,随着处理事务的增多,我们也会出现遗忘的现象,为了避免遗忘一些重要的事情,我们可将这些任务记录下来,形成一个任务清单,并且按照任务的重要性给任务编写优先级。
设计功能
任务清单的功能有:
添加任务:
首先输入添加任务的个数,然后按照显示的提示,分别输入任务的时间,优先级序号(优先级高、中、低序号分别为1、2、3),以及任务内容。
删除已完成任务。
按照任务优先级排序:
即按照任务优先级的高、中、低的顺序将任务排序,先显示比较重要的任务。
4.
显示当前任务表。
设计代码
任务清单代码主要通过链表实现,主要有创建链表,运用选择法进行链表中内容的排序,删除链表,显示链表。
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int Status;
建立结构体,结构体中元素有日期(年、月、日),任务优先级序号,任务(定义为字符),以及next域。
typedef struct LNode{
int year,month,day;
int i;//任务优先级序号
char task[1000];//任务
struct LNode *next;
}LNode,*LinkList;
通过创建链表L创建任务表,链表中逆序输入各任务
Status CreatList_L(LinkList &L,int num)
{//逆序输入n个元素的值
LNode *p;
int j;
int y,m,d,t;
int i;
L=(LinkList) malloc(sizeof(LNode));
L->next=NULL;
for(j=num;j>0;--j)
{
p=(LinkList)malloc(sizeof(LNode));
printf("任务%d:\n",j);
printf("请输入添加任务日期\n");
scanf("%d %d %d",&y,&m,&d);
p->year =y;
p->month =m; p->day =d;
printf("任务优先级为:1.高;2.中;3.低\n");
printf("请输入任务优先级序号\n");
scanf("%d",&i);
p->i=i;
printf("请输入任务\n");
scanf("%s",p->task );
printf("\n");
p->next =L->next;
L->next=p;
}
}
将任务按照选择法进行优先级排序,选择法排序链表中的数据。
/*任务按照选择法进行优先级排序*/
Status CompareTask(LinkList &L)
{
LNode *head,*prep1,*p1,*prep2,*p2,*premin,*min,*temp;
head=L;
if(L->next ==NULL||L->next ->next==NULL)
{
return OK;
}
for(prep1=head,p1=prep1->next ;p1->next !=NULL;prep1=prep1->next ,p1=prep1->next )
{
premin=prep1;
min=p1;//保存最小节点
for(prep2=p1,p2=prep2->next ;p2!=NULL;prep2=prep2->next ,p2=prep2->next )
{
if(min->i >p2->i )
{
premin=prep2;
min=p2;
}
}//找到两者之间的最小值
if(p1!=min)
{
if(p1->next ==min)//两个相比较的值相邻
{
temp=min->next ;
prep1->next =min;
min->next =p1;
p1->next =temp;
}
else//两个比较的数不相邻
{
temp=min->next ;
prep1->next =min;
min->next =p1->next ;
premin->next =p1;
p1->next =temp;
}
}
}
printf("任务已排序\n");
}
任务表的显示
//任务表的显示
void ListPrint_L(LinkList L,int num)
{
LNode *p;
int i;
p=L->next;
for(i=1;i<=num;i++)
{
printf("----------------------------------------\n");
printf("任务%d:\n",i);
printf("时间:%d %d %d\n",p->year,p->month,p->day);
printf("优先级:%d\n",p->i);
printf("任务:%s",p->task );
printf("----------------------------------------\n");
p=p->next;
}
}
删除任务
/*删除任务*/
Status ListDelet_L(LinkList &L,int i,int &num)
{
LNode *p,*q;
int j;
p=L;
j=0;
while (p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return ERROR;
q=p->next;
p->next=q->next;
free(q);
num-=1;
printf("任务已删除\n");
return num;
}
主函数
main()
{
LinkList L,T;
int i,k,num,flag;
printf("请选择功能:\n");
printf("1.添加任务;2.删除已完成任务;3.按照任务优先级排序;4.显示当前任务表;5.结束\n");
for(k=1;;k++)
{
printf("\n请进行功能的选择:");
scanf("%d",&flag);
if(flag==1)
{
printf("请输入添加任务个数\n");
scanf("%d",&num);
printf("\n");
CreatList_L(L,num);
}
if(flag==2)
{
printf("请输入删除任务序号\n");
scanf("%d",&i);
ListDelet_L(L,i,num);
}
if(flag==3)
{
CompareTask(L);
}
if(flag==4)
{
ListPrint_L(L,num);
}
if(flag==5)
break;
}
return OK;
}
代码运行
任务清单运行界面
添加三项任务
将三项任务按优先级排序并输出当前任务列表
删除第二项任务并输出列表
结束功能