希望大家幫忙解決以下問題:
1.同一種商品輸入第二次(即增加原有商品數量)時,該程式的記錄中并未增加其數量
2.出庫函式無法運行,只輸入了編號就自動結束該系統
3.如何將倉庫進出日志記錄在檔案中
(代碼在評論里)
感激不盡!!!



uj5u.com熱心網友回復:
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();
}
uj5u.com熱心網友回復:
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();
}
uj5u.com熱心網友回復:
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 輸入有啥關系嗎?
建議樓主還是把邏輯搞清楚了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/35895.html
標籤:C語言
上一篇:C++指標動態分配問題
下一篇:c++初級選手,編譯出錯
