#include#include//头文件
#includetypedef struct information//定义结构体
{
int number;
char name[100];
float price;
int count;
struct information *next;
}inf;
inf *head;
inf *found() //创建信息
{
int n;
inf *p=NULL,*pre=NULL; //定义指针变量
pre=head=(inf *)malloc(sizeof(inf)); //申请内存
while(1)
{
p=(inf*)malloc(sizeof (inf));
printf("输入货物的编号、名称、价格、数量:\n");
printf("编号:");
scanf("%d",&p->number);
printf("名称:");
scanf("%s",&p->name);
printf("价格:");
scanf("%f",&p->price);
printf("数量:");
scanf("%d",&p->count);
printf("\n");
pre->next=p;
pre=p;
printf("============================================\n");
printf("是否退出创建货物信息 退出:输1 继续: 输2\n");
scanf("%d",&n);
if(n==1)
{
pre->next=NULL;
p=NULL;
return head;
}
printf("\n");
if(n>2)
{
printf("输入错误!\n");
system("pause");
}
}
pre->next=NULL;
free(p);
p=NULL;
return head;
}
void baocun(inf *head) //保存信息
{
int h=0;
inf *p=NULL;
FILE *fp;
p=head->next;
if(p==NULL)
{
printf("头结点创建失败!");
}
else
{
p=head->next;
if((fp=fopen("货物信息.txt","w"))==NULL) //打开‘货物信息.txt’文件
{
printf("不能打开这个文件\n");
exit(0);
}
fprintf(fp,"编号:%d\t名称:%s\t价格:%f\t数量:%d\n",p->number,p->name,p->price,p->count);//读取信息
while(p!=NULL)
{
fprintf(fp,"编号:%d\t",p->number);
fprintf(fp,"名称:%s\t",p->name); //输出信息
fprintf(fp,"价格:%f\t",p->price);
fprintf(fp,"数量:%d\n",p->count);
p=p->next;
h++; //记录信息数
}
printf("保存成功一共%d个货物!\n",h);
fclose(fp);
}
}
void find(inf *head) //查询信息
{
inf *p=NULL;
int d,n;
int number1;
char name1[100];
printf("\t\t 请选择方式查找 \n");
printf("\t\t 1.通过编号查找 2.通过名称查找\n"); //查询方式
p=head->next;
if(p==NULL)
{
printf("没有货物信息,请先保存货物信息!\n");
}
printf("===========================\n");
printf("请输入要选择的内容 1 或 2 \n");
scanf("%d",&n);
switch(n)
{
case 1:
printf("请输入要查找的货物的编号:\n");
scanf("%d",&number1);
while(p!=NULL)
{
if(number1==p->number)
{
printf("货物的编号、名称、价格、数量是:\n");
printf("编号=%d\n",p->number);
printf("名称=%s\n",p->name);
printf("价格=%f\n",p->price);
printf("数量=%d\n",p->count);
break;
}
printf("\n");
p=p->next;
}
printf("对编号的查找成功!\n");
break;
case 2:
printf("请输入要查找的货物名称:\n");
scanf("%s",&name1);
while(p!=NULL)
{
if(strcmp(p->name,name1)==0)
{
printf("货物的编号、名称、价格、数量是:\n");
printf("编号=%d\n",p->number);
printf("名称=%s\n",p->name);
printf("价格=%f\n",p->price);
printf("数量=%d\n",p->count);
break;
}
printf("\n");
p=p->next;
}
printf("对名称的查找成功!\n");
break;
default:printf("查找有错误!\n");
}
}
void tianjia (inf *head) //添加信息
{
inf *p=NULL,*p1=NULL;
p=head;
while(p->next!=NULL)
{
p=p->next;
}
p1=(inf*)malloc(sizeof(inf));
printf("请输入你所想添加的信息:\n");
printf("编号:");
scanf("%d",&p1->number);
printf("名称:");
scanf("%s",&p1->name);
printf("价格:");
scanf("%f",&p1->price);
printf("数量:");
scanf("%d",&p1->count);
p->next=p1;
p1->next=NULL;
baocun(head);
}
void xiugai(inf *head) //修改信息
{
inf *p=NULL;
int b;
int number2;
char name2[100];
float price2;
int count2;
p=head->next;
if(p==NULL)
{
printf("没有货物信息,请先保存货物信息!\n");
}
printf("\t\t 请输入要修改的内容\n");
printf("\t\t 1.修改编号 2.修改名称\n");
printf("\t\t 3.修改价格 4.修改数量\n");
printf("请选择 \n");
scanf("%d",&b);
switch(b)
{
case 1 :
printf("请输入被修改的货物编号:\n");
scanf("%d",&number2);
while(p!=NULL)
{
if(number2==p->number)
{
printf("请输入新的编号:\n");
scanf("%d",&p->number);
break;
}
p=p->next;
}
printf("对编号的修改成功!\n");
break;
case 2 :
printf("请输入被修改的名称:\n");
scanf("%s",&name2);
while(p!=NULL)
{
if(strcmp(p->name,name2)==0)
{
printf("请输入新的名称:\n");
scanf("%s",&p->name);
break;
}
p=p->next;
}
printf("对名称的修改成功!\n");
break;
case 3 :
printf("请输入被修改的价格:\n");
scanf("%f",&price2);
while(p!=NULL)
{
if(price2==p->price)
{
printf("请输入新的价格:\n");
scanf("%f",&p->price);
break;
}
p=p->next;
}
printf("对价格的修改成功!\n");
break;
case 4 :
printf("请输入被修改的数量:\n");
scanf("%d",&count2);
while(p!=NULL)
{
if(count2==p->count)
{
printf("请输入新的数量:\n");
scanf("%d",&p->count);
break;
}
p=p->next;
}
printf("对数量的修改成功!\n");
break;
default:printf("修改内容有错误!\n");
}
printf("\n");
}
void shanchu(inf *head) //删除信息
{
int k;
inf *p=NULL,*pr=NULL;
char name4[100];
int number4;
p=pr=head->next;
printf("\t\t 1.按编号删除 2.按名称删除\n");
printf("请选择 :\n");
scanf("%d",&k);
switch(k)
{
case 1:
{
printf("请输入要删除的货物的编号:\n");
scanf("%d",&number4);
break;
}
case 2:
{
printf("请输入要删除的货物的名称:\n");
scanf("%s",&name4);
break;
}
}
while(p!=NULL)
{
if(number4==p->number)
{
pr->next=p->next;
free(p);
p=NULL;
break;
}
if(strcmp(p->name,name4)==0)//比较
{
pr->next=p->next;
free(p);
p=NULL;
break;
}
pr=p;
p=p->next;
}
printf("删除成功!\n");
}
void output(inf *head) //显示信息
{
inf *p=NULL;
p=head->next;
while(p!=NULL)
{
printf("__________________________________________\n");
printf("|编号\t|名称\t|价格\t\t|数量\t |\n");
printf("|========================================|\n");
printf("|%d\t|%s\t|%f\t|%d\t |\n",p->number, p->name,p->price,p->count);
printf("|_______|_______|_______________|________|\n");
p=p->next;
}
}
void menu1()//页面
{
system("color 3E");
printf("\t\t****************************************\n");
printf("\t\t\t欢迎进入货物信息管理系统\n");
printf("\t\t****************************************\n");
printf("\n");
printf("\t\t按enter键继续!\n");
}
void menu2()//目录
{
system("color 3E");
printf("\t\t|----------------------------------------------------|\n");
printf("\t\t|______________________基本信息______________________|\n");
printf("\t\t| 1.创建货物信息 | 2.保存货物信息 |\n");
printf("\t\t| 3.查找货物信息 | 4.修改货物信息 |\n");
printf("\t\t| 5.删除货物信息 | 6.输出货物信息 |\n");
printf("\t\t| 7.退出系统 | 8.添加货物信息 |\n");
printf("\t\t|_________________________|__________________________|");
printf("\n\t\t\t请输入你的选项(1---8):\n");
}
inf *read()
{
FILE *fp;
inf *head,*q,*p;
if((fp=fopen("货物信息.txt","r")) == NULL) //打开文件
{
printf("不能打开文件!\n");
}
head=(inf *)malloc(sizeof(inf)); //申请空间
head->next=NULL;
p=(inf *)malloc(sizeof(inf));
int m=0;
while(fread(p,sizeof(inf),1,fp)==1) //读取文件信息
{
m=m+1;
p->next=NULL;
printf("编号:%d\t名称:%s\t价格%f\t数量:%d\t\n",p->number, p->name,p->price,p->count);
getchar();
if(m==1)
{
head->next=p;
}
else
{
q->next=p;
}
q=p;
p=(inf *)malloc(sizeof(inf));
}
fclose(fp);
return head;
}
int main()
{
FILE *fp;
int n,m;
menu1();
getchar();
if((fp=fopen("货物信息.txt","r"))!=NULL)
{
head=read();
}
else
{
printf("文件中没有保存货物信息!\n");
}
while(1)
{
system("cls");
menu2();
scanf("%d",&n);
switch(n)
{
case 1 :
head=found();break;
case 2 :
baocun(head);break;
case 3 :
find(head);break;
case 4 :
xiugai(head);output(head);break;
case 5 :
shanchu(head);break;
case 6 :
output(head);break;
case 7:break;
case 8:tianjia(head);break;
default:
printf("选择功能错误!\n");
}
printf("\n");
printf("************************************************************\n");
printf("是否继续对该货物信息的操作,如果继续操作 输:1 退出输: 2 \n");
printf("-—————————————————————————————-\n");
scanf("%d",&m);
getchar();
if(m==2)
{
break;
}
}
return 0;
}
图
1、 主界面的显示
1
2
2、 创建信息的执行
3、 保存信息的执行
保存:
输出:
4、 查找函数的执行
1.按编号:
2.按名称:
5、 修改函数的执行
1.修改编号
2.修改名称
3.修改价格
4.修改数量
保存
显示
6、 删除信息的执行
1.编号删除
显示
2、按名称删除
显示
保存
7、添加函数的执行
显示
8、输出函数的执行
9、退出