Регистрация
Войти
Стать экспертом Правила
Информатика

На выбранном вами языке программирования ( С#, Pascal) постройте три класса ( базовый и 2 потомка), описывающих некоторых студентов. Студентам назначается стипендия, при этом правила ее назначения различны для парней ( один из потомков) и девушек ( второй потомок). Известны ФИО студентов, их пол, группа и средний балл. Парням выплачивается фиксированная стипендия, если их средний балл равен пороговому значению в 4 балла, а девушкам стипендия выплачивается всегда и рассчитывается она путем умножения среднего балла на фиксированный коэффициент. Создайте код, описывающий классы и их члены для моделирования этой ситуации. Представьте сигнатуру метода расчета стипендии (это имя метода, тип аргумента и последовательность).

ОТВЕТЫ

Описаны три класса: Student [Базовый],   MaleStudent, FemaleStudent.

Реализована логика расчета стипендии, учтена возможность смены параметров студентами (в том числе и пола).

using System;

namespace Durka

{

   class Program

   {

       static void Main(string[] args)

       {

           var male = Student.CreateMaleStudent("Cidodzy Ohlazhdai Blackjackovich", "1GT-b", 5f);

           var female = Student.CreateFemaleStudent("Viktoria Nya Victorovna", "1ZT-b", 4.8f);

           

           Console.WriteLine(male.GetPaymentAmount());

           Console.WriteLine(female.GetPaymentAmount());

       }

   }

   

   /// <summary>

   /// Class which describes students in general

   /// </summary>

   public abstract class Student

   {

       public string Names { get; set; }

       public string Group { get; set; }

       public float MeanGrade {

           get => _meanGrade;

           set

           {

               if (value > 5f || value < 0f)

               {

                   throw new ArgumentException("MeanGrade must be in [0; 5] range");

               }

               _meanGrade = value;

           }

       }

       private float _meanGrade;

       /// <summary>

       /// Method for calculating amount of students payment depending on inner class params such as sex, etc.

       /// </summary>

       /// <returns>double</returns>

       public abstract double GetPaymentAmount();

       

       /// <summary>

       /// Method for changing current sex to Male

       /// </summary>

       /// <returns>MaleStudent class object</returns>

       public abstract MaleStudent changeSexToMale();

       

       /// <summary>

       /// Method for changing current sex to Female

       /// </summary>

       /// <returns>FemaleStudent class object</returns>

       public abstract FemaleStudent changeSexToFemale();

       public static MaleStudent CreateMaleStudent(string names, string group, float meanGrade)

       {

           return new MaleStudent(names, group, meanGrade);

       }

       

       public static FemaleStudent CreateFemaleStudent(string names, string group, float meanGrade)

       {

           return new FemaleStudent(names, group, meanGrade);

       }

       

       /// <summary>

       /// Class which describes Male students

       /// </summary>

       public class MaleStudent : Student

       {

           protected internal MaleStudent(string names, string group, in float meanGrade)

           {

               Names = names;

               Group = group;

               MeanGrade = meanGrade;

           }

           public static float mul = 2000f;

           public override double GetPaymentAmount()

           {

               return MeanGrade > 4 ? mul : 0;

           }

           public sealed override MaleStudent changeSexToMale()

           {

               return this;

           }

           public sealed override FemaleStudent changeSexToFemale()

           {

               return new FemaleStudent(Names, Group, MeanGrade);

           }

       }

   

       /// <summary>

       /// Class which describes Female students

       /// </summary>

       public class FemaleStudent : Student

       {

           protected internal FemaleStudent(string names, string group, in float meanGrade)

           {

               Names = names;

               Group = group;

               MeanGrade = meanGrade;

           }

           

           public static float mul = 500f;

           public override double GetPaymentAmount()

           {

               return mul * MeanGrade;

           }

           public sealed override MaleStudent changeSexToMale()

           {

               return new MaleStudent(Names, Group, MeanGrade);

           }

           public sealed override FemaleStudent changeSexToFemale()

           {

               return this;

           }

       }

   }

}

566
Контакты
Реклама на сайте
Спрошу
О проекте
Новым пользователям
Новым экспертам