嘿,所以我首先要说这是一项任务...我必须创建一个基于控制台的购物车,该购物车可以加载并保存到XML文件。
我还不太清楚如何将XML文件加载到对象中/什么是最好的方法是...。
class Product
{
public int RecordNumber { get; set; }
public String Name { get; set; }
public int Stock { get; set; }
public int Price { get; set; }
}
class Cart
{
public List<Product> items
{
get { return items; }
set { items = value; }
}
public Cart() {} //Right way to do constructor?
public void AddProduct(Product prod)
{
items.Add(prod);
}
public void RemoveProduct(Product prod)
{
items.Remove(prod);
}
}
static void Main(string[] args)
{
XDocument XDoc = XDocument.Load("inventory.xml"); // Loading XML file
var result = from q in XDoc.Descendants("product")
select new Product
{
RecordNumber = Convert.ToInt32(q.Element("recordNumber").Value),
Name = q.Element("name").Value,
Stock = Convert.ToInt32(q.Element("stock").Value),
Price = Convert.ToInt32(q.Element("price").Value)
};
XML文件设置如下(产品的十个条目):
<product>
<recordNumber>1</recordNumber>
<name>Floo Powder</name>
<stock>100</stock>
<price>5</price>
</product>
我在这里有两个问题...我的主要方法是加载XML文件并创建10个对象吗?如果是这样,我如何访问这些对象?
其次,我打算将产品添加到购物车中,然后减少“库存”数字,但是当我考虑它时,这似乎是错误的。我应该为每个可用库存创建一个对象,然后将其添加到购物车中吗?那么关于我如何能够做到这一点的任何建议?
非常感谢!!
编辑:
我将不得不让用户按照他们的意愿向购物车添加/删除库存。我认为执行此操作的代码将显示所有10个对象(记录编号,名称,股票,价格)的详细信息后类似
String input = Console.ReadLine();
foreach (var prod in result) {
if (input == prod.recordnumber) { // Assuming that user selects via indexnumber
cart.AddProduct(//no idea what to put from here on
}
}
我在正确的轨道上吗?
第二次编辑:
String productNumber = Console.ReadLine();
int productInt = Convert.ToInt32(productNumber);
var match = from p in result
where p.RecordNumber == productInt
select p;
if (match != null)
{
ShoppingCart.AddProduct(??); //what variable do I put in the parentheses?
// Need to also reduce stock
}
else
{
// Inform user that no product exists
}
就像我在下面说的那样,我对括号中的内容完全不知所措。我曾尝试过match和p,但显然他们是不对的。一旦知道如何引用该对象,我还应该能够减少该对象的库存数量,并将另一个实例放入列表中。
再次感谢您的帮助
您的程序正在result变量中加载10个产品项,然后退出。要将它们放入购物车,您需要构造一个Cart对象,并将每个产品项添加到购物车中:
static void Main(string[] args)
{
XDocument XDoc = XDocument.Load("inventory.xml"); // Loading XML file
var result = from q in XDoc.Descendants("product")
select new Product
{
RecordNumber = Convert.ToInt32(q.Element("recordNumber").Value),
Name = q.Element("name").Value,
Stock = Convert.ToInt32(q.Element("stock").Value),
Price = Convert.ToInt32(q.Element("price").Value)
};
var cart = new Cart();
// Logic to add/remove/list cart here
}
为了允许用户从购物车中添加/删除商品,您需要具有一个标识符,以确定是否添加/删除/列出商品以及哪个商品。这将必须处于循环中。您可能还会有退出条件。因此,符合以下要求:
var cmd = string.Empty;
do
{
// Loop to allow the user to keep entering commands
cmd = Console.ReadLine();
// if cmd == exit condition -> break;
// if cmd == list products condition -> write each prod to console
// if cmd == add product condition -> Ask user to enter product number and add to cart
// if cmd == remove product condition -> Ask user to enter product number and remove from cart
} while(true);
当用户输入产品编号时,您可以使用linq查找正确的产品:
var match = (from p in result
where p.RecordNumber == productNumber
select p).FirstOrDefault();
if (match != null)
{
// Add/remove
}
else
{
// Inform user that no product exists
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句