功能
来源:CSDN问答
碰到2个人问这个问题,这里记录一下。
开发一个简单的超市收银系统,要求
1、定义结构体数组,条目包含商品名称,单价,条形码;
2、结帐时,输入每件商品的名称或条形码,输入数量,最后输出所有商品的总价格;
3、顾客付款后,给出找零金额;
4、结帐时,一旦发现商品数量有误,可以修改数量或删除相应的商品;
代码
#include <stdio.h>
#include <string.h>
#define MAXNMB 20
struct StProduct
{
char name[20]; //商品名称
float price; //单价
char id[20]; //条形码
};
//录入商品信息
void InputProduct(struct StProduct arr[],int nmb[],int *szie)
{
char isgo;
int ss = 0;
do
{
printf("请录入商品名称:");
scanf("%s",arr[ss].name);
printf("请录入商品单价:");
scanf("%f",&arr[ss].price);
printf("请输入条形码:");
scanf("%s",arr[ss].id);
printf("请输入商品数量:");
scanf("%d",&nmb[ss]);
ss++;
printf("是否继续添加商品(Y/N)?:");
scanf("%c%*c",&isgo);
if(isgo == 'N' || isgo == 'n')
break;
} while (1);
*szie = ss;
}
//修改产品数量
void ChangeNmb(struct StProduct arr[],int nmb[],int *szie)
{
int i = 0;
char name[20] = {0};
printf("请输入需要修改数量产品的名称:");
scanf("%s",name);
for (; i < *szie;i++)
{
if (strcmp(arr[i].name,name)==0)
{
printf("请输入产品的数量:");
scanf("%d",&nmb[i]);
break;
}
}
}
//删除商品
void DeletePro(struct StProduct arr[],int nmb[],int *szie)
{
int i,j;
int ss = *szie;
char name[20] = {0};
printf("请输入需要删除的商品名称:");
scanf("%s",name);
for (i = 0;i < ss; i++)
{
if (strcmp(arr[i].name,name) == 0)
{
if(i < ss -1)
{
arr[i] = arr[i+1]; //商品前移
nmb[i] = nmb[i+1];
}
break;
}
}
ss = ss -1;
*szie = ss;
}
//付钱
void Pay(struct StProduct arr[],int nmb[],int *szie)
{
int i;
int ss = *szie;
float total = 0.0; //应付总金额
float money = 0.0; //实际给的钱
float zhaoling = 0.0; //找零
for (i = 0; i < ss; i++)
{
total += arr[i].price * nmb[i];
}
printf("应付款:%f\n",total);
printf("请输入付款金额:");
scanf("%f",&money);
zhaoling = money - total;
printf("找零:%f\n",zhaoling);
printf("欢迎下次光临!");
}
//结账
void Deal(struct StProduct arr[],int nmb[],int *szie)
{
int i,opt;
int bgo = 1;
printf("请核对商品信息:\n");
for (i = 0; i < *szie; i++)
{
printf("%s\t%.1f\t%d\n",arr[i].name,arr[i].price,nmb[i]);
}
while(bgo)
{
printf("1.结账 2.修改产品数量 3.删除商品\n");
scanf("%d",&opt);
switch(opt)
{
case 1:
Pay(arr,nmb,szie);
bgo = 0;
break;
case 2:
ChangeNmb(arr,nmb,szie);
break;
case 3:
DeletePro(arr,nmb,szie);
bgo = 0;
break;
}
}
}
int main()
{
struct StProduct arr[MAXNMB]; //存储商品
int nmb[MAXNMB]; //存储对应商品的数量
int opt;
int count = 0; //商品实际数量
int bgo = 1;
while(bgo)
{
printf("------------简易超市收银系统--------\n");
printf("| 1.录入商品信息 |\n");
printf("| 2.结账 |\n");
printf("| 3.退出系统 |\n");
printf("------------------------------------\n");
scanf("%d",&opt);
switch(opt)
{
case 1:
InputProduct(arr,nmb,&count);
break;
case 2:
Deal(arr,nmb,&count);
break;
case 3:
bgo = 0;
break;
}
}
return 0;
}