求编一结构体和子函数的程序,内容如下

来源:百度知道 编辑:UC知道 时间:2024/06/23 13:02:11
用C语言编
在文件in.dat里有4个产品销售记录,每个产品记录由产品代码DM(字符型4位),产品名称MC(字符型10位),单价DJ(整形),数量SL(整形)四部分组成,数据项之间用空格风隔.编写程序实现下列函数功能:
1\函数readdat(),读取这4个销售记录并存入结构数组SELL中;
2\函数sortdat(),按产品代码从小到大进行排列,结果仍存入结构数组SELL中;
3\函数wtitedat(),把结果输出到文件out.dat中;

in.dat例子:
1234 y1234 12 56
3652 o2586 55 66
8975 h2561 21 25
8899 d2356 22 66
感谢"到佰度谷歌一下"的精彩回答,但我还是有些地方,这是我写的,不知道错哪了,运行不起;请指正!(在编号相等时,按总价大小排列)
#include <stdio.h>
#include <string.h>

struct goods
{char dm[4];
char mc[10];
int dj;
int sl;}
sell[4];

void sortdat(struct goods *zz)
{int i,j;
struct goods *q,*p,*temp;
q=zz;
p=zz;
for(i=1;i<4;i++,p++)
for(j=i;i<4;i++,q++)
{if(strcamp(p->dm, q->dm)<0){temp=p;q=p;q=temp;}
else{ if((strcamp(p->dm, q->dm)==0)||((p->dj)*(p->sl)-(q->dj)*(q->sl)>0))
{*temp=*p;*q=*p;*q=*temp;}
}

readdat()<

你的例子和题目不符,产品名称MC(字符型10位),而例子中是5位!!!

下面的程序是按照例子来的,你自己看着办吧。

void readdat()
{
FILE *fp;
char str[80],ch[11];
int i;
fp=fopen("in.dat","r");
for(i=0;i<4;i++);/*你没有给出in.dat中有多少个记录,所以,我乱写了一个4,因为你给的例子是4条记录,你可以根据实际情况改动*/
{
fgets(str,80,fp);
memcpy(sell[i].dm,str,4);
memcpy(sell[i].mc,str+5,5);
memcpy(sell[i].dj,str+11,2);
memcpy(sell[i].sl,str+14,2);
}

}

void sortdat()
{
int,i,j;

dddddd tem_stru;/*tem_stru位临时的结构提,你没有给出主函数中是如何定义,sell这个结构体数组的,我就用dddddd代替,你直接把定义sell是,前面用到的关键字复制过来替换dddddd*/

for(i=0;i<3;i++)/*你没有给出in.dat中有多少个记录,所以,我乱写了一个4,因为你给的例子是4条记录,你可以根据实际情况改动*/

for(j=i+1;j<4;j++)
if(strcmp(sell[i].dm,sell[j].dm)>0)
{
tem_stru=sell[i];
sell[i]=sell[j];
sell[j]=sell[i];
}

}

void wtitedat()
{
FILE *fp;
int i;
fp=fopen("out.dat","