Работа с интерфейсами и шаблон Strategy - Проиллюстрировать использование интерфейсов - C#

Узнай цену своей работы

Формулировка задачи:

Задание к работе:

1. Проиллюстрировать использование интерфейсов. 2. Показать вызов метода интерфейса через интерфейсную ссылку. 3. Применить в программе шаблон проектирования Strategy.

Условие:

Предметная область: Интернет оператор. Информационная система провайдера хранит данные о клиентах. Некоторым клиентам предоставляется фиксированная скидка. В классе “оператор” реализовать метод добавления нового клиента и метод вычисления суммарной стоимости оказанных услуг. Совсем запутался в этих интерфейсах. Понятия не имею как в моей проге это все реализовать эффективно и еще шаблон какой-то.

Моя программа.

class Customer
    {
        //Список купленных тарифов
        public List<Product> lstProdOfCust = new List<Product>();
        public string Name { get; set; }
 
        public Customer(string n)
        {
            Name = n;
        }
 
        //Купить тариф
        public void BuyProd(Product p)
        {
            lstProdOfCust.Add(p);
        }
 
        public int GetTotal()
        {
            int sum = 0;
            foreach (var p in lstProdOfCust)
                sum += p.Price;
            return sum;
        }
    }class Discount : IPrice
    {
        public int discount, price;
 
        public Discount(int p, int d)
        {
            price = p;
            discount = d;
        }
 
        public int GetPrice()
        {
            return price-discount;
        }
    }interface IPrice
    {
        int GetPrice();
    }class NoDiscount : IPrice
    {
        public int price;
 
        public NoDiscount(int p)
        {
            price = p;
        }
 
        public int GetPrice()
        {
            return price;
        }
    } class Operator
    {
        //Список тарифов
        public List<Product> lstPr = new List<Product>();
        //Список клиентов
        public List<Customer> lstCust = new List<Customer>();
 
        //Текущий клиент
        Customer currCust;
 
        //Добавить тариф
        public void AddProduct(string t, int p, int q)
        {
            lstPr.Add(new Product(t,p,q));
        }
 
        //Добавить клиента
        public void AddCustomer(string n)
        {
            lstCust.Add(new Customer(n));
        }
 
        //Поиск клиента заплатившего больше всех
        public Customer GetCustByPrice()
        {
            Customer cust = lstCust[0];
            foreach (var item in lstCust)
                if (item.GetTotal() > cust.GetTotal()) cust = item;
            return cust;
        }
 
        //Вывод общей стоимости реализованного трафика
        public int GetTotalSum()
        {
            int sum = 0;
            foreach (Customer c in lstCust)
            {
                foreach (Product p in c.lstProdOfCust)
                {
                    sum += p.Price;
                }
            }
            return sum;
        }
        //Поиск клиента по имени
        public Customer GetCustByName(string n)
        {
            foreach (Customer item in lstCust)
                if (item.Name == n)
                {
                    return item;
                }
            return null;
        }
       
        //Регистрация пользователя
        public void LogIn(String n)
        {
            if (currCust == null)
                currCust = GetCustByName(n);
        }
        
        //Выход из системы
        public void LogOut()
        {
            currCust = null;
        }
 
        //Найти тариф по названию
        public Product GetProdByTitle(string t)
        {
            foreach (Product item in lstPr)
            {
                if (item.Name == t)
                    return item;
            }
            return null;
        }
        //Купить тариф для текущего клиента
        public void BuyProduct(string name)
        {
            Product p = GetProdByTitle(name);
            currCust.BuyProd(p);
        }
        
        //Вывод данных о потребленном трафике для конкретного пользователя
        public string GetProductByName(string n)
        {
            Customer c = GetCustByName(n);
            string s = "Client: " + c.Name + "\n" + "Potreblenniy trafik: ";
            foreach (Product p in c.lstProdOfCust)
            {
                s += p.Trafik;
            }
            return s;
        }
    } class Product
    {
        public string Name { get; set; }
        public int Price { get; set; }
        public int Trafik { get; set; }
 
        public Product(string a, int p, int t)
        {
            Name = a;
            Price = p;
            Trafik = t;
        }
    }class Program
    {
        static void Main()
        {
            Operator op = new Operator();
            op.AddProduct("Домовой", 100, 5000);
            op.AddProduct("10gb", 200, 10000);
            op.AddProduct("15gb", 300, 15000);
 
            op.AddCustomer("Petya");
            op.AddCustomer("Fedya");
            op.AddCustomer("Ivan");
 
            //Добавление клиентов со скидкой
            op.AddCustomer("Vasya");
            op.LogIn("Vasya");
 
            op.LogOut();
 
            op.LogIn("Petya");
            op.BuyProduct("15gb");
            op.LogOut();
 
            op.LogIn("Fedya");
            op.BuyProduct("10gb");
            op.LogOut();
 
            Console.WriteLine("Общая стоимость реализуемого трафика: " + op.GetTotalSum());
            Console.WriteLine(op.GetProductByName("Fedya"));
            Console.WriteLine(new string('-', 20));
            Console.WriteLine(op.GetCustByPrice().Name);
        }
    }

Пример препода.

using System;  
using System.Collections.Generic; 

interface IPrice 
{ 
    int GetPrice(); 
} 
 
class NoDiscount : IPrice 
{ 
    int price; 
    public NoDiscount(int p) 
    { 
        price = p; 
    } 
    public int GetPrice() 
    { 
        return price; 
    } 
} 
 
class AbsDiscount : IPrice 
{ 
    int price; 
    int discount; 
    public AbsDiscount(int p, int d) 
    { 
        price = p; 
        discount = d; 
    } 
    public int GetPrice() 
    { 
        return price - discount; 
    } 
} 
 
class Product 
{ 
    public Product(string name, IPrice ip) 
    { 
        Name = name; 
        this.ip = ip; 
    } 
    IPrice ip; 
    public string Name { get; set; } 
    public int GetPrice() 
    { 
        return ip.GetPrice(); 
    } 
} 
 
class Store 
{ 
    List<Product> lstProd = new List<Product>(); 
    public void AddNoDiscountProduct(string name, int price) 
    { 
        Product p = new Product(name, new NoDiscount(price)); 
        lstProd.Add(p); 
    } 
    public void AddAbsDiscountProduct(string name, int price, int discount) 
    { 
        Product p = new Product(name, new AbsDiscount(price, discount)); 
        lstProd.Add(p); 
    } 
    public int GetTotalPrice() 
    { 
        int s = 0; 
        foreach (Product p in lstProd) 
        { 
            s += p.GetPrice(); 
        } 
        return s; 
    } 
} 
 
class Program 
{ 
    static void Main(string[] args) 
    { 
        Store riga = new Store(); 
        riga.AddAbsDiscountProduct(" bread", 3200, 200); 
        riga.AddNoDiscountProduct("milk", 1200); 
        Console.WriteLine(riga.GetTotalPrice()); 
    } 
}
Еще актуально)
Никто не может помочь?)

Решение задачи: «Работа с интерфейсами и шаблон Strategy - Проиллюстрировать использование интерфейсов»

textual
Листинг программы
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication180
{
    class Program
    {
        static void Main(string[] args)
        {
            var users = new Users();
            var user1 = new User() { Name = "Петренко", TariffPrice = 100, CostCalcualtor = new NoDiscount() };
            var user2 = new User() { Name = "Сидоренко", TariffPrice = 150, CostCalcualtor = new AbsDiscount(10) };
 
            users.Add(user1);
            users.Add(user2);
 
            var sum = users.GetTotalCost();
 
            Console.WriteLine(sum);
 
            Console.ReadLine();
        }
    }
 
    class Users : List<User>
    {
        public int GetTotalCost()
        {
            int res = 0;
            foreach (var u in this)
                res += u.GetCost();
 
            return res;
        }
    } 
 
    class User
    {
        public string Name { get; set; }
        public int TariffPrice { get; set; }
 
        public ICostCalculator CostCalcualtor { get; set; }
 
        public int GetCost()
        {
            return CostCalcualtor.Calc(TariffPrice);
        }
    }
 
    interface ICostCalculator
    {
        int Calc(int price);
    }
 
    class NoDiscount : ICostCalculator
    {
        public int Calc(int price)
        {
            return price;
        }
    }
 
    class AbsDiscount : ICostCalculator
    {
        int discount;
 
        public AbsDiscount(int d)
        {
            discount = d;
        }
 
        public int Calc(int price)
        {
            return Math.Max(0, price - discount);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы