//模糊搜索部分代码
int result_mohu(char* key,char* str)
{
typedef struct
{
char son[11];
}Element;
(
int i,j,k=0,l=0,m=0;
//f=1为符合筛选条件
int f=0;
//N1为str的长度 N2为str连续子串的个数
int N1=0,N2=0;
N1=strlen(str);
/*计算连续子串的个数*/
for(i=1;i<=N1;i++)
N2+=i;
/*计算连续子串的个数*/
//i控制子字符串的长度
//j控制赋值
//k控制新的线性结构b的下标
//l控制子数组的首项在原数组中的位置
//m控制即将用作赋值的str的下标
Element *b=(Element*)malloc(sizeof(Element)*N2);
for(i=1;i<=N1;i++)
{
l=0;
/*while循环内为给一个子字符串数组赋值*/
while(1)
{
m=l;
for(j=0;j<i;j++)
{
b[k].son[j]=str[m];
m++;
}
b[k].son[j]='\0';
l++;
k++;
if(m==N1)
break;
}
}
//挨个比对
for(i=0;i<N2;i++){
if(strcmp(key,b[i].son)==0)
{
f=1;
break;
}
}
free(b);
return f;
}
```c
//删除
void del(struct Node* list){
int i,flag=0;
char id1[8];
printf("请输入您想要删除的项目编号(格式:字母+6个数字):\n");
scanf("%s",id1);
printf("再次确认你所要删除的项目编号是:");
puts(id1);
struct Node* pos;
struct Node* p;
pos=list;
if(list->next==NULL){
printf("\n链表为空!\n");
return;
}
else{
while(pos->next!=NULL){
if(strcmp(id1,pos->next->data.id)==0){
flag=1;
break;
}
pos=pos->next;
}
p=pos;
if(flag==1){
printf("\n\t你删除的项目信息为: \n");
printf("\t项目名称:%s\n",pos->next->data.name );
printf("\t项目类别:%s\n",pos->next->data.category);
printf("\t项目编号:");
for(i=0;i<7;i++){
printf("%c",pos->next->data.id[i]);
}
printf("\n");
printf("\t负责人:%s\n",pos->next->data.head);
printf("\t指导老师:%s\n",pos->next->data.teacher);
printf("\t成员:");
// puts(pos->data.players);
printf("%s\n",pos->next->data.players);
printf("\t总人数: %d\n",pos->next->data.number);
p->next=pos->next->next;
free(pos->next);
getchar();
printf("删除成功!\n");
}
else{
printf("\t没有找到输入的编号信息!\n");
printf("正在进行模糊搜索......\n");
printf("模糊搜索找到的信息如下:\n");
pos=list;
int j=1;
while(pos->next!=NULL){
p=pos;
if(result_mohu(id1,pos->next->data.id)==1){
printf("\t%d.\n",j);
printf("\t你删除的项目信息为: \n");
printf("\t项目名称:%s\n",pos->next->data.name );
printf("\t项目类别:%s\n",pos->next->data.category);
printf("\t项目编号:");
puts(pos->next->data.id);
printf("\t负责人:%s\n",pos->next->data.head);
printf("\t指导老师:%s\n",pos->next->data.teacher);
printf("\t成员:");
printf("%s\n",pos->next->data.players);
printf("\t总人数: %d\n",pos->next->data.number);
p->next=pos->next->next;
free(pos->next);
getchar();
printf("删除成功!\n");
j++;
}
else{
pos=pos->next;
}
}
}
}
return;
}
依旧是项目管理系统,如果没有查到就用模糊搜索。
涉及到多个删除,结果找到之后项目名称就成了乱码。而且会时不时地退出程序