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
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("goods message.txt","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=0i<=3i++)/*赋初值值*/
{
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))/*判断是否调换*/
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) /*释放第一个无效空间*/
return head2
}
void jisuan()
{
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=0i<4i++)
aver[i]=sum[i]/a[i] /*求每类商品平均价*/
printf("****************************************************\n")
printf("商品类型 \t平均价\t 总库存量\n")
printf("****************************************************\n")
printf("____________________________________________________\n")
printf("电器总价值:%0.1f\t平均价:%0.1f\t总库存量:%d\n",sum[0],aver[0],a[0])
printf("____________________________________________________\n")
printf("日用品总价值:%0.1f\t平均价:%0.1f\t总库存量:%d\n",sum[1],aver[1],a[1])
printf("____________________________________________________\n")
printf("食品总价值:%0.1f\t平均价:%0.1f\t总库存量:%d\n",sum[2],aver[2],a[2])
printf("____________________________________________________\n")
printf("办公用品总价值:%0.1f\t平均价:%0.1f\t总库存量:%d\n",sum[3],aver[3],a[3])
printf("____________________________________________________\n")
}
void shuchu() /*输出商品信息函数*/
{
do
{
struct good *p3,*p4,*p5 /*定义结构体指针类型*/
int n=0,p=0,q=0,r=0
printf("所有商品信息:\n")
printf("编号,名称,类型,价格,单位,数目\n")
printf("**********************************\n")
if((fp=fopen("goods message.txt","rb+"))==NULL) /*判断能否打开文件*/
{
printf("can not open the file")
exit(0) /*结束程序*/
}
head=(struct good *)malloc(sizeof(struct good))/*申请头结点空间*/
p3=head
fscanf(fp,"%d %s %s %f %s %d ",&p3->num,p3->name,p3->kind,&p3->price,p3->unit,&p3->quantity)/*从文件中写到链表*/
while(1)
{
p4=(struct good *)malloc(sizeof(struct good)) /*申请头结点空间*/
fscanf(fp,"%d ",&p4->num)
if(p4->num!=-1)/*判断循环结束条件*/
{
fscanf(fp,"%s %s %f %s %d ",p4->name,p4->kind,&p4->price,p4->unit,&p4->quantity)/*从文件中写到链表*/
p4->next=NULL
p3->next=p4
p3=p4
}
else
{
p3->next=NULL
break
}
}
fclose(fp) /*关闭文件*/
p3=head
while(p3!=NULL)
{
printf(" %d %s %s %0.1f %s %d\n\n",p3->num,p3->name,p3->kind,p3->price,p3->unit,p3->quantity)
printf("__________________________________\n")
p3=p3->next
}
printf("**********************************\n")
printf("//////////////////////////////////\n")
while(n!=4)
{
p3=head
printf("**********************************\n")
printf("1 添加商品信息\n")
printf("2 删除某商品信息\n")
printf("3 修改某商品信息\n")
printf("4 返回(当你完成了对某一商品的添加、删除或者修改后请按4返回)\n")
printf("**********************************\n")
scanf("%d",&n)
if(n==1) /*添加商品信息*/
{
printf("请输入商品 编号 名称 类型 价格 单位 数目\n")
printf("**********************************\n")
p4=(struct good *)malloc(sizeof(struct good))/*申请空间*/
scanf("%d %s %s %f %s %d",&p4->num,p4->name,p4->kind,&p4->price,p4->unit,&p4->quantity)/*输入商品信息*/
p4->next=NULL
while(p3->next!=NULL)/*判断循环结束条件*/
{
p3=p3->next
}
p3->next=p4
p3=head
if((fp=fopen("goods message.txt","w"))==NULL) /*判断能否打开文件*/
{
printf("can not open the file")
exit(0)/*结束程序*/
}
while(p3!=NULL)
{
fprintf(fp,"%d %s %s %f %s %d ",p3->num,p3->name,p3->kind,p3->price,p3->unit,p3->quantity) /*将商品信息写入文件*/
p3=p3->next
}
fprintf(fp,"%d",-1)
fclose(fp) /*关闭文件*/
printf("**********************************\n")
printf("__________________________________\n")
printf("------------请按4返回-------------\n")
printf("__________________________________\n")
printf("**********************************\n")
}
if(n==2)/*删除商品*/
{
printf("**********************************\n")
printf("请输入需要删除的商品编号\n")
printf("**********************************\n")
scanf("%d",&p)
printf("**********\n")
printf("1 确认删除\n2 取消删除\n")
printf("**********\n")
scanf("%d",&r)
if(r==1)
{
if((head->num)==p)
{
head=head->next
free(p3)/*释放空间*/
}
else
{
p4=head
p3=p4->next
while(p3!=NULL) /*判断循环结束条件*/
{
if((p3->num)==p)
{
p5=p3->next
free(p3) /*释放空间*/
p4->next=p5
break
}
p3=p3->next
p4=p4->next
}
}
if((fp=fopen("goods message.txt","w"))==NULL) /*判断能否打开文件*/
{
printf("can not open the file")
exit(0)/*结束程序*/
}
p3=head
while(p3!=NULL) /*判断循环结束条件*/
{
fprintf(fp,"%d %s %s %f %s %d ",p3->num,p3->name,p3->kind,p3->price,p3->unit,p3->quantity)/*将商品信息写入文件*/
p3=p3->next
}
fprintf(fp,"%d",-1)
fclose(fp)/*关闭文件*/
}
if(r==2)
continue/*继续循环*/
printf("**********************************\n")
printf("__________________________________\n")
printf("------------请按4返回-------------\n")
printf("__________________________________\n")
printf("**********************************\n")
}
if(n==3) /*修改某商品信息*/
{
printf("请输入需要修改的商品编号\n")
scanf("%d",&q)
while(p3!=NULL) /*判断循环结束条件*/
{
if((p3->num)==q) /*判断是否为所需要修改的商品*/
{
printf("请输入商品单价与库存量(如果单价不变请输入原来的单价)\n")
scanf("%f %d",&p3->price,&p3->quantity)/*输入商品价格与库存量*/
}
p3=p3->next
}
if((fp=fopen("goods message.txt","w"))==NULL) /*判断能否打开文件*/
{
printf("can not open the file")
exit(0)/*结束程序*/
}
p3=head
while(p3!=NULL) /*判断循环结束条件*/
{
fprintf(fp,"%d %s %s %f %s %d ",p3->num,p3->name,p3->kind,p3->price,p3->unit,p3->quantity) /*将商品信息写入文件*/
p3=p3->next
}
fprintf(fp,"%d",-1)
fclose(fp) /*关闭文件*/
printf("**********************************\n")
printf("__________________________________\n")
printf("------------请按4返回-------------\n")
printf("__________________________________\n")
printf("**********************************\n")
}
if(n==4) /*退出*/
break
}
printf("**********\n")
printf("1 继续修改\n---------\n2 返回\n")
printf("**********\n")
scanf("%d",&p)
if(p==1)
continue /*继续循环*/
if(p==2)
break/*跳出循环*/
}while(n!=2)
fclose(fp) /*关闭文件*/
}
void printf0(struct good *p) /*遍历链表并打印电器类商品函数*/
{
struct good *p3 /*定义结构体指针类型*/
p3=p
while (p3!=NULL) /*判断遍历链表循环结束条件*/
{
if(strcmp(p3->kind,c)==0) /*判断商品类型是否为电器类型*/
{
printf("%d\t%s\t%s\t%0.1f\t%s\t%d\n",p3->num,p3->name,p3->kind,p3->price,p3->unit,p3->quantity) /*输出电器类商品信息*/
printf("________________________________________________\n")
}
p3=p3->next
}
return
}
void printf1(struct good *p) /*遍历链表并打印日用品类商品函数*/
{
struct good *p3 /*定义结构体指针类型*/
p3=p
while (p3!=NULL) /*判断遍历链表循环结束条件*/
{
if(strcmp(p3->kind,d)==0) /*判断商品类型是否为日用品类型*/
{
printf("%d\t%s\t%s\t%0.1f\t%s\t%d\n",p3->num,p3->name,p3->kind,p3->price,p3->unit,p3->quantity)/*输出日用品类商品信息*/
printf("________________________________________________\n")
}
p3=p3->next
}
return
}
void printf2(struct good *p)/*遍历链表并打印办公用品类商品函数*/
{
struct good *p3 /*定义结构体指针类型*/
p3=p
while (p3!=NULL) /*判断遍历链表循环结束条件*/
{
if(strcmp(p3->kind,e)==0) /*判断商品类型是否为办公用品类型*/
{
printf("%d\t%s\t%s\t%0.1f\t%s\t%d\n",p3->num,p3->name,p3->kind,p3->price,p3->unit,p3->quantity) /*输出办公用品类商品信息*/
printf("________________________________________________\n")
}
p3=p3->next
}
return
}
void printf3(struct good *p)/*遍历链表并打印食品类商品函数*/
{
struct good *p3 /*定义结构体指针类型*/
p3=p
while (p3!=NULL) /*判断遍历链表循环结束条件*/
{
if(strcmp(p3->kind,f)==0) /*判断商品类型是否为食品类型*/
{
printf("%d\t%s\t%s\t%0.1f\t%s\t%d\n",p3->num,p3->name,p3->kind,p3->price,p3->unit,p3->quantity) /*输出食品类商品信息*/
printf("________________________________________________\n")
}
p3=p3->next
}
return
}
void shunxudayin()
{
for(i=0i<4i++)
g[i]=aver[i] /*将平均价赋给新数组*/
for(j=0j<3j++)/*将新数组用冒泡排序法排序*/
for(i=j+1i<4i++)
{
if(g[j]<g[i])
{
h=g[j]
g[j]=g[i]
g[i]=h
}
}
printf("\n****************************\n")
printf("商品平均价格排序表(从高到低)\n")
printf("****************************\n")
printf("________________________________________________\n")
printf("编号\t名称\t类别\t单价\t单位\t数量\n")
printf("________________________________________________\n")
for(j=0j<4j++)
for(i=0i<4i++)
{
if (aver[i]==g[j])/*判断每类商品平均价格的先后顺序*/
switch(i)
{
case 0:
printf0(head)/*调用遍历链表并打印电器类商品函数*/
break
case 1:
printf1(head)/*调用遍历链表并打印日用品类商品函数*/
break
case 2:
printf2(head)/*调用遍历链表并打印办公用品类商品函数*/
break
case 3:
printf3(head) /*调用遍历链表并打印食品类商品函数*/
break
}
}
}
void tongji1()
{
p1=head
printf("\n************************\n")
printf("库存量低于100的货名及类别\n")
printf("************************\n")
printf("________________________\n")
printf("商品名称\t商品类型\n")
printf("________________________\n")
while(p1!=NULL) /*判断遍历链表循环结束条件*/
{
if(p1->quantity<100) /*判断库存量是否小于100*/
{
printf("%s\t%s\n",p1->name,p1->kind)/*输出商品名称及类别*/
printf("________________________\n")
}
p1=p1->next
}
}
void tongji2()
{
printf("\n**********************************************\n")
printf("商品库存量有2种以上(含2种)低于100的商品类别:\n")
printf("**********************************************\n")
printf("________\n")
if((a[0]<100)&&(a[0]>=2)) /*判断电器类库存量是否为2种以上(含2种)低于100*/
{
printf("电器\n")
printf("________\n")
}
if((a[1]<100)&&(a[1]>=2)) /*判断日用品类库存量是否为2种以上(含2种)低于100*/
{
printf("日用品\n")
printf("________\n")
}
if((a[2]<100)&&(a[2]>=2)) /*判断食品类库存量是否为2种以上(含2种)低于100*/
{
printf("食品\n")
printf("________\n")
}
if((a[3]<100)&&(a[3]>=2)) /*判断办公用品类库存量是否为2种以上(含2种)低于100*/
{
printf("办公用品\n")
printf("________\n")
}
}
int main(int argc, char* argv[])
{
struct good *p1,*p2/*定义结构体指针类型*/
while(1)
{
printf("***********************************************\n")
printf("1 ----------输出查看或者修改已存信息-----------\n")
printf("-----------------------------------------------\n")
printf("2 -----重新输入新信息(并且删除原有信息)------\n")
printf("-----------------------------------------------\n")
printf("3 统计商品信息(如果您还没有查看过信息请先按1)\n")
printf("-----------------------------------------------\n")
printf("4 -------------------退出---------------------\n")
printf("***********************************************\n")
scanf("%d",&m)
if(m==1)
shuchu()/*调用输出信息函数*/
if(m==2)
{
system("cls")
head=createlist() /*调用建立链表函数*/
}
if(m==3)
{
printf("统计结果如下\n")
head=paixu(head) /*调用链表排序函数*/
jisuan() /*调用计算函数*/
shunxudayin() /*调用顺序打印函数*/
tongji1() /*调用统计1函数*/
tongji2() /*调用统计2函数*/
}
if(m==4)
{
p1=head
while(p1!=NULL) /*判断遍历链表结束条件*/
{
p2=p1->next
free(p1)/*释放空间*/
p1=p2
}
break
}
}
return 0 /*结束程序*/
}
请采纳答案,支持我一下。
超市管理系统*/
#include<stdio.h>
#include<string.h>
//欢迎界面//
void welcome()
//功能浏览//
void mainMenu()
//购物结算//
void saleCalc()
//进货管理//
void addGoods()
//修改信息
void updateGoods()
//显示商品//
void showGoods()
//删除商品//
void deleteGoods()
//查询商品//
int searchGoods()
//购买结算
void saleCalc()
//更新库存//
void updateGoodsNum(int number,char name[50])
//结构体
struct goods
{
char name[50]//商品名称
int num//商品数量
float price//商品价格
}
int count/雀族袭/商品种类数量
goods list[1000]//声明goods的变量数组
char name[50]
void main()//主函数
{
int num
welcome()
do{
mainMenu()
printf("请选择功能:")
scanf("%d",&num)
switch(num)
{
case 1:
saleCalc()
break
case 2:
addGoods()
break
case 3:
updateGoods()
break
case 4:
showGoods()
break
case 5:
deleteGoods()
break
case 0:
break
}
}while(num!=0)
}
void welcome()//欢迎界面
{
printf("-------------------------------------------------------------------------\n")
printf("****************欢迎使用超市管理系统*******************\n")
printf("-------------------------------------------------------------------------\n")
}
void mainMenu()//功能浏览界面
{
printf("****1.购物结算****\n")
printf("****2.进货管理****\n")
printf("****3.修改商品****\n")
printf("****4.显示商品****\n")
printf("****5.删穗厅除商品****\n")
printf("****0.退出系统****\n")
}
//查询信息
int searchGoods()//查询商品信息
{
printf("请输入您要购买商品的名字:")
scanf("%s",name)
for(int i=0i<counti++)
{
if(stricmp(name,list[i].name)==0)
{
return 1
}
else
{
printf("对不起了,没有找到%c商品\n",name)
return -1
}
}
}
//购物结算
void saleCalc()//购物结算
{
int number,i,s
float priceGoods=0,sum=0,money
char c=' '
s=searchGoods()
do
{
if(s==-1)
{
s=searchGoods()
}else
{
printf("该商品b存在")
for(i=0i<counti++)
{
if(strcmp(name,list[i].name)==0)
{
priceGoods=list[i].price
break
}
}
printf("请顷兄输入您要购买的数量:")
scanf("%d",&number)
sum=priceGoods*number
updateGoodsNum(-number,name)
printf("是否继续购买(y/n)")
fflush(stdin)
c=getchar()
}
}while(c=='y'||c=='Y')
printf("本次消费总金额为:%.2f",sum)
printf("请输入您的实际付款金额:")
scanf("%f",&money)
printf("找零:%.2f\n",money-sum)
}
//进货管理
void addGoods() //商品的录入
{
int i=0
char c=' '
do
{
printf("请输入商品的名称:")
fflush(stdin)
scanf("%s",list[i].name)
printf("请输入商品的数量:")
scanf("%d",&list[i].num)
printf("请输入商品的单价:")
scanf("%f",&list[i].price)
printf("是否继续(y/n)")
fflush(stdin)
c=getchar()
}while(c=='Y'||c=='y')
}
//更新库存
void updateGoodsNum(int number,char name[50])
{
int i
for(i=0i<counti++)
{
list[i].num+=number//list[i].num=list[i].num+number
}
}
//显示货物信息
void showGoods()
{
printf("商品名称\t数量\t单价\n")
for(int i=0i<counti++)
{
printf("%s\t%d\t%.2f\n",list[i].name,list[i].num,list[i].price)
}
}
//修改商品信息
void updateGoods()
{
int i
printf("请输入您要修改商品的名字:")
scanf("%s",&name)
for(i=0i<counti++)
{
if(strcmp(name,list[i].name)==0)
{
printf("请输入新的商品名字:")
scanf("%s",list[i].name)
printf("请输入您要修改商品的数量:")
scanf("%d",list[i].num)
printf("请输入您要修改商品的单价:")
scanf("%f",list[i].price)
}
else
{
printf("对不起,没有找到该商品信息!")
}
}
}
//删除商品信息
void deleteGoods()
{
int index=-1
printf("请输入您要删除的商品名字:")
scanf("%s",name)
for(int i=0i<counti++)
{
if(strcmp(name,list[i].name)==0)
{
index=i
}
}if(index==-1)
{
printf("对不起!没有找到您要删除的商品信息!")
}
else{
for(int i=indexi<counti++)
{
list[i]=list[i+1]
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)