当前位置 主页 > 网站技术 > 代码类 >

    C语言实现仓库物资管理系统

    栏目:代码类 时间:2019-12-27 06:09

    前言

    此系统为博主大一上学期C语言课程设计的大作业,由于当时初步接触C语言,现在来看程序写的太烂了,简直不忍直视……但是还是想通过博客的形式记录下来,也可以给刚接触学习C语言的人一些参考吧!

    系统功能设计

    仓库初始化

    查询库存

    *按电器名查询
    *按品牌名查询
    *按送货人查询
    *按提货人查询
    *按电器名称由大到小顺序输出所有库存
    *按库存数量由高到低输出所有库存

    物资存入

    物资取出

    统计物资

    *入库电器总价值
    *出库电器总利润
    *统计某月每种电器的出库数目
    *统计某月每种品牌的电器的出库数目

    代码

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    //------------------------------------------------------结构体区域
    typedef struct
    {
     char name[20];       //电器名称
     char brandName[20];    //品牌名称
     int num;          //库存数量
     int unitPrice;       //单价
     int year;
     int month;
     int day;
     char manName[20];
    }stock;                 //库存
    stock s[10000],t[10000],x[10000],y[10000],in[10000],out[10000],no[10000],no1[10000],no2[10000];        //全局变量
    //-------------------------------------------------------函数声明区域
    void menu(void);//主菜单函数
    void write(void);//创建仓库函数
    void find(void);//查询库存函数
    void findPart(void);//部分查询函数
    void findOne(void);  //按电器名查询
    void findTwo(void);  //按品牌名查询
    void findThree(void); //按提货人查询
    void findFour(void);  //按送货人查询
    void findFive(void);  //按电器名称大小顺序输出所有库存
    void findSix(void);  //按库存数量由高到低输出所有库存
    void deposit(void);//存入仓库函数
    void takeout(void);//取出仓库函数
    void tongji(void);//统计函数
    void tongji1(void);//第一种统计函数
    void tongji2(void);//第二种统计函数
    void tongji3(void);//第三种统计函数
    void tongji4(void);//第四种统计函数
    int readFile(void);//读取库存记录文件中所有结构体的数目
    int readFile1(void);//读取入库记录文件中所有结构体的数目
    int readFile2(void);//读取出库记录文件中所有结构体的数目
    void end(void);//结束退出函数
    //-------------------------------------------------------主函数
    int main()
    {
     menu();
     return 0;
    }
    void menu(void)
    {
     int n,l=0;
     printf("============================================================\n");
     printf("                              \n");
     printf(" -----*****欢 迎 使 用 仓 库 物 资 管 理 系 统 ! *****----- \n");
     printf("                              \n");
     printf("============================================================\n");
     printf("                              \n");
     printf(" 您可以进行以下操作:                    \n");
     printf("                              \n");
     printf("     1.  仓库初始化                  \n");
     printf("                              \n");
     printf("     2.  查询库存                   \n");
     printf("                              \n");
     printf("     3.  物资存入                   \n");
     printf("                              \n");
     printf("     4.  物资取出                   \n");
     printf("                              \n");
     printf("     5.  统计物资                   \n");
     printf("                              \n");
     printf("     0.  退出系统                   \n");
     printf("                              \n");
     printf("                              \n");
     printf("============================================================\n");
     printf("现在请选择您要进行的操作:(请输入操作前的数字)");
     while(scanf("%d",&n)!=EOF)
      {
        switch(n)
     {
      case 1:system("CLS");write();break;
      case 2:system("CLS");find();break;
      case 3:system("CLS");deposit();break;
      case 4:system("CLS");takeout();break;
      case 5:system("CLS");tongji();break;
      case 0:system("CLS");end();exit(0);
      default :printf("没有此选项!\n 请重新输入!\n");
        }
      }
    
    
    
    
    
    
    
    }
    void write(void)    //right
    {
     FILE *fp;
     int i,n;
     fp=fopen("库存记录.dat","wb");
     rewind(fp);
     printf("============================================================\n");
     printf("请输入仓库中电器信息的组数!\n    ps:相同电器但是不同品牌电器算多种!\n");
     scanf("%d",&n);
     for(i=0;i<n;i++)
     {
     printf("开始写入第%d组\n",i+1);
     printf("请输入电器名称:");
     scanf("%s",s[i].name);
     printf("请输入电器品牌名称:");
     scanf("%s",s[i].brandName);
     printf("请输入电器数量:");
     scanf("%d",&s[i].num);
     printf("请输入电器单价:");
     scanf("%d",&s[i].unitPrice);
     printf("请输入存货时间: <年月日之间用空格隔开>例:2016 12 01\n");
     scanf("%d%d%d",&s[i].year,&s[i].month,&s[i].day);
     printf("请输入存货人:");
     scanf("%s",s[i].manName);
     }
     fwrite(s,sizeof(stock),n,fp);
     fclose(fp);
     printf("当前库存记录:(请仔细核对)\n");
     for(i=0;i<n;i++)
      {
       printf("%s\n%s\n%d\n%d\n%d.%d.%d\n%s\n",s[i].name,s[i].brandName,s[i].num,s[i].unitPrice,s[i].year,s[i].month,s[i].day,s[i].manName);
      }
    
     printf("电器信息写入完成!\n 请按回车键返回主界面!\n");
     getchar();getchar();
     system("CLS");
     menu();
    }
    void findOne(void)
    {
     char name[10],ch='y';
     int i,k,n,bn;
     bn=readFile();
     do
     {
     system("CLS");
     printf("============================================================\n");
     printf("请输入要查询的电器名称:\n");
     getchar();
     gets(name);
     k=-1;
     for(i=0;i<bn;i++)
     {
      if(strcmp(t[i].name,name)==0)
      {
      printf("该电器信息如下:\n");
      k=i;
      printf("电器名称:%s,电器品牌:%s,库存数量:%d,电器单价:%d,入库时间:%d.%d.%d,存货人:%s\n",t[k].name,t[k].brandName,t[k].num,t[k].unitPrice,t[k].year,t[k].month,t[k].day,t[k].manName);
      }
     }
     if(k==-1)
     {
      printf("抱歉,本仓库中无此电器!\n");
     }
     printf("\n是否继续查询?<y/n>\n");
     ch=getchar();
     }while(ch=='y'||ch=='Y');
     printf("将返回上一级菜单!\n 请按回车键确认!\n");
     getchar();getchar();
     system("CLS");
     findPart();
    }
    void findTwo(void)
    {
     char brandName[10],ch='y';
     int i,k,n,bn;
     bn=readFile();
     do
     {
     system("CLS");
     printf("============================================================\n");
     printf("请输入要查询的品牌名称:\n");
     getchar();
     gets(brandName);
     k=-1;
     for(i=0;i<bn;i++)
     {
      if(strcmp(t[i].brandName,brandName)==0)
      {
      printf("该电器信息如下:\n");
      k=i;
      printf("电器名称:%s,电器品牌:%s,库存数量:%d,电器单价:%d,入库时间:%d.%d.%d,存货人:%s\n",t[k].name,t[k].brandName,t[k].num,t[k].unitPrice,t[k].year,t[k].month,t[k].day,t[k].manName);
      }
     }
     if(k==-1)
     {
      printf("抱歉,本仓库中无此电器!\n");
    
     }
     printf("\n是否继续查询?<y/n>\n");
     ch=getchar();
     }while(ch=='y'||ch=='Y');
     printf("将返回上一级菜单!\n 请按回车键确认!\n");
     getchar();getchar();
     system("CLS");
     findPart();
    }
    void findThree(void)      // 按送货人查询 入库
    {
     char manName[10],ch='y';
     int i,k,n,bn1;
     bn1=readFile1();
     FILE *fp1;
     fp1=fopen("入库记录.dat","rb+");
     if(fp1==NULL)
     {
     printf("该仓库中未添加任何电器!\n");
     exit(0);
     }
     fread(&y,sizeof(stock),bn1,fp1);
     fclose(fp1);
     do
     {
     system("CLS");
     printf("============================================================\n");
     printf("请输入要查询的存货人:\n");
     getchar();
     gets(manName);
     k=-1;
     for(i=0;i<bn1;i++)
     {
      if(strcmp(y[i].manName,manName)==0)
      {
      printf("该电器信息如下:\n");
      k=i;
      printf("电器名称:%s,电器品牌:%s,库存数量:%d,电器单价:%d,入库时间:%d.%d.%d,存货人:%s\n",y[k].name,y[k].brandName,y[k].num,y[k].unitPrice,y[k].year,y[k].month,y[k].day,y[k].manName);
      }
     }
     if(k==-1)
     {
      printf("抱歉,本仓库中无此存货人存入的电器!\n");
    
     }
     printf("\n是否继续查询?<y/n>\n");
     ch=getchar();
     }while(ch=='y'||ch=='Y');
     printf("将返回上一级菜单!\n 请按回车键确认!\n");
     getchar();getchar();
     system("CLS");
     findPart();
    }
    void findFour(void)     //按提货人查询  出库
    {
     char manName[10],ch='y';
     int i,k,n,bn2;
     bn2=readFile2();
     FILE *fp2;
     fp2=fopen("出库记录.dat","rb+");
     if(fp2==NULL)
     {
     printf("该仓库中未提出任何电器!\n");
     exit(0);
     }
     fread(&x,sizeof(stock),bn2,fp2);
     fclose(fp2);
     do
     {
     system("CLS");
     printf("============================================================\n");
     printf("请输入要查询的提货人:\n");
     getchar();
     gets(manName);
     k=-1;
     for(i=0;i<bn2;i++)
     {
      if(strcmp(x[i].manName,manName)==0)
      {
      printf("该电器信息如下:\n");
      k=i;
      printf("电器名称:%s,电器品牌:%s,库存数量:%d,电器单价:%d,出库时间:%d.%d.%d,提货人:%s\n",x[k].name,x[k].brandName,x[k].num,x[k].unitPrice,x[k].year,x[k].month,x[k].day,x[k].manName);
      }
     }
     if(k==-1)
     {
      printf("抱歉,本仓库中无此提货人提出的电器!\n");
    
     }
     printf("\n是否继续查询?<y/n>\n");
     ch=getchar();
     }while(ch=='y'||ch=='Y');
     printf("将返回上一级菜单!\n 请按回车键确认!\n");
     getchar();getchar();
     system("CLS");
     findPart();
    
    
    }
    void findFive(void)    //电器名称大小顺序输出所有库存
    {
     int bn;
     bn=readFile();
     printf("============================================================\n");
     FILE *fp;
     fp=fopen("库存记录.dat","rb+");
     if(fp==NULL)
     {
     printf("该仓库中无库存!\n");
     exit(0);
     }
     fread(&s,sizeof(stock),bn,fp);
     int i,j;
     for(i=0;i<bn-1;i++)
     for(j=0;j<bn-1-i;j++)
     {
      if(s[j].name<s[j+1].name)
      {
      t[1]=s[j+1];
      s[j+1]=s[j];
      s[j]=t[1];
      }
     }
     for(i=0;i<bn;i++)
     printf("%d. 电器名称:%s,电器品牌:%s,库存数量:%d,电器单价:%d,入库时间:%d.%d.%d,存货人:%s\n",i+1,s[i].name,s[i].brandName,s[i].num,s[i].unitPrice,s[i].year,s[i].month,s[i].day,s[i].manName);
     printf("\n输出完成!请按回车键返回上一级!\n");
     getchar();getchar();
     system("CLS");
     findPart();
    }
    void findSix(void)    //按库存数量由高到低输出所有库存
    {
     int bn;
     bn=readFile();
     printf("============================================================\n");
     FILE *fp;
     fp=fopen("库存记录.dat","rb+");
     if(fp==NULL)
     {
     printf("该仓库中无库存!\n");
     exit(0);
     }
     fread(&s,sizeof(stock),bn,fp);
     int i,j;
     for(i=0;i<bn-1;i++)
     for(j=0;j<bn-1-i;j++)
     {
      if(s[j].num<s[j+1].num)
      {
      t[1]=s[j+1];
      s[j+1]=s[j];
      s[j]=t[1];
      }
     }
     for(i=0;i<bn;i++)
     printf("%d. 电器名称:%s,电器品牌:%s,库存数量:%d,电器单价:%d,入库时间:%d.%d.%d,存货人:%s\n",i+1,s[i].name,s[i].brandName,s[i].num,s[i].unitPrice,s[i].year,s[i].month,s[i].day,s[i].manName);
     printf("\n输出完成!请按回车键返回上一级!\n");
     getchar();getchar();
     system("CLS");
     findPart();
    }
    void findPart(void)
    {
     int n;
     printf("============================================================\n");
     printf("1. 按电器名查询\n");
     printf("2. 按品牌名查询\n");
     printf("3. 按送货人查询\n");
     printf("4. 按提货人查询\n");
     printf("5. 按电器名称由大到小顺序输出所有库存\n");
     printf("6. 按库存数量由高到低输出所有库存\n");
     printf("0. 返回主菜单\n");
     while(scanf("%d",&n)!=EOF)
     switch(n)
     {
     case 1:system("CLS");findOne();break;
     case 2:system("CLS");findTwo();break;
     case 3:system("CLS");findThree();break;
     case 4:system("CLS");findFour();break;
     case 5:system("CLS");findFive();break;
     case 6:system("CLS");findSix();break;
     case 0:system("CLS");menu();break;
     default :printf("没有此选项!\n 请重新输入!\n");
     }
    }
    void find(void)
    {
     int i,bn;
     FILE *fp;
     fp=fopen("库存记录.dat","rb+");
     if(fp==NULL)
     {
     printf("该仓库中无库存!\n");
     exit(0);
     }
     rewind(fp);
     bn=readFile();
     fread(&t,sizeof(stock),bn,fp);
     getchar();
     findPart();
     fclose(fp);
    }
    void deposit(void)  //入库
    {
     printf("============================================================\n");
     int bn,bn1;
     stock jia;
     FILE *fp1,*fp;
     int i=0,j,n=0;
     char ch='y';
    
     printf("请输入要加入仓库的电器信息:\n");
     do
     {
     fp1=fopen("入库记录.dat","ab+");
     if(fp1==NULL)
     {
      printf("该仓库中未添加任何电器!\n");
      exit(0);
     }
     fp=fopen("库存记录.dat","ab+");
     bn=readFile();
     bn1=readFile1();
     printf("请输入电器名称:");
     scanf("%s",jia.name);
     printf("请输入电器品牌:");
     scanf("%s",jia.brandName);
     printf("请输入电器数量:");
     scanf("%d",&jia.num);
     printf("请输入电器单价:");
     scanf("%d",&jia.unitPrice);
     printf("请输入送货时间: <ps: 年月日之间用空格隔开> 例:2016 12 01\n");
     scanf("%d%d%d",&jia.year,&jia.month,&jia.day);
     printf("请输入送货人:");
     scanf("%s",jia.manName);
     fwrite(&jia,sizeof(stock),1,fp1);
     fwrite(&jia,sizeof(stock),1,fp);
     fclose(fp1);fclose(fp);
     printf("是否继续输入?<y/n>\n");
     getchar();
     ch=getchar();
     }while(ch=='y'||ch=='Y');
     printf("将返回上一级菜单!\n 请按回车键确认!\n");
     getchar();
    
     system("CLS");
     menu();
    }
    void takeout(void)   //出库
    {
     stock jian;
     printf("==============================================================\n");
     int bn,bn2,i,j;
     char ch='y';
     FILE *fp,*fp2;
     bn=readFile();
     bn2=readFile2();
    
     printf("请输入要提出仓库的电器信息:\n");
     do
     {
     fp=fopen("库存记录.dat","rb+");
     if(fp==NULL)
     {
      printf("无法打开此文件!\n");
      exit(0);
     }
     for(i=0;i<bn;i++)
     {
      fread(&s[i],sizeof(stock),1,fp);
     }
     fclose(fp);
     fp2=fopen("出库记录.dat","wb+");
     if(fp2==NULL)
     {
      printf("无法打开此文件!\n");
      exit(0);
     }
     printf("请输入电器名称:");
     scanf("%s",jian.name);
     printf("请输入电器品牌:");
     scanf("%s",jian.brandName);
     printf("请输入电器数量:");
     scanf("%d",&jian.num);
     printf("请输入电器单价:");
     scanf("%d",&jian.unitPrice);
     printf("请输入提货时间: <ps: 年月日之间用空格隔开> 例:2016 12 01\n");
     scanf("%d%d%d",&jian.year,&jian.month,&jian.day);
     printf("请输入提货人:");
     scanf("%s",jian.manName);
     getchar();
     fwrite(&jian,sizeof(stock),1,fp2);
     fclose(fp2);
     for(i=0;i<bn;i++)
     {
      if((strcmp(jian.name,s[i].name)==0)&&(strcmp(jian.brandName,s[i].brandName)==0))
      {
      if(jian.num<=s[i].num)
      {
       s[i].num=s[i].num-jian.num;
      }
      else
      {
       printf("库存不足!无法提出!\n");
       printf("请按回车键返回!");
       getchar();
       system("CLS");
       menu();
      }
      }
     }
     fopen("库存记录.dat","wb+");
     for(i=0;i<bn;i++)
     {
      fwrite(&s[i],sizeof(stock),1,fp);
     }
     fclose(fp);
    
     printf("\n出库完成! 是否继续输入?<y/n>\n");
     getchar();
     ch=getchar();
     }while(ch=='y'||ch=='Y');
     printf("将返回上一级菜单!\n 请按回车键确认!\n");
     getchar();
    
     system("CLS");
     menu();
    
    }
    void tongji(void)
    {
     int n;
     system("CLS");
     printf("==============================================================\n");
     printf("1. 入库电器总价值\n");
     printf("2. 出库电器总利润\n");
     printf("3.统计该月每种电器的出库数目\n");
     printf("4.统计该月每种品牌的电器的出库数目\n");
     printf("0. 返回主菜单\n");
     printf("请选择要进行的操作:(0到4)\n");
     scanf("%d",&n);
     getchar();
     while(n!=0&&n!=1&&n!=2&&n!=3&&n!=4)
     {
    
     printf("没有此选项!\n 请重新输入!\n");
     scanf("%d",&n);
        getchar();
      }
      switch(n)
     {
      case 1:tongji3();break;//第三种统计函数
      case 2:tongji4();break;//第四种统计函数
      case 3:tongji1();break;//第一种统计函数
      case 4:tongji2();break;//第二种统计函数
      case 0:system("CLS");menu();break;
     }
    }
    void tongji2(void)//第二种统计函数
    {
       FILE *fp;
      int bn1,i,year,month,k=0;
      bn1=readFile1();
      system("CLS");
      printf("==============================================================\n");
     fp=fopen("出库记录.dat","rb+");
     if(fp==NULL)
     {
     printf("无法打开此文件!\n");
     exit(0);
     }
     for(i=0;i<bn1;i++)
     {
     fread(&s,sizeof(stock),bn1,fp);
     }
      printf("请输入一个日期(年 月 如 2017 01):\n");
     scanf("%d%d",&year,&month);
    
        for(i=0;i<bn1;i++)
        {
          if((s[i].year==year)&&(s[i].month==month))
          {
            printf("电器名称:%s\n品牌名称:%s\n出库数目:%d\n",s[i].name,s[i].brandName,s[i].num);
            k+=1;
          }
        }
          if(k==0)
          printf("库存记录中不存在此种电器!\n");
    
    
      fclose(fp);
      printf("统计完成,请按回车键返回!\n");
     getchar();
     getchar();
     system("CLS");
     tongji();
    
    }
    void tongji1(void)//第一种统计函数
    {
      FILE *fp;
      int bn1,i,year,month,k=0;
      bn1=readFile1();
      system("CLS");
      printf("==============================================================\n");
     fp=fopen("出库记录.dat","rb+");
     if(fp==NULL)
     {
     printf("无法打开此文件!\n");
     exit(0);
     }
     for(i=0;i<bn1;i++)
     {
     fread(&s,sizeof(stock),bn1,fp);
     }
      printf("请输入一个日期(年 月 如 2017 01 ):\n");
     scanf("%d%d",&year,&month);
    
        for(i=0;i<bn1;i++)
        {
          if((s[i].year==year)&&(s[i].month==month))
          {
            printf("电器名称:%s\n出库数目:%d\n",s[i].name,s[i].num);
            k+=1;
          }
        }
          if(k==0)
          printf("库存记录中不存在此种电器!\n");
    
    
    
      fclose(fp);
      printf("统计完成,请按回车键返回!\n");
     getchar();
     getchar();
     system("CLS");
     tongji();
    
    
    }
    void tongji3(void)//第三种统计函数
    {
     FILE *fp;
     int bn1,i;
     long long int total=0;
     bn1=readFile1();
     system("CLS");
     printf("==============================================================\n");
     fp=fopen("入库记录.dat","rb+");
     if(fp==NULL)
     {
     printf("无法打开此文件!\n");
     exit(0);
     }
     for(i=0;i<bn1;i++)
     {
     fread(&s[i],sizeof(stock),1,fp);
     }
     fclose(fp);
     for(i=0;i<bn1;i++)
     {
     total+=(s[i].num*s[i].unitPrice);
     }
     printf("商品总价值为%d\n",total);
     printf("统计完成,请按回车键返回!\n");
     getchar();
     system("CLS");
     tongji();
    }
    void tongji4(void)//第四种统计函数
    {
    
     FILE *fp1,*fp2;
     int bn,bn2,i;
     long long int money=0;
     bn=readFile();
     bn2=readFile2();
     system("CLS");
     printf("==============================================================\n");
     fp1=fopen("库存记录.dat","rb+");
    
     if(fp1==NULL)
     {
     printf("无法打开此文件!\n");
     exit(0);
     }
     for(i=0;i<bn;i++)
     {
     fread(&s[i],sizeof(stock),1,fp1);
     }
     fclose(fp1);
     fp2=fopen("出库记录.dat","rb+");
     if(fp2==NULL)
     {
     printf("无法打开此文件!\n");
     exit(0);
     }
     for(i=0;i<bn2;i++)
     {
     fread(&t[i],sizeof(stock),1,fp2);
     }
     fclose(fp2);
    
     for(i=0;i<bn2;i++)
     {
     money+=((t[i].unitPrice-s[i].unitPrice)*t[i].num);
     }
     printf("总利润为%d\n",money);
     printf("统计完成,请按回车键返回!\n");
     getchar();
     system("CLS");
     tongji();
    }
    void end(void)
    {
     printf("==============================================================\n");
     printf("                               \n");
     printf("                               \n");
     printf("                               \n");
     printf("      感 谢 使 用 本 系 统 !              \n");
     printf("                               \n");
     printf("       再 见 !                     \n");
     printf("                               \n");
     printf("                               \n");
     printf("                               \n");
     printf("                               \n");
     printf("==============================================================\n");
    }
    int readFile(void)//库存记录文件中结构体的个数
    {
     FILE *fb;
     int bn=0;
     fb=fopen("库存记录.dat","rb+");
     if(fb==NULL)
     {
     return bn;
     }
     while(!feof(fb))
     {
     if(fread(&no[bn],sizeof(stock),1,fb))
      bn++;
     }
     fclose(fb);
     return bn;
    }
    int readFile1(void)//入库记录文件中结构体的个数
    {
     FILE *fb;
     int bn1=0;
     fb=fopen("入库记录.dat","rb+");
     if(fb==NULL)
     {
     return bn1;
     }
     while(!feof(fb))
     {
     if(fread(&no1[bn1],sizeof(stock),1,fb))
      bn1++;
     }
     fclose(fb);
     return bn1;
    }
    int readFile2(void)//出库记录文件中结构体的个数
    {
     FILE *fb;
     int bn2=0;
     fb=fopen("出库记录.dat","rb+");
     if(fb==NULL)
     {
     return bn2;
     }
     while(!feof(fb))
     {
     if(fread(&no2[bn2],sizeof(stock),1,fb))
      bn2++;
     }
     fclose(fb);
     return bn2;
    }