商品销售记录包括商品id,商品名称,商品出售日期(结构体:包括年,月,日),单价,数量。现有一文件sell.txt里面有10条商品销售记录,每条记录格式如下:1 袜子 2021-12-26 5 1

/*
示例输入:注意逗号是英文逗号
1,袜子,2021-12-26,6,1
2,鞋子,2022-10-26,122,1
3,裤子,2021-11-26,200,1
4,笔,2021-8-26,1.5,2
5,毛巾,2021-9-26,5,3
6,牙刷,2021-7-26,2,2
7,杯子,2021-12-24,3,2
8,牙膏,2021-12-01,15,1
9,洗面奶,2021-2-26,100,1
10,肥皂,2021-03-26,5,2
*/

#include<stdio.h>
#include<stdlib.h>
#define N 10
struct RQ
{
	int nian;
	int yue;
	int ri;
};
struct SP
{
	int id;
	char name[10];
	struct RQ r;
	float price;
	int num;
};
void Shu(struct SP *s);
int main()
{
	FILE *fp;
	fp=fopen("sell.txt","r");
	if(fp==NULL)
	{
		printf("文件打开失败!!\n");
		exit(0);
	}
	struct SP s[N];
	int j;
	float av,sum=0,gs=0;
	for(j=0;j<N;j++)
	{
		fscanf(fp,"%d %s %d-%d-%d %f %d",&s[j].id ,s[j].name ,&s[j].r.nian,&s[j].r.yue ,&s[j].r.ri ,&s[j].price ,&s[j].num  );
//这一行如果你要读入的格式带逗号,也就是这种 1,袜子,2021-12-25,5,1 可以改成如下格式
//fscanf(fp,"%d,%[^,],%d-%d-%d,%f,%d",&s[j].id ,s[j].name ,&s[j].r.nian,&s[j].r.yue ,&s[j].r.ri ,&s[j].price ,&s[j].num  );
		sum=sum+s[j].price*s[j].num ;   //计算总金额
		gs=gs+s[j].num;    //计算总个数
	}
	Shu(s);    //降序输出函数
	av=sum/gs;
	printf("商品总金额:%.1f\n",sum);
	printf("商品均价:%.1f\n",av);
	/*测试是否成功读入到数组指定位置
	int i;
	for(i=0;i<N;i++)
		printf("%-3d,%s,%-5d-%-3d-%-3d,%-6.1f,%d,\n",s[i].id ,s[i].name ,s[i].r.nian,s[i].r.yue ,s[i].r.ri ,s[i].price ,s[i].num);
		*/
	fclose(fp);
	return 0;
}
void Shu(struct SP *s)  //按日期降序输出
{
	int i,j;
	struct SP c;
	for(i=0;i<N;i++)     //我是先判断了年若是相同就再判断月,若是月相同就判断日
	{
		for(j=0;j<N-i-1;j++)
		{
			if(s[j].r.nian<s[j+1].r.nian)
			{
				c=s[j];
				s[j]=s[j+1];
				s[j+1]=c;
			}
			else if(s[j].r.nian==s[j+1].r.nian)
			{
				if(s[j].r.yue <s[j+1].r.yue )
				{
				   c=s[j];
				   s[j]=s[j+1];
				   s[j+1]=c;
				}
				else if(s[j].r.yue ==s[j+1].r.yue )
				{
					if(s[j].r.ri  <s[j+1].r.ri  )
					{
				       c=s[j];
				       s[j]=s[j+1];
				       s[j+1]=c;
					}
				}
			}
		}
	}
	for(i=0;i<N;i++)   //
		printf("%-3d,%s,%-4d-%-2d-%-2d,%-6.1f,%d,\n",s[i].id ,s[i].name ,s[i].r.nian,s[i].r.yue ,s[i].r.ri ,s[i].price ,s[i].num);
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值