超市管理系统完整+源代码 有一个小型超市,出售N(N>=10)种商品,设计并实现一个系统,完成下列功能: 1.保存及输出。超市中的各种商品信息保存在指定文件中,可以把它们输出显
示。
2.计算并排序。计算每类商品的总价值(sum,单精度)及平均价(aver,单精度,输出一位小数),将每类商品按平均价从大到小的顺序排序打印出来。
3.统计。统计输出库存量低于100的货号及类别。统计输出有两种以上(含两种)商品库存量低于100的商品类别。
1.2总体结构
本程序主要分为八个模块:主模块、信息输出修改模块、新建信息模块、排序模块、计算模块、统计模块1、统计模块2、打印模块。
1)主模块:通过调用各分模块实现功能; 2)信息输出修改模块:输出显示文件中商品信息内容,添加商品信息,删除商品信息,修改商品信息;
3)新建商品信息模块:建立一个新结构体,为链表存信息用,并且将信息保存在指定的文件中;
4)排序模块:把文件中顺序零乱的商品信息按单价的大小从高到低进行排序,放到链表里存储;
5)计算模块:将所有商品的价格与库存量进行累加求和; 6)打印模块:将商品信息按每类平均价格排序(从高到低)按顺序打印出来; 7)统计模块1:统计库存量低于100的货名及类别; 8)统计模块2:统计商品库存量有2种以上(含2种)低于100的商品类别。 附录(程序清单) #include"stdio.h"/*输入,输出头文件*/ #include"stdlib.h"/*申请空间头文件*/ #include"string.h"/*对字符串加工头文件*/ #include"conio.h"/*清屏头文件*/ FILE*fp; intn=0;/*定义文件指针类型*/ inti,j,a[4],m;/*定义整数类型*/ floataver[4],sum[4],g[4],h;/*定义浮点类型*/
charc[5]="elec";/*定义字符数组类型*/ chard[5]="comm";/*定义字符数组类型*/ chare[5]="food";/*定义字符数组类型*/ charf[5]="offi";/*定义字符数组类型*/ structgood/*定义结构体*/ { intnum;/*商品编号*/ charname[20];/*商品名称*/ charkind[40];/*商品类型*/ floatprice;/*商品价格*/ charunit[10];/*商品单位*/ intquantity;/*商品数量*/ structgood*next;/*定义结构体指针类型*/ }*head,*p1,*p2; structgood*createlist()/*创建链表函数*/ { structgood*head1,*p1,*p2;/*定义结构体指针类型*/ if((fp=fopen("goodsmessage.txt","w"))==NULL)/*判断能否打开文件*/ { printf("cannotopenthefile"); exit(0);/*结束程序*/ } head1=(structgood*)malloc(sizeof(structgood));/*申请头结点空间*/ p1=head1; p2=head1; printf("*********************************************\n"); printf("请输入信息:编号,名称,类型,价格,单位,数目\n"); printf("(以输入“-1”表示结束输入)\n"); printf("*********************************************\n"); printf("____________________\n"); scanf("%d%s%s%f%s%d",&p1->num,p1->name,p1->kind,&p1->price,p1->unit,&p1->quantity);/*输入商品信息*/
printf("____________________\n"); p1->next=NULL; fprintf(fp,"%d%s%s%f%s%d",p1->num,p1->name,p1->kind,p1->price,p1->unit,p1->quantity);/*将商品信息写入文件*/
while(1) { p1=(structgood*)malloc(sizeof(structgood));/*申请新空间*/ printf("*********************************************\n"); printf("请输入信息:编号,名称,类型,价格,单位,数目\n"); printf("(以输入“-1”表示结束输入)\n"); printf("*********************************************\n"); printf("____________________\n"); scanf("%d",&p1->num); if(p1->num==-1)/*申请空间结束条件*/ { printf("____________________\n\n"); fprintf(fp,"%d",-1); fclose(fp); returnhead1;/*返回头指针*/ } scanf("%s%s%f%s%d",p1->name,p1->kind,&p1->price,p1->unit,&p1->quantity);/*输入商品信息*/
printf("________________\n"); fprintf(fp,"%d%s%s%f%s%d",p1->num,p1->name,p1->kind,p1->price,p1->unit,p1->quantity);/*将商品信息写入文件*/
p1->next=NULL; p2->next=p1; p2=p1; } } structgood*paixu(structgood*head2)/*链表排序函数*/ { structgood*p6,*p7,*r,*s;/*定义结构体指针类型*/ for(i=0;i<=3;i++)/*赋初值值*/ { a[i]=0; sum[i]=0; aver[i]=0; } p6=(structgood*)malloc(sizeof(structgood));/*申请新空间*/ p6->next=head2; head2=p6; while(p6->next!=NULL)/*判断循环结束条件*/ { p7=p6->next; r=p6; while(p7->next!=NULL)/*判断循环结束条件*/ { if((p7->next->price)>(r->next->price))/*判断是否调换*/ r=p7; p7=p7->next; } if(p6!=r)/*判断循环结束条件*/ { s=r->next;/*指针调换*/ r->next=s->next; s->next=p6->next; p6->next=s; } p6=p6->next; } p6=head2; head2=head2->next; free(p6);/*释放第一个无效空间*/ returnhead2; } voidjisuan() { p1=head; do { if(strcmp(p1->kind,c)==0)/*判断是否为电器类型*/ { sum[0]=sum[0]+(p1->price)*(p1->quantity);/*求电器总价*/ a[0]=a[0]+p1->quantity;/*求电器总件数*/ } if(strcmp(p1->kind,d)==0)/*判断是否为日用品类型*/ { sum[1]=sum[1]+(p1->price)*(p1->quantity);/*求日用品总价*/ a[1]=a[1]+p1->quantity;/*求日用品总件数*/ } if(strcmp(p1->kind,e)==0)/*判断是否为办公用品类型*/ { sum[2]=sum[2]+(p1->price)*(p1->quantity);/*求办公用品总价*/ a[2]=a[2]+p1->quantity;/*求办公用品总件数*/ } if(strcmp(p1->kind,f)==0)/*判断是否为食品类型*/ { sum[3]=sum[3]+(p1->price)*(p1->quantity);/*求食品总价*/ a[3]=a[3]+p1->quantity;/*求食品总件数*/ } p1=p1->next; }while(p1!=NULL);/*遍历链表结束条件*/ for(i=0;i<4;i++) aver[i]=sum[i]/a[i];/*求每类商品平均价*/ printf("****************************************************\n"); printf("商品类型\t平均价\t总库存量\n"); printf("****************************************************\n"); printf("____________________________________________________\n");