查找 修改 删除 找不到
#include <stdio.h>
#include <stdlib.h>
struct goods
{
char number[6];
char category[12];
int amount;
};
struct LNode
{
struct goods data; //数据域
struct LNode *next; //指针域
};
typedef struct LNode LinkList;
void meum();
void choice(int *stop,LinkList *L);
void creat_node(LinkList *L);
void show_goods(LinkList *L);
void search_goods(LinkList *L);
void delete_goods(LinkList *L);
void modify_goods(LinkList *L);
int main()
{
int i;
LinkList *L=NULL;
L=(LinkList *)malloc(sizeof(LinkList));
if(L==NULL)
{
printf("分配头节点内存出错!");
exit(1);
}
memset(L,0,sizeof(LinkList));
L->next=NULL;
int stop=1;
while(1)
{
meum();
choice(&stop,L);
if(stop==0)
break;
printf("\n 下一步操作:");
printf("\n 1.返回主界面");
printf("\n 2.退出系统");
printf("\n 请输入操作:");
scanf("%d",&i);
if(i==2)
break;
}
return 0;
}
void creat_node(LinkList *L)
{
LinkList *node=NULL;
LinkList *temp=L->next; //作为链表连接的中间点
node=(LinkList *)malloc(sizeof(LinkList)); //分配内存
if(node==NULL)
{
printf("分配普通节点内存出错!");
exit(1);
}
memset(node,0,sizeof(LinkList));
printf("\n请输入物品序号:");
scanf("%s", node->data.number);
printf("\n请输入物品种类:");
scanf("%s",node->data.category);
printf("\n请输入物品数量:");
scanf("%d",&node->data.amount);
L->next=node;
node->next=temp;
}
void show_goods(LinkList *L)
{
LinkList *p=L->next;
int i=0;
printf("\n ************************** \n");
printf(" 物品信息 \n");
printf(" ************************** \n");
printf(" 序号 种类 数量 \n");
while(p)
{
printf(" %s %s %d \n",p->data.number,p->data.category,p->data.amount);
i++;
p=p->next;
}
}
void search_goods(LinkList *L)
{
int x=0;
char number;
char category[12];
LinkList *temp;
temp=L->next;
while(1)
{
printf("\n 请选择:");
printf("\n 1.按序号查找!");
printf("\n 2.按种类查找!");
printf("\n 请输入选择:");
scanf("%d",&x);
if(x==1 || x==2)
break;
else
printf("\n 输入错误,请重新输入!");
}
if(x==1)
{
printf("\n 请输入要查找物品的序号:");
scanf("%s",&number);
while(temp->data.number!=number && temp->next!=NULL)
{
temp=temp->next;
}
if(temp->data.number==number)
{
printf("\n 已经找到物品的信息!");
printf("\n 序号:%s 种类:%s 数量:%d",temp->data.number,temp->data.category,temp->data.amount);
}
else
{
printf("\n 没有查找到物品!");
}
}
else if(x==2)
{
printf("\n 请输入要查找物品的种类:");
scanf("%s",category);
while(strcmp(temp->data.category,category)!=0 && temp->next!=NULL)
{
temp=temp->next;
}
if(temp->data.category==category)
{
printf("\n 已经找到物品的信息!");
printf("\n 序号:%s 种类:%s 数量:%d",temp->data.number,temp->data.category,temp->data.amount);
}
else
{
printf("\n 没有要查找到物品!");
}
}
}
void delete_goods(LinkList *L)
{
int x=0;
char number;
char category[12];
LinkList *temp,*pre;
temp=L->next;
while(1)
{
printf("\n 请选择:");
printf("\n 1.按序号删除!");
printf("\n 2.按种类删除!");
printf("\n 请输入选择:");
scanf("%d",&x);
if(x==1 || x==2)
break;
else
printf("\n 输入错误,请重新输入!");
}
if(x==1)
{
printf("\n 请输入要删除的物品序号:");
scanf("%s",number);
while(temp->data.number!=number && temp->next!=NULL)
{
pre=temp;
temp=temp->next;
}
if(temp->data.number==number)
{
pre->next=temp->next;
free(temp);
}
else
{
printf("\n 没有所要删除的物品序号!");
}
}
else if(x==2)
printf("\n 请输入要删除的物品种类:");
scanf("%s",category);
while(strcmp(temp->data.category,category)!=0 && temp->next!=NULL)
{
pre=temp;
temp=temp->next;
}
if(strcmp(temp->data.category,category)==0)
{
pre->next=temp->next;
free(temp);
}
else
{
printf("\n 没有要删除的物品种类!");
}
}
void choice(int *stop,LinkList *L)
{
int num;
printf("\n\n 请输入菜单选项:");
scanf("%d",&num);
switch (num)
{
case 0:
*stop=0;
break;
case 1:
show_goods(L);
break;
case 2:
search_goods(L);
break;
case 3:
creat_node(L);
break;
case 4:
delete_goods(L);
break;
case 5:
modify_goods(L);
break;
default:
printf(" 请在0-5中间选择\n");
}
}
void meum()
{
printf("\n ***************************** \n");
printf(" 物品信息管理系统 \n");
printf(" ***************************** \n");
printf(" 系统菜单功能 \n");
printf(" ***************************** \n");
printf(" 1.浏览物品信息 \n");
printf(" 2.查找物品信息 \n");
printf(" 3.添加物品信息 \n");
printf(" 4.删除物品信息 \n");
printf(" 5.修改物品信息 \n");
printf(" 0.退出系统 \n");
}
void modify_goods(LinkList *L)
{
int x=0;
char num;
char category[12];
LinkList *temp;
temp=L->next;
while(1)
{
printf("\n 请选择:");
printf("\n 1.知道要修改物品的序号!");
printf("\n 2.知道要修改物品的种类!");
printf("\n 请输入选择:");
scanf("%d",&x);
if(x==1 || x==2)
break;
else
printf("\n 输入错误,请重新输入!");
}
if(x==1)
{
printf("\n 请输入要修改物品的序号:");
scanf("%s",num);
while(temp->data.number!=num && temp->next!=NULL)
{
temp=temp->next;
}
if(temp->data.number==num)
{
printf("\n 已经找到要修改物品的信息!");
}
else
{
printf("\n 没有要修改物品的序号!");
}
}
else if(x==2)
{
printf("\n 请输入要修改物品的种类:");
scanf("%s",category);
while(strcmp(temp->data.category,category)!=0 && temp->next!=NULL)
{
temp=temp->next;
}
if(strcmp(temp->data.category,category)==0)
{
printf("\n 已经找到要修改物品的信息!");
}
else
{
printf("\n 没有要修改物品的种类!");
}
}
printf("\n ************************");
printf("\n 序号:%s 种类:%s 数量:%d",temp->data.number,temp->data.category,temp->data.amount);
do
{
printf("\n 请选择:");
printf("\n 1.修改序号!");
printf("\n 2.修改种类!");
printf("\n 3.修改数量!");
printf("\n 请输入选择:");
scanf("%d",&x);
}
while(x<1 || x>3);
if(x==1)
{
printf("\n 请输入修改后的序号:");
scanf("%s",temp->data.number);
}
if(x==2)
{
printf("\n 请输入修改后的种类:");
scanf("%s",temp->data.category);
}
if(x==3)
{
printf("\n 请输入修改后的数量:");
scanf("%d",&temp->data.amount);
}
}