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

怎么用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条)

报告相同问题?

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装