求助!!C语言仓库管理相关

qq_46521816 2020-06-26 03:05:39
希望大家帮忙解决以下问题: 1.同一种商品输入第二次(即增加原有商品数量)时,该程序的记录中并未增加其数量 2.出库函数无法运行,只输入了编号就自动结束该系统 3.如何将仓库进出日志记录在文件中 (代码在评论里) 感激不尽!!!
...全文
128 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2020-06-28
  • 打赏
  • 举报
回复
void input()
{
struct Info info;
FILE *fp1,*fp2;
char f,ch[10];
fp1=fopen("1.dat","rb");//已存在只读二进制文件
fp2=fopen("2.dat","wb+");// 新建文件,允许读写 ,储存更新后的货物信息
printf("请输入货物编号:");
//scanf("%s",&ch);
scanf("%s", ch);
while(!feof(fp1))//读完fp1中的进库货物
{
if(fread(&info,sizeof(info),1,fp1))//从fp1中可以读1个对象到info中
{
if(strcmp(ch,info.num)==0)//如果该货物已经存在
{
printf1();
printf2(info);//查看目前库存
printf("请输入货物数量:");
scanf("%d",&info.amount);
printf("\n");
fwrite(&info,sizeof(info),1,fp2);//更新库存信息
while(!feof(fp1))
{
if(fread(&info,sizeof(info),1,fp1))
fwrite(&info,sizeof(info),1,fp2);
}
break;
}
}
else//出现新商品种类
{
printf("请输入新的信息:\n");
printf("请输入货物名称:");
scanf("%s",&info.name);
printf("\n");
printf("请输入货物数量:");
scanf("%d",&info.amount);
printf("\n");
printf("请输入货物编号:");
scanf("%s",&info.num);
fwrite(&info,sizeof(info),1,fp2);//更新库存信息
}
}
fclose(fp1);
fclose(fp2);
remove("1.dat");
rename("2.dat","1.dat");
printf("按任意键返回菜单");
getchar();
system("cls");
menu();
}

楼主的input函数没看出有问题吗?

最外层是判断fp1,但是内层while还是判断fp1。另外判断fp1和while循环里的else 输入有啥关系吗?

建议楼主还是把逻辑搞清楚了。
qq_46521816 2020-06-26
  • 打赏
  • 举报
回复
void output()//出库函数 { struct Info info; FILE *fp1,*fp2; int a; char ch[20]; printf("请输入需要出库的编号"); scanf("%s",ch); while(!feof(fp1)) { if(fread(&info,sizeof(info),1,fp1)) if(strcmp(ch,info.num)==0)//是否存在该商品 { printf1(); printf2(info); printf("请输入需要出库的数量"); scanf("%d",&a); if(a<=info.amount)//判断库存是否大于需求 { info.amount-=a; fwrite(&info,sizeof(info),1,fp2); printf("出库成功!\n"); if(info.amount==0){ zero(ch); }//库存为零时删除该货物 } else { printf("货物不足!您的请求被拒绝\n"); } while(!feof(fp1)) { if(fread(&info,sizeof(info),1,fp1)) fwrite(&info,sizeof(info),1,fp2); break; } } else fwrite(&info,sizeof(info),1,fp2); } fclose(fp1);fclose(fp2); remove("1.dat"); rename("2.dat","1.dat"); system("pause"); printf("按任意键返回菜单"); getchar(); system("cls"); menu(); } void zero(char ch[10]) //删除货物信息 { struct Info info; FILE *fp1,*fp2; while(!feof(fp1)) { if(fread(&info,sizeof(info),1,fp1)) { printf("删除成功!\n"); } } fclose(fp1); fclose(fp2); remove("1.dat");//删除 rename("2.dat","1.dat"); printf("按任意键返回菜单"); getchar(); system("cls"); menu(); }
qq_46521816 2020-06-26
  • 打赏
  • 举报
回复
void input() { struct Info info; FILE *fp1,*fp2; char f,ch[10]; fp1=fopen("1.dat","rb");//已存在只读二进制文件 fp2=fopen("2.dat","wb+");// 新建文件,允许读写 ,储存更新后的货物信息 printf("请输入货物编号:"); scanf("%s",&ch); while(!feof(fp1))//读完fp1中的进库货物 { if(fread(&info,sizeof(info),1,fp1))//从fp1中可以读1个对象到info中 { if(strcmp(ch,info.num)==0)//如果该货物已经存在 { printf1(); printf2(info);//查看目前库存 printf("请输入货物数量:"); scanf("%d",&info.amount); printf("\n"); fwrite(&info,sizeof(info),1,fp2);//更新库存信息 while(!feof(fp1)) { if(fread(&info,sizeof(info),1,fp1)) fwrite(&info,sizeof(info),1,fp2); } break; } } else//出现新商品种类 { printf("请输入新的信息:\n"); printf("请输入货物名称:"); scanf("%s",&info.name); printf("\n"); printf("请输入货物数量:"); scanf("%d",&info.amount); printf("\n"); printf("请输入货物编号:"); scanf("%s",&info.num); fwrite(&info,sizeof(info),1,fp2);//更新库存信息 } } fclose(fp1); fclose(fp2); remove("1.dat"); rename("2.dat","1.dat"); printf("按任意键返回菜单"); getchar(); system("cls"); menu(); }

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧