C # Как использовать методы из одного класса в другом классе - PullRequest
0 голосов
/ 06 октября 2018

код ниже содержит два класса - Date и Employee:

  • Класс Date проверяет, является ли дата действительной датой между 1900-2100.
  • В классе Employee отображается имя, оплата и дата найма сотрудника.

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

Я хотел бы знать, как использовать метод SetDate в классе Employee для ссылки на класс Date и для проверки дат.Я не уверен, как заставить метод SetDate взаимодействовать с другим классом.Кроме того, я уверен, что есть более простые способы создания программы, которая выполняет эти функции, но все классы, методы и конструкторы в программе ниже необходимы.

Код довольно длинный, но меня интересует только то, как следует использовать метод SetDate в классе Employee.

namespace MultiClass
{
class Date
{
    private int Month;
    private int Day;
    private int Year;

    //Default Constructor
    // Sets date to 1/1/1900
    public Date()
    {
        Month = 1;
        Day = 1;
        Year = 1900;
    }

    public Date(int M, int D, int Y)
    {
        SetDate(M, D, Y);
    }

    //Sets Month, Day, and Year to M, D, and Y
    //Uses the ValidateDate method to check for valid date 
    //Uses DisplayDate method to 
    public Boolean SetDate(int M, int D, int Y)
    {
        Month = M;
        Day = D;
        Year = Y;

        if (ValidateDate(M, D, Y))
        {
            Console.WriteLine("The following date is valid:");
            DisplayDate();
            return true;
        }
        else
        {
            Console.WriteLine("Invalid date");
            Console.WriteLine("The date will reset to the defualt value:");
            SetDefaultDate();
            return false;
        }

    }

    private void SetDefaultDate()
    {
        Month = 1;
        Day = 1;
        Year = 1900;
        DisplayDate();
    }
    // Determines if date is valid.
    public Boolean ValidateDate(int M, int D, int Y)
    {

        if (ValidateMonth() && ValidateDay() && ValidateYear())
        {
            return true;
        }
        else
        {
            return false;
        }


    }
    // Determines if month is valid.
    public Boolean ValidateMonth()
    {
        if (Month >= 1 && Month <= 12)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    // Determines if year is valid.
    public Boolean ValidateYear()
    {
        if (Year >= 1900 && Year <= 2100)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    // Determines if day is valid
    public Boolean ValidateDay()
    {

        if (Month == 1 || Month == 3 || Month == 5 || Month == 7 || Month == 8 || Month == 10 || Month == 12)
        {
            if (Day >= 1 && Day <= 31)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else if (Month == 4 || Month == 6 || Month == 9 || Month == 11)
        {
            if (Day >= 1 && Day <= 30)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else if (Month == 2 && IsLeapYear())
        {
            if (Day >= 1 && Day <= 29)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else if (Month == 2 && !IsLeapYear())
        {
            if (Day >= 1 && Day <= 28)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }

    // Determine if year is a leap year
    public Boolean IsLeapYear()
    {
        if ((Year % 4 == 0 && Year % 100 != 0) || (Year % 400 == 0))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    // Print date to screen in format M/D/Y
    public void DisplayDate()
    {
        Console.WriteLine(ShowDate());
    }

    public String ShowDate()
    {
        StringBuilder myStringBuilder = new StringBuilder();
        myStringBuilder.AppendFormat("{0} / {1} / {2}", Month, Day, Year);
        return (myStringBuilder.ToString());

    }

}


class Employee
{

    private String FirstName;
    private String LastName;
    private double HourlySalary;
    private Date StartDate;

    // Set Employee name and pay with given values
    // Set Employee Starting Date to 1/1/2018
    public Employee(String First, String Last, double Pay)
    {
        FirstName = First;
        LastName = Last;
        HourlySalary = Pay;
    }

    // Set First Name to given value
    public void SetFirstName(String FName)
    {
        FName = FirstName;
    }

    // Return the First Name
    public String GetFirstName()
    {
        return FirstName;
    }

    // Set Last Name to given value
    public void SetLastName(String LName)
    {
        LName = LastName;
    }

    // Return the Last Name
    public String GetLastName()
    {
        return LastName;
    }

    // Set salary to given value. If value is negative, set to 0
    public void SetSalary(double Pay)
    {
        if (Pay < 0)
        {
            HourlySalary = 0;
        }
        else
        {
            HourlySalary = Pay;
        }
    }

    // Return salary
    public double GetSalary()
    {
        return HourlySalary;
    }

    // Display all employee information
    public void DisplayEmployee()
    {
        Console.WriteLine("{0} {1}", FirstName, LastName);
        Console.WriteLine("{0}", HourlySalary);
    }




    // Set the Starting Date to the provided info
    // Checks to see the date is valid
    // If it isn’t valid, print message and set date to 1/1/1900
    public Boolean SetDate(int Month, int Day, int Year)
    {

    }





    static void Main(string[] args)
    {
        Employee Employee1 = new Employee("Anita", "Job", 10000.00);
        Employee Employee2 = new Employee("Mickey", "Mouse", 250000.00);
        if (!Employee1.SetDate(7, 14, 2015))
        {
            Console.WriteLine("Invalid Date Provided for {0}, {1}. Resetting to 01/01/1900",
            Employee1.GetLastName(), Employee1.GetFirstName());
        }
        if (!Employee2.SetDate(10, 32, 2015))
        {
            Console.WriteLine("Invalid Date Provided for {0}, {1}. Resetting to 01/01/1900",
            Employee2.GetLastName(), Employee2.GetFirstName());
        }
        Employee1.DisplayEmployee();
        Employee2.DisplayEmployee();
        Employee1.SetSalary(Employee1.GetSalary() * 1.10);
        Employee2.SetSalary(Employee2.GetSalary() * 1.10);
        Employee1.DisplayEmployee();
        Employee2.DisplayEmployee();
        Employee2.SetFirstName("Fred");
        Employee2.SetLastName("Flintstone");
        Employee2.SetSalary(50000.00);
        if (!Employee2.SetDate(2, 14, 2005))
        {
            Console.WriteLine("Invalid Date Provided for {0}, {1}. Resetting to 01/01/1900",
            Employee2.GetLastName(), Employee2.GetFirstName());
        }
        Employee2.DisplayEmployee();
        Console.ReadLine();
    }


} 

}

Ответы [ 3 ]

0 голосов
/ 06 октября 2018

Попробуйте это:

public Boolean SetDate(int Month, int Day, int Year)
{
    Boolean valid = true;
    // here you validate the date, and assign value of validation to "valid" variable
    StartDate = valid ? new Date(Year, Month, Day) : new Date(1900, 1, 1);
    return valid;
}
0 голосов
/ 06 октября 2018

Метод Employee.SetDate необходимо делегировать экземпляру класса Date.

public bool SetDate(int month, int day, int Year)
{
    var date = new Date(M: month, D: day, Y: year);
    if (date.ValidateDate())
    {
        this.Date = date;
        return true;
    }
    return false;
}

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

public bool SetDate(Date date)
{
    if (date.ValidateDate())
    {
        this.Date = date;
        return true;
    }
    return false;
}

Тогда вы бы назвали это так:

var employee = new Employee();
employee.SetDate(new Date(3, 9, 1986));

Дальнейшие мысли:

Программа нуждается в сотнях других значительных улучшений, но я не буду относитьсяих здесь.

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

Учитывая это, вы должны спросить своего учителя, хотя не эти слова и не с презрительным тоном, который предлагает моя фраза, почему он никогда не удосужился изучать C # после того, как он изучил Java, почему он никогда не удосужился изучать Java после того, как он изучил C ++, и почему он никогда не удосужился изучать C ++ после того, как выучилC.

В любом случае, как бы он ни думал, в моем опыте обычно лень, вы не можете положиться на него в чаеch для вас язык, поэтому вы должны сделать это самостоятельно.

0 голосов
/ 06 октября 2018

Сначала вам нужно создать и Date Object из класса Date, это даст вам экземпляр Date для работы.Затем вы можете использовать этот экземпляр Date для вызова методов для взаимодействия с ним.

    public Boolean SetDate(int Month, int Day, int Year)
    {
        if(StartDate==null)  // check if we already have a StartDate object
        {
            StartDate = new Date();  //if we don't create a new one
        }
        return StartDate.SetDate(Month, Day, Year);  //set the date and return result.
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...