m0_59125969
2021-06-17 22:07
采纳率: 100%
浏览 79

怎么用c语言写一个超市收银系统

开发一个简单的超市收银系统,要求

1、定义结构体数组,条目包含商品名称,单价,条形码;

2、结帐时,输入每件商品的名称或条形码,输入数量,最后输出所有商品的总价格;

3、顾客付款后,给出找零金额;

4、结帐时,一旦发现商品数量有误,可以修改数量或删除相应的商品;

  • 收藏

2条回答 默认 最新

  • qfl_sdu 2021-06-17 22:25
    已采纳

    代码如下,如有帮助,请采纳一下,谢谢。

    #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;
    }
    已采纳该答案
    打赏 评论
  • 有问必答小助手 2021-06-18 18:43

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m

    打赏 评论

相关推荐 更多相似问题