/*
示例输入:注意逗号是英文逗号
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);
}