原题:现要为某一个销售部门编写一个程序管理约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(struct commodity),1,fp)!=0)count++;if(count!=0){printf("文件读写成功!\n");}elseprintf("文件读写失败!\n");fclose(fp);
}下面是之前搞的,可以不看
void Save_to_file(struct commodity goods[],int n){FILE *fp;int i;int size =sizeof(struct commodity);fp=fopen("zq.txt","wb");if((fp==NULL)){printf("cannot create file\n");exit(0);//需要stdlib.h头文件 }rewind(fp);// 定位到文件开始处,为开始读取做好准备while(i<n&&fread(&goods[i],size,1,fp)==1){// 读取字段成功(每次循环把一个结构读到结构数组中,当数组满或文件读完时停止)i++;}fclose(fp);
}

4.编写一个函数读取二进制文件中的所有商品信息

void show(char *GoodsName,int n){int i;FILE *fp;if((fp=fopen(GoodsName,"rb"))==NULL){printf("cannot open file\n");exit(0);}for(i=0;i<n;i++){fread(&goods[i],sizeof(struct commodity),1,fp);printf("商品编号:%s\n",goods[i].GoodsNumber);printf("商品名称:%s\n",goods[i].GoodsName);printf("商品数量:%lf\n",goods[i].GoodsCount);printf("商品金额:%lf\n",goods[i].GoodsAmount);printf("商品销售量:%d\n",goods[i].SalesNumber);printf("商品销售额:%d\n",goods[i].SalesVolume);printf("\n");}fclose(fp);
}

5.编写一个函数search_no(char *pNo),根据商品编号(pNo)查找商品。查找规则如下:如果pNo为NULL,则表示没有指定商品编号,否则查找指定商品编号的商品并输出。

void search_no(char *pNo){int i,k=0;char goods_number[10];printf("请输入商品编号:\n");scanf("%s",goods_number);pNo=goods_number;for(i=0;i<=120;i++){if(strcmp(goods_number,goods[i].GoodsNumber)==0){printf("商品为%s\n",goods[i].GoodsName);k++;}}if(k==0)printf("没有指定商品编号!\n");
}

6.编写一个函数search_values(double count ,double amount),根据商品数量(count)和金额(amount)来查找数量小于等于count且金额大于等于amount的商品。例如,search_values(10,2600)查找数量小于等于10,金额大于等于2600的商品,并且输出找到的所有商品。

额…到这里我才发现商品还需要数量和金额这两个属性…怎么办…改吧…

void search_values(double count,double amount){int i;printf("找到的所有商品如下:\n");for(i=0;i<=120;i++){if(goods[i].GoodsCount<=count&&goods[i].GoodsAmount>=amount){printf("%s\n",goods[i].GoodsName);}}
} 

ok
最后一步

编写主函数调用上述函数

额…这个怎么搞
等等,我们可以自定义一个菜单函数!

void menu(){printf("\n\n\n\n\n");printf("\t\t|-----------------------菜单----------------------|\n");printf("\t\t|\t 0. 退出程序                              |\n");printf("\t\t|\t 1. 输入商品信息                          |\n");printf("\t\t|\t 2. 进行商品排序                          |\n");printf("\t\t|\t 3. 保存所有商品信息进二进制文件中        |\n");printf("\t\t|\t 4. 读取二进制文件中的商品信息            |\n");printf("\t\t|\t 5. 根据商品编号查找商品                  |\n");printf("\t\t|\t 6. 根据商品数量和金额查找商品            |\n");printf("\t\t|-------------------------------------------------|\n\n");printf("\t\t\t\t选择0~6");
}

ok 我们可以开始搞主程序了!

int main(){int n=0,number;double count,amount;char filename[66];char *p=NULL;menu();printf("\n\n------------------------输入你的选择:");scanf("%d",&number);while(number){switch(number){case 1:printf("请输入需要处理的商品种类数量:\n");scanf("%d",&n);Enter_Product_Information(goods,n); break;case 2:if(n==0)printf("请先输入商品信息!\n");elseCommodity_Ranking(goods,n);break;case 3:if(n==0)printf("请先输入商品信息!\n");else{printf("请输入文件所在路径及名称:\n");scanf("%s",filename);Save(filename,n);}   break;case 4:if(n==0)printf("请先输入商品信息!\n");else{printf("请输入文件所在路径及名称:\n");scanf("%s",filename);show(filename,n);}   break;case 5:if(n==0)printf("请先输入商品信息!\n");else{search_no(p);}  break;case 6:if(n==0)printf("请先输入商品信息!\n");else{printf("请输入商品数量和金额的值:\n");scanf("%lf%lf",&count,&amount);search_values(count,amount);}break;default:break;}getch();menu();printf("\n\n------------------------输入你的选择:");scanf("%d",&number);}
}

对了头文件不能忘了

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>

ok
那么这个小程序算是做完了!

下面是完整程序

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct commodity{char GoodsNumber[10];//商品编号char GoodsName[21];//商品名称double GoodsCount;//商品数量double GoodsAmount;//商品金额int SalesNumber;//商品销售量int SalesVolume;//商品销售额
}goods[120];//初始化一个足够大的结构体数组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);}
}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);}
}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(struct commodity),1,fp)!=0)count++;if(count!=0){printf("文件读写成功!\n");}elseprintf("文件读写失败!\n");fclose(fp);
}void show(char *GoodsName,int n){int i;FILE *fp;if((fp=fopen(GoodsName,"rb"))==NULL){printf("cannot open file\n");exit(0);}for(i=0;i<n;i++){fread(&goods[i],sizeof(struct commodity),1,fp);printf("商品编号:%s\n",goods[i].GoodsNumber);printf("商品名称:%s\n",goods[i].GoodsName);printf("商品数量:%lf\n",goods[i].GoodsCount);printf("商品金额:%lf\n",goods[i].GoodsAmount);printf("商品销售量:%d\n",goods[i].SalesNumber);printf("商品销售额:%d\n",goods[i].SalesVolume);printf("\n");}fclose(fp);
}void search_no(char *pNo){int i,k=0;char goods_number[10];printf("请输入商品编号:\n");scanf("%s",goods_number);pNo=goods_number;for(i=0;i<=120;i++){if(strcmp(goods_number,goods[i].GoodsNumber)==0){printf("商品为%s\n",goods[i].GoodsName);k++;}}if(k==0)printf("没有指定商品编号!\n");
}void search_values(double count,double amount){int i;printf("找到的所有商品如下:\n");for(i=0;i<=120;i++){if(goods[i].GoodsCount<=count&&goods[i].GoodsAmount>=amount){printf("%s\n",goods[i].GoodsName);}}
} void menu(){printf("\n\n\n\n\n");printf("\t\t|-----------------------菜单----------------------|\n");printf("\t\t|\t 0. 退出程序                              |\n");printf("\t\t|\t 1. 输入商品信息                          |\n");printf("\t\t|\t 2. 进行商品排序                          |\n");printf("\t\t|\t 3. 保存所有商品信息进二进制文件中        |\n");printf("\t\t|\t 4. 读取二进制文件中的商品信息            |\n");printf("\t\t|\t 5. 根据商品编号查找商品                  |\n");printf("\t\t|\t 6. 根据商品数量和金额查找商品            |\n");printf("\t\t|-------------------------------------------------|\n\n");printf("\t\t\t\t选择0~6");
}int main(){int n=0,number;double count,amount;char filename[66];char *p=NULL;menu();printf("\n\n------------------------输入你的选择:");scanf("%d",&number);while(number){switch(number){case 1:printf("请输入需要处理的商品种类数量:\n");scanf("%d",&n);Enter_Product_Information(goods,n); break;case 2:if(n==0)printf("请先输入商品信息!\n");elseCommodity_Ranking(goods,n);break;case 3:if(n==0)printf("请先输入商品信息!\n");else{printf("请输入文件所在路径及名称:\n");scanf("%s",filename);Save(filename,n);} break;case 4:if(n==0)printf("请先输入商品信息!\n");else{printf("请输入文件所在路径及名称:\n");scanf("%s",filename);show(filename,n);}   break;case 5:if(n==0)printf("请先输入商品信息!\n");else{search_no(p);}  break;case 6:if(n==0)printf("请先输入商品信息!\n");else{printf("请输入商品数量和金额的值:\n");scanf("%lf%lf",&count,&amount);search_values(count,amount);}break;default:break;}getch();menu();printf("\n\n------------------------输入你的选择:");scanf("%d",&number);}
}

程序可能还有一些不足之处
欢迎大家指正

现要为某一个销售部门编写一个程序管理约100种商品。要求设计一个结构体类型来描述商品,每种商品包括商品编号(如A001)、商品名称、商品销售量和商品销售额等信息,并编写以下函数···········相关推荐

  1. 2、采用结构体数组编写程序,定义一个含职工姓名、工作年限、工资总额的结构体类型,从键盘输入5名职工的信息,最后再对工作年限超30年的职工加1000元工资,并输出工资变化后的所有职工的信息

    2.采用结构体数组编写程序,定义一个含职工姓名.工作年限.工资总额的结构体类型,从键盘输入5名职工的信息,最后再对工作年限超过30年的职工加1000元工资,并输出工资变化后的所有职工的信息(要求用下标 ...

  2. c语言存放学生信息的结构体类型,定义一个学生结构体类型

    满意答案 zergling333 推荐于 2018.02.25 采纳率:56%    等级:12 已帮助:6763人 定义一个结构体类型: struct student {int num; char ...

  3. c语言100以内奇数的和为多少,编写C#程序,计算100以内所有奇数的和。谢谢了,大神帮忙啊...

    编写C#程序,计算100以内所有奇数的和.谢谢了,大神帮忙啊以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 编写C#程序 ...

  4. Java 练习:编写 Java 程序,输入年份和月份,使用 switch 结构计算对应月份的天数。月份为 1、3、5、7、8、10、12 时,天数为 31 天。月份为 4、6、9、11 时,天数为 3

    文章目录 一.练习题目 二.使用 switch 语句实现代码 三.将代码改写回 if else 的选择结构 一.练习题目 编写 Java 程序,输入年份和月份,使用 switch 结构计算对应月份的天 ...

  5. 练习-编写函数对结构体类型数据进行排序

    第1关:编写函数对结构体类型数据进行排序 任务描述 本关任务:定义学生结构体数据类型,从键盘输入一批学生的信息,编写函数将这批学生按姓名排序. 相关知识 结构体变量之间整体是不可以比较大小的,结构体变 ...

  6. 定义一个结构体类型Point,包含数据成员x和y,它们是平面坐标系下的坐标点(x,y),求两点间的距离

    题目描述:定义一个结构体类型Point,包含数据成员x和y,它们是平面坐标系下的坐标点(x,y).编写如下函数: (1)struct Point Input():在函数中输入一个坐标点的值,并返回该值 ...

  7. 问题描述 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底

    问题描述 给定一个由n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径 ...

  8. 【MATLAB基础】创建一个包含十名学生姓名学号和各学生六个科目成绩的结构体,并对成绩数据进行简单处理,并对十名学生按照成绩排序

    程序解决问题描述: 首先创建一个包含十名学生姓名学号和各学生六个科目成绩的结构体,分别求出十名学生的总成绩和平均成绩,最后按照总成绩对十名学生进行排序,并在命令窗口依次打印出1-10名的学生的姓名. ...

  9. 生物信息学:任选一种编程语言,设计一个双序列全局比对的程序

    任选一种编程语言,设计一个双序列全局比对的程序.要求: 1) 输入两条蛋白质序列,输出比对结果例如: Alignment Score: 12345 E E E E E K K K K K A A A ...

最新文章

  1. centos6.0下ffmpeg的安装编译经历
  2. linux下搭建lua开发环境
  3. [linux] shell脚本编程-统计日志文件中的设备号发通知邮件
  4. linux 终端报错 Out of memory: Kill process[PID] [process name] score问题分析
  5. 数据结构+算法面试100题~~~摘自CSDN,作者July
  6. [Oracle SQL]最基本的connect by的用法
  7. Java语言实现查找最长前缀
  8. 修改linux文件权限命令:chmod超级详细讲解
  9. 计算机视觉之语义分割
  10. 四选1数据选择器的VHDL程序设计
  11. 代码保护软件VMProtect加壳脱壳原理总结
  12. 随机出题在线考试系统php_在线考试系统怎么实现自制题库随机出题
  13. Java基础——动态数组
  14. python二叉树的非递归遍历
  15. 计算机 64虚拟内存设置方法,计算机虚拟内存怎样设置
  16. oracle宿主常量及变量,ORACLE之 LOB 数据类型
  17. 计算机网络——CSMA/CD协议
  18. 通过手机使用广域网访问局域网的服务器
  19. 计算机思维培训心得,2020参加计算机培训心得体会精选
  20. 四川途志:看了抖音创作的规则你真的会玩抖音吗?

热门文章

  1. 支付宝支付后回调处理(Java版)
  2. ipadpro画流程图_要玩转iPad Pro?不如先下载这些APP
  3. 怀疑在软件测试中所起的作用
  4. 你认为应届毕业生找不到工作的原因是什么?如何解决这一问题?
  5. L012-老男孩linux高端运维课程—linux系统文件属性知识深入详解
  6. 微信域名拦截检测API源码 检测域名是否能在微信正常打开
  7. 解放CPU!耕昇GTX460实战3款CUDA软件
  8. 单片机驱动AT24C02存储芯片
  9. Node初学者入门,一本全面的NodeJS教程
  10. Wifi启动以及Wifi状态机