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

前言

此系统为博主大一上学期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;

}

运行截图

总结

两年前写的程序了,大体运行了一下,存在一点小bug,还有一些设计不合理的地方以及没有解决非法输入的问题。

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 C语言实现仓库物资管理系统 的全部内容, 来源链接: utcz.com/p/244719.html

回到顶部