2017-03-06 52 views
1

我正在尝试创建一个系统,允许您创建一个医院病房,然后向每个病房添加患者个人详细信息。 意图是能够读取单个文本/ csv文件中的所有信息。连接两个类?

我目前有代码来创建患者并添加他们的详细信息,但创建病房并将患者分配到病房是我无法理解的。 我的讲师建议使用一系列患者作为病房班的一个属性,但目前超出了我的理解范围。 一个典型的病人将被写在我的文本文件作为 'JoeBloggs,28,03/03/1989,8' 而下面的代码排序的属性等

这里是我当前的代码来创建患者:

private void btnLoad_Click(object sender, RoutedEventArgs e) 
    { 
     //read files from file 
     string[] patientList = File.ReadAllLines("MyList.txt"); 
     string[] patientArray = new string[4]; 
     string patientLong, name; 
     Patient patient; 
     int age, blood; 
     DateTime dob; 
     . 

     for (int i = 0; i < patientList.Length; i++) 
     { 
      patientLong = patientList[i];//one long string with commas eg johnmurphy,22,12/9/1998,6 
      patientArray = patientLong.Split(',');//split array according to comma 
      name = patientArray[0]; 
      age = Convert.ToInt32(patientArray[1]); 
      dob = DateTime.Parse(patientArray[2]); 
      blood = Convert.ToInt32(patientArray[3]); 


      patient = new Patient(name,age,dob,blood); 
      bookList.Add(patient); 

     } 

     // lbxExpenses.ItemsSource = null; 
     lstPatients.ItemsSource = patientList; 
    } 

和类沃德

class Ward 
{ 
    public string Name { get; set; } 

    public Patient [] Patient { get; set; }//array of patients as a property? 

    public Ward(string name,int patient) 
    { 
     Name = name; 
     Patient = new int[i];//currently giving error 
    } 

    public string GetWardDetails() 
    { 
     return string.Format("{0}", Name); 
    } 
} 
+1

'病人= INT新[I]'与'公共病人[]病人{get;组; }'。你必须实例化一个'Patient'对象的数组。另外''我'不存在在当前的情况下。做到这一点的正确方法是使用'List ',您可以动态添加患者对象。 (即使用'System.Collections.Generic'命名空间)。如果你想使用它,请查看'https:// www.dotnetperls.com/list'。另一种可能性是分配一个固定长度的数组,例如10个病人,你可以使用'Patients = new Patient [10];'(也可以重命名prop) –

+0

好吧,我想我知道你的意思,但是我不太明白。我目前在我的mainwaindow中使用System.Collections.ObjectModel。 –

+1

你可以更具体地尝试实现吗?是关于__creating__病房和__adding__病人,还是关于阅读具有预定义关系的CSV文件,以及__displaying__关联病人的病房? – grek40

回答

2

解决的办法是不使用数组,而是使用泛型列表。

class Ward 
{ 
    public string Name { get; set; } 

    public List<Patient> Patients { get; set; }//array of patients as a property? 

    public Ward(string name) 
    { 
     Name = name; 
     Patients = new List<Patient>(); 
    } 

    public string GetWardDetails() 
    { 
     return string.Format("{0}", Name); 
    } 
} 

现在,当你想添加或删除病房的病人,你可以这样做:

Ward ward = new Ward("Emergency"); 
ward.Patients.Add(/*a valid patient object*/); 

如果你想删除

ward.Patients.Remove(/*An already-existing patient object in the ward*/); 

Some more about Lists可在这里找到。问题是数组不会调整大小,而列表则会。所以当你阅读一个文件时,你可以随时将新病人添加到病房里。另外,当你实例化一个新的对象时,你想要将该对象实例化为它的类型。当你做了= new int[0]时,你告诉它将类型Patient分配给一个int,当它没有可能是int类型的字段/属性时。这并不是说你永远不会将一种类型分配给不同的类型,但是如果你想达到polymorphism,通常只会这样做。

如果您希望继续使用数组,你必须沿着这行做一些事情:

class Ward 
{ 
    public string Name { get; set; } 

    public Patient[] Patients { get; private set; } 

    public Ward(string name, IEnumerable<Patient> Patients) 
    { 
     Name = name; 
     this.Patients = Patients.ToArray(); 
    } 

    public Ward(string name, Patient[] Patients) 
    { 
     Name = name; 
     Patients = Patients; 
    } 

    public string GetWardDetails() 
    { 
     return string.Format("{0}", Name); 
    } 
} 

干杯交配:)

+0

你不应该把病人的“添加”和“删除”抽象成Ward类中的方法吗?在某些情况下,他决定从列表更改为不同的东西... –

+0

你可以,当然,但这是他必须作出的决定。当你这样做时,你最好把患者设置为= {get;私人设置; } –

+0

为什么?设置访问器的要点是什么? –