Автор работы: Пользователь скрыл имя, 09 Мая 2015 в 17:15, курсовая работа
Темой курсового проекта является моделирование процесса сборки мебели на языке С#. Для реализации поставленной задачи необходимо разработать базовые и производные классы. Также нужно задать для полей и методов классов спецификаторы доступа в зависимости от их использования, построить абстрактные типы данных, сделать перегрузку некоторых методов, задать виртуальные функции, создать обобщённые и необобщённые коллекции, применить исключения, разработать различные конструкторы для объектов.
Данная тема является актуальной на сегодняшний день, так как разработанное приложение поможет организовать процесс работы гостиницы в различных городах.
Введение...............................................................................................................................5 1 Структура и состав классов для построения модели работы гостиницы.
Инкапсуляция. Применение конструкторов на С#......................................................... 7
1.1 Поля и методы основного и вспомогательного классов............................................7
1.2 Реализация классов на С#............................................................................................ 8
1.3 Примеры использования объектов основного класса Otel и вспомогательного класса Nomer......................................................................................................................11
2 Перегрузка оператора +………………………………………………………………. 13
2.1 Перегрузка оператора + для объектов класса Nomer …………………………….13
2.2 Метод типа void с возвратом результата через параметр ref……………………..15
3 Создание производного класса….................................................................................17
3.1 Производный класс. Модификатор доступа protected и его использование..........17
3.2 Реализация производного класса на С#.....................................................................19
4 Абстрактные классы и виртуальные функции ............................................................23
4.1 Разработка виртуальной функции……………………………………………..........23
4.2 Вызов виртуальной функции…………… .................................................................25
4.3 Разработка абстрактного класса и создание абстрактной функции…………...…27
4.4 Создание статического метода для вспомогательного класса……………………32
5 Применение строк и исключений на языке С#............................................................34
5.1 Класс String в С#, основные методы класса…………………..................................34
5.2 Пример использования методов класса String .........................................................36
5.3 Исключения на языке С#............................................................................................34
6 Создание коллекций…………….…….……………………………………………….39
6.1 Реализация необобщённой коллекции......................................................................39
6.2 Реализация обобщённой коллекции..........................................................................42
Заключение.........................................................................................................................45
Список использованных источников ..............................................................................36
Приложение А....................................................................................................................47
Приложение Б ...................................................................................................................51
Приложение В ...................................................................................................................56
Приложение Г ...................................................................................................................61
Приложение Д....................................................................................................................70
Приложение Е ..................................................................................................................
}
// возвращает суммарный результат Элемент (e1+e2+e3)
public Nomer SumElem()
{
return P1.Add(P2).Add(P3);
}
//Вычисление лучшего изделия по суммарной стоимости элементов
public Otel Bet(Otel k, Otel l)
{
double r1, r2;
r1 = k.P1.PrivlekNom() + k.P2.PrivlekNom() + k.P3.PrivlekNom();
r2 = l.P1.PrivlekNom() + l.P2.PrivlekNom() + l.P3.PrivlekNom();
if (r1 < r2)
return k;
else
return l;
}
1.3 Примеры использования объектов основного класса Otel и вспомогательного класса Nomer
Данный раздел содержит примеры объектов и методов их обработки.
class Program
{
static void Main(string[] args)
{
double f;
Nomer a, b, d;
a = new Nomer();
b = new Nomer(20);
d = new Nomer(12, 14, "номер1");
a.Init(12, 23, "номер2");
b.Init(15, 21, "номер3");
d = a.Add(a, b);
d = d.Add(a, b);
d = a.Add(b);
d = d.Add(b);
d.Display();
f = d.PrivlekNom();
Console.WriteLine("общая
Otel P1, P2, P3;
double g1, g2;
P1 = new Otel();
P2 = new Otel();
P3 = new Otel();
P1.Init("номер1", "номер2", "номер3", 21, 12, 13, 31, 14, 41, 2);
Console.WriteLine("\nОтель:");
P1.Display();
g1 = P1.DpomAg();
Console.WriteLine("\nДорогое
P2.Init("номер1", "номер2", "номер3", 23, 12, 24, 65, 32, 46, 15);
Console.WriteLine("\nОтель1: ");
P2.Display();
g2 = P2.DpomAg();
Console.WriteLine("\nДорогое
P3 = P3.Bet(P1, P2);
double s;
s = P3.SrAg();
Console.WriteLine("\nСредства
Nomer e;
e = P3.SumElem();
Console.WriteLine("\nCумма: ");
e.Display();
Console.ReadKey();
}
}
}
}
Результат работы программы представлен на рисунках 1,2:
Рисунок 1 – Демонстрация работы программы
Рисунок 2 – Демонстрация работы программы
2 Перегрузка оператора +
2.1 Перегрузка оператора + для объектов класса Nomer
Перегрузка оператора — это разновидность вызова метода. Она позволяет переопределить операторы С# для применения их к типам, определенным поль-зователем. Перегрузка операторов связана с одним из важнейших аспектов ООП — абстракцией.
В данном разделе реализована перегрузка метода класса Nomer, вычисляющего привлекательность номера.
Ниже приведена программная реализация перегрузки функции вычисления привлекательности номера:
//Вспомогательный класс
class Nomer
{
private int ploshad;
public void Display()
{
stoimost = s;
ploshad = p;
name = n;
}
…
//Сложение двух объектов класса Nomer
public static Nomer operator +(Nomer a, Nomer b)
{
Nomer p;
p = new Nomer();
p.stoimost = a.stoimost + b.stoimost;
p.ploshad = a.ploshad + b.ploshad;
return p;
}
//Сложение объекта Nomer и целого числа справа
public static Nomer operator +(Nomer a, int b)
{
Nomer p;
p = new Nomer();
p.stoimost = a.stoimost;
p.ploshad = a.ploshad + b / 2;
return p;
}
//Сложение объекта Nomer и числа слева
public static Nomer operator +(int a, Nomer b)
{
Nomer p;
p = new Nomer();
p.stoimost = b.stoimost;
p.ploshad = b.ploshad + a / 2;
return p;
}
2.2 Метод типа void с возвратом результата через параметр ref
Модификатор параметра ref принудительно организует вызов по ссылке, а не по значению. Этот модификатор указывается как при объявлении, так и при вызове метода. Параметры, сопровождаемые таким модификатором, называются ссылочными и применяются, когда нужно позволить методу выполнять операции и обычно также изменять значения различных элементов данных.
…
//Возврат значения через параметр
public void PrivlekNom(ref double Rez)
{
Rez = stoimost / ploshad;
}
…
Приведём пример работы программы:
class Program
{
static void Main(string[] args)
{
double k;
a.Init(24, 12, "номер4");
a.Display();
k = a.PrivlekNom();
Console.WriteLine("Через return: " + Convert.ToString(k));
k = 0;
a.PrivlekNom(ref k);
Console.WriteLine("Через ref: " + Convert.ToString(k));
…
}
}
}
Пример работы программы приведён на рисунке 3:
Рисунок 3 – Демонстрация работы программы
3 Создание производного класса
3.1 Производный класс. Модификатор доступа protected и его использование
Когда один
класс определяется на базе
другого, то такой класс называется
производным. Производный класс
автоматически получает
Единственными
членами базового класса, которые
не наследуются производным
Базовый класс
– это любой класс, который
используется в качестве
При определении
производного класса по
При наследовании
производным классом закрытых
полей базового класса, они остаются
закрытыми по отношению к
Кроме спецификаторов
доступа public и private, при объявлении
членов класса можно также
использовать спецификатор protected (защищенный).
В классе ключевое слово protected
обеспечивает тот же эффект, что
и слово private: такие члены класса
могут быть доступны только
методам этого класса и его
дружественным функциям, а также
они доступны методам
Определим
уровень доступа
Возможность
изменять уровень доступа
3.2 Реализация производного класса на C#
Объявим производный класс элемент из драгоценных металлов (BrookedNomer), взяв за основу класс Nomer. Определим конструктор с параметрами и без параметров, зададим функцию подсчёта общей стоимости изделия по всем обычным элементам и из драгоценных материалов, добавим в основной класс одно поле базового вспомогательного класса и одно поле производного вспомогательного класса.
…
//Вспомогательный класс
class Nomer
{
protected int ploshad;
public void Display()
…
}
// Производный класс Бронирование номера класса Номер
class BrookedNomer : Nomer
{
private int brook;
//Определение стоимости элемента с учётом процента примеси
public double PrivlekNom()
{
if (brook == 0) return stoimost / ploshad;
return 0;
}
//Перегрузка с вызовом базового класса
public void Init(double s, int p, string n, int b)
{
base.Init(s, p, n);
brook = b;
}
//Конструктор без параметров
public BrookedNomer()
{
stoimost = 123;
ploshad = 12;
brook = 1;
name = "номер";
}
//Конструктор
с параметрами с вызовом
public BrookedNomer(double s, int p, string n, int b)
: base(s, p, n)
{
brook = b;
}
…
Добавление полей в основной класс Otel:
//Основной класс Гостиница
class Otel
{
…
private Nomer P1 = new Nomer();
private BrookedNomer P2 = new BrookedNomer();
public void Init(string n1, string n2, double s1, int p1, double s2, int p2, int b2, double TZ)
{
P1.Init(s1, p1, n1);
P2.Init(s2, p2, n2, b2);
TZatraty = TZ;
}
…
}
//Вычисление общей стоимости изделия
public double DpomAg()
{
double x;
x = P1.PrivlekNom();
if (x < P2.PrivlekNom())
x = P2.PrivlekNom();
return x;
}
public double SrAg()
{
return P1.PrivlekNom() + P2.PrivlekNom() + - TZatraty;
}
public Nomer SumElem()
{
return P1 + P2;
}
public Otel Bet(Otel k, Otel l)
{
double r1, r2;
r1 = k.P1.PrivlekNom() + k.P2.PrivlekNom();
r2 = l.P1.PrivlekNom() + l.P2.PrivlekNom();
if (r1 < r2)
return k;
else
return l;
}
…
Продемонстрируем работу с производным классом:
class Program
{
static void Main(string[] args)
{
double z;
BrookedNomer e = new BrookedNomer();
//конструктор без параметров(
BrookedNomer e1 = new BrookedNomer(113, 6, "номер1",
2); //конструктор со всеми
параметрами(производного
e.Init(112, 8, "номер2", 0); //переопределенный метод Init() на одного человека
e.Display();
z = e.PrivlekNom();
//переопределенный метод
Console.WriteLine("
Информация о работе Структура и состав классов для построения модели работы гостиницы.