Работа с интерфейсами и шаблон 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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д