2015-12-07 5 views
1

Я не совсем уверен, что название было хорошо для этого. Я застрял на задании для школы, предположим, чтобы быть видео, чтобы показать, как это сделать, но для жизни меня не могу понять, как загрузить файлы студентов с сайта pearson. Ниже приведена проблема, над которой я работаю.Employee and ProductionWorker Classes, получая информацию от классов

сотрудников и ProductionWorker Классы

Создать класс Employee, который имеет свойства для следующих данных:

  • Имя сотрудника
  • Количество сотрудников

Далее создайте класс с именем ProductionWorker который получен из класса Employee. Класс ProudctionWorker должен иметь свойства, чтобы держать следующие данные:

  • номер сдвига (целое число, такое как 1, 2, или 3)
  • почасовой ставки

платить рабочий делится на две смены: днем ​​и ночью. Свойство Shift будет содержать целочисленное значение, представляющее сдвиг, который работает сотрудник. Сдвиг дня - сдвиг 1, а ночной сдвиг - сдвиг 2.

Создание приложения, которое создает объект класса ProductionWorker и позволяет пользователю вводить данные для каждого из свойств объекта. Получить свойства объекта и отобразить их значения.

Вот код, который я работаю над для него:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace classes 
{ 
    public partial class frmMainClasses : Form 
    { 
     string EmpShift = ""; 
     string EmployeeName = ""; 
     int EmployeeNumber = 0; 
     float HourlyPayRate = 0; 



     public class Employee 
     { 
      public string EmployeeName { get; set; } 
      public int EmployeeNumber { get; set; } 
     } 

     public class ProductionWorker : Employee 
     { 
      public float HourlyPayRate { get; set; } 
      public Shift Shift { get; set; } 
     } 

     public enum Shift 
     { 
      Day = 1, 
      Night = 2 
     } 

     public frmMainClasses() 
     { 
      InitializeComponent(); 
     } 

     private void btxExit_Click(object sender, EventArgs e) 
     { 
      this.Close(); 
     } 

     private void btnGetInfo_Click(object sender, EventArgs e) 
     { 
      string EmpShift = ""; 
      ProductionWorker productionWorker = new ProductionWorker(); 
      productionWorker.EmployeeName = txtName.ToString(); 
      EmployeeName = productionWorker.EmployeeName; //Added mostly because I couldn't get EmployeeName to show anything in the messagebox 
      productionWorker.EmployeeNumber = Convert.ToInt32(txtIdNumb.text); 
      productionWorker.HourlyPayRate = Convert.ToInt32(txtPay.text); 
      EmpShift = Convert.ToString(txtShift.text); 
      txtName.Text = ""; 
      txtIdNumb.Text = ""; 
      txtPay.Text = ""; 
      txtShift.Text = ""; 
     } 

     private void btnShow_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show("Name " + EmployeeName + "IDNumber " + EmployeeNumber + "Hourly rate " + txtPay + "Shift " + txtShift); 

     } 
    } 

} 

Сам код не показывает никаких ошибок, но когда я пытаюсь запустить его я получаю:

Строка EmpShift вещь потому что я не мог понять, как работать с кодом сдвига более или менее, используя это как держатель места, пока я не выдержу его. Я понятия не имею, как исправить эту проблему, надеюсь, ее небольшая ошибка.

Благодаря помощи от commets я смог исправить первую проблему, с которой я столкнулся, теперь у меня проблема с полем сообщения в конце. Информация, которую я вложил в нее, - это блеск для имени, 12 для идентификационного номера, 1 для смены и 12 для оплаты. Вот что его показ:

Имя System.Windows.Forms.TextBox, Текст: GlitterIDNumber 0Hourly скорость System.Windows.Forms.TextBox, Текст: Сдвиг SystemWindowsForm.TextBox, Текст:

+0

Это должно быть 'Convert.ToInt32 (txtIdNumb.Text)'. Вы хотите преобразовать свойство text, а не текстовое поле. –

+0

Ahh спасибо Рон. – Lyght

+0

Мое сообщение не работает/отображается правильно, пытаясь работать над этим сейчас. – Lyght

ответ

0

Convert.ToString оленья кожа дать вам потому что один из них вызывает перегрузку с объектом - public static string ToString(object value). Однако, так как вас интересует введенное пользователем значение, используйте, пожалуйста, - TextBox.Text имущество вместо передачи TextBox.

Update 1: некоторые Внутренности об этом поведении

System.Convert.ToString(object value) реализуется следующим образом в.сеть -

public static string ToString(Object value, IFormatProvider provider) { 
     IConvertible ic = value as IConvertible; 
     if (ic != null) 
      return ic.ToString(provider); 
     IFormattable formattable = value as IFormattable; 
     if (formattable != null) 
      return formattable.ToString(null, provider); 
     return value == null? String.Empty: value.ToString(); 
    } 

поэтому он заканчивает вызов TextBox.ToString()

и System.Convert.ToInt32(object value) следующего

public static int ToInt32(object value) { 
     return value == null? 0: ((IConvertible)value).ToInt32(null); 
    } 

поэтому недействительное произнесение исключение из-за этого - ((IConvertible)value).ToInt32(null)

Update 2: Код реорганизован для работы

public partial class frmMainClasses : Form 
{ 
    //Change 1 
    //I have removed all class level string since they tend to make your code complicated & difficult to manage 
    //I'll replace all of them this a single instance of ProductionWorker class, a single object is easy to manage than a bunch 

    ProductionWorker productionWorker = new ProductionWorker(); // Creating the production Worker at class level 


    public class Employee 
    { 
     public string EmployeeName { get; set; } 
     public int EmployeeNumber { get; set; } 
    } 

    public class ProductionWorker : Employee 
    { 
     public float HourlyPayRate { get; set; } 
     public Shift Shift { get; set; } 
    } 

    public enum Shift 
    { 
     Day = 1, 
     Night = 2 
    } 

    public frmMainClasses() 
    { 
     InitializeComponent(); 
    } 

    private void btxExit_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
    } 

    private void btnGetInfo_Click(object sender, EventArgs e) 
    { 
     //Change 2 : set the values of the class level variable 
     productionWorker.EmployeeName = txtName.Text; //.ToString(); // Change 3 removing the .ToString(); 
     productionWorker.EmployeeNumber = Convert.ToInt32(txtIdNumb.Text); 
     productionWorker.HourlyPayRate = Convert.ToInt32(txtPay.Text); 
     productionWorker.Shift = (Shift)Enum.Parse(typeof(Shift), txtShift.Text); 

     //change 4 : using .ResetText() instead of Text 
     txtName.ResetText();// .Text = ""; 
     txtIdNumb.ResetText();//.Text = ""; 
     txtPay.ResetText();//.Text = ""; 
     txtShift.ResetText();//.Text = ""; 
    } 

    private void btnShow_Click(object sender, EventArgs e) 
    { 
     // change 5 : accessing class level productionWorker instead of bunch of strings 
     MessageBox.Show("Name " + productionWorker.EmployeeName + " IDNumber " + productionWorker.EmployeeNumber + " Hourly rate " + productionWorker.HourlyPayRate + " Shift " + productionWorker.Shift); 

    } 


} 

Я добавил комментарии, чтобы уточнить, какие изменения внесены мной, пожалуйста, напишите мне комментарий, если у вас есть какие-либо вопросы.

Кроме того, на данный момент ваш код не проверяет входные данные пользователя в текстовых полях.

Смежные вопросы