商品信息管理系统,要求采用结构体数组或文件形式存储每种商品的信息,每种商品包含:商品编号、商品名称、单价、生产地、本月当前销售总数量、本月当前销售总金额及库存余量等信息。
软件组成包括主函数和下列5个功能模块:(1)售出功能(被售出之商品数量减x);(2)进货功能(被购进之商品数量增x);(3)查找功能(查找指定商品余存信息和价格信息);(4)统计功能(找出当前销售总金额最大的商品);(5)退出程序。
用多文件原理。
头文件:#include<stdio.h>#include<string.h>#include<ctype.h>#include<stdlib.h>#define Maxno 20struct products{char num[10]; //商品编号char name[10]; //商品名称char place[10]; //生产地double price; //单价int gross; //本月当前销售总数量double total; //本月当前销售总金额int count; //库存余量}pro[10];int sum; //商品总类数int menu_select(); //菜单选择void product_info(struct products *); //商品信息void sold(); //商品售出数量(被售出之商品数量减x)void purchase(); //商品进货数量(被购进之商品数量增x)void search(); //查找指定商品余存、价格信息void Statistics(); //统计销售总金额最大的商品void back(); //返回主菜单主函数://主函数#include "product.h"void main(){int i;for(i=0;i<Maxno;i++)pro[i].count=0;printf("欢迎查看商品信息!\n");for(;;){switch(menu_select()){case 1:product_info(pro);back();break;case 2:purchase();back();break;case 3:sold();back();break;case 4:search();back();break;case 5:Statistics();back();break;case 6:printf("退出程序,谢谢使用!\n");exit(0);}}}子函数://菜单选择函数#include "product.h"int menu_select(){ char s[2];int n;printf("\t********************************************************** **********\n");printf("\t**\n");printf("\t* 商品信息管理系统*\n");printf("\t**\n");printf("\t* [1] 商品信息[2] 商品进货数量*\n");printf("\t* [3] 商品售出数量[4] 查找商品余存、价格*\n");printf("\t* [5] 销售总金额最大的商品[6] 退出系统*\n");printf("\t**\n");printf("\t********************************************************** **********\n");printf("请选择:1-6:");for(;;){gets(s);n=atoi(s); //把字符转换成整型数if(n<1||n>6)printf("\n输入错误,请重新选择1-6:");else break;}return n;}//查找指定商品余存、价格信息#include "product.h"void search(){char str[10];int i=0,flag;printf("请输入商品编号或商品名称:");scanf("%s",str);for(flag=1,i=0;flag&&i<sum;i++){if(strcmp(pro[i].num,str)==0||strcmp(pro[i].name,str)==0) flag=0;}if(flag==1) //该商品不存在{printf("该商品不存在!\n\n");return;}else{i--;printf("%s的库存余量为:%d\t价格为:%8.2lf\n\n",pro[i].name,pro[i].count,pro[i].price);return;}}//统计销售总金额最大的商品#include "product.h"void Statistics(){int i=0,flag;double max=0;for(i=0;i<sum;i++){if(pro[i].total>max) max=pro[i].total;}for(flag=1,i=0;flag&&i<sum;i++){if(pro[i].total==max)printf("销售金额最大的商品是:%s\n\n",pro[i].name);}return;}//商品进货数量(被购进之商品数量增x)#include "product.h"void purchase(){FILE *fp;int i=0,k=0,j=0,s=0,n=0,flag,cn=1;char num[10];while(cn==1){printf("被购进商品的编号:");scanf("%s",num);printf("被购进商品的数量:");scanf("%d",&k);for(flag=1,i=0;flag&&i<sum;i++)if(strcmp(pro[i].num,num)==0) flag=0;if(flag!=0){strcpy(pro[sum].num,num);printf("请输入商品%s的信息:\n",pro[i].num);printf("商品名称:");scanf("%s",pro[i].name);printf("生产地:");scanf("%s",pro[i].place);printf("单价:");scanf("%lf",&pro[i].price);pro[i].count+=k;sum=sum+1;printf("\t\t\t------------------------------\n");printf("\t\t\t 1=====>继续填写信息\n");printf("\t\t\t 0=====>输入结束\n");printf("\t\t\t------------------------------\n");scanf("%d",&cn);while(cn!=1&&cn!=0){printf("输入有误,请重新输入1或0\n");scanf("%d",&cn);}}else{i--;pro[i].count+=k;printf("\t\t\t------------------------------\n");printf("\t\t\t 1=====>继续填写信息\n");printf("\t\t\t 0=====>输入结束\n");printf("\t\t\t------------------------------\n");scanf("%d",&cn);while(cn!=1&&cn!=0){printf("输入有误,请重新输入1或0\n");scanf("%d",&cn);}}}printf("信息输入完毕!\n\n");fp=fopen("products.txt","w");for(s=0;s<sum;s++){fwrite(&pro[s],sizeof(struct products),1,fp); //把商品信息写入文件中}fclose(fp); //关闭文件}//返回主菜单#include "product.h"void back(){char cn;printf("\t\t\t------------------------------\n");printf("\t\t\t Enter键=====>退出系统\n");printf("\t\t\t 其他任意键==>返回主菜单\n");printf("\t\t\t------------------------------\n");fflush(stdin); //清除缓存scanf("%c",&cn);if(cn=='\n'){exit(0);}if(cn!='\n'){fflush(stdin);return;}}//商品售出数量(被售出之商品数量减x)#include "product.h"void sold(){FILE *fp;char num[10];int k=0,i,j=0,flag;printf("请输入被售出商品的编号或名称:");scanf("%s",num);for(flag=1,i=0;flag&&i<sum;i++)if(strcmp(pro[i].num,num)==0||strcmp(pro[i].name,num)==0) flag=0; //文件中存在该商品则flag=0if(flag==1) //文件中不存在该商品{printf("该商品不存在,请重新输入被售出商品的编号或名称:");scanf("%s",&num);}else{if((fp=fopen("products.txt","wb"))==NULL){printf("文件打不开!\n");return;}i--;printf("%s的库存余量为%d\n请输入该商品售出数量:",pro[i].name,pro[i].count);scanf("%d",&k);pro[i].count-=k; //该商品库存余量减kpro[i].gross+=k; //该商品本月当前销售总数量pro[i].total+=pro[i].price*k; //该商品本月当前销售总金额}for(j=0;j<sum;j++){fwrite(&pro[j],sizeof(struct products),1,fp); //将商品信息写入文件中}fclose(fp);}//商品信息输出函数#include "product.h"void product_info(struct products *p){FILE *fp;int i;char *c[7]={"编号","名称","生产地","单价","月销量","月销额","库存余量"};p=pro;if((fp=fopen("products.txt","r"))==NULL) //打开文件{printf("文件打不开!\n\n");return;}printf("商品信息如下:\n");printf("\n%4s\t%6s\t%8s\t%8s\t%4s\t%8s\t%6s\n",c[0],c[1],c[2],c[3],c[4],c[5],c[ 6]);//输出商品信息for(i=0;fread(&pro[i],sizeof(struct products),1,fp)!=0;i++,p++) //i<=Maxno-1{printf("\n%4s\t%6s\t%8s\t%8.2lf\t%4d\t%8.2lf\t%6d\n",p->num,p->name,p->place,p->price,p->gross,p->total,p->count);}printf("\n");fclose(fp);}。