RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-706196

GeorgeBlsn's questions

Martin Hope
GeorgeBlsn
Asked: 2025-04-16 02:16:08 +0000 UTC

批评此代码

  • 7

该代码是一个简单的控制台应用程序,用于随机更新汇率。我按照我的训练计划编写了它,并在这段代码中实现了delegate和event。版本.NET- 4.8

代码写得有多糟糕?应该做出哪些改变?

using System;
using System.Collections.Generic;

namespace CryptoBot
{
    public class Program
    {
        public static Dictionary<string, decimal> CryptoValute = new Dictionary<string, decimal>();
        public static decimal ForExtemeValue;

        private static int _count = 0;

        static CryptoPriceMonitor priceMonitor = new CryptoPriceMonitor();
        static TraderBot traderBot = new TraderBot(priceMonitor);

        public static void PrintColor(string message, ConsoleColor color)
        {
            Console.ForegroundColor = color;
            Console.WriteLine(message);
            Console.ResetColor();
        }
        static void Main(string[] args)
        {
            CryptoValute.Add("Bitcoin", 50000);
            CryptoValute.Add("DogeCoin", 3);
            CryptoValute.Add("Ethereum", 1680);
            CryptoValute.Add("USDT", 26);

            PrintColor("Choose valute: Bitcoin, DogeCoin, Ethereum, USDT", ConsoleColor.Green);
            PrintColor("Current Prices:", ConsoleColor.Green);

            foreach (var price in CryptoValute)
            {
                Console.WriteLine(price);
            }

            string Choose = Console.ReadLine();

            while (true)
            {
                switch (Choose)
                {
                    case "Bitcoin":
                        ForExtemeValue = CryptoValute["Bitcoin"];
                        Iterations("Bitcoin");
                        Choose = Console.ReadLine();
                        break;

                    case "DogeCoin":
                        ForExtemeValue = CryptoValute["DogeCoin"];
                        Iterations("DogeCoin");
                        Choose = Console.ReadLine();
                        break;

                    case "Ethereum":
                        ForExtemeValue = CryptoValute["Ethereum"];
                        Iterations("Ethereum");
                        Choose = Console.ReadLine();
                        break;

                    case "USDT":
                        ForExtemeValue = CryptoValute["USDT"];
                        Iterations("USDT");
                        Choose = Console.ReadLine();
                        break;

                    default:
                        PrintColor("There is no currency on the list.", ConsoleColor.Green);
                        Choose = Console.ReadLine();
                        break;
                }
            }

        }

        private const int IterationsCount = 1000;
        public static void Iterations(string name)
        {
            string valute;
            decimal value;

            _count = 0;
            valute = name;
            value = CryptoValute[name];

            while (_count != IterationsCount)
            {
                _count++;
                value = CryptoValute[name];
                priceMonitor.UpdatePrice(value, valute);
            }

            Console.Clear();
            PrintColor($"Here are a {IterationsCount} last iterations", ConsoleColor.Green);
            PrintColor("Choose valute: Bitcoin, DogeCoin, Ethereum, USDT", ConsoleColor.Green);
            PrintColor("Current Prices:", ConsoleColor.Green);

            foreach (var price in CryptoValute)
            {
                Console.WriteLine(price);
            }           
        }
    }
    public class CryptoPriceMonitor
    {
        public void UpdatePrice(decimal oldPrice, string name)
        {
            decimal currentPrice = oldPrice;

            PriceChanged?.Invoke(oldPrice, ExtremeValues(currentPrice), name);
        }

        private Random _random = new Random();
        private int _procent;
        private const int MaxRandomProcent = 8;
        private const int MinRandomProcent = -7;
        private decimal ExtremeValues(decimal basePrice)
        {
            decimal newPrice = basePrice;
            decimal maxValue = Program.ForExtemeValue * 100;
            decimal minValue = Program.ForExtemeValue - (Program.ForExtemeValue * 90) / 100;

            if (basePrice >= maxValue)
            {
                _procent = _random.Next(MinRandomProcent, 0);
                newPrice -= (basePrice * Math.Abs(_procent)) / 100;
                return newPrice;
            }
            if (basePrice <= minValue)
            {
                _procent = _random.Next(1, MaxRandomProcent);
                newPrice += (basePrice * Math.Abs(_procent)) / 100;
                return newPrice;
            }
            else
            {
                _procent = _random.Next(MinRandomProcent, MaxRandomProcent);
                if (_procent > 0)
                {
                    newPrice += (basePrice * Math.Abs(_procent)) / 100;
                    return newPrice;
                }
                else
                {
                    newPrice -= (basePrice * Math.Abs(_procent)) / 100;
                    return newPrice;
                }
            }
        }

        public delegate void PriceChangeHandler(decimal oldPrice, decimal newPrice, string valute);
        public event PriceChangeHandler PriceChanged;
    }

    public class TraderBot
    {
        public TraderBot(CryptoPriceMonitor monitor)
        {
            monitor.PriceChanged += OnPriceChanged;
        }

        public void OnPriceChanged(decimal oldPrice, decimal newPrice, string valute)
        {
            if (newPrice > oldPrice)
            {
                Program.PrintColor($"Цена повысилась: {oldPrice} -> {newPrice}", ConsoleColor.Green);
                RestorPrice(valute, newPrice);
            }
            else
            {
                Program.PrintColor($"Цена понизилась: {oldPrice} -> {newPrice}", ConsoleColor.Red);
                RestorPrice(valute, newPrice);
            }
        }

        public static  void RestorPrice(string valute, decimal value)
        {
            Program.CryptoValute[valute] = value;
        }
    }
}
c#
  • 2 个回答
  • 199 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5