Структура и состав классов для построения модели работы гостиницы.

Автор работы: Пользователь скрыл имя, 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
Приложение Е ..................................................................................................................

Файлы: 1 файл

Содержани1.docx

— 511.25 Кб (Скачать файл)

            e1.Display();

 

            Otel a = new Otel();

            a.Init("номер1", "номер2", 100, 5, 60, 4, 2, 4);  //переопределенный метод Init() для основного класса (3.6)

            a.Display();

 

            Console.ReadKey();

        }

    }

}

 

        

 Работа программы представлена на рисунке 4:

 

                         

Рисунок 4 – Демонстрация работы программы

 

 

 

    4 Абстрактные классы и виртуальные функции

 

 

    4.1 Разработка виртуальной функции

 

 

     Виртуальная  функция – это функция в  базовом классе, которая объявлена  с

использованием ключевого слова virtual. Если задать функцию базового класса как virtual и в производном классе имеется другое определение этой функции, это сообщит компилятору, что статическая компоновка данной функции не нужна. Виртуальная функция нужна для того, чтобы выбор функции, которая должна быть вызвана в любой заданной точке программы, был основан на типе объекта, для которого она вызывается.

     Ключевое слово virtual можно помещать не только  перед функцией базового класса, но и перед функцией в производном и вспомогательном классах. Это нужно для того, чтобы любой, кто будет читать определение производного класса, понял, что речь идет о виртуальных функциях, которые при выполнении выбираются динамически.

     Чтобы функция  вела себя как виртуальная, она  должна иметь то же имя, список

параметров и тип возвращаемого значения во всех производных классах, как в базовом классе. Если попытаться использовать другие типы параметров или возвращаемого значения, или же объявить функцию в одном месте константой, а в другом – нет, то в этом случае механизм виртуальных функций работать не будет. 

     Работа виртуальной  функции – исключительно мощный  механизм. Термин

"полиморфизм" имеет  отношение к возможностям виртуальных  функций. Вызов виртуальных функций  приводит к разному эффекту  в зависимости от вида объекта, для которого она вызвана.

     В данной работе виртуальной является функция PrivlekNom:

     //Вспомогательный класс

     class Nomer

    {

          …

         // Виртуальная функция

         virtual public double PrivlekNom()

        {

            return stoimost / ploshad;

        }

 

         …

     }

 

     Вызов виртуальной  функции реализуется через ее вызов указанной функцией базового класса FunCallVirt:

         …

      

public double FunCallVirt(double c)

        {

            double k;

            k = PrivlekNom();

            if (k > c)

                k = 1;

            else

                k = 0;

            return k;

        }

         …

      // Производный класс Бронирование номера класса Номер

class BrookedNomer : Nomer

    {

     

          …

       //Виртуальная  функция в классе Бронирование номера

public override double PrivlekNom()

        {

            if (brook == 0) return stoimost / ploshad;

            return 0;

        }

    };

    …

 

 

     4.2 Вызов виртуальной функции

 

 

     Вызов виртуальной  функции происходит через функцию базового класса, ко-торая наследуется в производном и через присваивания ссылок на объекты .

   class Program

    {

        static void Main(string[] args)

        {

            double x;

            Otel1 a1 = new Otel1();

            a1.Init("номер1","номер2", 10, 100, 5, 60);

            a1.Display();

            x = a1.SrAg();

            Console.WriteLine("Среднее: " + x + "\n");

            Otel2 a2 = new Otel2();

            a2.Init("номер1", "номер2", 10, 100, 5, 60, 4, 4);

            a2.Display();

            x = a2.SrAg();

            Console.WriteLine("Среднее: " + x + "\n");

            Otel3 a3 = new Otel3();

            a3.Init("номер1", "номер2", 10, 100, 5, 60, 4);

            a3.Display();

            x = a3.SrAg();

            Console.WriteLine("Среднее: " + x + "\n");

            Console.ReadKey();

        }

    }

}

 

 

 

          Работа программы представлена на рисунке 5:

 

                        

Рисунок 5 – Демонстрация работы программы

 

 

 

     4.3  Разработка абстрактного класса и создание абстрактной функции

 

 

     Класс, в котором есть хотя бы один абстрактный метод, называется абстрактным. Такой класс существует только для того, чтобы можно было определять классы, производные от него. Нельзя создавать экземпляры абстрактного класса — такой класс может использоваться только в качестве базового класса для других классов.  Для потомка такого класса есть две возможности — или он реализует все абстрактные методы базового класса (и в этом случае для такого класса-потомка можно создавать его экземпляры), или реализует не все абстрактные методы базового класса (в этом случае он является тоже абстрактным классом, и единственная возможность его использования — это производить от него классы потомки).

     По заданию  абстрактным классом является  класс Otel. Нужно определить три производных класса Otel1, Otel2, Otel3. Абстрактной является функция нахождения общей стоимости изделия SrAg.

     Абстрактный класс:

     //Абстрактный класс Изделие

    abstract class Otel

    {

      //Значение  общего поля 

      public string gname()

        {

            return name;

        }

      //Значение общего поля

      public void Init(string n, double TZ)

        {

            name = n;

            TZatraty = TZ;

        }

        abstract public double SrAg();

        public string GetName()

        {

            return name;

        }

 

 

       Первый производный класс Отель 1:

 

       //Производный класс Отель1

      class Otel1 : Otel

    {

        private Nomer P1 = new Nomer();

        private Nomer P2 = new Nomer();

           …

          {

            P1.Init(s1, p1, n1);

            P2.Init(s2, p2, n2);

                …

            }

            //Перегрузка абстрактной функции – общая стоимость изделия

public override double SrAg()

           {

       {

            return (P1.PrivlekNom() + P2.PrivlekNom()) / 2;

        }

        };

 

       Второй  производный класс Отель 2:

       //Производный класс Отель 2

class Otel2 : Otel

    {

        private BrookedNomer P1 = new BrookedNomer();

        private BrookedNomer P2 = new BrookedNomer();

             …

             {

           P1.Init(s1, p1, n1, b1);

            P2.Init(s2, p2, n2, b2);

                     …

               }

             //Перегрузка абстрактной функции –средняя стоимость номера

             public override double SrAg()

        {

            return (P1.PrivlekNom() + P2.PrivlekNom()) / 2;

        }

         };

      Третий производный класс Отель 3:

     //Производный класс Отель 3

    class Otel3 : Otel

    {

        private Nomer P1 = new Nomer();

        private BrookedNomer P2 = new BrookedNomer();

          …

         {

            P1.Init(s1, p1, n1);

            P2.Init(s2, p2, n2, b2);

                …

      }

            //Перегрузка абстрактной функции – общая стоимость изделия

           public override double SrAg()

        {

            return (P1.PrivlekNom() + P2.PrivlekNom())/2;

        }

        };

 

     Продемонстрируем работу с объектами производных классов:

       class Program

    {

        static void Main(string[] args)

        {

            double x;

            Otel1 a1 = new Otel1();

            a1.Init("номер1","номер2", 10, 100, 5, 60);

            a1.Display();

            x = a1.SrAg();

            Console.WriteLine("Среднее: " + x + "\n");

            Otel2 a2 = new Otel2();

            a2.Init("номер1", "номер2", 10, 100, 5, 60, 4, 4);

            a2.Display();

            x = a2.SrAg();

            Console.WriteLine("Среднее: " + x + "\n");

            Otel3 a3 = new Otel3();

            a3.Init("номер1", "номер2", 10, 100, 5, 60, 4);

            a3.Display();

            x = a3.SrAg();

            Console.WriteLine("Среднее: " + x + "\n");

            Console.ReadKey();

        }

    }

}

 

 

     Пример работы программы приведён на рисунке 6:

 

                            

     

Рисунок 6 – Демонстрация работы программы

 

 

     4.4 Создание статического метода для вспомогательного класса

 

 

     Метод – это небольшая подпрограмма, которая выполняет, в идеале, только одну функцию. Методы позволяют сократить объем кода. Статический метод – это метод, который не имеет доступа к полям объекта, и для вызова такого метода не нужно создавать экземпляр (объект) класса, в котором он объявлен. В данной работе статическим является метод нахождения привлекательности номера.

     //Вспомогательный  класс

class Nomer

    {

           …

         //Статический метод вычисления  привлекательности номера

public static double PrivlekNom(Nomer n)

        {

            return n.stoimost / n.ploshad;

        }

 

    Продемонстрируем работу статического метода в программе:

    class Program

    {

        static void Main(string[] args)

        {

            double k;

            Nomer a = new Nomer();

            a.Init(66, 6, "номер1");

            k = Nomer.PrivlekNom(a); //метод статический  поэтому вызываем не у обекта  а через имя класса

            Console.WriteLine("Привлекательность: " + k);

            Console.ReadKey();

        }

    }

}

 

    Пример работы программы приведён на рисунке 7:

                       

Рисунок 7 – Демонстрация работы программы

 

 

 

 

 

 

     5 Применение строк и исключений на языке С#

 

 

     5.1 Класс String в С#, основные методы класса

 

 

     Строки в С# - это объекты класса string, значением которых является текст. Для работы со строками в этом классе определено множество методов (функций). Чтобы использовать строку, ее нужно сначала создать – присвоить какое-либо значение. Например: s1 = "Hello";

    Если не указать начальный строковый литерал при создании объекта string, то объект будет содержать пустую строку.

     Некоторые  методы при работе со строками (примеры использования данных функций приведено в пункте 5.2):

  1. Функция Substring() помогает извлечь часть существующего строкового объекта. Данная функция содержит два аргумента. Первый аргумент – это номер первого символа подстроки, подлежащей извлечению, а второй аргумент – количество символов извлекаемой подстроки.
  2. Функция IndexOf () ищет подстроки в строках. Содержит аргумент, являющийся строковым объектом. Если подстрока не найдена возвращает -1, иначе функция возвращает позицию индекса, где найден первый символ искомой подстроки.
  3. Функция Length() определяет длину строки.
  4. Функция Insert() позволяет вставить один или несколько символов (строку) в некоторую позицию в строке.
  5. Функция Compare() позволяет сравнить две строки.

 

 

    5.2 Пример использования методов класса String

 

 

    Дана строка, состоящая из слов, набранных заглавными буквами и разделенных пробелом. Поменять местами первое и последнее слово.

     Опишем реализацию данного алгоритма:

     … 

Otel a = new Otel();

            a.Init("","", 10, 100, 5, 60, 4,56);

            a.sname("5aavhbaa 12a345 weraatttt");

            string s1, s3;

            s1 = a.gname();

            Console.WriteLine("Изначальная строка:" + s1);

            string[] s2 = new string[10];

            int i, p, k, N;

            N = 0;

            p = 1;

            while (p == 1)

            {

                k = s1.IndexOf(" ");

                if (k >= 0)

                {

                    s2[N] = s1.Substring(0, k);

                    s1 = s1.Substring(k + 1);

                    N++;

                }

                else

                {

                    s2[N] = s1;

                    N++;

                    p = 0;

             …

     Пример работы программы приведён на рисунке 8:

 

                       Рисунок 8 – Демонстрация работы программы

 

 

 

     5.3 Исключения на языке С#

 

 

     Исключения позволяют обозначить, что во время выполнения программы произошла ошибка. Объекты исключений, описывающие ошибку, создаются и затем генерируются с ключевым словом throw. Далее во время выполнения происходит поиск наиболее совместимого обработчика исключений.

     Обработка исключений – это описание реакции программы на подобные события (исключения) во время выполнения программы. Реакцией программы может быть корректное завершение работы программы, вывод информации об ошибке и запрос повторения действия (при вводе данных).

     Вот некоторые из часто-встречаемых типов исключений:

     Exception – базовый тип всех исключений. Блок catch, в котором указан тип      

Exception будет «ловить» все  исключения.

     FormatException – некорректный формат операнда или аргумента.

     NullReferenceException - в экземпляре объекта не задана ссылка на объект, объект не создан.

     Можно перехватывать не одно, а несколько типов исключений, если использо-вать несколько блоков catch. В этом случае более специфичные исключения должны предшествовать более общим исключениям, поскольку среда выполнения просмат-ривает обработчики исключений по порядку.

     В нашем  случае нужно выполнить исключения: вес меньше нуля, стоимость грамма меньше или равна нулю.

     //Вспомогательный класс

Информация о работе Структура и состав классов для построения модели работы гостиницы.