返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#实现简单超市收银系统
  • 478
分享到

C#实现简单超市收银系统

2024-04-02 19:04:59 478人浏览 泡泡鱼
摘要

本文实例为大家分享了C#实现简单超市收银系统的具体代码,供大家参考,具体内容如下 今天使用一直学习的抽象类等做了个简单的超市收银系统,不难,不过里面的逻辑要理清楚。 首先我们要知道我

本文实例为大家分享了C#实现简单超市收银系统的具体代码,供大家参考,具体内容如下

今天使用一直学习的抽象类等做了个简单的超市收银系统,不难,不过里面的逻辑要理清楚。

首先我们要知道我们要实现的功能。

超市一般有仓库,有收银台,有各种各样的商品,每一个商品都有Name,Price,Count等属性。我们可以写一个抽象父类,这样我们才能将每件商品属性设置一样。
新建一个ProduckFather类作为商品的父类 并将属性和构造函数写好,每次新建商品时写好参数就会方便很多

abstract class ProduckFather
    {
        private string _name;
        private double _price;
        private int _count;
        private string _id;

        public string Name { get => _name; set => _name = value; }
        public double Price { get => _price; set => _price = value; }
        public int Count { get => _count; set => _count = value; }
        public string Id { get => _id; set => _id = value; }
        public ProduckFather(string name,double price,int count)
        {
            this.Name = name;
            this.Price = price;
            this.Count = count;
        }
    }```

接下来创造自己的商品,这里只举Apple一个例子,不在重复代码

```csharp
 class Apple:ProduckFather
    {
        public Apple(string name,double price,int count)
            :base(name,price,count)
        {
        
        }
    }

接下来就是仓库类了,这一部分是个重点,他要实现存储的功能,那么我们用什么来存储呢?
我们既要存不同种类的物品,数量也不会相同,首选是list(集合)或dictionary(键值对),问题是集合存储虽然容易,想要拿到固定的东西却比较复杂
list就相当于是一个大仓库,虽然什么东西都能存储,但是每次找东西都要翻半天,所以我们可以使集合中每一个元素都是一个集合,而且这个集合必须是父类类型的,不然无法装有其他类型的物品。

//[0]Apple [1]Banana [2]Vivo [3]Oppo [4]Huaweu 
//实现存储货物
List<List<ProduckFather>> list = new List<List<ProduckFather>>();    //建造一个仓库
//让每一个仓库摆满东西

代码中的list可以理解为仓库里摆满了货架,什么类型的物品就放在什么货架上。
仓库每次调用时里面必须要有货架,所以写成构造函数。

public Cangku()
        {
            list.Add(new List<ProduckFather>());//苹果香蕉华为oppo和vivo
            list.Add(new List<ProduckFather>());
            list.Add(new List<ProduckFather>());
            list.Add(new List<ProduckFather>());
            list.Add(new List<ProduckFather>());
        }

仓库还要有进货,出货,以及展示超市内物品的功能,这一部分代码不难,还请读者根据注释自行理解

/// <summary>
        /// 进货
        /// </summary>
        /// <param name="strType">货物类型</param>
        /// <param name="count">货物数量</param>
        public void GetPros(string strType,int count)
        {
            for (int i = 0; i < count; i++)
            {
                switch (strType)
                {
                    case "Apple":list[0].Add(new Apple("Apple", 6000, 1));
                        break;
                    case "Banana":list[1].Add(new Banana("Banana",5,1));
                        break;
                    case "Vivo":list[2].Add(new Vivo("Vivo", 3000, 1));
                        break;
                    case "Oppo":list[3].Add(new Oppo("Oppo", 2500, 1));
                        break;
                    case "Huawei":list[4].Add(new Huawei("Huawei", 5000, 1));
                        break;
                    default:Console.WriteLine("你输入的有错误,请重新购买");
                        break;
                }
            }
        }
        /// <summary>
        /// 取货
        /// </summary>
        /// <param name="strType"></param>
        /// <param name="count"></param>
        public ProduckFather[] SetPros(string strType, int count)
        {
            ProduckFather[] pros = new ProduckFather[count];
            for (int i = 0; i < count; i++)
            {
                switch (strType)
                {
                    case "Apple":
                        if (list[0].Count > count)
                        {
                            pros[i] = list[0][0];//这里只是赋值的功能,并没有移除货物
                            list[0].RemoveAt(0);//移除货物
                            break;
                        }
                        else 
                        {
                            Console.WriteLine("Apple货物不足!");
                            break;
                        }
                    case "Banana":
                        if (list[1].Count > count)
                        {
                            pros[i] = list[1][0];
                            list[1].RemoveAt(0);
                            break;
                        }
                        else {
                            Console.WriteLine("Banana货物不足!");
                            break;
                        }
                    case "Vivo":
                        if (list[2].Count > count)
                        {
                            pros[i] = list[2][0];
                            list[2].RemoveAt(0);
                            break;
                        }
                        else {
                            Console.WriteLine("Vivo产品不足!");
                            break;
                        }
                    case "Oppo":
                        if (list[3].Count > count)
                        {
                            pros[i] = list[3][0];
                            list[3].RemoveAt(0);
                            break;
                        }
                        else {
                            Console.WriteLine("Oppo产品不足!");
                            break;
                        }
                    case "Huawei":
                        if (list[4].Count > count)
                        {
                            pros[i] = list[4][0];
                            list[4].RemoveAt(0);
                            break;
                        }
                        else
                        {
                            Console.WriteLine("Huawei产品不足!");
                            break;
                        }
                    default:Console.WriteLine("没有您想要的物品!");
                        break;
                }
            }
            return pros;
        }
        /// <summary>
        /// 展示超市物品
        /// </summary>
        public void ShowPros()//用遍历list来展示超市里的物品
        {
            foreach (var item in list)
            {
                Console.WriteLine("我们超市有:" + item[0].Name  +"\t"+"共有" +item.Count+ "个," + "\t" + "每个"+item[0].Price+"元");
            }
        }

仓库完结后,还有收银台的功能。
每次使用收银台时,必须有货物,所以写成构造函数保证仓库有货

//每次引用时,需要进货
Cangku ck = new Cangku();//创建仓库对象
/// <summary>
/// 每次创建对象就进货
/// </summary>
public SuperMarket()
        {
            ck.GetPros("Apple", 100);//调用仓库类的进货函数进货
            ck.GetPros("Banana", 1000);
            ck.GetPros("Vivo", 150);
            ck.GetPros("Oppo", 200);
            ck.GetPros("Huawei", 500);
        }

超市往往会有打折活动,一般这个活动分为两种例如:八折或者满300减50。活动往往是会变化的,所以写成抽象类
抽象类中提供一个打折方法。

abstract class CalFather
    {
        public abstract double Cal(double realmoney);
    }

创建打折类CalRate

class CalRate : CalFather
    {
        double _rate;

        public double Rate { get => _rate; set => _rate = value; }
        public CalRate(double rate)
        {
            this.Rate = rate;
        }

        public override double Cal(double realmoney)
        {
            return realmoney * this.Rate;
        }
    }

满减类CalMN

class CalMN : CalFather
    {
        double m;
        double n;

        public double M { get => m; set => m = value; }
        public double N { get => n; set => n = value; }
        public CalMN(double m,double n)
        {
            this.M = m;
            this.N = n;
        }

        public override double Cal(double realmoney)
        {
            return realmoney - N * (realmoney % M);
        }
    }

这两块没有难点,自行理解
接下来与用户的交互重中之重,包含了计算用户货物的钱以及计算打折后的钱等。
不明白请看注释

 /// <summary>
        /// 用顾客交互,询问需要什么
        /// </summary>
        public void SayWhat()
        {
            Console.WriteLine("您好您需要什么?");
            string str = Console.ReadLine();
            Console.WriteLine("您需要多少?");
            int a = Convert.ToInt32(Console.ReadLine());
            ProduckFather[] pros=  ck.SetPros(str, a);//将货物取出
            double realmoney =  GetMoney(pros);   //计算真实价格

            Console.WriteLine("您购买的物品是{0},数量是{1},价格是{2}", str, a,realmoney);//用户购买清单
            Console.WriteLine("请选择您的打折方式:1--8折,2--满300送50  3--不打折");
             int input= Input(); //用户输入,调用Input判断输入是否合规并返回int类型
            CalFather cal = Money(input);//判断打折方法并,返回一个父类对象
            double money= cal.Cal(realmoney);//调用打折虚方法并返回打折后的钱
            Console.WriteLine("总共要花费{0}元", money);
            Xiaopiao(pros, money);
           
        }
        /// <summary>
        /// 计算真实价格
        /// </summary>
        /// <param name="pros"></param>
        /// <returns></returns>
        public double GetMoney(ProduckFather[] pros)//遍历pros(相当于购物车)来计算价钱
        {
            double realmoney=0;
            foreach (var item in pros)
            {
                realmoney += item.Price;
            }
            return realmoney;
        }
        /// <summary>
        /// 打折后的钱
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public CalFather Money(int input)//根据用户的选择来计算打折后的钱
        {
            CalFather cal = null;
            switch (input)
            {
                case 1:cal = new CalRate(0.8);         
                    break;
                case 2:cal = new CalMN(300, 50);
                    break;
                case 3:cal = new CalNo(); 
                    break;
            }
            return cal;
        }
        public void ShowPros()
        {
            ck.ShowPros();
        }
        /// <summary>
        /// 判断用户输入是否合理
        /// </summary>
        public int Input()  //判断用户输入的是否合规,不合规则一直输入
        {
            bool b = true;
            int input;
            while (b)
            {
                try
                {
                    input = Convert.ToInt32(Console.ReadLine());
                    if (input <= 3 && input > 0)
                    {
                        return input;
                    }
                    else
                    {
                        b = true;
                    }
                }
                catch
                {
                    Console.WriteLine("您输入的不正确,请重新输入:1--8折,2--满300送50  3--不打折");
                }
            }
            return 0;
         
        }
        //打印伪小票
        public void XiaoPiao(ProduckFather[] pros, double money)
        {
            Console.WriteLine("***************发票***************");
            foreach (var item in pros)
            {
                Console.WriteLine("本次您购买了" + item.Name + "\t" + "一共" + item.Count + "\t" + "件" );
            }
            Console.WriteLine("总花费了{0}元", money);
            Console.WriteLine("请评价本次购买:1--满意 2--良好 3--不满意");
            Console.ReadKey();
            Console.WriteLine("感谢您的评价,祝您生活愉快!");
        }
    }

主函数:

//创建超市对象
SupperMarket sp = new SupperMarket();
//展示超市货物
sp.ShowPros();
//跟用户交互
sp.SayWhat();

运行界面:

本系统还有部分尚不完善,是开源的,还可以实现进货的功能,以及try{}catch{}并没有加很多的异常判断,系统不算稳定,读者可以自行修改。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#实现简单超市收银系统

本文链接: https://lsjlt.com/news/138660.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#实现简单超市收银系统
    本文实例为大家分享了C#实现简单超市收银系统的具体代码,供大家参考,具体内容如下 今天使用一直学习的抽象类等做了个简单的超市收银系统,不难,不过里面的逻辑要理清楚。 首先我们要知道我...
    99+
    2024-04-02
  • Java实战之超市收银管理系统的实现
    目录一、项目简述二、项目运行三、效果图四、核心代码品类信息控制层用户信息控制层商品信息控制层一、项目简述 本系统主要实现的功能有:收银、报表、用户管理、商品管理、销售管理、进货退货管...
    99+
    2024-04-02
  • C语言实现超市计价收款系统
    本文实例为大家分享了C语言实现超市计价收款系统的具体代码,供大家参考,具体内容如下 学习一个月的C语言,写了一个简易的超市计价收款系统 源码如下 #include<stdio...
    99+
    2024-04-02
  • [附源码]java毕业设计超市收银系统
    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: S...
    99+
    2023-09-26
    java 开发语言 mysql
  • C语言如何实现超市计价收款系统
    小编给大家分享一下C语言如何实现超市计价收款系统,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下学习一个月的C语言,写了一个简易的超市计价收款系统源码如下#include<stdio.h>#inclu...
    99+
    2023-06-29
  • java实现简单银行ATM系统
    本文实例为大家分享了java实现简单银行ATM系统的具体代码,供大家参考,具体内容如下 #ATM系统 ##功能 模拟银行ATM机系统,具有注册、登录功能用户登录后可实现以下功能:1)...
    99+
    2024-04-02
  • Java简单实现银行ATM系统
    本文实例为大家分享了Java实现银行ATM系统的具体代码,供大家参考,具体内容如下 实现步骤: 定义账户类,用于后期创建账户对象封装用户的账户信息。 账户类中的信息至少需要包含(卡号...
    99+
    2024-04-02
  • Python实现简易超市管理系统
    目录一:购物车管理功能二:用户管理功能三:AI客服对话一:购物车管理功能 1.添加商品(不重复添加)、 2.删除商品(购物车中有的才能删除)、 3.查看购物车 4.退出系统 产品列表...
    99+
    2024-04-02
  • java如何实现简单银行ATM系统
    这篇文章主要介绍了java如何实现简单银行ATM系统的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java如何实现简单银行ATM系统文章都会有所收获,下面我们一起来看看吧。#ATM系统##功能模拟银行ATM机系...
    99+
    2023-06-30
  • C语言实现超市信息管理系统
    本文实例为大家分享了C语言实现超市信息管理系统的具体代码,供大家参考,具体内容如下 设计要求:设计一个超市信息管理系统,利用结构体存储货物信息和所购买商品的信息,并使用链表保存购物车...
    99+
    2024-04-02
  • 使用java如何实现简易超市管理系统
    这篇文章给大家分享的是有关使用java如何实现简易超市管理系统的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、确定需求程序概述:小型超市商品销售管理系统选择小型超市的四类商品进行管理。这四类商品是:食品、化妆品...
    99+
    2023-06-14
  • C#实现简单点餐系统
    本文实例为大家分享了C#实现简单点餐系统的具体代码,供大家参考,具体内容如下 实现简单点餐系统剖析 1、设计界面(给菜品的序号(index),名称(name),单价(money)加上...
    99+
    2024-04-02
  • C++实现超市商品管理系统最新版
    超市商品管理系统,供大家参考,具体内容如下 一、问题描述及功能要求 1.提供商品系统的添加、删除、编辑、显示等功能。 2.同类系统多数使用结构体数组来操作数据,本系统使用链表结构操作...
    99+
    2024-04-02
  • java实现简易超市管理系统 附源码下载
    java超市管理系统 1.0(含源文件,后续会继续优化~) 前言 一个月零零散散的时间学习了java,通过这次“超市管理系统”的练习,希望可以给一同开始学习java的朋友一些参考,更...
    99+
    2024-04-02
  • C++实现简单通讯录系统
    本文实例为大家分享了C++实现简单通讯录系统的具体代码,供大家参考,具体内容如下 需求分析: 1.通讯录可以添加联系人。 2.通讯录可以显示所有联系人。 3.通讯录可以查找联系人。 ...
    99+
    2024-04-02
  • C#实现简单的点餐系统
    本文项目为大家分享了C#实现点餐系统,供大家参考,具体内容如下 项目介绍:一家店铺使用的外卖点餐系统本项目分三大模块:登录注册模块,用户模块,店家模块 1.登录注册模块 登录分为用户...
    99+
    2024-04-02
  • 超市商品信息管理系统/超市管理系统的设计与实现
    摘  要 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多国家的之中,随之就产生了“超市商品信息管理系统”,这样就让超市商品信息管理系统更加方便简单。 对于本超市商品信息管理系统的设计来说,系统开发主要...
    99+
    2023-10-08
    java 开发语言
  • Java实现超市会员管理系统
    本文实例为大家分享了Java实现超市会员管理系统的具体代码,供大家参考,具体内容如下 要求:借助集合框架及实用类实现该系统 1、积分累计2、积分兑换3、查询剩余积分4、修改密码5、开...
    99+
    2024-04-02
  • C++实现简单校园导游系统
    本文实例为大家分享了C++实现校园导游系统的具体代码,供大家参考,具体内容如下 #include <iostream> #include <stdio.h> ...
    99+
    2024-04-02
  • C++实现简单信息管理系统
    本文实例为大家分享了C++实现简单信息管理系统的具体代码,供大家参考,具体内容如下 信息管理系统 因为学校布置了写一个信息管理系统的作业,所以写下了这个信息管理系统,这是用cpp写的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作