ВНИМАНИЕ! Опубликовано расписание занятий на 2017-2018 уч. год Подробнее
Toggle Bar

Язык С#. Наследование. Класс Manager (пример)

Наследование - создание нового класса на базе уже имеющегося, или базового класса. Принцип наследования состоит в том, что элементы данных  и методы базового класса автоматически становятся элементами данных нового класса. Класс в С# может иметь только одного предка.

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

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

 class имя_класса : имя_класса_родителя

{ тело_класса}

 При создании конструктора производного класса:

  • сначала вызывается конструктор базового класса, а затем вызывается конструктор текущего класса
  • Для вызова конструктора базового класса используется ключевое слово base
  • если базовый класс имеет несколько конструкторов, то необходимый указывается при определении конструктора производного класса;
  • если конструктор базового класса имеет параметры, то они включаются в список параметров производного класса.
  • Используя ключевое слово base можно вызвать метод или поле родительского класса, если оно имеет уровень доступа public

ПРИМЕР

Создайте базовый класс Person. Класс должен содержать следующие поля:

  • имя служащего  (fam)
  • номер служащего  (tab)
  • оклад служащего (salary) - должен быть в диапазоне: от 13000 до 17000.

 В классе необходимо реализовать:

  • Конструктор
  • Свойства: Fam, Tab,  Salary.

Создайте производный класс Manager, который добавляет следующие поля в класс Person

  • наименование компании, в которой работает менеджер (company)
  • объем продаж менеджера (sale)

Класс должен содержать  конструктор и следующие методы:

  • cвойства: Company, Sale
  • свойство  -   вычисление размер премии -  5% от объема продаж
  • метод, обеспечивающий вывод значений полей двух классов на экран монитора

Напишите программу, демонстрирующую работу с этими классами.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 namespace MyPerson
{
    class Person
    {
        string fam;     // поле фамилия
        int salary;     // поле зарплата
        int tab;        // поле табельный номер
         public Person(string Fam, int Tab, int Salary)  //конструктор с параметрами
        {
            fam = Fam;
            tab = Tab;
            salary = Salary;
       }
        public Person() { }         // конструктор по умолчанию
         public string Fam  //свойство для поля фамилия
        {
            set { if (fam == null) fam = value; }     //код - установка значения поля фамилия
            get { return fam; }                       //код - чтение значения поля  фамилия
        }
         public int Tab        //свойство для поля табельный номер
        {
            set { tab = value; }    //код - установка значения поля табельный номер
            get { return (tab); }       //код - чтение значения поля  табельный номер
        }
         public int Salary  //свойство для поля зарплата
        {
            get { return salary; }     //код - чтение поля зарплата
            set {   if ((value > 13000) && (value < 17000)) salary = value; }   //код - установка с проверкой поля зарплата
        }
   }
     class Manager : Person  //создаем класс-наследник Manager, для которого базовым является Person
    {
        string company;     // поле  название комании
        int sale;           // поле  объем продаж
         public Manager() { }  // конструктор по умолчанию
        // конструктор класса-наследника с параметрами
        public Manager(string Fam, int Tab, int Salary, string Company, int Sale)
            : base(Fam, Tab, Salary)
        {
            company = Company;
            sale = Sale;
        }
         public string Company      //свойство для поля название компании
        {
            set { if (company == null) company = value; } //код - установка поля название компании 
            get { return company; }                      //код - чтение поля название компании    
        }
         public int Sale     //свойство для поля объем продаж
        {
            set {  sale = value; }   //код - установка значения поля объем продаж  
            get { return (sale); }   //код - чтение поля объем продаж
        }
        public double Bonus   //свойство для подсчета премии от объема продаж
        {
            get { return sale * 0.05; }
        }
        public void Show()  // метод вывода значений всех полей
        {
            Console.WriteLine("Фамилия " + base.Fam);  
            Console.WriteLine("Табельный номер " + base.Tab);
            Console.WriteLine("Зарплата " + base.Salary);
            Console.WriteLine("Компания " + company);
            Console.WriteLine("Объем продаж " + sale);
            Console.WriteLine("Бонус " + Bonus);
            double sum = Bonus + base.Salary;
            Console.WriteLine("Общая сумма зарплаты " + sum );
        }
     }
    class Program
    {
        static void Main(string[] args)
        {
            int n = 0, i;
            //---------------------------------------------------------------------
             // пример создания объекта с помощью конструктора с параметрами
            Console.WriteLine("Пример создания объекта с помощью конструктора с параметрами:");
            Manager m = new Manager("Иванов", 101, 20000, "Эльдорадо", 500000);
            m.Show();
            //-------------------------------------------------------------------
 
           Manager[] pr = new Manager[10];       //объявляем массив на 10 объектов класса Manager
            for (i = 0; i < 10; i++)
             pr[i] = new Manager();
            
            String s, subkey, key;
                do                               // выводим меню для работы с программой
                {
                    Console.WriteLine("***Меню***");
                    Console.WriteLine("1 - Ввод данных");
                    Console.WriteLine("2 - Вывод данных");
                    Console.WriteLine("3 - Поиск данных по табельному номеру");
                    Console.WriteLine("4 - Выход");
                    Console.WriteLine();
                    Console.WriteLine("Ваш выбор...");
                    key = Console.ReadLine();
                     switch (key)
                    {
                    case "1":         // ввод данных выполняется через соответствующие свойства
                     do
                        {
       Console.WriteLine("Введите фамилию: ");
       s = Console.ReadLine(); pr[n].Fam = s;
       Console.WriteLine("Введите табельный номер: ");
       s = Console.ReadLine(); pr[n].Tab = int.Parse(s);
       Console.WriteLine("Внимание! Зарплата должна быть в пределах от 13000 до 17000 ");
       Console.WriteLine("Введите зарплату: ");
       s = Console.ReadLine(); pr[n].Salary = int.Parse(s);
       Console.WriteLine("Введите организцию: ");
       s = Console.ReadLine(); pr[n].Company = s;
       Console.WriteLine("Введите объем продаж: ");
      s = Console.ReadLine(); pr[n].Sale = int.Parse(s);
                     n++;                    // количество инициализорованных объектов
                 Console.WriteLine("Продолжить?(Y/N)...");
                         subkey = Console.ReadLine();
                            } while ((subkey == "y") || (subkey == "Y")); break;
                      case "2":               // вывод данных
                            for (i = 0; i < n; i++)
                            {
                                pr[i].Show();
                                Console.WriteLine();
                            } break;
                      case "3":             // поиск данных по табельному номеру
                            {
                                bool tr = true;
                                Console.WriteLine("Введите табельный номер: ");
                                s = Console.ReadLine(); int num = int.Parse(s);
                                for (i = 0; i < n; i++)
                                    if (pr[i].Tab == num)
                                    {
                                        Console.WriteLine("Фамилия={0}, таб. номер={1}, бонус={2}",
                                         pr[i].Fam, pr[i].Tab, pr[i].Bonus);
                                        tr = false;
                                        Console.WriteLine();
                                    }
                             if (tr) Console.WriteLine("С таким табельным номером нет человека!");
                                Console.WriteLine();
                            } break;
                    }
                } while (key != "4");
             }
         }
    }
 

Добавить комментарий
  • Комментарии не найдены
 
DMC Firewall is developed by Dean Marshall Consultancy Ltd