仓库物资管理报告.docx
《仓库物资管理报告.docx》由会员分享,可在线阅读,更多相关《仓库物资管理报告.docx(33页珍藏版)》请在冰豆网上搜索。
仓库物资管理报告
程序设计基础课程设计
设计题目:
仓库物资管理系统
班级:
计1110
姓名:
黄秀美
学号:
20111221095
2012年9月6日
1.课程设计目的和要求
我们课程设计的主要目的是为了让我们贯穿大一一年所学的C语言知识,让我们能应用自如,为我们后面的学习奠下更坚实的基础。
课程设计要求每个同学根据自己所学的知识对课程题目进行思索并编程,然后通过交流和查找,设计出一个现实可实施的C语言代码。
2.系统总体设计
设计主要包括了6大功能:
1.创建库存记录文件,根据提示输入若干电器的信息,并将信息保存至一个文件中。
2.物资入库管理,创建一个入库记录文件,每次有物资入库,则按入库记录要求输入各项信息,并将该次的入库信息添加到文件中,同时修改相应的库存记录文件。
3.物资出库管理,创建一个出库记录文件,每次有物资出库,则按出库记录要求输入各项信息,并将该次的出库信息添加到文件中,同时修改相应的库存记录文件。
注意:
物资出库时要检查出库数量的合法性(即出库数量必须小于库存数量)。
4.按不同条件进行查询操作,输出满足条件的物资信息。
(1)输入电器名称,在库存记录文件中查找相应的物资信息并输出。
(2)输入品牌名称,在库存记录文件中查找该品牌的所有电器信息并输出。
(3)输入提货人姓名,输出该提货人对应的出库记录。
(4)输入送货人姓名,输出该送货人对应的入库记录。
5.按不同条件对物资信息进行统计工作。
(1)输入一个日期(年.月),统计该月每种电器的出库数目,并输出。
(2)输入一个日期(年.月),统计该月每种品牌电器的出库数目,并输出。
(3)统计该仓库的商品总价值。
(所有入库记录中入库价格*入库数量)
(4)计算该仓库的总利润。
((出库价格–所有入库记录价格)*出库数量)
6.按不同条件对信息进行排序并输出
(1)根据电器名称,对库存信息从小到大进行排序(注:
电器名称使用字符串比较函数strcmp比较大小),并输出排序后的电器品牌名称。
(2)根据库存数量,对库存信息进行排序,并按库存量从高到低的顺序输出电器信息。
2.1系统功能模块图printf("\t====================================================\n");
printf("\t========仓库物资管理系统========\n");
printf("\t========1、创建库存记录文件========\n");
printf("\t========2、物资入库管理========\n");
printf("\t========3、物资出库管理========\n");
printf("\t========4、查询物资信息========\n");
printf("\t========5、统计物资信息========\n");
printf("\t========6、排序物资信息========\n");
printf("\t========请选择功能(1-6)========\n");
printf("\t====================================================\n");2.2数据结构设计
对全局变量,结构体类型等进行定义和说明
#include
#include
structgoods
{
charname[N];
charbrand[N];
intnumber;
};//*******************库存商品
structdate
{
intyear;
intmonth;
intday;
};//******************日期
structin_goods
{
charname[N];
charbrand[N];
intin_num;
floatin_money;
structdatein_day;//结构体的镶套定义
charin_peo_name[N];
};//*****************入库商品
structout_goods
{
charname[N];
charbrand[N];
intout_num;
floatout_money;
structdateout_day;
charout_peo_name[N];
};//*******************出库商品3.系统详细设计
#include
#include
#defineN10
#defineLEN20
structgoods
{
charname[N];
charbrand[N];
intnumber;
};//*******************库存商品
structdate
{
intyear;
intmonth;
intday;
};//******************日期
structin_goods
{
charname[N];
charbrand[N];
intin_num;
floatin_money;
structdatein_day;//结构体的镶套定义
charin_peo_name[N];
};//*****************入库商品
structout_goods
{
charname[N];
charbrand[N];
intout_num;
floatout_money;
structdateout_day;
charout_peo_name[N];//*******************出库商品
};
voidBuild();//创建库存文件
voidIn_control();//创建入库文件
voidOut_control();//创建出库文件
voidSelect_Message();//查询信息
voidStatistic_Message();//排序信息
voidSort_Name();//以电器名称排序
voidSort_Num();//以电器存量排序
voidSort_Message();//统计信息
voidStatistic_Name_Num();//以电器名称统计
voidStatistic_Brand_Num();//以品牌名称统计
voidStatistic_All_Money();//统计总价格
voidStatistic_Profit();//统计总收益
voidSelet_Name();//以电器名称查询
voidSelet_Brand();//以品牌名称查询
voidSelet_Out_Peo_Name();//以提货人查询
voidSelet_in_Peo_Name();//以送货人查询
//========================================================
voidmain()//******目录入口***********在主函数中建立主菜单
{
inti=0;
charch='y';
do
{
printf("\t============================================\n");
printf("\t========仓库物资管理系统========\n");
printf("\t========1、创建库存记录文件========\n");
printf("\t========2、物资入库管理========\n");
printf("\t========3、物资出库管理========\n");
printf("\t========4、查询物资信息========\n");
printf("\t========5、统计物资信息========\n");
printf("\t========6、排序物资信息========\n");
printf("\t========请选择功能(1-6)========\n");
printf("\t=============================================\n");scanf("%d",&i);
switch(i)
{
case1:
Build();break;
case2:
In_control();break;
case3:
Out_control();break;
case4:
Select_Message();break;
case5:
Statistic_Message();break;
case6:
Sort_Message();break;
}
printf("\t是否继续操作(Y/N)?
\n");
//getchar();
ch=getchar();
}while(ch=='Y'||ch=='y');//判断为真时执行循环体
}
//==================创建库存文件=====================
voidBuild()
{
FILE*fp;
intsize=0,i=0;
if((fp=fopen("库存记录.txt","w"))==NULL)
{
printf("不能打开此记录,请核实\n");
return;
}
printf("\t请输入本次输入的库存记录条数(单次输入最大为20条)\n");
scanf("%d",&size);
structgoodsg[LEN];
printf("\t请逐条输入电器的基本信息\n");
for(i=0;i{
printf("\t电器名称品牌名称库存数量\n");
scanf("%s%s%d",&g[i].name,&g[i].brand,&g[i].number);
fwrite(&g[i],sizeof(structgoods),1,fp);
}
fclose(fp);
getchar();
}
//===================创建入库文件====================
voidIn_control()
{
FILE*fp1,*fp2;
intsize=0;
inti,j;
structgoodstemp={"\0","0",0};
chara[1]={'\0'};
if((fp1=fopen("入库记录.txt","a+"))==NULL)
{
printf("不能打开此记录,请核实\n");
return;
}
printf("\t请输入本次输入的入库记录条数(单次输入最大为20条)\n");
scanf("%d",&size);
structin_goodsig[LEN];
printf("\t请逐条输入电器的基本信息\n");
for(i=0;i{
printf("\t电器名称品牌名称入库数量单价日期(年/月/日)送货人姓名\n");
scanf("%s%s%d%f%d%d%d%s",&ig[i].name,&ig[i].brand,&ig[i].in_num,&ig[i].in_money,&ig[i].in_day.year,&ig[i].in_day.month,&ig[i].in_day.day,&ig[i].in_peo_name);
fwrite(&ig[i],sizeof(structin_goods),1,fp1);
}
if((fp2=fopen("库存记录.txt","r+"))==NULL)
{
printf("不能打开此记录,请核实\n");
return;
}
structgoodsg[LEN]={'\0'};
for(i=0;i{
fread(&g[i],sizeof(structgoods),1,fp2);for(j=0;j{
if(strcmp(g[i].name,ig[j].name)==0&&strcmp(g[i].brand,ig[j].brand)==0)
{
g[i].number=g[i].number+ig[j].in_num;
}
}
}//修改库存信息
rewind(fp2);
for(i=0;i{
if(strcmp(g[i].name,a)!
=0)
fwrite(&g[i],sizeof(structgoods),1,fp2);//将g中的一个数据写入文件
}//更新库存文件
fclose(fp1);
fclose(fp2);
getchar();
}
//=====================创建出库文件=======================
voidOut_control()
{
FILE*fp1,*fp2;
intsize=0;
inti,j=0;
structgoodsg[LEN];
structout_goodsog[LEN];
if((fp1=fopen("出库记录.txt","a+"))==NULL)
{
printf("不能打开此记录,请核实\n");
return;
}
if((fp2=fopen("库存记录.txt","r+"))==NULL)
{
printf("不能打开此记录,请核实\n");
return;
}
printf("\t请输入本次输入的出库记录条数(单次输入最大为20条)\n");
scanf("%d",&size);
printf("\t请逐条输入电器的基本信息\n");
for(i=0;i{
printf("\t电器名称品牌名称出库数量单价日期(年/月/日)提货人姓名\n");
scanf("%s%s%d%f%d%d%d%s",&og[i].name,&og[i].brand,&og[i].out_num,&og[i].out_money,&og[i].out_day.year,&og[i].out_day.month,&og[i].out_day.day,&og[i].out_peo_name);
j=0;
while(!
feof(fp2))
{
fread(&g[j],sizeof(structgoods),1,fp2);
if(strcmp(g[j].name,og[i].name)==0&&strcmp(g[j].brand,og[i].brand)==0)
{
if(og[i].out_num>g[j].number)
{
printf("出库数量大于库存数量,请核实后重新输入\n");
printf("\t电器名称品牌名称出库数量单价日期(年/月/日)提货人姓名\n");scanf("%s%s%d%f%d%d%d%s",&og[i].name,&og[i].brand,&og[i].out_num,&og[i].out_money,&og[i].out_day.year,&og[i].out_day.month,&og[i].out_day.day,&og[i].out_peo_name);
g[j].number=g[j].number-og[i].out_num;
}//越界判定(重新输入正确的信息)
else
g[j].number=g[j].number-og[i].out_num;
}
elseif(strcmp(g[j].name,og[i].name)!
=0&&strcmp(g[j].brand,og[i].brand)!
=0)
{
printf("该货物不存在,请核实\n");
printf("\t电器名称品牌名称出库数量单价日期(年/月/日)提货人姓名\n");
scanf("%s%s%d%f%d%d%d%s",&og[i].name,&og[i].brand,&og[i].out_num,&og[i].out_money,&og[i].out_day.year,&og[i].out_day.month,&og[i].out_day.day,&og[i].out_peo_name);
g[j].number=g[j].number-og[i].out_num;
}
j++;
if(j>i)
break;
}
rewind(fp2);//将文件位置重新指向文件开头
}
rewind(fp1);
rewind(fp2);
for(i=0;i{
fwrite(&g[i],sizeof(structgoods),1,fp2);
}
for(i=0;i{
fwrite(&og[i],sizeof(structout_goods),1,fp1);
}
fclose(fp1);
fclose(fp2);
getchar();
}
//==================查询信息目录=====================
voidSelect_Message()
{
inti=0;
charch='y';
do
{
printf("\t请选择查询方式\n");
printf("\t1、输入电器名称,在库存记录文件中查找相应的物资信息并输出\n");
printf("\t2、输入品牌名称,在库存记录文件中查找该品牌的所有电器信息并输出\n");
printf("\t3、输入提货人姓名,输出该提货人对应的出库记录\n");
printf("\t4、输入送货人姓名,输出该送货人对应的入库记录\n");
scanf("%d",&i);
switch(i)
{
case1:
Selet_Name();break;
case2:
Selet_Brand();break;
case3:
Selet_Out_Peo_Name();break;
case4:
Selet_in_Peo_Name();break;
}
printf("是否选择其他查询方式继续查询?
\n");
ch=getchar();
getchar();
}while(ch=='Y'||ch=='y');
}
//======================以电器名称查询=====================
voidSelet_Name()
{
FILE*fp;
structgoodsg[LEN];//建立库存数组
inti=0;
charch='y';
chartname[N];
if((fp=fopen("库存记录.txt","r"))==NULL)
{
printf("不能打开此记录,请核实\n");
return;
}
do
{
printf("\t请输入要查询的电器名称\n");
scanf("%s",&tname);
getchar();
while(!
feof(fp))//当源文件未结束时进行循环
{
fread(&g[i],sizeof(structgoods),1,fp);
if(strcmp(tname,g[i].name)==0)
printf("电器名称:
%s\n品牌名称:
%s\n库存数量:
%d\n",g[i].name,g[i].brand,g[i].number);
i++;
}
printf("\t是否继续查询?
(Y/N)\n");
ch=getchar();
rewind(fp);
}while(ch=='y'||ch=='Y');
getchar();
}
//================以品牌名称查询=======================
voidSelet_Brand()
{
FILE*fp;
structgoodsg[LEN];
inti=0;
charch='y';
chartbrand[N];
if((fp=fopen("库存记录.txt","r"))==NULL)
{
printf("不能打开此记录,请核实\n");
return;
}
do
{
printf("\t请输入要查询的品牌名称\n");
scanf("%s",tbrand);
getchar();
printf("\t%s的电器有:
\n",tbrand);
while(!
feof(fp))
{
fread(&g[i],sizeof(structgoods),1,fp);
if(strcmp(tbrand,g[i].brand)==0)
printf("\t电器名称:
%s\n库存数量:
%d\n",g[i].name,g[i].number);
i++;
}
printf("\t是否继续查询?
(Y/N)\n");
ch=getchar();
getchar();
rewind(fp);
}while(ch=='y'||ch=='Y');
getchar();
}
//====================以提货人姓名查询=====================
voidSelet_Out_Peo_Name()
{
FILE*fp;
structout_goodsog[LEN];
chartiname[N];
charch='y';
inti=0;
if((fp=fopen("出库记录.txt","r"))==NULL)
{
printf("\t不能打开此记录,请核实\n");
return;
}
do
{
printf("\t请输