2016-09-29 60 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; } 
    }