有一个小型超市,出售N(N>=10)种商品,设计并实现一个系统,完成下列功能:
1. 保存及输出。超市中的各种商品信息保存在指定文件中,可以把它们输出显示。
2. 计算并排序。计算每类商品的总价值(sum,单精度)及平均价(aver,单精度,输出一位小数),将每类商品按平均价从大到小的顺序排序打印出来。
3. 统计。统计输出库存量低于100的货号及类别。统计输出有两种以上(含两种)商品库存量低于100的商品类别。
1.2总体结构
本程序主要分为八个模块:主模块、信息输出修改模块、新建信息模块、排序模块、计算模块、统计模块1、统计模块2、打印模块。
1) 主模块:通过调用各分模块实现功能;
结构体sizeof2) 信息输出修改模块:输出显示文件中商品信息内容,添加商品信息,删除商品信息,修改商品信息;
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;
int n=0;          /*定义文件指针类型*/
int i,j,a[4],m;          /*定义整数类型*/
float aver[4],sum[4],g[4],h;      /*定义浮点类型*/
char c[5]="elec";        /*定义字符数组类型*/
char d[5]="comm";        /*定义字符数组类型*/
char e[5]="food";        /*定义字符数组类型*/
char f[5]="offi";        /*定义字符数组类型*/
struct good          /*定义结构体*/
{
int num;          /*商品编号*/
char name[20];        /*商品名称*/
char kind[40];        /*商品类型*/
float price;        /*商品价格*/
char unit[10];        /*商品单位*/
int quantity;        /*商品数量*/
struct good *next;        /*定义结构体指针类型*/
}*head,*p1,*p2;
struct good *createlist()                /*创建链表函数*/
{
struct good *head1,*p1,*p2;        /*定义结构体指针类型*/
if((fp=fopen("","w"))==NULL)      /*判断能否打开文件*/
{
  printf("can not open the file");
  exit(0);                  /*结束程序*/
}
head1=(struct good *)malloc(sizeof(struct good));    /*申请头结点空间*/
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=(struct good *)malloc(sizeof(struct good));          /*申请新空间*/
  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);
  return head1;              /*返回头指针*/
  }
  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;
}
}
struct good *paixu(struct good*head2)      /*链表排序函数*/
{
struct good *p6,*p7,*r,*s;      /*定义结构体指针类型*/
for(i=0;i<=3;i++)            /*赋初值值*/
{
  a[i]=0;
  sum[i]=0;
  aver[i]=0;
}
p6=(struct good *)malloc(sizeof(struct good));      /*申请新空间*/
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))    /*判断是否调换*/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。