C#如何在打印借阅记录时移除逾期天数与罚金列的0值
实现方案
核心修改思路
- 去掉原来将负逾期天数强制设为0的逻辑,改为根据逾期天数是否大于0决定显示内容
- 逾期天数和罚金字段都改为字符串类型,未逾期时赋值为空字符串,逾期时才赋值对应的数值文本
- 移除输出格式串中固定的
$前缀,改为在罚金非空时自行拼接$符号,避免无罚金时显示多余的$符号
修改后的完整代码
using System; using System.IO; namespace S10221788_Q2 { class Program { static void Main(string[] args) { string[] csvLines = File.ReadAllLines("loaninfo.csv"); string[] heading = csvLines[0].Split(','); Console.WriteLine("{0,-15} {1,-15} {2,-15} {3,-15} {4,-15} {5,-15} {6,-15}", heading[0], heading[1], heading[2], heading[3], "Days Loan", "Days Overdue", "Fine"); for (int i=1; i<csvLines.Length; i++) { string[] id = csvLines[i].Split(','); DateTime borrowdate = Convert.ToDateTime(id[2]); DateTime returndate = Convert.ToDateTime(id[3]); int loan = returndate.Subtract(borrowdate).Days; int overdue = loan - 14; // 分别处理逾期和未逾期的显示内容 string showOverdue = string.Empty; string showFine = string.Empty; if (overdue > 0) { showOverdue = overdue.ToString(); showFine = $"${(overdue * 0.5).ToString("F1")}"; } Console.WriteLine("{0,-15} {1,-15} {2,-15} {3,-15} {4,-15} {5,-15} {6,-15}", id[0], id[1], borrowdate.ToString("dd/MM/yyyy"), returndate.ToString("dd/MM/yyyy"), loan, showOverdue, showFine); } } } }
修改后输出效果
Book ID Borrower ID Date Borrowed Date Returned Days Loan Days Overdue Fine 0123 S10011122A 02/02/2020 06/02/2020 4 3322 S10011126B 12/02/2020 13/02/2020 1 1234 S10097878C 11/02/2020 01/03/2020 19 5 $2.5 8123 S10011122A 02/02/2020 06/03/2020 33 19 $9.5 3992 S10011126B 06/02/2020 09/02/2020 3 1434 S10097878C 11/02/2020 01/03/2020 19 5 $2.5
内容的提问来源于stack exchange,提问作者Kelven Lim
相关产品推荐
相关产品推荐

