2016-12-05 15 views
-1

複雑な質問のビットは、私が逃した何かばかげている場合はお詫び申し上げます。私は多くのソリューションを試してきましたが、それを解決しましたが、顧客内の参照番号は.csvファイルで増分されません。これは参照番号は工場からインクリメントされませんか? - Singleton Loggerを使用して参照番号を参照することはできません

class ReferenceNoFactory 
{ 
    static private int lastbookingrefno = 0; // Last used booking reference number. 
    static private int lastcustomerrefno = 0; // Last used customer reference number. 

    static public ReferenceNo FactoryMethod(string type) 
    { 
     if (type == "Booking") 
     { 
      lastbookingrefno++; // Create new booking reference number. 
      return new Booking(lastbookingrefno); 

     } 
     else if (type == "Customer") 
     { 
      lastcustomerrefno++; // Create a new customer reference number. 
      return new Customer(lastcustomerrefno); 
     } 
     else 
      return null; // Default, only a booking or customer reference number can be created. 
         // Nothing else should be returned, or null. 
    } 

} 

これは参照番号をインクリメントすべきである工場で

abstract class ReferenceNo 
{ 
    static protected int _refNo; 

    static public int ReferenceNumber 
    { 
     get 
     { 
      return _refNo; 
     } 
    } 
} 

これは、工場で使用されるように保持された初期参照番号です...参照番号を取得し、ロガーインスタンスを使用して.csvファイルに保存するCustomerクラスの最初の部分...

class Customer : ReferenceNo 
{ 
    static private string FirstName; 
    static private string LastName; 
    static private string Address; 

    public Customer(int refNo) 
    { 
     ReferenceNo._refNo = refNo; 
    } 

    static public void LogFile() 
    { 
     ReferenceNoFactory.FactoryMethod("Customer"); 

     CustomerLogger firstlogger = CustomerLogger.Instance; 
     firstlogger.log(Customer.ReferenceNumber, Customer.firstname, Customer.lastname, Customer.address); 
    } 

そして、これはリファレンス番号が1のまま?... Output

答えて

0

私はあなたの問題を複製トラブルを抱えている、私はあなたの例を実行したファイルパスなどを保持しているロガー...

private static CustomerLogger instance; 

    private CustomerLogger() {} 

    public static CustomerLogger Instance 
    { 
     get 
     { 
      if (instance == null) 
      { 
       instance = new CustomerLogger(); 
      } 
      return instance; 
     } 
    } 

    public void log(int custnum, string firstname, string lastname, string address) 
    { 
     System.IO.File.AppendAllText("F:\\Software Dev 2\\Coursework 2\\Mia-CourseWork2\\Customers.csv", "CustRefNum," + custnum + ",FirstName, " + firstname + ",LastName," + lastname + ",Address," + address + "\n"); 
    } 

です:

static void Main(string[] args) 
{ 
    Customer.LogFile(); 
    Customer.LogFile(); 
} 

私は単純にするロガーを修正:

public void log(int custnum, string firstname, string lastname, string address) 
{ 
    Console.WriteLine(Customer.ReferenceNumber); 
} 

は、私は次のような出力が得られます。

私はあなたがカスタムクラスにより従来のアプローチを取り、単に非静的な特性を持っていることを示唆しています。最後の予約参照と最後の顧客参照を保存する場合は、ReferenceNoFactoryでプロパティを使用することをお勧めします。

+0

このメソッドを2回使用するのは間違いありませんが、繰り返し使用するだけで増やす必要がありますか?これは休日の予約プログラムなので、データは同じ.csvファイルに格納され、参照のみがインクリメントされます...? –

+0

@ Mia.B質問に使用例を追加して、意味を理解できますか? – openshac

+0

申し訳ありませんええ、それはちょっと仕事、私は同じプログラムの実行時に2つの顧客を作成する場合は増分します。私はちょうどそれが理にかなっている場合、参照番号が既にファイルに入っているかどうかを確認するためにプログラムの検証をする必要があると思いますか? –

関連する問題