通过结构体的方式查找文件中的一组数据,并且比较出good.xiaoshou值最大的五组数据

yuan_tian_yu 2020-07-07 11:49:47
我在不知道一共有多少件商品的情况下(结构体数组的长度下)采用结构体的方式进行文件查询,以及对于销量最好的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");
}
...全文
130 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuan_tian_yu 2020-07-08
  • 打赏
  • 举报
回复
引用 3 楼 自信男孩 的回复:
[quote=引用 2 楼 yuan_tian_yu 的回复:]目前这个程序无法实现文件的查找功能和统计功能,想问一下如何修改之后可以实现
文件查找最终还是要将文件内容读取到内存,然后执行查找。 [/quote]哦哦……劳烦您能说的更详细一些吗。我这学期刚刚开始学习c语言,对于文件操作这块掌握的不是很扎实。希望您能够说的更具体一些
自信男孩 2020-07-08
  • 打赏
  • 举报
回复
引用 2 楼 yuan_tian_yu 的回复:
目前这个程序无法实现文件的查找功能和统计功能,想问一下如何修改之后可以实现

文件查找最终还是要将文件内容读取到内存,然后执行查找。

yuan_tian_yu 2020-07-08
  • 打赏
  • 举报
回复
目前这个程序无法实现文件的查找功能和统计功能,想问一下如何修改之后可以实现
chxchxkkk 2020-07-08
  • 打赏
  • 举报
回复
问题是什么呢?编译不过去?还是结果错误?
自信男孩 2020-07-08
  • 打赏
  • 举报
回复
引用 4 楼 yuan_tian_yu 的回复:
[quote=引用 3 楼 自信男孩 的回复:][quote=引用 2 楼 yuan_tian_yu 的回复:]目前这个程序无法实现文件的查找功能和统计功能,想问一下如何修改之后可以实现

文件查找最终还是要将文件内容读取到内存,然后执行查找。

[/quote]哦哦……劳烦您能说的更详细一些吗。我这学期刚刚开始学习c语言,对于文件操作这块掌握的不是很扎实。希望您能够说的更具体一些[/quote]
读一个记录比较一下,如此循环读和比较

69,382

社区成员

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

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