题目61:已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)四部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按金额从小到大进行排列, 若金额相等, 则按产品代码从大到小进行排列. 最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT2.DAT中。
注意: 部分源程序存放在PROG1.C中。
请勿改动主函数main( )、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
----------------------------------
void SortDat() /*标准答案*/
{int I,j;
PRO xy;
for(I=0;I<99;I++)
for(j=I+1;j<100;j++)
if(sell.je>sell[j].je)
{xy=sell; sell =sell[j]; sell[j]=xy;}
else if(sell.je==sell[j].je)
if(strcmp(sell.dm,sell[j].dm)<0)
{xy=sell;sell=sell[j];sell[j]=xy;}
}
PROG1.C
#include
#include
#include
#include
#include
#define MAX 100
typedef struct{
char dm[5]; /*产品代码*/
char mc[11]; /*产品名称*/
int dj; /*单价*/
int sl; /*数量*/
long je; /*金额*/
}PRO;
PRO sell[MAX];
void ReadDat();
void WriteDat();
void SortDat()
{
}
void main()
{ memset(sell,0,sizeof(sell));
ReadDat();
SortDat();
WriteDat(); }
void ReadDat()
{FILE *fp;
char str[80],ch[11];
int i;
fp=fopen("IN.DAT","r");
for(i=0;i<100;i++){
fgets(str,80,fp);
memcpy(sell.dm,str,4);
memcpy(sell.mc,str+4,10);
memcpy(ch,str+14,4);ch[4]=0;
sell.dj=atoi(ch);
memcpy(ch,str+18,5);ch[5]=0;
sell.sl=atoi(ch);
sell.je=(long)sell.dj*sell.sl;}
fclose(fp);}
void WriteDat(void)
{FILE *fp;
int i;
fp=fopen("OUT2.DAT","w");
for(i=0;i<100;i++){
fprintf(fp,"%s %s %4d %5d %101d\n", sell.dm,sell.mc,sell.dj,sell.sl,sell.je);}
fclose(fp);}
IN.DAT
1001软件世界 5 100
1002计算机用户 6 120
1003网上生活 27 1
1004网络互连 45 10
1005威宝3.5 5 1000
10063M3.5 3 150
1007办公自动化 90 100
1008JAVA 48 15
1009中文WORD97 68 10
1010EXCLE97 98 103
1011OFFICE97 108 18
1012ACCESS 64 78
1013二级BASIC 65 66
1014二级PASCAL 66 89
1015二级C 67 99
1016二级FOR 66 12
1017二级FOX 66 100
1018AUTO CAD 98 871
1019PhotoShop 68 64
1020一级 78 101
1021一级B类 98 1000
1022三级A类 78 765
1023三级B类 78 888
1024四级 88 666
1025INTERNET 58 1858
1001软件世界 5 101
1002计算机用户 6 120
1003网上生活 27 31
1004网络互连 45 1000
1005威宝3.5 5 5001
10063M3.5 3 300
1007办公自动化 90 871
1008JAVA 48 888
1009中文WORD97 68 999
1010EXCLE97 98 981
1011OFFICE97 1