主题:大侠帮忙啊!
已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)四部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。函数SortDat()其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT10.DAT中。
#include "stdio.h"
#define N 10
struct sell
{ char dm[4];
char mc[10];
int dj;
int sl;
long int je;
}
void WriteDat(struct sell zl[],char *filename);
void ReadDat(struct sell zl[],char *filename);
void SortDat(struct sell zl[]);
main()
{ struct sell zl[N];
int i;
char *file1="IN.DAT",*file2="OUT.DAT";
zl[i].je=zl[i].dj*zl[i].sl;
printf("Please input %d selling information",N);
printf("dm mc dj sl je\n");
for (i=0;i<10;i++)
scanf("%s %s %d %d %d",zl[i].dm,zl[i].mc,&zl[i].dj,&zl[i].sl,&zl[i].je);
WriteDat(zl,file1);
ReadDat(zl,file1);
SortDat(zl);
printf("%s %s %d %d %d",zl[i].dm,zl[i].mc,zl[i].dj,zl[i].sl,zl[i].je);
WriteDat(zl,file2);
}
void ReadDat(struct sell zl[],char *filename)
{ FILE *fp;
if((fp=fopen(filename,"rb"))==NULL)
{ printf("\nCan't open this file!\n");
exit(0);
}
fread(zl,sizeof(struct sell),N,fp);
if(ferror(fp))
{printf("File Error\n");
exit(0);
}
fclose(fp);
printf("\n%s read finished!\n",filename);
}
void WriteDat(struct sell zl[],char *filename)
{ FILE *fp;
if((fp=fopen(filename,"wb"))==NULL)
{printf("\nCan't open this file\n");
exit(0);
}
fwrite(zl,sizeof(struct sell),N,fp);
if(ferror(fp))
{printf("File Error\n");exit(0);
}
fclose(fp);
printf("\n%s write finished!\n",filename);
}
void SortDat(struct sell zl[])
{ int i,j;
struct sell t[20],k[20];
for(i=0;i<9;i++)
{for(j=i+1;j<10;j++)
if(zl[i].dm<zl[j].dm)
{t[i]=zl[i];
zl[i]=zl[j];
zl[j]=t[i];
}
else
if(zl[i].dm==zl[j].dm)
{if(zl[i].je<zl[j].je)
k[i]=zl[i];
zl[i]=zl[j];
zl[j]=k[i];
}
}
}
#include "stdio.h"
#define N 10
struct sell
{ char dm[4];
char mc[10];
int dj;
int sl;
long int je;
}
void WriteDat(struct sell zl[],char *filename);
void ReadDat(struct sell zl[],char *filename);
void SortDat(struct sell zl[]);
main()
{ struct sell zl[N];
int i;
char *file1="IN.DAT",*file2="OUT.DAT";
zl[i].je=zl[i].dj*zl[i].sl;
printf("Please input %d selling information",N);
printf("dm mc dj sl je\n");
for (i=0;i<10;i++)
scanf("%s %s %d %d %d",zl[i].dm,zl[i].mc,&zl[i].dj,&zl[i].sl,&zl[i].je);
WriteDat(zl,file1);
ReadDat(zl,file1);
SortDat(zl);
printf("%s %s %d %d %d",zl[i].dm,zl[i].mc,zl[i].dj,zl[i].sl,zl[i].je);
WriteDat(zl,file2);
}
void ReadDat(struct sell zl[],char *filename)
{ FILE *fp;
if((fp=fopen(filename,"rb"))==NULL)
{ printf("\nCan't open this file!\n");
exit(0);
}
fread(zl,sizeof(struct sell),N,fp);
if(ferror(fp))
{printf("File Error\n");
exit(0);
}
fclose(fp);
printf("\n%s read finished!\n",filename);
}
void WriteDat(struct sell zl[],char *filename)
{ FILE *fp;
if((fp=fopen(filename,"wb"))==NULL)
{printf("\nCan't open this file\n");
exit(0);
}
fwrite(zl,sizeof(struct sell),N,fp);
if(ferror(fp))
{printf("File Error\n");exit(0);
}
fclose(fp);
printf("\n%s write finished!\n",filename);
}
void SortDat(struct sell zl[])
{ int i,j;
struct sell t[20],k[20];
for(i=0;i<9;i++)
{for(j=i+1;j<10;j++)
if(zl[i].dm<zl[j].dm)
{t[i]=zl[i];
zl[i]=zl[j];
zl[j]=t[i];
}
else
if(zl[i].dm==zl[j].dm)
{if(zl[i].je<zl[j].je)
k[i]=zl[i];
zl[i]=zl[j];
zl[j]=k[i];
}
}
}