原题:现要为某一个销售部门编写一个程序管理约100种商品。要求设计一个结构体类型来描述商品,每种商品包括商品编号(如A001)、商品名称、商品销售量和商品销售额等信息,并编写以下函数:
1.编写一个函数输入所有商品的信息
2.编写一个函数对商品进行排序,排序规则如下:首先按照商品销售额排降序;如果商品销售额相同,则再按照商品销售量排升序
3.编写一个函数将所有商品信息保存到一个二进制文件中
4.编写一个函数读取二进制文件中的所有商品信息
5.编写一个函数search_no(char *pNo),根据商品编号(pNo)查找商品。查找规则如下:如果pNo为NULL,则表示没有指定商品编号,否则查找指定商品编号的商品并输出
6.编写一个函数search_values(double count ,double amount),根据商品数量(count)和金额(amount)来查找数量小于等于count且金额大于等于amount的商品。例如,search_values(10,2600)查找数量小于等于10,金额大于等于2600的商品,并且输出找到的所有商品
7.编写主函数调用上述函数
说明:除了这些函数之外,还可以有其他的函数。
话不多说,开工!
首先设计一个结构体类型描述商品
struct commodity{
char GoodsNumber[10];//商品编号
char GoodsName[21];//商品名称
double GoodsCount;//商品数量
double GoodsAmount;//商品金额
int SalesNumber;//商品销售量
int SalesVolume;//商品销售额
}goods[120];//初始化一个足够大的结构体数组
1.第一个函数:编写一个函数输入所有商品的信息
void Enter_Product_Information(struct commodity goods[],int n){
int i;
for(i=0;i<n;i++){
//可以实现对n个商品的信息进行输入
printf("请输入商品的编号:\n");
scanf("%s",&goods[i].GoodsNumber);
printf("请输入商品的名称:\n");
scanf("%s",&goods[i].GoodsName);
printf("请输入商品的数量:\n");
scanf("%lf",&goods[i].GoodsCount);
printf("请输入商品的金额:\n");
scanf("%lf",&goods[i].GoodsAmount);
printf("请输入商品的销售量:\n");
scanf("%d",&goods[i].SalesNumber);
printf("请输入商品的销售额:\n");
scanf("%d",&goods[i].SalesVolume);
}
}
2.编写一个函数对商品进行排序,排序规则如下:首先按照商品销售额排降序;如果商品销售额相同,则再按照商品销售量排升序
void Commodity_Ranking(struct commodity goods[],int n){
int i,j;
struct commodity *p[n];//定义一个指针数组
for(i=0;i<n;i++)
{
p[i]=&goods[i];//使每个指针指向一个结构体数组元素
}
struct commodity *temp;
for(i=0;i<n-1;i++)//冒泡排序
for(j=0;j<n-i-1;j++){
if((p[j]->SalesVolume)<(p[j+1]->SalesVolume))
{
temp=p[j+1];//交换两结构体在结构体数组中的位置
p[j+1]=p[j];
p[j]=temp;
}
if((p[j]->SalesVolume)==(p[j+1]->SalesVolume)){
if((p[j]->SalesNumber)>(p[j+1]->SalesNumber)){
temp=p[j+1];
p[j+1]=p[j];
p[j]=temp;
}
}
}
printf("商品排名:\n");
for(i=0;i<n;i++){
printf("第%d名:%s\n",i+1,p[i]->GoodsName);
}
}
3.编写一个函数将所有商品信息保存到一个二进制文件中
void Save(char *GoodsName,int n){
FILE *fp;
int i,k,count;
if((fp=fopen(GoodsName,"wb"))==NULL){
printf("cannot open file\n");
exit(0);//需要stdlib.h头文件
}
for(i=0;i<n;i++)
if(fwrite(&goods[i],sizeof(struct commodity),1,fp)==0)
k++;
if(fwrite(&goods[i],sizeof