Добавление свойства для отображения некоторой информации - PullRequest
0 голосов
/ 13 января 2019

Я создал класс Адрес:

public class Address
{
    public Address(string street, string city, string country)
    {
        this.Street = street;
        this.City = city;
        this.Country = country;
    }

    public string Street { get; set; }
    public string City { get; set; }
    public string Country { get; set; }

    public string SetFullAddress()
    {
        return ($"Full address: {Street}, {City}, {Country}");
    }

    public void DisplayAddress()
    {
        Console.WriteLine($"Street: {Street}");
        Console.WriteLine($"City: {City}");
        Console.WriteLine($"Country: {Country}");
        Console.WriteLine(SetFullAddress());
    }
}

И еще один ученик класса, который наследует класс Person:

public class Student:Person
{
    private string studentNumber;
    public string StudentNumber
    {
        get
        {
            return studentNumber;
        }
        set
        {
            if(string.IsNullOrEmpty(value))
            {
                Console.WriteLine("You didn't enter student's number.");
            }
            else
            {
                studentNumber = value;
            }
        }
    }

    private int age;
    public int Age
    {
        get
        {
            return age;
        }
        set
        {
            try
            {
                age = value;
                if (value < 0 || value > 100)
                {
                    Console.WriteLine("The age you entered is not valid!");
                }
            }
            catch (FormatException)
            {
                Console.WriteLine("You can enter only integer values.");
            }
        }
    }

    private List<int> scores = new List<int>();

    public void AddScore()
    {
        Console.WriteLine("How many scores do you want to add?");
        int n = int.Parse(Console.ReadLine());
        for (int i = 0; i < n; i++)
        {
            Console.WriteLine("Please enter the scores:");
            try
            {
                int score = int.Parse(Console.ReadLine());
                scores.Add(score);
                if (score<0||score>100)
                {
                    Console.WriteLine("Please enter a valid score!");
                }
            }
            catch(FormatException)
            {
                Console.WriteLine("You cannot enter a non-integer character!");
            }
            while (i==n)
            {
                break;
            }
        }
    }

    public double AverageScore()
    {
        double sum = 0;
        foreach (var el in scores)
        {
            sum += el;
        }
        double averageScore = sum / scores.Count;
        return averageScore;
    }

    public string FullName => $"{FirstName} {LastName}";

    public void PrintInformation()
    {
        Console.WriteLine($"Name: {FirstName}");
        Console.WriteLine($"Surname: {LastName}");
        Console.WriteLine($"Age: {Age} ");
        Console.WriteLine($"ID: {StudentNumber} ");
        Console.WriteLine($"Full name: {FullName}");
        Console.WriteLine($"Average score: {AverageScore()}");
    }

    public override string ToString()
    {
        return $"Student {FullName} with ID {StudentNumber}, is {Age} years old and has an average score {AverageScore()}. The student's full address is: ";
    }
}

Внутри метода Main (часть кода):

Address address = new Address(" "," "," ");
        Console.Write("Street: ");
        address.Street = Console.ReadLine();

        Console.Write("City: ");
        address.City = Console.ReadLine();

        Console.Write("Country: ");
        address.Country = Console.ReadLine();

        Console.WriteLine();
        Console.WriteLine("Entered information about the student:");
        student.PrintInformation();
        address.DisplayAddress();
        Console.WriteLine(student.ToString());

Мне нужно было добавить свойство Address в класс Student, которое поможет мне предоставить полный адрес в методе ToString (). Также метод SetFullAddress () должен быть написан внутри класса Student. Я могу ввести информацию из метода Main (чтобы все остальное работало). Я пробовал некоторые вещи, которые не работали (чтобы отобразить полный адрес внутри метода ToString ()), поэтому мне нужна помощь с этим. Ps. Буду признателен, если вы объясните свой ответ простым способом, потому что, как вы можете заметить, я новичок Спасибо!

1 Ответ

0 голосов
/ 14 января 2019

Добавьте свойство в класс Student типа Address.

public Address StudentAddress { get; set; }

Настройте таким образом переопределение .ToString

 public override string ToString()
    {
        return $"Student {FullName} with ID {StudentNumber}, is {Age} years old and has an average score {AverageScore()}. The student's full address is: {StudentAddress.GetFullAddress()} ";
    }

Вы вызываете метод GetFullAddress для StudentAddress. Вы можете вызвать этот метод, потому что StudentAddres имеет тип Address.

Затем в пользовательском интерфейсе создайте нового ученика. Обратите внимание, что вы создаете новый адрес для установки свойства StudentAddress. Я поместил этот код одним нажатием кнопки, потому что у меня есть приложение WinForms, но оно будет работать и для консольного приложения.

    private void button1_Click(object sender, EventArgs e)
    {
        Student s = new Student();
        s.Age = 21;
        s.FirstName = "George";
        s.LastName = "Washington";
        s.StudentNumber = "S54";
        s.StudentAddress = new Address("Park Street","Houston", "USA" );
        MessageBox.Show(s.ToString());
    }

Я изменил имя SetFullAddress на GetFullAddress. Набор подразумевает настройку свойств. Так же, как в получить и установить.

Кстати, DOB - Дата рождения. Возраст меняется, может завтра, может на следующей неделе. Мы не знаем Если вы используете DOB в качестве даты, возраст можно рассчитать по мере необходимости.

EDIT

Дополнительный код за ваш комментарий.

static void Main(string[] args)
{
    Student newStudent = AddStudent();
    Console.WriteLine(newStudent); //calls .ToString()
    Console.ReadKey();
}
private static Student AddStudent()
{
    Student s = new Student();
    Console.WriteLine("Enter first name");
    s.FirstName = Console.ReadLine();
    Console.WriteLine("Enter last Name");
    s.LastName = Console.ReadLine();
    //etc.
    Console.WriteLine("Enter Street");
    string Street = Console.ReadLine();
    Console.WriteLine("Enter City");
    string City = Console.ReadLine();
    Console.WriteLine("Enter Country");
    string Country = Console.ReadLine();
    Address a = new Address(Street, City, Country);
    s.StudentAddress = a;
    return s;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...