m0_59125969 2021-06-17 22:07 采纳率: 100%
浏览 986
已结题

怎么用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;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 爬取豆瓣电影相关处理
  • ¥15 手机淘宝抓清除消息接口
  • ¥15 C#无selenium
  • ¥15 LD衰减计算的结果过大
  • ¥15 用机器学习方法帮助保险公司预测哪些是欺诈行为
  • ¥15 计算300m以内的LD衰减
  • ¥15 数据爬取,python
  • ¥15 怎么看 cst中一个面的功率分布图,请说明详细步骤。类似下图
  • ¥15 为什么我的pycharm无法用pyqt6的QtWebEngine
  • ¥15 FOR循环语句显示查询超过300S错误怎么办