2017-03-06 8 views
1

病院の病棟を作ってから、患者の個人情報を各病棟に追加できるシステムを作りたいと思っています。 1つのtext/csvファイルからすべての情報を読み取ることができます。2つのクラスを接続していますか?

私は現在、患者を作成し、その詳細を追加するコードを持っていますが、病棟を作成し、患者を病棟に割り当てることは、私の理解を超えています。 私の講師は、患者の配列をワードクラスのプロパティとして使用することを提案しましたが、現時点では私の理解を超えています。 ここ

を典型的な患者は 「 「」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];' 'public Patient [] Patient {get;}が間違っています。セット; } '。 'Patient'オブジェクトの配列をインスタンス化する必要があります。また、現在のコンテキストには 'i'も存在しません。これを行う正しい方法は、患者オブジェクトを動的に追加できる 'List 'を使うことです。 (つまり、 'System.Collections.Generic'名前空間を使用します)。それを使いたい場合は 'https:// www.dotnetperls.com/list'を見てください。もう1つの可能性は、固定長さの配列、例えば10人の患者を割り当てることです。患者は=新しい患者[10];で行います(小道具の名前も変更します) –

+0

私はかなり理解していません。私は現在、私のmainwaindowにSystem.Collections.ObjectModelを使用しています。 –

+1

あなたはより具体的にあなたが成し遂げようとしていることができますか?それは病棟や__addingding患者についてですか?それとも、事前定義された関係でCSVファイルを読んで、関連する患者と一緒に病棟を表示することですか? – 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]を実行したとき、int型になるようにフィールド/プロパティを持たないときに、型Patientをintに割り当てるように指示していました。それはあなたが決して別のタイプに1つのタイプを割り当てないと言っているわけではありませんが、あなたが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

なぜですか?アクセサーを設定するポイントは何ですか? –