Работа с интерфейсами и шаблон 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);
}
}
}