c语言仓库信息管理

来源:互联网 发布:软件产品质量控制 编辑:程序博客网 时间:2024/06/05 19:25
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <malloc.h>typedef struct information     //货物信息 {char  number[20];        //编号 char  sname[20];      //名称 float price;          //价格 int   count;           //数量 struct information *next;}inf;void menu(inf *head)                 //显示菜单{system("color  3E"); printf("\t\t*****************************************************\n");printf("\t\t\t\t欢迎进入货物信息管理系统\n");    printf("\t\t*****************************************************\n");printf("\n");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|_________________0.释放链表。退出___________________|");printf("\n\t\t\t请输入你的选项(0---8):\n");printf("\n");     printf("\t请输入你的选择: \n");}void menu(inf *head);                     //显示主菜单inf *create();                             //创建链表void Input(int n,inf *head);                 //输入货物信息void tianjia(int n,inf *head);                     //添加货物信息void output(inf *head);                     //输出货物信息void chaxun(inf *head);                         //查询void chaxun_number(inf *head);                    //按编号查询void chaxun_sname(inf *head);                     //按名称查询void xiugai(inf *head);                          //修改货物信息void shanchu(inf *head);                         //删除货物信息 void write_file(inf *head);                      //保存货物信息到文件inf *Read__file();                               //读取文件内货物信息void freeh(inf *head);                           //退出程序 inf *create()     //创建链表{inf *p;p=(inf *)malloc(sizeof(struct information)); if(p==NULL) { printf("链表创建失败.\n");exit(0); }p->next=NULL;return (p);}void Input(int n,inf *head)//录入货物信息{inf *p;int i;printf("请输入:你想录入多少组货物信息: \n ");scanf("%d",&n);for(i=1;i<=n;i++){p=(inf *)malloc(sizeof(struct information));  if(p==NULL){printf("结点创建失败.\n");exit(0);}printf("请输入货物:编号,名称,价格,数量:\n");printf("编号:");    scanf("%s",p->number);    printf("名称:");    scanf("%s",p->sname);    printf("价格:");    scanf("%f",&p->price);    printf("数量:");    scanf("%d",&p->count);    p->next=NULL; while(head->next!=NULL)    head=head->next;    head->next=p;    }}void tianjia(int n,inf *head)//添加货物信息{inf *p;int i;printf("请输入:你想添加多少组货物信息: \n");scanf("%d",&n);for(i=1;i<=n;i++){p=(inf *)malloc(sizeof(struct information));       if(p==NULL)    {   printf("链表结点创建失败。\n");   exit(0);}printf("请输入货物:编号,名称,价格,数量:\n");    printf("编号:");    scanf("%s",p->number);    printf("名称:");    scanf("%s",p->sname);    printf("价格:");    scanf("%f",&p->price);    printf("数量:");    scanf("%d",&p->count);p->next=NULL;while(head->next!=NULL)head=head->next;head->next=p;    }}void output(inf *head)            //输出货物信息 {int n=0;inf *p;p=head->next;if(p==NULL)    {       printf("链表为空,请先输入信息!\n");        return;    }    while(p!=NULL)      {       n++;   printf("货物信息:编号: %s,名称:%s,价格:%f. 数量:%d \n",p->number,p->sname,p->price,p->count);   p=p->next;      }printf(" 货物总数为:%d \n",n);}void chaxun(inf *head)       //查询货物信息 函数 {int a;printf("\t\t查询信息\n") ;while(1){printf("\t 1.按编号查询\n");printf("\t 2.按名称查询\n");printf("请输入你的选择:\n");scanf("%d",&a);if(a==1){chaxun_number(head);//调用按编号查询的函数 break;}if(a==2){chaxun_sname(head);//调用按名称查询的函数  break;}if(a!=1&&a!=2){printf("输入错误!\n");break;}getchar();}}void chaxun_number(inf *head)       //按编号查询{char num[20];inf *p;int i=-1;p=head;printf("请输入你要查询的货物的编号:");scanf("%s",num);while(p->next!=NULL){p=p->next;if(strcmp(p->number,num)==0)   {         i=1;          printf("已找到该货物信息\n");           printf("货物信息:编号:%s,名称:%s,价格:%f.数量:%d.\n",p->number,p->sname,p->price,p->count);}}if(i<0) printf("没有此货物信息!\n");}void chaxun_sname(inf *head)                             //按名称查询{char a[20];int i=-1;inf *p;p=head;printf(" 请输入要查找货物的名称 :\n");scanf("%s",a);while(p->next!=NULL){p=p->next;if(strcmp(p->sname,a)==0){i=1;       printf("已找到该货物信息\n");           printf("货物信息:编号:%s,名称:%s,价格:%f.数量:%d.\n",p->number,p->sname,p->price,p->count);}}if(i<0)printf("没有此货物!\n");}void xiugai(inf *head)                //修改货物信息{printf("\t********************\n");printf("\t  请输入修改的方式:\n");printf("\t1.单个信息全部修改。\n");printf("\t2.单个信息逐个修改。\n");printf("\t********************\n");int  a;printf("请输入选项:\n");scanf("%d",&a);if(a==1){char no[20];int i=-1;inf *p;p=head; printf("请输入要修改货物的编号:\n");scanf("%s",no);while(p->next!=NULL){p=p->next;    if(strcmp(p->number,no)==0)    {    i=1;    printf("请输入货物的编号,名称,价格,数量:\n");printf("编号:");   scanf("%s",p->number);    printf("名称:");       scanf("%s",p->sname);    printf("价格:");       scanf("%f",&p->price);       printf("数量:");    scanf("%d",&p->count);    }}if(i<0)printf("没有此货物信息!\n");}if(a==2) {inf *p=NULL;int b;char number2[20];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("%s",&number2);   while(p!=NULL)   {    if(strcmp(p->number,number2)==0) { printf("请输入新的编号:\n"); scanf("%s",&p->number);        } p=p->next;}printf("该货物信息已修改成功。\n"); break; case 2 :                                printf("请输入被修改的名称:\n"); scanf("%s",&name2); while(p!=NULL)                     { if(strcmp(p->sname,name2)==0) { printf("请输入新的名称:\n"); scanf("%s",&p->sname);      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");    }  }}void   shanchu(inf *head)    //删除货物信息 {    int a;     printf("\t\t  1.按编号删除  2.按名称删除\n");    printf("\t\t请输入选项:\n");    scanf("%d",&a);    switch(a)    {case 1:{char number[20];    int i=-1;inf *p,*h;p=head;    printf("请输入你要删除的货物的编号:\n");    scanf("%s",number);    while(p->next!=NULL)     {       if(strcmp(number,p->next->number)==0)       {       i=1;    h=p->next;    p->next=p->next->next;free(h);printf("已删除该货物信息。\n");break;}p=p->next;    }  if(i<0)printf("没有此货物信息!\n");break;}case 2:{char name[20];    int i=-1;inf *p,*h;p=head;    printf("请输入你要删除的货物的名称:\n");    scanf("%s",name);    while(p->next!=NULL)     {       if(strcmp(name,p->next->sname)==0)       {       i=1;    h=p->next;    p->next=p->next->next;free(h);printf("已删除该货物信息。\n");break;}p=p->next;    }  if(i<0)printf("没有此货物信息!\n");break;}}}void write_file(inf *head)                          //保存货物信息到文件{    inf *p;FILE *fp;p=head;if((fp=fopen("货物信息.txt","wb"))==NULL){printf ("Do not have this file\n");exit(0);}while(p->next != NULL){p=p->next;fwrite(p,sizeof(struct information),1,fp);                           }fclose(fp);}inf *Read__file()                                  //读取文件内的货物信息 {inf *p,*d,*head;FILE *fp;head=(inf *)malloc(sizeof(struct information));p=(inf *)malloc(sizeof(struct information));if((fp=fopen("货物信息.txt","rb"))==NULL){printf ("不能打开文件!\n");exit(0);}if(fread(head,sizeof(struct information),1,fp)){d=head;while(fread(p,sizeof(struct information),1,fp)){d->next=p;d=p;p=(inf *)malloc(sizeof(struct information));}}d->next=NULL;fclose(fp);return (head);}void freeh(inf *head)                       //释放空间 退出程序{inf *p;p=(inf *)malloc(sizeof(struct information));p=head;while(head->next!=NULL){head=head->next;free(p);p=head;}free(p);}int main(){inf *head;head=(inf*)malloc(sizeof(struct information));head=create();while(1){menu(head);  int h,i;scanf("%d",&h);switch(h)                                                   //功能选择{case 1:  Input(i,head);      break;case 2:      tianjia(i,head);      break;case 3:  chaxun(head);      break;case 4:     xiugai(head);          write_file(head);      break;   case 5:      shanchu(head);  write_file(head);  output(head);      break;case 6:      write_file(head);              printf("\t已经成功保存信息!\t\n");  break;case 7:   head->next=Read__file();  output(head);  break;        case 8:      output(head);      break;         case 0:    freeh(head);  printf("\t-----已经退出程序-----\t\n");  exit(0);default:      printf("输入错误\n");  break;}}}

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
typedef struct information     //货物信息 
{
char  number[20];        //编号 
char  sname[20];      //名称 
float price;          //价格 
int   count;           //数量 
struct information *next;
}inf;


void menu(inf *head)                 //显示菜单
{
system("color  3E"); 
printf("\t\t*****************************************************\n");
printf("\t\t\t\t欢迎进入货物信息管理系统\n");
    printf("\t\t*****************************************************\n");
printf("\n");
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|_________________0.释放链表。退出___________________|");
printf("\n\t\t\t请输入你的选项(0---8):\n");
printf("\n"); 
   printf("\t请输入你的选择: \n");
}

void menu(inf *head);                    //显示主菜单
inf *create();                            //创建链表
void Input(int n,inf *head);                //输入货物信息
void tianjia(int n,inf *head);                    //添加货物信息
void output(inf *head);                    //输出货物信息
void chaxun(inf *head);                        //查询
void chaxun_number(inf *head);                    //按编号查询
void chaxun_sname(inf *head);                     //按名称查询
void xiugai(inf *head);                          //修改货物信息
void shanchu(inf *head);                         //删除货物信息 
void write_file(inf *head);                      //保存货物信息到文件
inf *Read__file();                               //读取文件内货物信息
void freeh(inf *head);                           //退出程序 

inf *create()     //创建链表
{
inf *p;
p=(inf *)malloc(sizeof(struct information));
if(p==NULL)
{
printf("链表创建失败.\n");
exit(0);
}
p->next=NULL;
return (p);
}


void Input(int n,inf *head) //录入货物信息
{
inf *p;
int i;
printf("请输入:你想录入多少组货物信息: \n ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=(inf *)malloc(sizeof(struct information));
 if(p==NULL)
{
printf("结点创建失败.\n");
exit(0);
}

printf("请输入货物:编号,名称,价格,数量:\n");
printf("编号:");
   scanf("%s",p->number);
   printf("名称:");
   scanf("%s",p->sname);
   printf("价格:");
   scanf("%f",&p->price);
   printf("数量:");
   scanf("%d",&p->count);
   p->next=NULL;
while(head->next!=NULL)
   head=head->next;
   head->next=p;
   }
}


void tianjia(int n,inf *head) //添加货物信息
{
inf *p;
int i;
printf("请输入:你想添加多少组货物信息: \n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=(inf *)malloc(sizeof(struct information));
       if(p==NULL)
   {
  printf("链表结点创建失败。\n");
  exit(0);
}

printf("请输入货物:编号,名称,价格,数量:\n");
   printf("编号:");
   scanf("%s",p->number);
   printf("名称:");
   scanf("%s",p->sname);
   printf("价格:");
   scanf("%f",&p->price);
   printf("数量:");
   scanf("%d",&p->count);
p->next=NULL;
while(head->next!=NULL)
head=head->next;
head->next=p;
   }
}

void output(inf *head)            //输出货物信息 
{
int n=0;
inf *p;
p=head->next;
if(p==NULL)
    {
        printf("链表为空,请先输入信息!\n");
        return;
    }
    while(p!=NULL)
      {
       n++;
  printf("货物信息:编号: %s,名称:%s,价格:%f. 数量:%d \n",p->number,p->sname,p->price,p->count);
  p=p->next;
      }
printf(" 货物总数为:%d \n",n);
}

void chaxun(inf *head)       //查询货物信息 函数 
{
int a;
printf("\t\t查询信息\n") ;
while(1)
{
printf("\t 1.按编号查询\n");
printf("\t 2.按名称查询\n");
printf("请输入你的选择:\n");
scanf("%d",&a);


if(a==1)
{
chaxun_number(head);//调用按编号查询的函数 
break;
}
if(a==2)
{
chaxun_sname(head);//调用按名称查询的函数  
break;
}
if(a!=1&&a!=2)
{
printf("输入错误!\n");
break;
}
getchar();
}
}




void chaxun_number(inf *head)       //按编号查询
{
char num[20];
inf *p;
int i=-1;
p=head;
printf("请输入你要查询的货物的编号:");
scanf("%s",num);
while(p->next!=NULL)
{
p=p->next;
if(strcmp(p->number,num)==0)
    {
        i=1;
          printf("已找到该货物信息\n");
           printf("货物信息:编号:%s,名称:%s,价格:%f.数量:%d.\n",p->number,p->sname,p->price,p->count);
}

}
if(i<0)
printf("没有此货物信息!\n");
}


void chaxun_sname(inf *head)                             //按名称查询
{
char a[20];
int i=-1;
inf *p;
p=head;
printf(" 请输入要查找货物的名称 :\n");
scanf("%s",a);
while(p->next!=NULL)
{
p=p->next;
if(strcmp(p->sname,a)==0)
{
i=1;
      printf("已找到该货物信息\n");
           printf("货物信息:编号:%s,名称:%s,价格:%f.数量:%d.\n",p->number,p->sname,p->price,p->count);
}
}
if(i<0)
printf("没有此货物!\n");
}


void xiugai(inf *head)                //修改货物信息
{
printf("\t********************\n");
printf("\t  请输入修改的方式:\n");
printf("\t1.单个信息全部修改。\n");
printf("\t2.单个信息逐个修改。\n");
printf("\t********************\n");
int  a;
printf("请输入选项:\n");
scanf("%d",&a);
if(a==1)
{
char no[20];
int i=-1;
inf *p;
p=head;
printf("请输入要修改货物的编号:\n");
scanf("%s",no);
while(p->next!=NULL)
{
p=p->next;
   if(strcmp(p->number,no)==0)
   {
   i=1;
   printf("请输入货物的编号,名称,价格,数量:\n");
printf("编号:");
  scanf("%s",p->number);
    printf("名称:");
     scanf("%s",p->sname);
    printf("价格:");
     scanf("%f",&p->price);
     printf("数量:");
    scanf("%d",&p->count);
   }
}
if(i<0)
printf("没有此货物信息!\n");
}

if(a==2) 
{
inf *p=NULL;
int b;
char number2[20];
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("%s",&number2);
  while(p!=NULL)
  {
   if(strcmp(p->number,number2)==0)
{
printf("请输入新的编号:\n");
scanf("%s",&p->number);       
}
p=p->next;
}
printf("该货物信息已修改成功。\n");
  break;
 case 2 :                               
printf("请输入被修改的名称:\n");
scanf("%s",&name2);
while(p!=NULL)                    
{
if(strcmp(p->sname,name2)==0)
{
printf("请输入新的名称:\n");
scanf("%s",&p->sname);     
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");
    }
  }
}


void   shanchu(inf *head)    //删除货物信息 
{
   int a; 
   printf("\t\t  1.按编号删除  2.按名称删除\n");
   printf("\t\t请输入选项:\n");
   scanf("%d",&a);
   switch(a)
   {
case 1:
{
char number[20];
   int i=-1;
inf *p,*h;
p=head;
   printf("请输入你要删除的货物的编号:\n");
   scanf("%s",number);
   while(p->next!=NULL) 
   {
      if(strcmp(number,p->next->number)==0)
      {   
   i=1;
   h=p->next;
   p->next=p->next->next;
free(h);
printf("已删除该货物信息。\n");
break;
}
p=p->next;
   }
  if(i<0)
printf("没有此货物信息!\n");
break;
}

case 2:
{
char name[20];
   int i=-1;
inf *p,*h;
p=head;
   printf("请输入你要删除的货物的名称:\n");
   scanf("%s",name);
   while(p->next!=NULL) 
   {
      if(strcmp(name,p->next->sname)==0)
      {   
   i=1;
   h=p->next;
   p->next=p->next->next;
free(h);
printf("已删除该货物信息。\n");
break;
}
p=p->next;
   }
  if(i<0)
printf("没有此货物信息!\n");
break;
}
}
}

void write_file(inf *head)                          //保存货物信息到文件
{
    inf *p;
FILE *fp;
p=head;
if((fp=fopen("货物信息.txt","wb"))==NULL)
{
printf ("Do not have this file\n");
exit(0);
}
while(p->next != NULL)
{
p=p->next;
fwrite(p,sizeof(struct information),1,fp);                           
}
fclose(fp);
}

inf *Read__file()                                  //读取文件内的货物信息 
{
inf *p,*d,*head;
FILE *fp;
head=(inf *)malloc(sizeof(struct information));
p=(inf *)malloc(sizeof(struct information));
if((fp=fopen("货物信息.txt","rb"))==NULL)
{
printf ("不能打开文件!\n");
exit(0);
}
if(fread(head,sizeof(struct information),1,fp))
{
d=head;
while(fread(p,sizeof(struct information),1,fp))
{
d->next=p;
d=p;
p=(inf *)malloc(sizeof(struct information));
}
}
d->next=NULL;
fclose(fp);
return (head);
}

void freeh(inf *head)                       //释放空间 退出程序
{
inf *p;
p=(inf *)malloc(sizeof(struct information));
p=head;
while(head->next!=NULL)
{
head=head->next;
free(p);
p=head;
}
free(p);
}


int main()
{
inf *head;
head=(inf*)malloc(sizeof(struct information));
head=create();
while(1)
{
menu(head);
  int h,i;
scanf("%d",&h);
switch(h)                                                   //功能选择
{
case 1:
 Input(i,head);
     break;
case 2:
     tianjia(i,head);
     break;
case 3:
 chaxun(head);
     break;
case 4:   
 xiugai(head);
         write_file(head);
     break;
  case 5:
     shanchu(head);
 write_file(head);
 output(head);
     break;
case 6:
     write_file(head);
             printf("\t已经成功保存信息!\t\n");
 break;
case 7:  
 head->next=Read__file();
 output(head);
 break;
       case 8:   
 output(head);
     break;         
case 0:  
 freeh(head);
 printf("\t-----已经退出程序-----\t\n");
 exit(0);
default:
     printf("输入错误\n");
 break;
}
}


}
0 0
原创粉丝点击