close

Вход

Забыли?

вход по аккаунту

?

Отче#U0308т3

код для вставкиСкачать
 БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Факультет информационных технологий и робототехники
ОТЧЁТ
о лабораторной работе № 3
Дисциплина
"Объектно-ориентированное программирование"
Тема
"ПАТТЕРН СТРАТЕГИЯ В C#"
Выполнили: студенты гр. 107310 Сергейчик Н. А.
Рудинский Д. А.
Проверил: Радкевич А. С.
Минск 2012
Лабораторная работа № 3
ПАТТЕРН СТРАТЕГИЯ В C#
Цель работы: Изучить механизмы использования шаблонов проектирования. Ознакомиться с основными подходами при использовании интерфейсов. Постановка задачи
1. Составить UML диаграмму проектируемой системы. 2. Запрограммировать классы в соответствии с новой диаграммой. 3. Проиллюстрировать использование интерфейсов. 4. Показать возможности использования стандартных интерфейсов: IEnumerable, IE numerator. 5. Применить в программе шаблоны проектирования Strategy и Singleton.
Индивидуальное задание
Вариант 7. Предметная область: Фирма грузоперевозок. Фирма имеет список тарифов по перевозке грузов. Класс тариф хранит наименование тарифа и цену. На некоторые тарифы предоставлена скидка, заданная в процентах. В классе фирма реализовать методы добавления нового тарифа и метод поиска
тарифа с минимальной стоимостью. Результаты работы программного обеспечения
Рисунок 1 - Окно приложения
Диаграмма классов
Выводы
Мы изучили механизмы использования шаблонов проектирования. Ознакомились с основными подходами при использовании интерфейсов.
Приложение 1
Листинг модуля Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace Lab3
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
}
}
}
Приложение 2
Листинг модуля Tariff.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Lab3
{
public class Tariff
{
public string Name { get; set; }
public double Cost_1kg { get; set; }
public double Cost_1m { get; set; }
public int Discount { get; set; }
public Tariff(string Name, double Cost_1kg, double Cost_1m, int Discount)
{
this.Name = Name;
this.Cost_1kg = Cost_1kg;
this.Cost_1m = Cost_1m;
this.Discount = Discount;
}
}
}
Приложение 3
Листинг модуля Firm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Lab3
{
public class Firm
{
public List<Tariff> tariff { get; set; }
public List<Client> Clients { get; set; }
private static Firm instance = null;
public IStrategy CostStrategy;
private Firm()
{
this.tariff = new List<Tariff>();
this.Clients = new List<Client>();
}
public static Firm Instance
{
get
{
if (instance == null)
instance = new Firm();
return instance;
}
}
public void SetStrategy(IStrategy strategy)
{
CostStrategy = strategy;
}
public void AddTariff(string Name, double Cost_1kg, double Cost_1m, int Discount)
{
this.tariff.Add(new Tariff(Name, Cost_1kg, Cost_1m, Discount));
}
public Cargo GetCargo(string Name, Client client)
{
foreach (Cargo cargo in client.cargo)
if (cargo.Name == Name)
return cargo;
return null;
}
public Client GetClient(string Name)
{
foreach (Client client in this.Clients)
if (client.Name == Name)
return client;
return null;
}
public Tariff GetTariff(string Name)
{
foreach (Tariff tar in this.tariff)
if (tar.Name == Name)
return tar;
return null;
}
public Tariff GetMinTariff()
{
Tariff minTariff = null;
double cost = Double.MaxValue;
double currcost;
SetStrategy(new GetCargoCost());
foreach (Tariff currTariff in this.tariff)
{
Cargo cargo = new Cargo("", 1, 1, currTariff);
currcost = this.CostStrategy.GetCost(null, null, cargo);
if (currcost < cost)
{
cost = currcost;
minTariff = currTariff;
}
}
return minTariff;
}
public void RegisterClient(string Name)
{
if (GetClient(Name) != null)
{
MessageBox.Show("Клиент с данным именем уже зарегистрирован");
return;
}
Client newclient = new Client(Name);
this.Clients.Add(newclient);
}
public void AddCargo(string ClientName, string CargoName, int Weight, int Distance, string TariffName)
{
Client client = GetClient(ClientName);
if (client == null)
{
MessageBox.Show("Клиент с данным именем не зарегистрирован");
return;
}
Cargo cargo = GetCargo(CargoName, client);
if (cargo != null)
{
MessageBox.Show("Груз с данным именем уже зарегистрирован");
return;
}
Tariff tariff = GetTariff(TariffName);
if (tariff == null)
{
MessageBox.Show("Тарифа с таким именем нет");
return;
}
Cargo newcargo = new Cargo(CargoName, Weight, Distance, tariff);
client.cargo.Add(newcargo);
}
}
}
Приложение 4
Листинг модуля Client.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Lab3
{
public class Client
{
public string Name { get; set; }
public List<Cargo> cargo { get; set; }
public Client(string Name)
{
this.Name = Name;
this.cargo = new List<Cargo>();
}
}
}
Приложение 5
Листинг модуля Cargo.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Lab3
{
public class Cargo
{
public string Name { get; set; }
public int Weight { get ; set; }
public int Distance { get; set; }
public Tariff tariff { get; set; }
public Cargo(string Name, int Weight, int Distance, Tariff tariff)
{
this.Name = Name;
this.Weight = Weight;
this.Distance = Distance;
this.tariff = tariff;
}
}
}
Приложение 6
Листинг модуля Strategy.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Lab3
{
public interface IStrategy
{
double GetCost(Firm firm, Client client, Cargo cargo);
}
public class GetCargoCost : IStrategy
{
public double GetCost(Firm firm, Client client, Cargo cargo)
{
return (cargo.Weight * cargo.tariff.Cost_1kg + cargo.Distance * cargo.tariff.Cost_1m) -
(cargo.Weight * cargo.tariff.Cost_1kg + cargo.Distance * cargo.tariff.Cost_1m) / 100 * cargo.tariff.Discount;
}
}
public class GetAllCargoCost : IStrategy
{
public double GetCost(Firm firm, Client client, Cargo cargo)
{
double result = 0;
foreach (Cargo carg in client.cargo)
result += (carg.Weight * carg.tariff.Cost_1kg + carg.Distance * carg.tariff.Cost_1m) -
(carg.Weight * carg.tariff.Cost_1kg + carg.Distance * carg.tariff.Cost_1m) / 100 * carg.tariff.Discount;
return result;
}
}
public class GetRevenue : IStrategy
{
public double GetCost(Firm firm, Client client, Cargo cargo)
{
double revenue = 0;
foreach (Client clnt in firm.Clients)
{
double result = 0;
foreach (Cargo carg in clnt.cargo)
result += (carg.Weight * carg.tariff.Cost_1kg + carg.Distance * carg.tariff.Cost_1m) -
(carg.Weight * carg.tariff.Cost_1kg + carg.Distance * carg.tariff.Cost_1m) / 100 * carg.tariff.Discount;
revenue += result;
}
return revenue;
}
}
}
Документ
Категория
Рефераты
Просмотров
48
Размер файла
140 Кб
Теги
u0308т3, отчет
1/--страниц
Пожаловаться на содержимое документа