无需文本文件保存多组Console.ReadLine()输入,实现批量展示所有产品
问题解决:批量输入产品后统一展示所有条目
当前代码存在的问题:每次输入产品后按n仅能打印最新条目,无法累计展示所有已输入的产品。需求为:
- 按
y可继续添加产品 - 按
n时在控制台顶部展示所有已输入的产品 - 无需依赖文本文件,产品存入已有的List集合中
核心修改思路
原代码每次调用FirstCategory()都会新建Products实例,导致每次的产品List都是独立的,无法累计数据。需要复用同一个Products实例来存储所有输入的产品,同时补充批量展示的方法。
修改后的完整代码示例
1. 包含FirstCategory方法的类(复用全局产品集合)
public class ProductManager { // 全局维护一个Products实例,所有分类的产品都存入这里 private Products _allProducts = new Products(); public void FirstCategory() { string info; string location; int amount; Console.Clear(); Console.WriteLine("Temp Products - First Category"); Console.WriteLine("Enter product info, location, and amount to add."); // 读取产品信息(修正原代码变量名不匹配问题) Console.WriteLine("Please enter the product info: "); info = Console.ReadLine(); Console.WriteLine("Please enter the product location: "); location = Console.ReadLine(); Console.WriteLine("Please enter the available amount: "); // 增加输入合法性校验,避免非数字输入崩溃 while (!int.TryParse(Console.ReadLine(), out amount)) { Console.WriteLine("Invalid input, please enter a valid number: "); } // 复用全局Products实例,存入当前产品 _allProducts.Insert(info, location, amount); // 临时展示当前添加的产品 Console.WriteLine("\nAdded product:"); Console.WriteLine($"Info: {info}, Location: {location}, Amount: {amount}"); // 询问是否继续添加 Console.WriteLine("\nDo you wish to enter another product? (y/n)"); string answer = Console.ReadLine().Trim().ToLower(); if (answer == "y") { FirstCategory(); } else if (answer == "n") { // 清空控制台,在顶部展示所有已输入产品 Console.Clear(); Console.WriteLine("All Entered Products"); Console.WriteLine("---------------------"); _allProducts.DisplayAll(); } } }
2. 完善Products类(补充批量展示方法)
public class Products { // 已有产品集合(假设你原代码中已有类似定义) private List<ProductItem> _productList = new List<ProductItem>(); // 已有插入方法 public void Insert(string info, string location, int amount) { _productList.Add(new ProductItem { Info = info, Location = location, Amount = amount }); } // 新增:展示所有产品的方法 public void DisplayAll() { if (_productList.Count == 0) { Console.WriteLine("No products entered yet."); return; } foreach (var item in _productList) { Console.WriteLine($"Product Info: {item.Info}, Location: {item.Location}, Amount: {item.Amount}"); } } // 产品实体类(原代码中应有类似定义) private class ProductItem { public string Info { get; set; } public string Location { get; set; } public int Amount { get; set; } } }
关键修改点说明
- 复用产品集合:将
Products实例提升为类成员变量,确保所有输入的产品都存入同一个List,避免每次调用方法时数据被重置。 - 修正变量名错误:原代码中读取输入的变量名与插入方法的参数名不匹配(如用
name接收info参数),统一后避免未赋值错误。 - 输入合法性校验:用
int.TryParse替代Convert.ToInt32,处理用户输入非数字的情况,提升程序稳定性。 - 批量展示逻辑:在
Products类中添加DisplayAll方法,遍历内部List输出所有产品信息,在用户按n时执行展示。
内容的提问来源于stack exchange,提问作者Wurdular
相关产品推荐
相关产品推荐

