Как инициализировать текстовые поля и метки внутри конструктора? - PullRequest
0 голосов
/ 04 апреля 2020

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

Процент выглядит следующим образом:

  • 15% от Model Test 1
  • 20% от испытания модели 2
  • 15% от наивысшей оценки из двух тестов класса (испытание класса 1 и испытание класса 2)
  • 50% от завершения Знак экзамена

Мне посоветовали

Создать класс с именем «Студент» со всеми необходимыми переменными экземпляра (тест 1 оценки, тест 2 оценки, класс тест 1 оценки, класс тест 2 оценки).

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

Запись метода в классе в;

  • вычислить итоговую оценку
  • определить, является ли это проходом или неудачей (сообщение)
  • отобразить отметку и результат сообщения

Когда вы нажимаете кнопку «Рассчитать конечную отметку», необходимо вызвать метод и отобразить вывод. (Подсказка: вы должны создать объект из класса Student и вызвать метод)

Вот пример кода.

    public class Student
    {
        public double Mt1;  //Module test 1
        public double Mt2;  //Module test 2
        public double Ct1;  //Class test 1
        public double Ct2;  //Class test 2
        public double Em;   //Exam Mark

        public void getMarks()
        {
            Student stu = new Student();
            double Fm = 0;      //Final mark
            string dis = " ";   //Display

            Mt1 = Mt1 * 0.15;
            Mt2 = Mt2 * 0.2;

            if (Ct1 > Ct2)
            {
                Ct1 = Ct1 * 0.15;
            }

            else
            {
                Ct2 = Ct2 * 0.15;
            }

            Em = Em * 0.5;

            Fm = Mt1 + Mt2 + Ct1 + Ct1 + Em;

            if (Fm >= 50)
            {
                dis = "The final mark of the student is " + Fm.ToString() + "% /n The result is a Pass";
            }

            else
            {
                dis = "The final mark of the student is " + Fm.ToString() + "% /n The result is a Fail";
            }

            display.Text = dis;  //Error
        }
    }

    public void button1_Click(object sender, EventArgs e)
    {
        Student one = new Student()
        {
            Mt1 = Convert.ToDouble(mt1.Text),
            Mt2 = Convert.ToDouble(mt2.Text),
            Ct1 = Convert.ToDouble(ct1.Text),
            Ct2 = Convert.ToDouble(ct2.Text),
            Em = Convert.ToDouble(em.Text),
        };

        one.getMarks();            
    }

Я создал отдельные текстовые поля для ввода меток, и метка для отображения выходных данных.

Однако у меня возникли проблемы при инициализации текстовых полей и Label внутри моего конструктора.

Мой код явно неверный. Пожалуйста, помогите мне исправить это согласно вопросу.

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Я не могу дать вам полное решение, но некоторые подсказки:

Передайте необходимые параметры в Student следующим образом:

public Student(double mt1, double mt2, double ct1, double ct2)
{
        //Store values in private members or in properties.
}

Создайте такого студента следующим образом:

double mt1 = Convert.ToDouble(mt1.Text);
double mt2 = Convert.ToDouble(mt2.Text);
double ct1 = Convert.ToDouble(ct1.Text);
double ct2 = Convert.ToDouble(ct2.Text);
double em = Convert.ToDouble(em.Text);
Student student = new Student(mt1, mt2, ct1, ct2, em);

Получите результат от GetMarks () (ваша версия ничего не возвращает, вам нужно это изменить)

   display.Text = student.GetMarks();

Имейте в виду, что нет причин, по которым ученики должны "знать" о текстовые поля, ярлыки и прочее. Так что держите все это вне класса и сосредоточьтесь на вещах, которые важны для студента. Текстовые поля, метки и т. Д. c являются элементами пользовательского интерфейса и относятся к классу Form.

0 голосов
/ 04 апреля 2020

Вместо того, чтобы обращаться к экземплярам TextBox из вашего класса, передайте значения TextBox.Text в ваш ученический класс в вашем обработчике событий Button_Click.

private void button1_Click(object sender, EventArgs e)
{
    Student one = new Student()
    {
        Mt1 = Convert.ToDouble(mt1.Text),
        Mt2 = Convert.ToDouble(mt2.Text),
        Ct1 = Convert.ToDouble(ct1.Text),
        Ct2 = Convert.ToDouble(ct2.Text),
        Em = Convert.ToDouble(em.Text)
    };

    display.Text = one.getMarks();
}

Измените ваш метод getMarks (), чтобы он возвращал строку вместо недействительным. Тогда вместо установки текстового поля просто

return dis;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...