2016-09-29 89 views
-2

我一直在嘗試銀行應用程序代碼,我希望監視交易活動,當您通過交易記錄列表並返回超過閾值金額的帳戶數量給定的日期。C# - 如何監視銀行應用程序的交易活動

爲此,我創建了使用StreamWriter的地方在我的交易記錄保持着\ t 間隔了對於如虛擬文本文件:賬戶號碼\ tTransactionDate \ tTransactionAmount

當我看到我不知道如何分割併爲特定日期收集不同的賬戶號碼並計算交易金額以進一步驗證其是否高於閾值金額。

任何與此有關的幫助將不勝感激。 在此先感謝。

+0

是否有一個原因,你使用製表符分隔的列表,而不是像xml那樣的C#有一個更容易的時間序列化? –

+0

一般來說,這裏最好的選擇是將製表符分隔的文件反序列化爲C#對象。至少,這是我的第一本能。我將彙總一個你必須做的事情的小示範。 –

回答

1

您可以使用拆分字符串將選項卡拆分爲數組。

String Instr = "AccountNumber\tTransactionDate\tTransactionAmount"; 
char delim = '\t'; 
string[] array = Instr.Split(delim); 
// array[0] = AccountNumber 
// array[1] = TransactionDate 
// array[2] = TransactionAmount 
0

要建立在史蒂夫說的基礎上,我個人傾向於將文本反序列化爲一個對象。做下面的事情......

現在,而不是隻有一個文本數組,你可以有一個對象數組的屬性是正確的類型。比較容易做日期比較...將特定帳戶的所有金額合計到普通舊對象中時。至少,對我來說是這樣。

作爲一個便箋,我下面有一個很不好的主意。但是如果你只是將某些東西用於替代未來的數據庫訪問層,那麼這可能在短期內起作用。

編輯:如果您要將數據存儲在純文本文件中,最好將它們存儲爲C#可以處理的格式。類似於JSON,然後使用Newtonsoft.Json序列化/反序列化或XML並使用System.Xml.Serialization序列化/反序列化數據。

class Program 
    { 
    static void Main(string[] args) 
    { 
     string srcfile = @"C:\Workspace\tmp\TestSTuff\bank\transactions.txt"; 
     string transactionstr; 

     using (FileStream fs = new FileStream(srcfile, FileMode.Open, FileAccess.Read)) 
     { 
     byte[] buffer = new byte[fs.Length]; 
     int numtoread = (int)fs.Length; 
     int numread = 0; 
     while (numtoread > 0) 
     { 
      int n = fs.Read(buffer, numread, numtoread); 
      if (n == 0) 
      break; 
      numread += n; 
      numtoread -= n; 
     } 
     transactionstr = Encoding.Default.GetString(buffer); 
     } 

     char[] newline = { '\r','\n' }; 
     char delim = ','; 
     string[] transactionstrs = transactionstr.Split(newline); 

     List<Transaction> transactions = new List<Transaction>(); 
     foreach (var t in transactionstrs) 
     { 
     try 
     { 
      string[] fields = t.Split(delim); 
      DateTime.Parse(fields[1]); 
      transactions.Add(new Transaction 
      { 
      AccountNumber = int.Parse(fields[0]), 
      TransactionDate = DateTime.Parse(fields[1]), 
      TransactionAmount = double.Parse(fields[2]) 
      }); 
     } 
     catch 
     { 
      continue; 
     } 
     } 
    } 
    } 

    public class Transaction 
    { 
    public int AccountNumber { get; set; } 
    public DateTime TransactionDate { get; set; } 
    public double TransactionAmount { get; set; } 
    }