计算机科学项目:如何用C#改写文本文件中特定字符串(余额更新)
解决ATM存款后更新文本文件余额的问题
你现在的核心问题是没有先读取原有账户数据就直接写文件,而且直接用StreamWriter会清空原文件内容。要实现更新余额,得先把文件里的所有账户信息读出来,修改余额后再完整写回文件。
结合你已经掌握的结构体、StreamReader/StreamWriter,具体步骤如下:
- 读取原有账户信息:用
StreamReader逐行读取文本文件,把每行内容对应填充到bankAccount结构体里(余额需转成整数)。 - 计算更新后的余额:把存款金额加到原有余额上。
- 重新写入完整账户信息:用
StreamWriter把更新后的所有账户字段按原格式写回文件,覆盖原有内容。
修改后的完整代码段
// 先读取原有账户信息到结构体(假设你已定义BankAccount结构体) BankAccount bankAccount = new BankAccount(); using (StreamReader reader = new StreamReader("AccountInfo.txt")) { bankAccount.AccountNumber = reader.ReadLine(); bankAccount.Name = reader.ReadLine(); bankAccount.NIP = reader.ReadLine(); bankAccount.TotalBalance = int.Parse(reader.ReadLine()); } switch (choice) { case 1: Console.Write("Entrez le montant à déposer : "); int depositAmount = Convert.ToInt32(Console.ReadLine()); while (depositAmount < 2 || depositAmount > 20000) { Console.Write("Entrez le montant à déposer (min $2 max $20,000) : "); depositAmount = Convert.ToInt32(Console.ReadLine()); } // 更新余额 bankAccount.TotalBalance += depositAmount; // 把更新后的账户信息写回文件 using (StreamWriter myfilewrite = new StreamWriter("AccountInfo.txt")) { myfilewrite.WriteLine(bankAccount.AccountNumber); myfilewrite.WriteLine(bankAccount.Name); myfilewrite.WriteLine(bankAccount.NIP); myfilewrite.WriteLine(bankAccount.TotalBalance); } DisplayTransaction(bankAccount.AccountNumber, bankAccount.Name, bankAccount.NIP, bankAccount.TotalBalance); break; }
关键细节说明
- 用
using语句包装流对象:它会自动关闭文件,避免资源泄漏(新手容易忘记手动关文件导致报错)。 - 严格对应文件行顺序:你的文件是「账号→姓名→PIN→余额」,读取和写入的顺序必须完全一致,否则会出现数据错乱。
- 后续可以优化输入校验:比如用
int.TryParse替代Convert.ToInt32,避免用户输入非数字内容时程序崩溃。
内容的提问来源于stack exchange,提问作者Optik
相关产品推荐
相关产品推荐

