一、任务:实现ArrayList 背包管理类
实现目标:
(1)完整实现物品购买
(2)卖出
(3)显示功能
(4)金钱变化逻辑
二、核心类设计
1. Item物品类
class Item
{
public int index; // 物品唯一标识
public int price; // 物品单价
public int num; // 物品数量
public string name; // 物品名称
// 购买构造函数
public Item(int index, int price, int num, string name)
{
this.index = index;
this.price = price;
this.num = num;
this.name = name;
}
// 出售构造函数
public Item(int index, int num)
{
this.index = index;
this.num = num;
}
}
2. BagManager背包管理类
class BagManager
{
private int money; // 背包金币
private ArrayList items; // 物品列表
public BagManager(int money) // 构造函数
{
this.money = money;
items = new ArrayList();
}
}
三、核心功能实现
1. 购买功能 Buy()
public void Buy(Item item)
{
int cost = item.price * item.num;
if (cost > money)
{
Console.WriteLine("钱不够");
return;
}
money -= cost;
// 遍历查找是否已有该物品
foreach (Item existingItem in items)
{
if (existingItem.index == item.index)
{
existingItem.num += item.num; // 叠加数量
return;
}
}
items.Add(item); // 新物品添加
}
2. 出售功能 Sell()
public void Sell(Item item)
{
foreach (Item existingItem in items)
{
if (existingItem.index == item.index)
{
int sellNum = Math.Min(item.num, existingItem.num);
int income = (int)(sellNum * existingItem.price * 0.8f);
money += income;
existingItem.num -= sellNum;
if (existingItem.num <= 0)
items.Remove(existingItem);
return;
}
}
Console.WriteLine("物品不存在");
}
3. 按序号出售(重载)
public void Sell(int index, int num)
{
Sell(new Item(index, num)); // 重用Sell逻辑
}
四、完整实现代码
using System;
using System.Collections;
using System.Diagnostics;
using System.Xml.Linq;
namespace 进阶测试
{
class BagManager
{
private int money;//背包中剩余的钱
private ArrayList items;//物品的数组列表
/// <summary>
/// 购买函数
/// </summary>
/// <param name="item">购买的商品信息</param>
public void Buy(Item item)
{
int paymoney = item.price * item.num;//需要支付的钱
//判断钱够不够
if (paymoney > money)//不够,直接打印买不起,退出
{
Console.WriteLine("背包钱不够,买不起");
}
else//够,则买
{
money -= paymoney;
Console.WriteLine("购买成功,剩余的钱为{0}", money);
for (int i = 0; i < items.Count; i++)
{
//如果已经有了需要叠加商品
if ((items[i] as Item).index == item.index)
{
(items[i] as Item).num += item.num;
return;
}
}
//如果没有,则需要添加到数组列表中
items.Add(item);
}
}
/// <summary>
/// 显示函数
/// </summary>
public void Show()
{
for (int i = 0; i < items.Count; i++)
{
Console.WriteLine("物品:{0},数量为:{1}", (items[i] as Item).name, (items[i] as Item).num);
}
Console.WriteLine("**********************************");
}
/// <summary>
/// 根据物品出售物品函数
/// </summary>
/// <param name="item"></param>
public void Sell(Item item)
{
//首先得遍历判断是否存在该item物品
for(int i = 0;i<items.Count;i++)
{ //存在则进行出售数量判断
if ((items[i] as Item).index==item.index)
{
int num = 0;//出售的物品数量
int sellmoney = 0;//出售的钱
//出售数量小于背包中的数量,正常出售
if ((items[i] as Item).num >= item.num)
{
num = item.num;
(items[i] as Item).num -= num;
}
//出售数量大于背包中的数量,出售背包中所有该类物品,并移除该物品
else
{
num = (items[i] as Item).num;
items.RemoveAt(i);
}
sellmoney = (int)(item.price * num * 0.8f);
money += sellmoney;
Console.WriteLine("出售成功,现在余额为{0}",money);
return;
}
}
//不存在则打印不存在该物品
Console.WriteLine("背包中不存在该物品");
}
/// <summary>
/// 根据序号出售函数
/// </summary>
/// <param name="index"></param>
public void Sell(int index,int num)
{
Item item=new Item(index,num);
Sell(item);
}
public BagManager(int money)
{
this.money = money;
items = new ArrayList();
}
private BagManager()//设置为私有的:可以保证外部不会调用,避免出现错误
{
items = new ArrayList();
}
}
/// <summary>
/// 物品类
/// </summary>
/// <param name="index">物品类别的编号</param>
/// <param name="price">物品的价格</param>
/// <param name="num">第一次购买作为物品的数量保存到列表,后续作为购买或者卖出的数量</param>
/// <param name="name">物品的名称</param>
class Item
{
public int index;
public int price;
public int num;
public string name;
public Item(int index,int price,int num,string name)//物品购买的构造函数
{
this.index = index;
this.price = price;
this.num = num;
this.name = name;
}
public Item(int index,int num)//物品出售的构造函数
{
this.index = index;
this.num = num;
}
}
class Program
{
static void Main()
{
Item item1 = new Item(1, 25, 10, "血量药剂");
Item item2 = new Item(2, 35, 10, "体力药剂");
Item item3 = new Item(1, 25, 5, "血量药剂");
Item item4 = new Item(2, 35, 5, "体力药剂");
Item item5 = new Item(3, 35, 5, "体力药剂");
BagManager bagManager = new BagManager(1000);
bagManager.Buy(item1);
bagManager.Show();
bagManager.Buy(item2);
bagManager.Show();
bagManager.Sell(item3);
bagManager.Show();
bagManager.Sell(item4);
bagManager.Show();
bagManager.Sell(item5);
bagManager.Show();
bagManager.Sell(item1.index, 2);
bagManager.Show();
}
}
}