我在不知道一共有多少件商品的情況下(結構體陣列的長度下)采用結構體的方式進行檔案查詢,以及對于銷量最好的5件商品和銷量最差的5件商品進行查詢。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
void luru(void);
void xianshi(void);
void chaxun(void);
void tongji(void);
void load(void);
int a,b,c;
loop:printf("************************\n");
printf("** 1 商品資訊錄入 **\n");
printf("** 2 商品資訊顯示 **\n");
printf("** 3 商品資訊查詢 **\n");
printf("** 4 商品資訊統計 **\n);
printf("** 5 結束程式 **\n");
printf("************************\n");
for(;;)
{
printf("請輸入序號:\n");
scanf("%d",&a);
switch(a)
{
case 1:luru();break;
case 2:xianshi();break;
case 3:chaxun();break;
case 4:tongji();break;
case 5:return 0;break;
case 6:load();break;
default:goto loop;break;
}
printf("是否繼續查詢\n 1 是\n 2 否\n");
scanf("%d",&b);
if(b!=1)
break;
}
}
struct GOOD
{
char flag[1];
char name[30];
long int bianhao;
int price;
int amount;
int xiaoshou;
}good;
void luru()
{
FILE *fp;
printf("請在輸入每個商品前先輸入空格,而后依次輸入商品的名字,編號,價格,總量,銷售量;以逗號間隔,每個商品輸入結束后輸入分號,以#號結束\n");
for(;;)
{
if((fp=fopen("save.txt","a"))==NULL)
{
printf("can't open file\n'");
exit(0);
}
if(strcmp(gets(good.flag),"#")!=0)
fscanf(fp,"%s,%ld,%d,%d,%d;",good.name,good.bianhao,good.price,good.amount,good.xiaoshou);
else
break;
if(fwrite(&good,sizeof(struct GOOD),1,fp)!=1)
printf("file write error\n");
}
fclose(fp);
return;
}
void xianshi(void)
{
char filename;
FILE* file=fopen("save.txt","r+");
while((filename=fgetc(file))!=EOF)
{
if(filename=='\0')
continue;
else if(filename==' ')
continue;
else if(filename==';')
printf("\n");
else
printf("%c",filename);
}
return;
}
int load() /*匯入函式*/
{
FILE*fp2;
int i=0;
struct GOOD good1[i];
if((fp2=fopen("save.txt","rb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
else
{
do
{
fread(&good1[i],sizeof(struct GOOD),1,fp2);
i++;
}
while(feof(fp2)==0);
}
printf("%d",i);
fclose(fp2);
return(i-1);
}
void chaxun(void)
{
char name[100];
int i,m;
struct GOOD good1[i];
printf("請輸入要查找的物品名稱:\n");
scanf("%s",name);
/*m是總物品數 */
m=load();
for(i=0;i<m;i++)
if(strcmp(name,good1[i].name)==0)
{printf("%s,%d,%d,%d,%d\n",good1[i].name,good1[i].bianhao,good1[i].price,good1[i].amount,good1[i].xiaoshou);
break;
}
if(i==m)
printf("對不起,查無此物件\n");
return;
}
void tongji(void)
{
printf("4");
}
uj5u.com熱心網友回復:
問題是什么呢?編譯不過去?還是結果錯誤?uj5u.com熱心網友回復:
目前這個程式無法實作檔案的查找功能和統計功能,想問一下如何修改之后可以實作uj5u.com熱心網友回復:
檔案查找最侄訓是要將檔案內容讀取到記憶體,然后執行查找。
uj5u.com熱心網友回復:
哦哦……勞煩您能說的更詳細一些嗎。我這學期剛剛開始學習c語言,對于檔案操作這塊掌握的不是很扎實。希望您能夠說的更具體一些uj5u.com熱心網友回復:
哦哦……勞煩您能說的更詳細一些嗎。我這學期剛剛開始學習c語言,對于檔案操作這塊掌握的不是很扎實。希望您能夠說的更具體一些 目前這個程式無法實作檔案的查找功能和統計功能,想問一下如何修改之后可以實作
檔案查找最侄訓是要將檔案內容讀取到記憶體,然后執行查找。
讀一個記錄比較一下,如此回圈讀和比較
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/30940.html
標籤:C語言
上一篇:小易喜歡的單詞實作的演算法
下一篇:矩陣進行分類
